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

OptaPlanner terminates immediately if I add constructionHeuristic config

我正在学习 OptaPlanner 库。 我非常简单的测试似乎工作得很好。 正如我在 XML 配置中指定的那样,计划 运行 在 20 秒后终止。

然后我添加

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

并且计划几乎立即终止,结果非常糟糕,甚至打破了硬约束。

manual 我看到:

Construction heuristics terminate automatically, so there's usually no need to configure a Termination on the construction heuristic phase specifically.

这是否与整个计划有关运行?如果是,那么为什么它需要终止?我认为 constructionHeuristic 的要点是构建良好的初始起始位置 然后 开始规划。我观察到的情况并非如此。

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

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

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

Construction Heuristic 自动终止意味着此阶段在所有实体的规划变量初始化后立即终止。因此,您不必为此阶段配置 <termination>

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

例如:

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