OptaPlanner如何确定移动何时是禁忌

时间:2016-06-02 23:07:25

标签: optaplanner

在之前的question中,我曾询问何时在自定义移动实现中调用方法“getPlanningEntities”,“getPlanningValues”,“hashCode”和“equals”。

因此,当解算器配置中存在“entity tabu”时调用“getPlanningEntities”,当解算器配置中存在“value tabu”时调用“getPlanningValues”,当存在“move / undo”时,调用“hashCode”和“equals”禁忌”。

在我的自定义移动实现中,来自不同计划实体类的多个计划变量获得新的值集。因此,存在多个计划实体和多个计划值。

我的问题是OptaPlanner如何确定更改多个计划实体的自定义移动是否是禁忌?

因此,当涉及到“实体禁忌”时,如果此自定义移动中更改的所有规划实体实例都存在于禁忌列表中或仅存在于其中的一个实例中,OptaPlanner将如何确定此自定义移动是否为禁忌禁忌清单会使这一举动成为禁忌吗?

然后,当涉及到“值禁忌”时,如果禁忌列表包含自定义移动尝试设置为规划变量的至少一个值,或者所有变量应该是在禁忌列表中将移动声明为禁忌?

此外,当在解算器配置中将“实体禁忌”和“值禁忌”组合在一起时,如果所有规划实体和规划变量都存在于列表中,或者只是一个规划实体,则如何将移动声明为禁忌,或者一个计划变量,或一个计划实体和一个计划变量?

然后,当涉及到“移动禁忌”时,我认为它清楚禁忌列表由哈希值组成,如果出现具有相同哈希值的移动,那么它就是禁忌。但是如果是不同的自定义移动(来自不同的实例) move class)会产生相同的哈希值,它会被视为禁忌,还是因为它不是“instanceof”相同的自定义移动类而“equals”方法会返回false?

0 个答案:

没有答案