【问题标题】:Simplest OptaPlanner example - is only construction heuristic enough?最简单的 OptaPlanner 示例 - 只有构造启发式就足够了吗?
【发布时间】:2015-07-29 16:50:26
【问题描述】:

我是 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>

因为即使 Solver.solve() 完成并且 getBestSolution() 返回某些内容, ShiftPlanningSolution 类中的 ShiftAssignment 集合仍然是 EMPTY。更重要的是,我在 rules.drl 的规则似乎根本没有被解雇。我什至添加了一个虚拟规则来查看它是否被触发:

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

它根本没有被解雇。

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

【问题讨论】:

  • 从 6.3.0.Beta2 开始,&lt;constructionHeuristic&gt;&lt;localSearch&gt; 元素是可选的:它只是使用开箱即用的良好默认算法。

标签: optaplanner


【解决方案1】:

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

【讨论】:

  • 谢谢,你指出了我的错误!我误解了整个过程。我认为如果我有一个 Shift 列表和一个 Employee 列表,我就不必初始化 ShiftAssignment 列表(我认为计划者会这样做)。现在,当我有一个设置了 Shift 属性的 ShiftAssignment 对象集合时,规划器工作正常!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
相关资源
最近更新 更多