禁忌搜索(TS)[35,36]背后的关键思想是使用内存来防止搜索过程停滞在局部最小值,或者更一般地说,是给定搜索空间中有吸引力的非解决区域。 在简单禁忌搜索中,迭代改进策略通过短期记忆得到增强,允许它从局部最小值中逃脱。 该存储器用于防止搜索返回最近访问的搜索位置以进行固定数量的搜索步骤。 简单的TS可以通过明确记住先前访问过的候选解决方案并排除任何可能导致这些解决方案的步骤来实现。更常见的情况是,禁止重新引入刚刚从当前候选解决方案中删除的解决方案组件(例如分配单个CSP变量),从而阻止了逆转最近的搜索步骤。名为tabu tenure的参数确定适用这些限制的搜索步骤数。 注意,禁止使用禁忌机制的可能步骤具有与将当前候选解s的邻域N(s)动态地限制为可允许邻居的子集N'  N(s)相同的效果。

作为一种不受欢迎的副作用,这种禁忌机制有时会排除导致搜索空间中有趣的、未访问的区域的搜索步骤。因此,许多禁忌搜索算法都使用了所谓的“期望标准”,该标准指定了覆盖候选解或解决方案组件的禁忌状态的条件。最常用的期望标准之一是,它覆盖了导致现有候选解决方案改进的步骤的禁忌状态。,搜索过程中看到的最佳候选解决方案。

Min Conflicts Heuristic with Tabu Search (TMCH)

通过一个简单的禁忌搜索机制扩展MCH,可以得到TMCH算法[101,98]。TMCH的工作原理与MCH完全相同,只是在每个搜索步骤之后不同,即,在变量xi的值从v变为v'之后,变量/值对(xi,v)被声明为下一个tt步骤的禁忌,其中tt是禁忌任期参数。 虽然(xi,v)是禁忌,但是从xi的值的选择中排除了值v,除非将v分配给xi导致对现任赋值(愿望标准)的改进。

根据经验证据,TMCH通常比WMCH表现更好。 有趣的是,发现tt = 2的禁忌设置一致导致不同类型和大小的CSP实例的良好性能[101]。

The Tabu Search Algorithm by Galinier and Hao (TS-GH)

尽管在概念上与TMCH非常相似,但Galinier和Hao [29]的禁忌搜索算法(TS-GH)通常表现出更好的性能。TS-GH基于与MCH相同的邻域和评估功能,但使用不同的启发式方法来选择每个搜索步骤中涉及的变量/值对:在变量x出现在当前违反的约束中并且v'是来自x域的任何值的所有对(x,v')中,TS-GH选择导致违反约束数量最大减少的值。 如果存在多个这样的对,则随机均匀地选择其中一个。与在MCH中一样,然后通过将v'赋值给x来执行实际搜索步骤。 这个最佳改进策略使用TMCH中使用的相同禁忌机制进行扩充:在将x的赋值从v更改为v'之后,变量值对(x,v)被声明为tt搜索步骤的禁忌。 此外,相同的愿望标准用于使算法能够执行搜索步骤,该搜索步骤导致对现任赋值的改进,而不管相应变量/值对的禁忌状态如何。

与目前讨论的MCH变体不同,TS-GH的有效实现关键取决于评估函数值的增量更新机制,类似于GSAT中使用的评估函数值。 基本思想是在大小为n×k的二维表中保持任何潜在搜索步骤对评估函数(即,任何搜索步骤产生的冲突数)的影响,其中n是变量的数量, k是给定CSP实例中最大域的大小。

此外,禁忌机制可以有效地如下实现。 对于每个变量/值对(x,v),存储当x最后设置为v时的搜索步骤编号。初始化搜索时,所有都设置为 -tt; 随后,每次将变量x设置为值v时,将设置为当前搜索步骤数 t,其中在搜索过程的初始化时从0开始计算搜索步骤。当且仅当 t -  ≤ tt 时,变量/值对(x,v)是禁忌。 通过结合先前描述的增量更新机制使用该技术,TS-GH的搜索步骤可以与MCH的搜索步骤一样有效地执行。

