元启发式算法手记二 TABU
元启发式(Metaheuristics)算法是当前大数据领域最前沿的解决实际最困难问题的一系列算法框架,针对NP-Hard组合优化问题,用元启发式搜索往往可以得到相当不错的结果。本系列内容将持续更新所有具有代表性的元启发式算法,一方面是个人学习笔记,另一方面是为了填补中文圈准确资料稀少的问题。因为学习源头为英文,部分名词的翻译并不精准,仅以个人喜好进行名词翻译,如果有别的地方不同的翻译方法,请以英文为准。
本文为系列二,主要介绍TABU search 禁忌搜索。
大概意思
Tabu search 大概是1986第一次被提出,其特殊的地方在于,将局部搜索的能力通过一个内在进行控制,从而找到一个提升的方向,减少重复对比,消除循环。
TABU要点
需要保存一个tabu list。一般而言是固定长度的,最好不要太大,因为大内在操作如此频繁效率也不会高。
比如说经典的CVPR问题,通过随机交换不同节点,并且成对记录到tabu中,已经在tabu list里的则不再选择了。
TABU的原理
局部搜索的提升版本,通过对生成neighbourhood的设计,将已经被确定不能用的解进行添加tabu,达到不用重复操作或者避免循环。
看代码
https://github.com/54chen/tabu_rectangle
本代码用TABU完成了常见的工业问题:屏幕切割。就是一块大屏幕如何切割成各种小的,目标是最小的浪费。
对代码进行解读(英文)的视频点这里 ->
引用