OptaPlanner 无限期地重复最后一步
OptaPlanner repeat last move indefinitely
我使用 OptaPlanner 7.56 实现了类似于 CloudBalancing 的算法。
实际上,我使用的是 ChangeMoveSelector,我在某些条件下对其进行了过滤,并且效果很好。当没有可用的移动时它停止并且 return 最好的解决方案。
<localSearch>
<changeMoveSelector>
<selectionOrder>ORIGINAL</selectionOrder>
<filterClass>...</filterClass>
</changeMoveSelector>
<acceptor>
<acceptorType>HILL_CLIMBING</acceptorType>
</acceptor>
<forager>
<pickEarlyType>NEVER</pickEarlyType>
<acceptedCountLimit>1000</acceptedCountLimit>
</forager>
</localSearch>
但我尝试添加一个具有类似过滤器的 PillarChangeMove,在检查了所有可能的移动之后,它无限期地重复最后一个移动,并且在某些时候我收到以下警告 Bailing out of neverEnding selector
。
<unionMoveSelector>
<changeMoveSelector>
<selectionOrder>ORIGINAL</selectionOrder>
<filterClass>...</filterClass>
</changeMoveSelector>
<pillarChangeMoveSelector>
<filterClass>...</filterClass>
<subPillarType>NONE</subPillarType>
</pillarChangeMoveSelector>
</unionMoveSelector>
我记得我在实施 ChangeMoveSelector
时遇到了同样的问题。
我通过添加 <selectionOrder>ORIGINAL</selectionOrder>
来修复
<unionMoveSelector>
<changeMoveSelector>
<selectionOrder>ORIGINAL</selectionOrder>
<filterClass>...</filterClass>
</changeMoveSelector>
<pillarChangeMoveSelector>
<selectionOrder>ORIGINAL</selectionOrder>
<filterClass>...</filterClass>
<subPillarType>NONE</subPillarType>
</pillarChangeMoveSelector>
</unionMoveSelector>
我使用 OptaPlanner 7.56 实现了类似于 CloudBalancing 的算法。
实际上,我使用的是 ChangeMoveSelector,我在某些条件下对其进行了过滤,并且效果很好。当没有可用的移动时它停止并且 return 最好的解决方案。
<localSearch>
<changeMoveSelector>
<selectionOrder>ORIGINAL</selectionOrder>
<filterClass>...</filterClass>
</changeMoveSelector>
<acceptor>
<acceptorType>HILL_CLIMBING</acceptorType>
</acceptor>
<forager>
<pickEarlyType>NEVER</pickEarlyType>
<acceptedCountLimit>1000</acceptedCountLimit>
</forager>
</localSearch>
但我尝试添加一个具有类似过滤器的 PillarChangeMove,在检查了所有可能的移动之后,它无限期地重复最后一个移动,并且在某些时候我收到以下警告 Bailing out of neverEnding selector
。
<unionMoveSelector>
<changeMoveSelector>
<selectionOrder>ORIGINAL</selectionOrder>
<filterClass>...</filterClass>
</changeMoveSelector>
<pillarChangeMoveSelector>
<filterClass>...</filterClass>
<subPillarType>NONE</subPillarType>
</pillarChangeMoveSelector>
</unionMoveSelector>
我记得我在实施 ChangeMoveSelector
时遇到了同样的问题。
我通过添加 <selectionOrder>ORIGINAL</selectionOrder>
<unionMoveSelector>
<changeMoveSelector>
<selectionOrder>ORIGINAL</selectionOrder>
<filterClass>...</filterClass>
</changeMoveSelector>
<pillarChangeMoveSelector>
<selectionOrder>ORIGINAL</selectionOrder>
<filterClass>...</filterClass>
<subPillarType>NONE</subPillarType>
</pillarChangeMoveSelector>
</unionMoveSelector>