TS-GH最初是作为MAX-CSP的算法引入的,MAX-CSP是CSP的优化变体,其目标是找到满足最大约束条件的变量赋值(见5.6节)。 实证研究表明,当应用于传统的CSP时,TS-GH通常比任何其他MCH变体(包括TMCH)实现更好的性能,使其成为目前已知的CSP的最佳SLS算法之一[101]。与TMCH的情况不同,TS-GH中禁忌任期参数的最佳设置倾向于随实例大小而增加; 这使得解决具有峰值效率的新CSP实例变得更加困难[101]。

GSAT with Tabu Search

将简单的禁忌搜索策略集成到基本GSAT底层的最佳改进程序中,可以得到一种名为GSAT的算法,禁忌搜索(GSAT / Tabu)[72,98]。 在GSAT / Tabu中,禁忌状态与给定公式中的命题变量相关联。 在变量x被填充之后,它不能在下一个tt步骤中回退,其中禁忌任期tt是算法的参数。 在每个搜索步骤中,要在基本GSAT中选择要变换的变量,除了选择仅限于当前不是禁忌的变量。在搜索初始化时,清除所有变量的禁忌状态。 否则,GSAT / Tabu与GSAT完全一样; 特别是,它使用相同的重启机制和终止标准。 与TMCH的情况一样,为了有效地实施GSAT / Tabu,使用增量分数更新和禁忌机制至关重要。

与GWSAT不同,固定maxTries参数的GSAT/Tabu是否具有PAC属性并不清楚。直观地说,对于低tt,算法可能无法逃脱广泛的局部极小区域,而对于高tt设置,由于tabu变量太多,可能会切断所有解的路径。然而,在使用特定于实例的优化tabu保留区设置时,GSAT/ tabu通常比具有类似优化参数的GWSAT性能要好得多。对于大型结构化的SAT实例[49]尤其如此;但是,也有一些例外情况,GSAT/Tabu的性能比GWSAT差很多,包括众所周知的SAT编码的物流规划问题。与基本的GSAT类似,GSAT/Tabu可以通过随机游走机制进行扩展;有限的实验表明,通常这种混合算法的性能并不优于GSAT/Tabu[98]。

WalkSAT with Tabu Search

像GSAT和MCH一样,WalkSAT/SKC可以通过一个简单的tabu搜索机制进行扩展。WalkSAT/Tabu[73]采用与WalkSAT/SKC相同的两阶段选择机制和评分函数b,并对每个翻转变量强制执行tt步骤的Tabu任期。(为了有效地实现这种禁忌机制,使用与之前描述的TS-GH相同的方法。)如果所选子句c不允许零损坏步骤,那么在c中出现的非禁忌的所有变量中,WalkSAT / Tabu选择得分最高的那个b值; 当有多个变量具有相同的最大分数时,其中一个变量是随机均匀选择的。如果所选子句c中出现的所有变量都是tabu,则变量赋值保持不变(即所谓的null-flip),但是所有变量的当前tabu保留期值与任何其他翻转之后的值一样减少。

maxTries参数固定的WalkSAT/Tabu被证明是不完整的[44,47]。虽然这主要是由null-flip引起的,但是还不清楚用随机游走步骤替换null-flip是否足以获得PAC属性。然而,在实践中,WalkSAT/Tabu通常比WalkSAT/SKC的性能要好得多,特别是在结构化的SAT实例上,例如大型SAT编码块世界规划问题[49]。

Novelty and Variants 新奇与变异

新颖性算法(The Novelty algorithm )[73]是从WalkSAT框架中派生出来的。像禁忌搜索一样,Novelty使用搜索历史上有限的信息来避免搜索停滞。更具体地说,它的变量选择机制是基于一种直觉,即应该避免重复地前后翻转相同的变量。这个机制是基于可变的年龄(也见Gent和Walsh[33]),即自上次翻转以来发生的翻转次数。不同于WalkSAT/SKC和WalkSAT/Tabu,Novelty及其最新的变体使用了与GSAT相同的变量计分函数,即各自翻转导致的未满足子句数量的差异。

