Optaplanner:给定 MoveSelectors 的自己的 isdoable 方法

Optaplanner: Own isdoable Method for given MoveSelectors

我的任务是创建家具的加工序列。在要生产的家具中,个别家具可能会出现多次。如果 OptaPlanner 交换了日程表中彼此相同的两件家具,这不会改变要最小化的 Makespan。因此,我想编写自己的 isdoable 方法来防止此类移动。但是在文档中我找不到如何在这里进行。我已经采用了 eqauls 和 hash 方法来识别两件相同的家具。然而,OptaPlanner 执行这样的移动。 也许你们中有人知道如何解决这个问题

这是实现 isMoveDoable 的文档,这应该可以满足您的需要。

https://docs.optaplanner.org/7.41.0.Final/optaplanner-docs/html_single/index.html#theInterfaceMove

由于您没有实施自定义移动,您可以使用 Entity Selection Filter 现有的 OptaPlanner 移动。

如果您使用禁忌搜索,您可以指定一个 Entity Tabu 以避免在连续移动中修改相同的实体。

根据您的其他评论,我认为选择过滤器是更好的方法。

在实施自定义动作之前,我建议找出哪种动作会产生这种不需要的结果。请参阅 logging configuration 将日志记录级别切换为“跟踪”,以使 OptaPlanner 打印有关每个移动的信息。

ChangeMoveSwapMove 都已经只允许改变(或交换)不同值的移动。