搜索

89.7. Honest Politician 示例决策(维护与健保)

download PDF

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 对象会被自动重新处理。此规则具有值为 10salience 属性,以确保它在任何其他规则之前触发,因为 在该阶段 "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();
    }

}

1
向导入处理 DebugAgendaEventListenerDebugRuleRuntimeEventListener的软件包添加
2
创建一个 KieServices Factoryks 元素来生成日志,因为此审计日志无法在 KieContainer 级别提供
3
修改 执行 方法以使用 KieServicesKieContainer
4
除了 KieContainer外,修改 执行 方法以传递 KieServices
5
创建监听程序
6
在执行规则后构建可传递给 debug 视图或 Audit View 或 IDE 的日志

当使用这个修改的日志功能运行 Honest Politician 时,您可以将审计日志文件从 target/honest Hician.log 加载到 IDE 调试视图或 Audit View (例如,在一些 IDE 中的 Window Show View 中)。

在本例中,审计视图 显示执行流、插入和重新操作,如示例类和规则中定义:

图 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"

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.