在Novelty的每个步骤中,在随机均匀地选择一个不令人满意的子句c(与WalkSAT / SKC中完全相同)之后,如下选择要被翻转的变量。 如果具有最高分数的变量x在c中的变量中没有最小年龄,则始终选择它。 否则,仅以1-p的概率选择x,其中p是称为噪声设置的参数。在其余情况下,选择下一个分数较低的变量。当根据分数对变量进行排序时,根据年龄的减少打破了平局。(如果有几个分数和年龄相同的变量,Kautz和Selman的参考实现总是选择c语言中第一个出现的变量。)Novelty(以及下面描述的高级变体)使用与WalkSAT/SKC相同的初始化过程、重启机制和终止条件。

请注意,即使p> 0,Novelty也比WalkSAT / SKC显着更贪婪,因为总是选择一个子句中两个最有改进的变量之一,其中WalkSAT / SKC可以选择任何变量,如果不破坏其他条款就不会有任何改进。正是由于这个原因,对于固定的maxTries设置来说,Novelty本质上是不完整的,并且在一些常用的基准实例上偶尔会出现极端停滞[44,49]。还可以注意到,与WalkSAT / SKC不同,子句内的变量选择的新颖性策略(Novelty strategy)对于p = 0和p = 1都是完全确定的。尽管如此,在大多数情况下,Novelty显示出比WalkSAT / SKC和WalkSAT / Tabu显着改善的性能[73,49]。

R-Novelty [73],使用更复杂的变量选择机制的新奇的变体,经常但不总是比Novelty更好(详见McAllester等人[73]或Hoos和St¨utzle的第6章)[52])。 尽管它使用了一种旨在防止搜索停滞的循环策略,但这种算法受到其可证明的基本不完整性的影响[44,47],但它有时会比Novelty [73,49]表现更好。

与GWSAT中使用的机制类似,简单的冲突定向随机游走机制可以很容易地扩展Novelty和R-Novelty;这样就有效地克服了本质上的不完全性以及经验上观察到的停滞行为。算法[44,47]根据标准Novelty机制选择要被翻转的变量,概率为1-wp,并在其余情况下从所选子句中进行均匀随机选择。以相同的方式从R-Novelty获得,但没有利用R-Novelty的循环破坏机制。

对于wp> 0,可证明是PAC,并且显示主要噪声参数p的足够高(实例特定)设置的指数RTD。 在实践中,小步行概率wp通常足以防止Novelty偶尔观察到的极端停滞行为并且与Novelty相比实现了显着优越的性能。事实上,该算法的行为似乎有更鲁棒的wp参数,主要噪声设置p,同时一致良好的性能观察到wp = 0.01[47]。值得注意的是,在Novelty不存在停滞行为的情况下,wp = 0.01时的表现通常与Novelty几乎相同。类似的观察结果适用于; 然而,有一些迹象表明在几类结构化SAT实例上没有达到概念上更简单的Novelty +算法的性能,包括SAT编码的硬图着色和规划问题[49]。

自适应Novelty + [45]是的扩展,可在搜索过程中动态调整噪声参数,因此不需要手动调整此参数。 该算法的有效实现赢得了SAT 2004 SAT Solvers竞赛随机类别的第一名。Novelty ++,一种新近出现的Novelty变种,在许多情况下被发现比Novelty +表现更好; 通过将基础变量选择机制与类似于基础GSAT的贪婪迭代改进策略混合,可以进一步提高其性能[69]。

