是错误吗? Optaplanner 无法删除 ConstraintMatch

Is bug ? Optaplanner unable to remove ConstraintMatch

我遇到了一个问题,和这个link上的问题是一致的。 -> Optaplanner unable to remove ConstraintMatch

Exception:
org.optaplanner.core.api.score.constraint.ConstraintMatchTotal.removeConstraintMatch

调试了,hashCode和Equals都改写了,还是报错

规则:

rule "scheduleFullTimeLimit"
     when
         $shiftList: ArrayList() from collect (
                     StaffAssignment(
                         shiftType != null
                 )
                 )
     then
         scoreHolder.addSoftConstraintMatch(kcontext, -1);
end

我在我的规则中使用了收集。

这是一个错误吗?

求助

恐怕问题出在 ArrayList 上。 ArrayList 的 hashCode() 将随着集合的每次更改而更改。因此,您将得到您收到的确切消息 - OptaPlanner 正在尝试撤消不存在的内容。

你必须想办法在没有 ArrayList 的情况下如何做任何你正在做的事情。至少,不要让 ArrayList 成为规则中的最后一件事,因为我相信这是它首先进入约束匹配的原因。