确保Optaplanner在时间限制内找到完整的解决方案

时间:2017-11-21 17:33:19

标签: optaplanner

我正在使用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>

1 个答案:

答案 0 :(得分:0)

使用嵌套CH进行分区搜索确实可以加速大型案例中的CH(以牺牲解决方案质量为代价。虽然如果30秒对于500个实体来说太少,您需要先检查您的分数计算速度。

附近有限选择的选择是另一种选择。

您还可以添加CustomPhase。