启发式算法学习记录

启发式算法学习记录

1.什么叫启发式算法

百度百科:
启发式算法(heuristic algorithm)是相对于最优化算法提出的。一个问题的最优算法求得该问题每个实例的最优解。启发式算法可以这样定义:一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计。现阶段,启发式算法以仿自然体算法为主,主要有蚁群算法、模拟退火法、神经网络等。

其他一些不错的说法:

启发式算法就是例如遗传算法,模拟退火,各种群算法,蚁群,鱼群,粒子群,人工神经网络等模仿自然界或生命体行为模式的算法,一般又称人工智能算法或全局优化算法。

启发式算法是指具有自学习功能,可利用部分信息对计算产生推理的算法。

有一个很值得关注的点,就是启发式算法的解具有偶然性,可能很接近最优解,也可能偏离的很远。

从定义很难去理解一个算法,不如看个实例。

2.模拟退火算法

模拟退火是启发式算法的一种,具体学习的是冶金学中金属加热-冷却的过程。

主要是将热力学的理论套用到统计学上,将搜寻空间内每一点想象成空气内的分子;分子的能量,就是它本身的动能;而搜寻空间内的每一点,也像空气分子一样带有“能量”,以表示该点对命题的合适程度。演算法先以搜寻空间内一个任意点作起始:每一步先选择一个“邻居”,然后再计算从现有位置到达“邻居”的概率。若概率大于给定的阈值,则跳转到“邻居”;若概率较小,则停留在原位置不动。

模拟退火是启发示算法的一种,也是一种贪心算法,但是它的搜索过程引入了随机因素。在迭代更新可行解时,以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。以下图为例,假定初始解为左边蓝色点A,模拟退火算法会快速搜索到局部最优解B,但在搜索到局部最优解后,不是就此结束,而是会以一定的概率接受到左边的移动。也许经过几次这样的不是局部最优的移动后会到达全局最优点D,于是就跳出了局部最小值。

启发式算法学习记录_第1张图片

看了上图应该就很好理解模拟退火算法了;模拟退火算法以一定的概率接受比现在更差的解,以此来跳出局部最优解,从而增大获得全局最优解的概率。但在具体的实现中,这个一定概率应该怎么选择是一个值得深思的问题。太小了跳不出局部最优,太大了可能搜索过头。

3.禁忌搜索

禁忌(Tabu Search)算法是一种亚启发式(meta-heuristic)随机搜索算法,它从一个初始可行解出发,选择一系列的特定搜索方向(移动)作为试探,选择实现让特定的目标函数值变化最多的移动。为了避免陷入局部最优解,TS搜索中采用了一种灵活的“记忆”技术,对已经进行的优化过程进行记录和选择,指导下一步的搜索方向,这就是Tabu表的建立。

用一个形象的比方来解释:

兔子们知道一个兔的力量是渺小的。他们互相转告着,哪里的山已经找过,并且找过的每一座山他们都留下一只兔子做记号。他们制定了下一步去哪里寻找的策略。这就是禁忌搜索.

为了找到全局最优解,禁忌搜索就是对于找到的一部分局部最优解,有意识地避开它,从而或得更多的搜索区域。

至于怎么避开局部最优解,我以前实现的禁忌搜索实现图着色算法中,是使用随机选择每一轮中相等最优解的方法。

具体可移步至https://github.com/yogafans/Tabu_k_Color

4.想法

一些专业名词从字面上去理解是很难理解的,所以尽量少去想通过字面的意思来理解一个算法。

启发式算法现阶段大都是通过模拟自然界中的现象或人和动物的行为来求解问题,但具有偶然性。

所以大家也可以对在日常生活中看到的一些现象多多的思考,说不定就会有什么灵感呢。

你可能感兴趣的:(算法,启发式算法)