我正在使用Optaplanner 6.3.0来解决面向用户的应用程序中的TSPTW问题。访问次数是可变的(基于用户输入)但小于500.我想在固定的时间限制内返回答案。
我目前有一个secondsSpentLimit终止,但是观察到在构建阶段发生此终止时,最佳解决方案是不完整的,因为并非所有访问都在链中。
我想确保始终返回一个完整的解决方案,即使是一个糟糕的解决方案。我已经考虑过,作为一种可能的解决办法,我自己初始化起始解决方案,然后离开施工阶段。这会有效还是有更好的方法来实现这一目标?
这是我目前的配置:
<solver>
...
<termination>
<secondsSpentLimit>30</secondsSpentLimit>
</termination>
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
<unionMoveSelector>
<changeMoveSelector>
<cacheType>PHASE</cacheType>
<selectionOrder>SHUFFLED</selectionOrder>
</changeMoveSelector>
<tailChainSwapMoveSelector />
<subChainChangeMoveSelector>
<subChainSelector>
<maximumSubChainSize>50</maximumSubChainSize>
</subChainSelector>
<selectReversingMoveToo>true</selectReversingMoveToo>
</subChainChangeMoveSelector>
</unionMoveSelector>
<acceptor>
<lateAcceptanceSize>200</lateAcceptanceSize>
</acceptor>
<forager>
<acceptedCountLimit>1</acceptedCountLimit>
</forager>
<termination>
<unimprovedStepCountLimit>100</unimprovedStepCountLimit>
</termination>
</localSearch>
</solver>
答案 0 :(得分:0)
使用嵌套CH进行分区搜索确实可以加速大型案例中的CH(以牺牲解决方案质量为代价。虽然如果30秒对于500个实体来说太少,您需要先检查您的分数计算速度。
附近有限选择的选择是另一种选择。
您还可以添加CustomPhase。