Optaplanner:我们可以将两个规划变量与 (nullable = true) 一起使用吗?

Optaplanner: Can we use two planning variables with (nullable = true)?

我们可以使用两个规划变量,每个变量 (nullable = true) 吗?

如果是这样,我们如何在 Drools 规则文件中处理它们?

我知道当我们使用一个计划变量时,我们用 (nullable = true) 定义它,然后在规则中我们使用 $planningVariable != null 与“pas”示例一样,我尝试了这个并且效果很好,但是使用两个规划变量怎么样?

我们可以在 curriculumCourse 中应用这个吗?如果是这样,过度约束的数据应该在输出中显示为未分配给两个规划变量,还是只出现在其中一个?

是的,当然可以。但像往常一样,您必须确定您的分数限制(=分数规则)penalize/reward您想要达到的目标。

例如,在 CurriculumCourse 上,如果 roomperiodnull,我假设你有一个负面的媒介约束来惩罚 Lecture。如果两者都是null,就不要再惩罚它了,否则你最终会得到很多半分配的实体。但是尽管如此,您仍然可能会得到一些半分配的实体,因此要解决这个问题:

  • 要么做一些post-处理以使所有那些根本没有分配(=两个变量null)作为半分配是无用的。
  • 或者添加针对半赋值的硬约束以完全避免它们(即使在中间解决方案状态)。

可以从以下方面获得额外的有效求解:

  • 同时移动空间和周期的 ChangeMove 选择器,因为仅更改一个 to/from null 永远不会产生更好的解决方案。