最简单的 OptaPlanner 示例 - 仅构造启发式就足够了吗?
Simplest OptaPlanner example - is only construction heuristic enough?
我是 OptaPlanner 的新手,我正在尝试创建一个尽可能简单的应用程序,将少数员工分配到某些班次。唯一的规则是一名员工每天可以分配一个班次。我想知道以下求解器配置是否不够:
<solver>
<solutionClass>com.test.shiftplanner.ShiftPlanningSolution</solutionClass>
<entityClass>com.test.shiftplanner.ShiftAssignment</entityClass>
<scoreDirectorFactory>
<scoreDefinitionType>HARD_SOFT</scoreDefinitionType>
<scoreDrl>rules.drl</scoreDrl>
</scoreDirectorFactory>
<!-- Solver termination -->
<termination>
<secondsSpentLimit>60</secondsSpentLimit>
</termination>
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT</constructionHeuristicType>
</constructionHeuristic>
</solver>
因为 ShiftPlanningSolution class 处的 ShiftAssignment 集合仍然是空的,即使 Solver.solve() 完成并且 getBestSolution() returns 某些东西。更重要的是,我在 rules.drl 的规则似乎根本没有被触发。我什至添加了一个虚拟规则只是为了看看它是否被触发:
rule "test"
when
shiftAssignment : ShiftAssignment()
then
System.out.println(shiftAssignment);
end
而且它根本没有被解雇。
那么我这里的错误是什么?提前致谢!
该规则应该与 scoreHolder
一起执行某些操作,请参阅文档第 5 章。但是尽管如此,您应该会看到该规则针对数据集中的每个 ShiftAssignement 实例触发一次 - 检查其中是否有任何内容.
我是 OptaPlanner 的新手,我正在尝试创建一个尽可能简单的应用程序,将少数员工分配到某些班次。唯一的规则是一名员工每天可以分配一个班次。我想知道以下求解器配置是否不够:
<solver>
<solutionClass>com.test.shiftplanner.ShiftPlanningSolution</solutionClass>
<entityClass>com.test.shiftplanner.ShiftAssignment</entityClass>
<scoreDirectorFactory>
<scoreDefinitionType>HARD_SOFT</scoreDefinitionType>
<scoreDrl>rules.drl</scoreDrl>
</scoreDirectorFactory>
<!-- Solver termination -->
<termination>
<secondsSpentLimit>60</secondsSpentLimit>
</termination>
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT</constructionHeuristicType>
</constructionHeuristic>
</solver>
因为 ShiftPlanningSolution class 处的 ShiftAssignment 集合仍然是空的,即使 Solver.solve() 完成并且 getBestSolution() returns 某些东西。更重要的是,我在 rules.drl 的规则似乎根本没有被触发。我什至添加了一个虚拟规则只是为了看看它是否被触发:
rule "test"
when
shiftAssignment : ShiftAssignment()
then
System.out.println(shiftAssignment);
end
而且它根本没有被解雇。
那么我这里的错误是什么?提前致谢!
该规则应该与 scoreHolder
一起执行某些操作,请参阅文档第 5 章。但是尽管如此,您应该会看到该规则针对数据集中的每个 ShiftAssignement 实例触发一次 - 检查其中是否有任何内容.