如果我添加了constructionHeuristic配置,OptaPlanner会立即终止

时间:2016-09-27 12:48:19

标签: optaplanner

我正在学习OptaPlanner库。 我非常简单的测试看起来效果很好。 如我在XML配置中指定的那样,计划运行在20秒后终止。

然后我添加

<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
</constructionHeuristic>

并且计划几乎立即终止,结果非常糟糕,甚至打破了严格的限制。

manual我看到:

  

构造启发式自动终止,因此通常没有   需要在构造启发阶段配置终止   具体

这与整个计划运行有关吗?如果是,那为什么需要终止?我认为建构的目的是建立良好的初始起始位置然后开始计划。但事实并非如此。

我错过了什么吗?提前终止可能是什么原因?

1 个答案:

答案 0 :(得分:1)

优化算法配置是可选的。这意味着如果你没有<constructionHeuristic>而没有<localSearch>,OptaPlanner将使用合理的默认配置(恰好包含一个构造启发阶段和一个本地搜索阶段。这就是规划运行并给出结果的原因在没有配置算法(阶段)的简单测试中。

当您自己添加<constructionHeuristic>时,OptaPlanner不再使用默认配置。此时,您已配置单个构造启发式阶段,该阶段运行First Fit Decreasing算法。当它终止计划结束时,因为没有其他阶段可以继续。

自动构造启发式终止意味着一旦所有实体的计划变量被初始化,该阶段就会终止。因此,您不必为此阶段配置<termination>

您现在需要做的是在<localSearch>阶段之后添加<constructionHeuristic>阶段,并从一个本地搜索算法的一些基本配置开始,例如Hill Climbing。有关配置示例,请参阅本地搜索章节。

例如:

<?xml version="1.0" encoding="UTF-8"?>
<solver>
  <!-- Define the model -->
  <scanAnnotatedClasses/>

  <!-- Define the score function -->
  <scoreDirectorFactory>
    ...
  </scoreDirectorFactory>

  <!-- Configure solver (global) termination -->
  <termination>
    <secondsSpentLimit>20</secondsSpentLimit>
  </termination>

  <!-- Configure the optimization algorithms (optional) -->
  <constructionHeuristic>
    <constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
  </constructionHeuristic>
  <localSearch>
    <localSearchType>HILL_CLIMBING</localSearchType>
    <acceptor>
      <acceptorType>HILL_CLIMBING</acceptorType>
    </acceptor>
    <forager>
      <acceptedCountLimit>1</acceptedCountLimit>
    </forager>

    <!-- You can also configure phase termination -->
    <termination>
      <stepCountLimit>100</stepCountLimit>
    </termination>
  </localSearch>
</solver>