如何以更好的方式在OptaPlanner中应用过度约束的计划?

时间:2019-07-25 08:49:08

标签: java drools optaplanner

在会议安排示例中,我试图应用过度约束的计划。我检查了文档,并在stackoverflow中进行了回答,然后将 nullable = true 应用于MeetingAssignment中的@PlanningVariable:

   @PlanningVariable(valueRangeProviderRefs = { "roomRange" }, nullable = true)
   public Room getRoom() {
      return room;
   }

我还为流口水添加了一条规则:

rule "Assign Every Person To A Room"
    when
        $meetingAssignment : MeetingAssignment(room == null)
    then
        scoreHolder.addMediumConstraintMatch(kcontext, -100);
end

我的得分持有者是: HardMediumSoftScoreHolder

但是,当我运行该应用程序时,只能分配六个不同的人中的一个。如果nullable为false并且可以分配每个人,则不会发生这种情况。这六个人也没有打破硬约束。 您对过度约束规划解决方案问题有任何想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

最后我找到了解决方案。我只有硬限制和中等限制的内裤。除了“将每个人分配到一个房间”规则外,我已将所有中型约束的惩罚更改为softConstraint。现在我可以分配每个人了。

谢谢