Optaplanner 可以自动添加或删除规划实体吗?

May planning entities be added or removed automatically by Optaplanner?

我是 Optaplanner 的新手。我以为我已经了解什么是规划实体,以及规划变量,真正的或一些相反的影子变量。我已经开始研究文档、示例和旧的 Whosebug 问题,但仍然存在一些疑问。

在尝试制作增量分数计算器时,我在 IncrementalScoreCalculator 接口中发现了一些意想不到的方法。连同 beforeVariableChanged 和 afterVariableChanged,我发现 *EntityAdded 和 *EntityRemoved,这让我怀疑实体对象可能被添加和删除。此外,这些方法在 NQueens 文档示例中实现,但在我查看的示例中,分配班次、资源、时隙等的示例中,我发现域的设计方式是规划实体是预计会被修改,但不会添加或删除。

我不知道实体对象的 addition/removal 是否在某处使用过,例如我没有深入研究的路线规划问题,以及这些添加和删除是显式还是隐式。那么,Optaplanner 是否可以在没有被要求的情况下添加或删除规划实体?

不,开箱即用的 OptaPlanner 不会添加或删除规划实体实例,因为默认移动选择器只会修改规划实体,不会创建或销毁它们。

OptaPlanner 还没有任何通用的移动选择器可以做到这一点(一旦我们这样做,它们将不会默认打开)。

如果您编写自定义移动(请参阅文档中的 MoveListFactory 和 MoveIteratorFactory),那么您可以选择 add/remove 移动中的实体,这就是存在这些方法的原因,但很少有用户这样做。