首页 > 解决方案 > OptaPlanner 无限期重复最后一步

问题描述

我使用 OptaPlanner 7.56 实现了一个类似于 CloudBalancing 的算法。

实际上,我正在使用我用某些条件过滤的 ChangeMoveSelector 并且效果很好。当没有可用的移动时,它会停止并返回最佳解决方案。

<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>

标签: optaplanner

解决方案


我记得我在实施时遇到了同样的问题ChangeMoveSelector。我通过添加来修复<selectionOrder>ORIGINAL</selectionOrder>

<unionMoveSelector>
    <changeMoveSelector>
        <selectionOrder>ORIGINAL</selectionOrder>
        <filterClass>...</filterClass>
    </changeMoveSelector>

    <pillarChangeMoveSelector>
        <selectionOrder>ORIGINAL</selectionOrder>
        <filterClass>...</filterClass>
        <subPillarType>NONE</subPillarType>
    </pillarChangeMoveSelector>
</unionMoveSelector>

推荐阅读