2018-4-8 禁忌搜索算法(Tabu Search or Taboo Search TS)
书本《智能优化算法及其matlab实现》第146-153页
禁忌:禁止重复之前的工作,禁止走之前走过的路
原因:
为了改进局部邻域搜索容易陷入局部最优的不足,禁忌搜索算法引入了一个禁忌表,记录搜索过的局部最优点,在下一次的搜搜中,对禁忌表中的信息不再进行搜索或有选择的搜,依次跳出局部最优解。
1.局部搜索
(1)选定可行解x0,记录当前最优解xbest = x0 ,T = N(xbest)。初始化,(可随机的选取,通常凭经验)N(xbest)表示xbest的邻域
(2)当T - xbest = 空集 (表示邻域搜索完了) 或者是满足其他的终止条件,输出结果,停止运算,否则进行第三步
(3)从T 中选择一集合S ,得到S中的最好解xnow 。若f(xnow) 重复(2),继续搜索 缺点: (1)搜索的好坏完全的依赖于初始解的选择 (2)邻域的选择,以及设置也至关重要(会不会有一种情况,选择的领域半径不够大,将最优解遗漏) (3)若不在搜索策略上进行改进,要实现全局寻优就必须使用“完全的”邻域函数。 基于以上的种种缺点,为了更好的进行全局寻优设计出了“禁忌搜索” 禁忌搜索 我的理解: 是模拟人的大脑,当人找东西的时候,通常找过的地方就不会再去寻找(所以衍生出了禁忌表),但是当我们找东西的时候,有可能一遍找不到,这样的话我们就会开始回溯最优可能的一些地方(赦免一些在禁忌表中的地方)。 “开发”和“探索”是智能算法中的两个阶段。 算法步骤: (1)给定禁忌搜索算法参数,随机产生初始解x,置空禁忌表 (2)判断算法终止条件是否满足,是,输出优化结果,否,继续一下步骤 (3)利用当前解的邻域函数产生其所有(或若干)邻域解,并从中确定若干候选解 (4)对候选解判断藐视规则是否满足,是,则用藐视规则的最佳状态y代替x成为新的当前解,即x = y 并用与y 对应的禁忌对象替换最早进入禁忌表的禁忌对象(y是现在的当前进行搜索的地方1,植入禁忌表2,切换状态)同时用y替换“best so far ”状态,然后转入(6),否,(5) (5)判断候选解对应到各对象的禁忌属性,选择候选解集中非禁忌对象对应的最佳状态为新的当前解,同时用与之对应的禁忌对象替换最早进入禁忌表的禁忌对象。 (6)判断算法终止条件是否满足;是 则结束算法并输出优化结果,否转(3) 流程图: 关键参数说明: (1)候选解 通常是在当前状态的邻域中择优选取,选取过多,容易造成较大的计算量,而过少则容易“早熟”。通常是确定性(自己经验)或随机性的产生,大小根据问题而定 (2)禁忌表 主要目的是:阻止搜索过程中出现循环和避免陷入局部最优。它通常记录若干次的移动,禁止这些一定在近期返回。在迭代固定次数后,禁忌表释放这些移动,重新参加运算,因此它是一个循环表,没迭代一次,就将最近的以此移动放在禁忌表的末端,而它的最早的一个移动就从禁忌表中释放出来。 (3)禁忌长度 禁忌表中的对象最大不允许被选中的次数(不考虑特赦的情况) (4)藐视准则 在禁忌搜索算法中,可能会出现候选解全部被禁忌,或者存在一个优于“best so far ”状态的禁忌候选解,此时特设准则将某些状态解禁,已实现更高效的优化 特设准则: (1基于适配值的原则:某个禁忌候选解的适配值优于“best so far”则解禁为当前状态和新的“best sofar”状态 (2基于搜索方向的准则:若禁忌对象上次被禁忌时使得适配值有所改善,并且目前该禁忌对象对应的候选解的适配值优于当前解,则对解禁。 (5)终止准则 1)最大迭代步数 2)设定某个对象最大禁忌频率 3)设定适配置的偏离阈值 例子: 以及matlab代码,可以运行来源TS解决TSP: 禁忌搜索算法(Tabu Search) - CSDN博客
https://blog.csdn.net/zuochao_2013/article/details/72292466
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