5.3 Tabu Search and Related Algorithms Tabu搜索和相关算法相关推荐

  1. 元启发式算法 | 禁忌搜索(Tabu Search)解决TSP问题(Python)

    [元启发式算法]禁忌搜索(Tabu Search)解决TSP问题(Python) 文章目录 [元启发式算法]禁忌搜索(Tabu Search)解决TSP问题(Python) 1.Tabu Search ...

  2. java 路径规划_转 | 禁忌搜索算法(Tabu Search)求解带时间窗的车辆路径规划问题详解(附Java代码)...

    以下文章来源于数据魔术师 ,作者周航 欲下载本文相关的代码及算例,请关注公众号[程序猿声],后台回复[TSVRPJAVA]不包括[]即可 前言 大家好呀! 眼看这9102年都快要过去了,小编也是越来越 ...

  3. 【算法】禁忌搜索算法(Tabu Search,TS)超详细通俗解析附C++代码实例

    01 什么是禁忌搜索算法? 1.1 先从爬山算法说起 爬山算法从当前的节点开始,和周围的邻居节点的值进行比较. 如果当前节点是最大的,那么返回当前节点,作为最大值 (既山峰最高点):反之就用最高的邻居 ...

  4. 转 | 禁忌搜索算法(Tabu Search)求解带时间窗的车辆路径规划问题详解(附Java代码)

    以下文章来源于数据魔术师 ,作者周航 欲下载本文相关的代码及算例,请关注公众号[程序猿声],后台回复[TSVRPJAVA]不包括[]即可 前言 大家好呀! 眼看这9102年都快要过去了,小编也是越来越 ...

  5. Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码

    本文来源于公众号[程序猿声],作者舟寒丶 作业车间调度问题 问题模型 举个栗子 有关禁忌搜索算法的内容,公众号内有详细教程: 干货 |[算法]禁忌搜索算法(Tabu Search,TS)超详细通俗解析 ...

  6. 禁忌搜索(Tabu Search或Taboo Search,简称TS)

    禁忌搜索(Tabu Search或Taboo Search,简称TS)的思想最早由Glover(1986)提出,它是对局部领域搜索的一种扩展,是一种全局逐步寻优算法,是对人类智力过程的一种模拟.TS算 ...

  7. 禁忌搜索算法(Tabu search)python实现

    enenen...Tabu search的计算结果和参数的设置密切相关. 在这个代码中,对于不同的目标函数,需要设置不同的参数(具体参数是啥...哎...让我想想...) 那么,存在BUG嘛?嗯,我来 ...

  8. 禁忌搜索(Tabu Search)算法及python实现

    禁忌搜索(Tabu Search)算法及python实现 版权声明:本文为博主原创文章,博客地址:https://blog.csdn.net/adkjb,未经博主允许不得转载. 禁忌搜索(Tabu S ...

  9. はち:Tabu Search

    文章目录 8.1 邻域的概念 两个城市互换前后的路径示意图. 8.2 局部搜索 8.3 禁忌搜索 8.3.1 禁忌搜索算法的提出 8.1 邻域的概念 现把邻域的概念推广到组合最优化   定义8.1.1 ...

最新文章

  1. Tech.Ed2005 讲义下载地址
  2. Python自然语言处理实战
  3. DWR之父作序推荐,国内第一部DWR著作
  4. python学习手册条件-Python学习手册之控制结构(一)
  5. java为窗体添加滚动条
  6. 公布获奖名单推文文案_国学养正·趣味竞答获奖名单公布啦
  7. 前端python和go_Python_前端网页+前后端交互-Go语言中文社区
  8. 随机邮箱_msgsafe - 一个处于半死不活状态的加密邮箱
  9. java zar_唬人的Java泛型并不难
  10. StarkSoft题库管理系统(二)--生成word格式试卷
  11. 【LeetCode】169. Majority Element 解题小结
  12. 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化
  13. 【Dart学习】--Dart之正则表达式相关方法总结
  14. 常用服务和开放端口对照表
  15. VB显示透明FLASH效果
  16. 域名投毒,DNS污染,域名欺骗,其实就是域名污染。
  17. .cfg\.dat\.mak(持续补充)
  18. RADARE2+FRIDA=R2FRIDA Best Dynamic Debugging Tool
  19. 《树莓派笔记》树莓派GPIO管脚实物参照图
  20. ps学习资料,很有用的!

热门文章

  1. 有全量大数据了,还要用估算、抽样吗?
  2. 系统测试软件cinebench,CineBench r15
  3. 【Bug解决】Ubuntu安装pip3:无法定位软件包问题
  4. 3. Web 服务原理
  5. 包管理器作用及特点:conda pip dnf vcpkg
  6. python通过outlook发送邮件_python使用两种发邮件的方式smtp和outlook示例
  7. OSX10.10系统下AICS6您需要安装旧 Java SE 6 运行环境才能打开程序
  8. 将域名绑定到 wx目录下的public_html目录,微百分微信管家20140328完整版安装说明.doc...
  9. MATLAB用fsamp2函数设计一个近似对称的二维带通滤波器
  10. 机器学习之决策树算法(3)