OptaPlanner Drools评分计算
文章目录
Drools评分计算已经被弃用,并将在OptaPlanner的未来主要版本中移除。考虑使用约束流和我们的迁移指南进行切换。
1. 概述
使用Drools规则引擎实现评分计算。每个评分约束都写成一个或多个评分规则。
优点:
- 免费的增量评分计算:因为大部分DRL语法使用前向链接,所以可以在没有任何额外代码的情况下进行增量计算。
- 评分约束作为单独的规则进行隔离。
- 可以轻松添加或编辑现有的评分规则。
- 可以通过定义决策表或Excel(XLS)电子表格来扩展评分约束。
- 未来版本中的性能优化是免费的。
缺点:
- 学习DRL的曲线。
- 使用DRL可能会受到Polyglot担忧的限制,在某些组织中可能不允许使用新的语言。
Drools评分计算在Quarkus本机模式下不受支持。考虑切换到约束流。
2. Drools评分规则配置
有几种方法可以定义评分规则的位置。
2.1. 类路径上的scoreDrl资源
这是简单的方法。评分规则位于作为类路径资源提供的DRL文件中。只需将评分规则DRL文件添加到求解器配置中作为元素:
<scoreDirectorFactory>
<scoreDrl>org/optaplanner/examples/nqueens/solver/nQueensConstraints.drl</scoreDrl>
</scoreDirectorFactory>
在典型的项目(遵循Maven目录结构)中,该DRL文件将位于$PROJECT_DIR/src/main/resources/org/optaplanner/examples/nqueens/solver/nQueensConstraints.drl(即使是war项目)。
元素需要一个类路径资源,由ClassLoader.getResource(String)定义,它不接受File、URL或Web应用程序资源。如果要使用File,请参见下面的说明。
如果评分规则分散在多个DRL文件中,可以添加多个元素。
此外,您还可以设置Drools配置属性:
<scoreDirectorFactory>
<scoreDrl>org/optaplanner/examples/nqueens/solver/nQueensConstraints.drl</scoreDrl>
<kieBaseConfigurationProperties>
<property name="drools.equalityBehavior" value="..." />
</kieBaseConfigurationProperties>
</scoreDirectorFactory>
要默认启用属性反应,而无需在域类上添加@propertyReactive注解,请在其中添加<dr