用禁忌搜索解决旅行推销员问题

时间:2013-12-04 05:57:23

标签: algorithm optimization traveling-salesman tabu-search

我正在尝试使用 Hill Climbing算法来理解禁忌搜索,以解决旅行商问题

我理解'纯'爬山算法,但Tabu搜索如何更改此算法对我来说不是很清楚。

爬山示范:

让我们说,我们有6个城市 A,B,C,D,E,F ,我们随机选择一个初始状态: (A,B, C,D,E,F) ,旅行费用为120.

然后我将选择一组邻近状态(通过将第一个元素与第二,第三,第四等交换),并计算每个状态的旅行成本:

(B,A,C,D,E,F) = 110   /* <120; mark as optimal */
(C,B,A,D,E,F) = 127
(D,B,C,A,E,F) = 145
(E,B,C,D,A,F) = 102   /* <110; mark as optimal */
(F,B,C,D,E,A) = 80    /* <102; mark as optimal */

现在我们找到了一个局部最优:(F,B,C,D,E,A)。

Tabu搜索如何改变上述算法? 如果您可以演示一到两次迭代,我将非常感谢。

2 个答案:

答案 0 :(得分:5)

与禁忌搜索(TS)的不同之处在于它保留的禁忌列表。以及它如何影响搜索。生成此类禁忌列表的最简单方法是跟踪最近的搜索并将其包含在禁忌列表中,以便算法“探索”不同的可能性。禁忌列表启发式的一个例子是:如果来自城市D你去过城市E少于'n'迭代前,其中'n'是先前存储的解决方案的数量,它被添加到禁忌列表中(禁忌中的元素)列表已到期)。

它所执行的步骤与爬山的步骤非常相似:

  1. 选择初始状态(可能是随机的)并将其设置为最佳选择。

  2. 它进入一个循环,检查是否满足用户给出的破坏条件(本例中可以是阈值或旅行费用)。

  3. 它会创建一个空的候选列表。给定邻居中不包含禁忌元素的每个候选者都被添加到此空候选列表中。

  4. 它找到了此列表中的最佳候选者,如果它的成本优于当前最佳值,则将其标记为解决方案。

  5. 如果禁忌列表上的tabus数量已达到最大tabus数量(您定义的数量),则tabu到期。列表中的tabus按照输入的顺序到期。先进先出。

  6. 此过程会重复,直到达到用户定义的阈值。希望这有助于理解它是如何工作的:))

答案 1 :(得分:3)

免责声明: 此答案基于link [参考 - 1 {em> Geoffrey De Smet分享,在他的评论中指出here。积分应归他所有。

下面显示的两张图片帮助我了解Tabu Search如何改变Hill Climbing算法。

爬山

Hill Climbing (来源:OptaPlanner User Guide

禁忌搜索

Tabu Search (来源:OptaPlanner User Guide

<强> 参考:

[参考文献-1] JBoss.org社区文档。 OptaPlanner用户指南。 [在线]适用于:http://docs.jboss.org/drools/release/latest/optaplanner-docs/html_single/index.html。 [于12月7日访问]。