89.7. Honest Politician 示例决策(维护与健保)
Honest Politician 示例决策集展示了在规则中采用逻辑插入和使用 salience 的真实概念。
以下是 Honest Politician 示例概述:
-
Name
: honest Hician
-
主类:
org.drools.examples.honest Hian.HonestPoliticianExample
(在src/main/java
中) -
模块 :
drools-examples
- 键入: Java 应用程序
-
规则文件 :
org.drools.examples.honest Hian.HonestPolitician.drl
(src/main/resources
) - 目标 :根据事实的逻辑插入以及规则中的使用方法论证了真实维护的概念
Honest Politician 示例的基本内部是对象只能存在,而声明是 true。规则结果可以逻辑地插入带有 insertLogical()
方法的对象。这意味着,在 KIE 会话工作内存中,只要逻辑插入的规则保持在 KIE 会话工作内存中。当规则不再为 true 时,对象会被自动重试。
在本例中,规则执行会导致一组自治亚更改,以防出现损坏企业的结果。评估完各个文所评估时,这些属性从 honesty 属性设置为 true
,但有一个规则触发,使自治亚体不再是 honest。当它们的状态从 honest 改为 dishonest 时,它们会从工作内存中删除。该规则可通知决策引擎如何优先考虑为它们定义的任何规则,否则使用默认 salience 值 0。
在激活队列中排序时,具有较高优先级的规则会被赋予更高的优先级。
Politician 和 Hope 类
示例中的示例类 Politician
为 honest Leaician 进行了配置。Politician
类由 String 项 名称和
一个布尔值项目组成:
Politician 类
public class Politician { private String name; private boolean honest; ... }
Hope
类确定是否存在 Hope
对象。这个类没有有意义的成员,但只要 society 希望就出现在正常工作的内存中。
希望课程
public class Hope { public Hope() { } }
shardician honesty 的规则定义
在 Honest Politician 示例中,当工作内存中至少存在一个 honest shardician 时,"We have an honest Politician"
规则逻辑地插入一个新的 Hope
对象。当所有协调员都变得不开时,Hope
对象会被自动重新处理。此规则具有值为 10
的 salience
属性,以确保它在任何其他规则之前触发,因为 在该阶段 "Hope is Dead"
规则为 true。
规则"我们有一个最哈佛尼亚"
rule "We have an honest Politician" salience 10 when exists( Politician( honest == true ) ) then insertLogical( new Hope() ); end
当 Hope
对象存在时,"Hope Lives"
规则与 and fires 匹配和触发。这个规则也具有 10
相似的值,以便它的优先级高于 Honest"
规则。
规则"停止实时"
rule "Hope Lives" salience 10 when exists( Hope() ) then System.out.println("Hurrah!!! Democracy Lives"); end
最初,存在四个最哈尔地,因此此规则有 4 个激活,它们发生冲突。每个规则依次触发,破坏每个工作员,从而使它们不再频繁。当所有四个协调器都已损坏时,没有 Hoticians 含有属性 honest == true
。规则 "We have an hest Politician"
不再是 true,它的逻辑插入的对象(由于 是新 Hope()
的最后执行)会自动重新处理。
规则"利用 Honest"
rule "Corrupt the Honest" when politician : Politician( honest == true ) exists( Hope() ) then System.out.println( "I'm an evil corporation and I have corrupted " + politician.getName() ); modify ( politician ) { honest = false }; end
当 Hope
对象自动经由真相维护系统时,没有
应用到 Hope
的条件元素不再为 true,"Hope is Dead"
规则匹配并触发。
规则"Hope is Dead"
rule "Hope is Dead" when not( Hope() ) then System.out.println( "We are all Doomed!!! Democracy is Dead" ); end
执行和审核跟踪示例
在 HonestPoliticianExample.java
类中,四个协调员并将 Honest state 设置为 true
以针对定义的业务规则插入评估:
HonestPoliticianExample.java 类执行
public static void execute( KieContainer kc ) { KieSession ksession = kc.newKieSession("HonestPoliticianKS"); final Politician p1 = new Politician( "President of Umpa Lumpa", true ); final Politician p2 = new Politician( "Prime Minster of Cheeseland", true ); final Politician p3 = new Politician( "Tsar of Pringapopaloo", true ); final Politician p4 = new Politician( "Omnipotence Om", true ); ksession.insert( p1 ); ksession.insert( p2 ); ksession.insert( p3 ); ksession.insert( p4 ); ksession.fireAllRules(); ksession.dispose(); }
要执行这个示例,请运行 org.drools.examples.honest Hician.HonestPoliticianExample
类,作为 IDE 中的 Java 应用程序。
执行后,会在 IDE 控制台窗口中显示以下输出:
IDE 控制台中的执行输出
Hurrah!!! Democracy Lives I'm an evil corporation and I have corrupted President of Umpa Lumpa I'm an evil corporation and I have corrupted Prime Minster of Cheeseland I'm an evil corporation and I have corrupted Tsar of Pringapopaloo I'm an evil corporation and I have corrupted Omnipotence Om We are all Doomed!!! Democracy is Dead
输出显示,虽然至少有一个最哈尔、演示文稿。但是,由于每个人都受到一些公司损坏,所有自治亚人都变得不满,因此演示不容忽视。
为了更好地理解本例的执行流,您可以修改 HonestPoliticianExample.java
类,使其包含 DebugRuleRuntimeEventListener
侦听器以及审计日志记录器来查看执行详情:
HonestPoliticianExample.java 类,带有审计日志记录器
package org.drools.examples.honestpolitician; import org.kie.api.KieServices; import org.kie.api.event.rule.DebugAgendaEventListener; 1 import org.kie.api.event.rule.DebugRuleRuntimeEventListener; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; public class HonestPoliticianExample { /** * @param args */ public static void main(final String[] args) { KieServices ks = KieServices.Factory.get(); 2 //ks = KieServices.Factory.get(); KieContainer kc = KieServices.Factory.get().getKieClasspathContainer(); System.out.println(kc.verify().getMessages().toString()); //execute( kc ); execute( ks, kc); 3 } public static void execute( KieServices ks, KieContainer kc ) { 4 KieSession ksession = kc.newKieSession("HonestPoliticianKS"); final Politician p1 = new Politician( "President of Umpa Lumpa", true ); final Politician p2 = new Politician( "Prime Minster of Cheeseland", true ); final Politician p3 = new Politician( "Tsar of Pringapopaloo", true ); final Politician p4 = new Politician( "Omnipotence Om", true ); ksession.insert( p1 ); ksession.insert( p2 ); ksession.insert( p3 ); ksession.insert( p4 ); // The application can also setup listeners 5 ksession.addEventListener( new DebugAgendaEventListener() ); ksession.addEventListener( new DebugRuleRuntimeEventListener() ); // Set up a file-based audit logger. ks.getLoggers().newFileLogger( ksession, "./target/honestpolitician" ); 6 ksession.fireAllRules(); ksession.dispose(); } }
当使用这个修改的日志功能运行 Honest Politician 时,您可以将审计日志文件从 target/honest Hician.log
加载到 IDE 调试视图或 Audit View (例如,在一些 IDE 中的 Window
在本例中,审计视图 显示执行流、插入和重新操作,如示例类和规则中定义:
图 89.18. Honest Politician 示例审计视图
当插入第一个协调程序时,会发生两个激活。规则 "We have honest Politician"
只激活第一个插入了 Handomician 的时间,因为它使用 exists
条件元素,即在插入至少一个自治器时匹配。规则 "Hope is Dead"
在此阶段也被激活,因为 Hope
对象尚未插入。规则 "我们首先触发了 honest Politician"
,因为它具有高于规则 "Hope is Dead"
的值,并插入 Hope
对象(以绿色高亮显示)。Hope
对象插入对象可激活规则 "Hope Lives"
,并停用规则 "Hope is Dead
"。insertion 还激活每个插入了 honest APPician 的规则 "Corrupt the Honest"
。执行规则 "Hope Lives"
并打印 "Hurrah!!Democracy Lives"
。
接下来,对于每个人来说,规则 "Corrupt the Honest"
触发,打印 "I't an evil 企业和 I have corrupted X"
,其中 X
是 Hotician 的名称,并将 otician honesty 值修改为 false
。当最后的 honest 此目录被破坏时,Hope
将自动由真相维护系统(以蓝色突出显示)进行重新处理。绿色突出显示的区域显示了当前所选蓝色突出显示区域的来源。更改了 Hope
事实后,规则 "Hope is dead"
触发后,打印 "We 都是 Doomed!!Democracy 是 Dead"
。