Fact 插入
- StatefulSession session = null;
- try {
- Collection fields = new ArrayList();
-
-
- for ( int i = 0; i < field.length; i++ ) {
- String row = "{";
- for ( int j = 0; j < field[i].length; j++ ) {
- row += field[i][j] + ",";
- fields.add( new Field( "" + field[i][j],
- j + 1,
- i + 1,
- getZone( i,
- j ) ) );
- }
- row += "}";
- System.out.println( row );
- }
-
- RuleBase ruleBase = readRule();
- session = ruleBase.newStatefulSession();
-
-
- Iterator iter = fields.iterator();
-
- Collection handles = new ArrayList();
- while ( iter.hasNext() ) {
- handles.add( session.insert( iter.next() ) );
- }
- session.fireAllRules();
-
- System.out.println( "Size: " + iteratorToList( session.iterateObjects() ).size() );
-
-
- iter = session.iterateObjects();
-
- while ( iter.hasNext() ) {
- Object next = iter.next();
- if ( next instanceof Field ) {
- field[((Field) next).getRow() - 1][((Field) next).getColumn() - 1] = Integer.parseInt( ((Field) next).getValue() );
- }
- }
-
-
- for ( int i = 0; i < field.length; i++ ) {
- String row = "{";
- for ( int j = 0; j < field[i].length; j++ ) {
- row += field[i][j] + ",";
- }
- row += "}";
- System.out.println( row );
- }
-
- } catch ( Throwable t ) {
- t.printStackTrace();
- } finally {
- if ( session != null ) {
- session.dispose();
- }
- }
规则
- # 首先将所有数字为0的格子删除,并对这个格子插入从1-9的所有可能情况
- rule "Rule 1: If a field has the value 0, it is empty: remove it and insert the PossibleValues"
- salience 100
- when
- $field : Field( value == 0, $row : row, $column : column, $zone : zone )
- then
- insert( new PossibleValue("1", $field ) );
- insert( new PossibleValue("2", $field ) );
- insert( new PossibleValue("3", $field ) );
- insert( new PossibleValue("4", $field ) );
- insert( new PossibleValue("5", $field ) );
- insert( new PossibleValue("6", $field ) );
- insert( new PossibleValue("7", $field ) );
- insert( new PossibleValue("8", $field ) );
- insert( new PossibleValue("9", $field ) );
-
-
- retract( $field );
-
- #System.out.println("Rule 1 fired.");
- end
-
- # 这个规则是当某一个格子上的PossibleValue只剩下一个时,那么这个PossibleValue的值就是要寻找的值
- rule "Rule 2: If there is one PossibleValue left at a certain position, it should be the Fields value"
- salience 5
- when
- $pv : PossibleValue ( $row : row, $zone : zone, $column : column, $value : value )
- not ( PossibleValue ( row == $row, zone == $zone, column == $column, value != $value ) )
- then
- insert( new Field( $value, $column, $row, $zone ) );
- System.out.println ( "Field be found in row="+$row+";col="+$column+"value="+$value );
- retract( $pv );
-
- #System.out.println("Rule 2 fired.");
- end
-
- # 获得行中已确定的数字,将该行上空格子中的相同备选数字删除
- rule "Rule 3: If there is a field with a value in a row, remove all PossibleValues with this value in this row"
- salience 15
- when
- $field2 : Field( $row : row, $value : value != 0 )
- $possible : PossibleValue( row == $row, value == $value )
- then
- retract( $possible );
- #System.out.println("Rule 3 fired.");
- end
-
- # 获得列中已确定的数字,将该列上空格子中的相同备选数字删除
- rule "Rule 4: If there is a field with a value in a column, remove all PossibleValues with this value in this column"
- salience 15
- when
- $field1 : Field( $column : column, $value : value != 0 )
- $possible : PossibleValue( column == $column, value == $value )
- then
- retract( $possible );
- #System.out.println("Rule 4 fired.");
- end
-
- # 获得区域中已确定的数字,将该区域上空格子中的相同备选数字删除
- rule "Rule 5: If there is a field with a value in a zone, remove all PossibleValues with this value in this zone"
- salience 15
- when
- $field1 : Field( $zone : zone, $value : value != 0 )
- $possible : PossibleValue( zone == $zone, value == $value )
- then
- retract( $possible );
- #System.out.println("Rule 5 fired.");
- end
-
- # 一旦产生新的格子数字,则删除在这个格子上的所有可选值
- # Rule 2,3,4,5 不会引起该规则的调用,因为这几个规则是将其它可选值删除后剩余的值设为格子数字。
- # 该规则是由Rule 7,8,9激发的
- rule "Rule 6: For fields with a value remove all PossibleValues"
- salience 250
- when
- Field( value != 0, $col : column, $row : row, $zone : zone )
- $pv : PossibleValue( column == $col, row == $row, zone == $zone )
- then
- retract( $pv );
- #System.out.println("Rule 6 fired.");
- end
-
- # 如果在一个小区域内,某一个空格子上的可选值在这个区域里是唯一的
- # 并且不会违反行列区域数字冲突的原则,那么该可选值就是格子真正的数字
- rule "Rule 7: If there is only one PossibleValue left in a zone, it must have the value of the field"
- salience 4
- when
- $pv : PossibleValue( $zone : zone, $value : value, $col : column, $row : row)
- not (PossibleValue( zone == $zone, value == $value ))
- not (Field( value == $value, zone == $zone) )
- not (Field( value == $value, row == $row) )
- not (Field( value == $value, column == $col) )
- then
- insert( new Field( $value, $col, $row, $zone ) );
- retract( $pv );
- #System.out.println("Rule 7 fired.");
- end
-
- # 如果在一列上,某一个空格子上的可选值在这个列上是唯一的
- # 并且不会违反行列区域数字冲突的原则,那么该可选值就是格子真正的数字
- rule "Rule 8: If there is only one PossibleValue left in a column, it must have the value of the field"
- salience 4
- when
- $pv1 : PossibleValue( $zone : zone, $value : value, $col : column, $row : row)
- not (PossibleValue( column == $col, value == $value ))
- not (Field( value == $value, zone == $zone) )
- not (Field( value == $value, row == $row) )
- not (Field( value == $value, column == $col) )
- then
- insert( new Field( $value, $col, $row, $zone ) );
- retract( $pv1 );
- #System.out.println("Rule 8 fired.");
- end
-
- # 如果在一行上,某一个空格子上的可选值在这个行上是唯一的
- # 并且不会违反行列区域数字冲突的原则,那么该可选值就是格子真正的数字
- rule "Rule 9: If there is only one PossibleValue left in a row, it must have the value of the field"
- salience 4
- when
- $pv : PossibleValue( $zone : zone, $value : value, $col : column, $row : row)
- not (PossibleValue( row == $row, value == $value ))
- not (Field( value == $value, zone == $zone) )
- not (Field( value == $value, row == $row) )
- not (Field( value == $value, column == $col) )
- then
- insert( new Field( $value, $col, $row, $zone ) );
- retract( $pv );
- #System.out.println("Rule 9 fired.");
- end
-
- # 如果在一个区域中的两个空格子只剩两个可选值,则删除该区域中与这两个可选值相同的其它可选值
- rule "Rule 10: If there are two fields with only two possible values, remove the PossibleValues for the same Value in the rest of the zone"
- salience 1
- when
- # 找到一个可选值A
- PossibleValue( $zone : zone, $val1 : value, $row1 : row, $col1 : column )
- # 要求在相同区域中,不同列上具有与A数字相同的可选值C
- PossibleValue( zone == $zone, value == $val1, $row2 : row, $col2 : column != $col1)
- # 要求与A在同一个格子里有其它可选值B
- PossibleValue( zone == $zone, row == $row1, column == $col1, $val2 : value )
- # 要求在C的格子里有与B的数字相同的可选值
- PossibleValue( zone == $zone, row == $row2, column == $col2, value == $val2 )
- # 要求在A格子中不存在除A与B的数字以外的可选值,也就是说A格子中的可选值不超过两个
- not ( PossibleValue( zone == $zone, row == $row1, column == $col1, value != $val1, value != $val2 ) )
- # 要求在C格子中不存在除A与B的数字以外的可选值,也就是说C格子中的可选值不超过两个
- # 这两个not条件组合起来要表达的就是区域中有A,C两个格子中的可选值一样,并且只有两个
- not ( PossibleValue( zone == $zone, row == $row2, column == $col2, value != $val1, value != $val2 ) )
- # 获得区域中与A数字相同的其它可选值
- $pv : PossibleValue( zone == $zone, value == $val1)
- then
- retract( $pv );
- #System.out.println("Rule 10 fired.");
- end
-
- # 如果在一个区域中的两个空格子只剩两个可选值,则删除该区域中与这两个可选值相同的其它可选值
- # 本规则与上一规则基本一样区别是寻找C格子时使用不同行而不是不同列
- rule "Rule 11: If there are two fields with only two possible values, remove the PossibleValues for the same Value in the rest of the zone"
- salience 1
- when
- PossibleValue( $zone : zone, $val1 : value, $row1 : row, $col1 : column )
- # 本行与规则10不同
- PossibleValue( zone == $zone, value == $val1, $row2 : row != $row1, $col2 : column)
- PossibleValue( zone == $zone, row == $row1, column == $col1, $val2 : value )
- PossibleValue( zone == $zone, row == $row2, column == $col2, value == $val2 )
- not ( PossibleValue( zone == $zone, row == $row1, column == $col1, value != $val1, value != $val2 ) )
- not ( PossibleValue( zone == $zone, row == $row2, column == $col2, value != $val1, value != $val2 ) )
- $pv : PossibleValue( zone == $zone, value == $val1)
- then
- retract( $pv );
- #System.out.println("Rule 11 fired.");
- end
|
相关推荐
- janino-2.5.16.jar:这是一个轻量级的Java源代码编译器,Drools可能用它作为替代编译器,特别是在对Eclipse JDT Core有特殊需求或者无法使用的情况下。 - droolsjbpm-ide-common.jar:这个文件可能包含了Drools与...
通过研究和理解Drools4Demo中的各个示例,开发者可以快速掌握Drools的用法,并将其应用于自己的业务场景,实现高效、灵活的业务规则管理。此外,Drools4Demo还提供了详细的文档和注释,帮助开发者更好地理解和学习...
Drools是一款强大的规则引擎,它...通过分析和实践这个项目,开发者不仅可以掌握Drools的基本用法,还能了解如何在实际项目中灵活运用Drools,实现业务规则的动态管理。这将对提升企业的业务敏捷性和决策效率大有裨益。
本示例旨在演示如何在Drools 5.1中使用规则流(Rule Flow)进行复杂的业务流程管理。规则流是Drools提供的一种工具,它允许用户通过图形化方式定义规则执行的顺序和条件,从而更好地控制业务逻辑的执行流程。 首先...
在这个"drools5 规则动态加载示例"中,我们将探讨如何在不重启服务的情况下,实现规则的热更新,即动态加载修改后的规则文件,使得业务逻辑能够实时适应变化。 在传统的软件开发中,一旦应用部署,若需更改业务规则...
4. **Drools Fusion**:专为事件处理和时间推理而设计,它能够实时分析和响应来自不同源的事件,适用于实时决策系统。 5. **Drools Planner**:这是一个自动规划引擎,用于解决复杂的优化问题,如车辆路线规划、...
这个“drools代码示例包”提供了与CSDN博客文章《Drools实战:一个详尽的指南》相关的示例代码,帮助读者深入理解Drools的工作原理和使用方法。 在Drools中,主要涉及以下几个核心概念: 1. **规则**:规则是...
4. drools-examples:这可能是一个包含drools使用示例的目录,帮助开发者理解如何在实际项目中应用drools,涵盖了各种规则的创建、加载和执行。 drools 使用DRL(Drools Rule Language)作为规则定义的语言,它支持...
这部分可能包括各种Drools规则的语法示例,如条件语句(IF-THEN)、逻辑运算符、函数调用、事实模式、积累函数、约束条件等。通过这些例子,你可以了解到如何编写规则来匹配特定的事实对象,并在满足条件时执行相应...
Drools规则引擎是一种嵌套在应用程序中的组件, 是用Java语言编写的开放源码规则引擎,使用Rete算法对所编写的规则求值。 它实现了将业务规则从程序代码忠分离出来,规则引擎使用特定的语法编写业务规则,规则引擎...
4. **插入事实**:在示例中,可能会创建一个或多个`Customer`对象并将其插入到工作内存中,例如: ```java KieSession ksession = ...; // 初始化KieSession Customer customer = new Customer(); customer.set...
** drools-examples-master 文件夹内容分析 ** `drools-examples-master` 压缩包很可能包含了 Drools 的示例项目,这些示例通常会演示如何创建、加载和执行规则,以及如何处理事实和规则结果。项目可能包括以下内容...
在"压缩包子文件的文件名称列表"中,只提到了"Drools4Demo",这可能是整个示例项目的根目录。通常,这样的目录结构会包含以下部分: 1. **bin** 目录:可能包含可执行的Java程序或JAR文件,用于运行Drools示例。 2....
在这个集成示例中,"drools7.5.0" 是 Drools 的一个特定版本,它包含了对规则定义、解析和执行的改进。"spring 4.3.12" 是 Spring 框架的一个稳定版本,提供了大量的增强和修复,包括对 Java 8 的全面支持。 集成...
标题 "drools:流量MVN的实现示例" 指涉的是使用 Drools 这一规则引擎来处理流量管理的场景,而该场景是通过 Maven(MVN)构建工具来实现的。Drools 是一个强大的业务规则管理系统,它允许开发者通过声明式的方式定义...
drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行...
【Drools4保险例子详解】 Drools4保险例子是一个基于Drools规则引擎的实战项目,展示了如何在J2EE环境下,特别是在使用JBoss应用服务器时,利用Drools进行业务规则管理。这个例子旨在帮助开发者理解如何将Drools...
【标题】"hellodrools:Drools 示例项目"是一个基于Drools规则引擎的实践教程,旨在帮助开发者了解和掌握如何在Java应用程序中使用Drools进行业务规则的管理和执行。 【描述】"你好,Drools 示例项目"表明这是一个...
7. 性能优化:在Drools4.x中,对性能进行了优化,包括更快的规则匹配和执行,以及更有效的内存管理。这使得Drools能够在处理大规模数据和复杂规则时仍然保持高效。 8. 社区支持:Drools拥有活跃的开发社区,提供了...
10. **案例研究与示例**:为了更好地理解和应用Drools,文档通常会包含多个实际的案例和示例,让你能够动手实践。 "Drools技术指南"可能会更深入地探讨上述某些主题,或者涵盖更高级的特性,如事件处理、规则流、...