最简单的OptaPlanner示例 - 仅仅是构造启发式的吗?

时间:2015-07-28 20:38:53

标签: optaplanner

我是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类的ShiftAssignment集合仍然是EMPTY,即使Solver.solve()完成并且getBestSolution()返回一些东西。而且,我在rules.drl的规则似乎根本没有被解雇。我甚至添加了一个虚拟规则,只是为了看它是否被触发:

rule "test"
    when
        shiftAssignment : ShiftAssignment()
    then
        System.out.println(shiftAssignment);
end

并没有被解雇。

那么我的错误是什么?提前谢谢!

1 个答案:

答案 0 :(得分:0)

规则应该使用scoreHolder执行某些操作,请参阅文档第5章。但是,尽管如此,您应该会看到针对数据集中的每个ShiftAssignement实例触发一次规则 - 检查是否有任何内容。< / p>