如果我添加 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>
我正在学习 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>