构造启发式算法
文章目录
- 构造启发式算法
- 1. 概述
- 2. 首次适应法(First Fit)
- 3. 首次适应法-递减(First Fit Decreasing)
- 4. 最弱适应法(Weakest Fit)
- 5. 最弱适应法-递减(Weakest Fit Decreasing)
- 6. 最强适应法(Strongest Fit)
- 7. 最强适应法-递减(Strongest Fit Decreasing)
- 8. 从队列中分配实体(Allocate Entity From Queue)
- 9. 从队列中分配值(Allocate To Value From Queue)
- 10. 最便宜插入法(Cheapest Insertion)
- 11. 后悔插入法(Regret Insertion)
- 12. 从池中分配实体(Allocate from Pool)
- 13. 构造启发式算法的扩展性
- 14.[参考链接](https://www.optaplanner.org/docs/optaplanner/latest/construction-heuristics/construction-heuristics.html)
1. 概述
构造启发式算法在有限时间内构建一个相当不错的初始解。它的解决方案并不总是可行的,但它能够快速找到一个解决方案,以便后续元启发式算法能够完成任务。
构造启发式算法会自动终止,因此通常无需专门配置构造启发式算法阶段的终止条件。
2. 首次适应法(First Fit)
2.1 算法描述
首次适应法算法按照默认顺序循环遍历所有的规划实体,并逐个初始化。它将规划实体分配给最佳的可用规划值,同时考虑已经初始化的规划实体。当所有的规划实体都被初始化后,算法终止。一旦规划实体被分配,就不再改变。
请注意,该算法从将皇后A放置在第0行开始(之后不再移动),这使得达到最优解成为不可能。可以通过添加元启发式算法来修复这个问题。
2.2 配置
简单配置:
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT</constructionHeuristicType>
</constructionHeuristic>
高级配置:
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT</constructionHeuristicType>
<...MoveSelector/>
<...MoveSelector/>
...
</constructionHeuristic>
如需进行扩展,请参考构造启发式算法的扩展配置。如需进行高级配置,请参考从队列中分配实体。
3. 首次适应法-递减(First Fit Decreasing)
3.1 算法描述
与首次适应法类似,但是首次适应法-递减先分配较困难的规划实体,因为它们更不容易适应剩余部分。因此,它会按照降序对规划实体进行排序。
要求模型支持规划实体的难度比较。
通常情况下,人们预期这个算法的结果比首次适应法更好。但并非总是如此。
3.2 配置
简单配置:
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
</constructionHeuristic>
高级配置:
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
<...MoveSelector/>
<...MoveSelector/>
...
</constructionHeuristic>
如需进行扩展,请参考构造启发式算法的扩展配置。如需进行高级配置,请参考从队列中分配实体。
4. 最弱适应法(Weakest Fit)
4.1 算法描述
最弱适应法类似于首次适应法,但是它先使用较弱的规划值,因为较强的规划值更有可能能够容纳后续的规划实体。因此,它按照规划值的强度递增顺序排序。
要求模型支持规划值的强度比较。
请不要假设这个算法的结果比首次适应法更好,通常情况下并非如此。
4.2 配置
简单配置:
<constructionHeuristic>
<constructionHeuristicType>WEAKEST_FIT</constructionHeuristicType>
</constructionHeuristic>
高级配置:
<constructionHeuristic>
<constructionHeuristicType>WEAKEST_FIT</constructionHeuristicType>
<...MoveSelector/>
<...MoveSelector/>
...
</constructionHeuristic>
如需进行扩展,请参考构造启发式算法的扩展配置。如需进行高级配置,请参考从队列中分配实体。
5. 最弱适应法-递减(Weakest Fit Decreasing)
5.1 算法描述
结合了首次适应法-递减和最弱适应法。它将规划实体按照降序难度排序,将规划值按照递增强度排序。
要求模型支持规划实体的难度比较和规划值的强度比较。
请不要假设这个算法的结果比首次适应法-递减更好,通常情况下并非如此。但它通常优于最弱适应法。
5.2 配置
简单配置:
<constructionHeuristic>
<constructionHeuristicType>WEAKEST_FIT_DECREASING</constructionHeuristicType>
</constructionHeuristic>
高级配置:
<constructionHeuristic>
<constructionHeuristicType>WEAKEST_FIT_DECREASING</constructionHeuristicType>
<...MoveSelector/>
<...MoveSelector/>
...
</constructionHeuristic>
如需进行扩展,请参考构造启发式算法的扩展配置。如需进行高级配置,请参考从队列中分配实体。
6. 最强适应法(Strongest Fit)
6.1 算法描述
类似于首次适应法,但是最强适应法先使用强的规划值,因为强的规划值更有可能具有较低的软成本。因此,它按照规划值的强度递减顺序排序。
要求模型支持规划值的强度比较。
请不要假设这个算法的结果比首次适应法或最弱适应法更好,通常情况下并非如此。
6.2 配置
简单配置:
<constructionHeuristic>
<constructionHeuristicType>STRONGEST_FIT</constructionHeuristicType>
</constructionHeuristic>
高级配置:
<constructionHeuristic>
<constructionHeuristicType>STRONGEST_FIT</constructionHeuristicType>
<...MoveSelector/>
<...MoveSelector/>
...
</constructionHeuristic>
如需进行扩展,请参考构造启发式算法的扩展配置。如需进行高级配置,请参考从队列中分配实体。
7. 最强适应法-递减(Strongest Fit Decreasing)
7.1 算法描述
结合了首次适应法-递减和最强适应法。它将规划实体按照降序难度排序,将规划值按照递减强度排序。
要求模型支持规划实体的难度比较和规划值的强度比较。
请不要假设这个算法的结果比首次适应法-递减或最弱适应法-递减更好,通常情况下并非如此。但它通常优于最强适应法。
7.2 配置
简单配置:
<constructionHeuristic>
<constructionHeuristicType>STRONGEST_FIT_DECREASING</constructionHeuristicType>
</constructionHeuristic>
高级配置:
<constructionHeuristic>
<constructionHeuristicType