首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使规则引擎始终选择显着性较高的规则?

如何使规则引擎始终选择显着性较高的规则?
EN

Stack Overflow用户
提问于 2017-05-01 22:52:19
回答 1查看 158关注 0票数 0

我使用显着性来设置每个规则的优先级,但是当我使用fireAllRules时,它并不总是选择显着性较高的规则。如何使规则引擎始终选择显着性较高的规则?

输出

代码语言:javascript
复制
[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
Positon0   Salience:   10
Positon1   Salience:   10
Positon2   Salience:   10
Rule Number:0
pleasant:false    activation:false   context:working   multitasking:true    state:stuck
[9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
Positon0   Salience:   9
Positon1   Salience:   10
Positon2   Salience:   10
Rule Number:1
pleasant:false    activation:false   context:working   multitasking:true    state:stuck
[9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
Positon0   Salience:   9
Positon1   Salience:   9
Positon2   Salience:   10
Rule Number:1
pleasant:false    activation:false   context:working   multitasking:true    state:stuck
[9, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
Positon0   Salience:   9
Positon1   Salience:   8
Positon2   Salience:   10
Rule Number:2
pleasant:false    activation:false   context:working   multitasking:true    state:stuck
[9, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
Positon0   Salience:   9
Positon1   Salience:   8
Positon2   Salience:   9
Rule Number:2
pleasant:false    activation:false   context:working   multitasking:true    state:stuck
[9, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
Positon0   Salience:   9
Positon1   Salience:   8
Positon2   Salience:   8
Rule Number:2
pleasant:false    activation:false   context:working   multitasking:true    state:stuck
[9, 8, 7, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
Positon0   Salience:   9
Positon1   Salience:   8
Positon2   Salience:   7
Rule Number:2
pleasant:false    activation:false   context:working   multitasking:true    state:stuck
[9, 8, 6, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
Positon0   Salience:   9
Positon1   Salience:   8
Positon2   Salience:   6
Rule Number:0

触发规则的Actionlistener

代码语言:javascript
复制
simula.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                FactHandle fact1;
                fact1= new SimulaRegras(pleas, act, context.getText(), mtask, state.getText(),sal);

                ksession.insert(fact1);
                ksession.fireAllRules(1);

            }

        }
                );

Drools Main

代码语言:javascript
复制
public class DroolsTest {

        public static void main(String[] args) {
            KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
            new DroolsTest().init(kc);
        }

        public DroolsTest() {
        }

        public void init(final KieContainer kc) {
            KieSession ksession = kc.newKieSession("ksession-rule");

            TeleInterface t = new TeleInterface(ksession);
            FactHandle fact2;
            fact2 = ksession.insert(t);
        }
    }

规则结构

代码语言:javascript
复制
    rule "Num1"
            salience(sr.gSal(0))

        when 

            t: TeleInterface ()
            sr: SimulaRegras(pleasant == false && activation == false && context == "working", multitask == true, state == "stuck")

        then
            t.gMap.setEnabled(true);
            t.gMap.setForeground(Color.GREEN);
            t.background.setIcon(new ImageIcon("ponto.png"));
            t.action("gMap", false);
            t.infoBox("optimization", "add", "Adicionar ponto no grid map e fornecer o caminho");
            t.sSal(0);
end
EN

回答 1

Stack Overflow用户

发布于 2017-05-03 20:26:55

我不太确定你想要实现什么,但使用显着性并不是可行的方法。基于事实属性中的值的显着性可以被逻辑所取代,即,通过检查不存在具有该属性值更高的该类型的其他事实。此外,修改提供显着性的属性不是一个好主意,因为Drools不会重新评估显着性。

我不打算进一步研究这一点,因为用户界面(TeleInterface)并不描述实际插入的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43721125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档