爬山算法
基本思路:
- 不断和邻居值进行比较,朝临近值大的方向前进
- 当左右值相同时,就停止,即得到算法最优解
- 仅作为局部最优解,避免了遍历,仅启发部分节点
步骤:
① 随便找一个值作为解
② 循环:
- 找到相邻点
- 比较所有邻居解的大小,找到最大值
- 如果最好的邻居值仍然小于当前值,则返回;否则选邻居值中最大值作为结果
注意点:
- 变量类型选什么
- 如何初始化
- 如何取邻居值
- 目标函数是什么
工具:
- python3的matplotlib库
局部搜索
基本思路:
- 从一个初始解开始
- 通过邻域动作,产生邻居解,判断邻居解的质量,根据某种策略来选择邻居解
- 重复上述过程,直到达到终止条件
基于个体的启发式算法
五大要素:
| 目标函数
| 邻域
| 初始解
| 新解的产生
| 接受规则和终止准则
算法思路
步骤
爬山法:如上述
模拟退火:
- 退火现象指物体逐渐降温的物理现象,物体的能量状态会低;
- 模拟退火在搜索得到局部最优解之后,会以一定概率接受继续搜索;
模拟退火基本思路:
- 若移动后得到更优解,则总是接受该移动;若移动之后得到比当前差的解,则以一定概率接受移动,而且这个概率随着时间推移逐渐降低(退火的降温过程)
注意点:
- 可基于蒙特卡洛,每次计算的结果都可能不一致
禁忌搜索:
对于找到的一部分局部最优解,有意识地避开它,从而获得更多的搜索区域
注意点:
- 禁忌长度:长度越短,解禁范围越大,搜索范围的上限越大,但同时又容易造成搜索循环,即实际上去搜索的范围很小,过早陷入局部最优;长度越大,计算时间就越长
- 特赦规则:
- 基于评价值的规则——出现一个解的目标值好于前面任何一个最佳候选解,可特赦
- 基于最小错误的规则——所有对象都被禁忌,特赦一个评价值最小的解
- 基于影响力的规则——特赦对于目标值影响大的对象
-
候选集:由邻域中的邻居组成,可选择所有邻居,也可选择表现较好的邻居,还可以随机选择几个邻居
-
评价函数:
直接评价函数——直接使用目标值作为评价函数
间接评价函数——反映目标函数特性的函数 -
终止规则:
确定步数终止,但无法保证解的效果,仅记录当前最优解
频率控制原则,当某个解、目标值和元素序列的频率超过一个给定值时,终止计算
目标控制原则,在给定步数内当前最优值没有变化,可终止计算
Explorative local search methods ↓
迭代局部搜索
基本思路:
- 在局部最优解上加入了扰动,然后再重新进行局部搜索
步骤:
- 从初始解中进行局部搜索,找到局部最优解
- 扰动局部最优解,获得新解
- 从新解中进行局部搜索,再次得到局部最优解
- 基于判断策略,对最新的局部最优解的好坏进行判断,选择接受或退回新解
- 直到找到满足条件的最优解,不然跳回第二步
注意点:
- 感觉是针对目标明确的问题的搜索方式,比较接近搜索引擎的样子,并没有发现它比其他的算法贴合最小面积的要求
变邻域搜索VNS
算法思路:
- 在本邻域内找不到比当前解更优的解的时候,就跳到下一个邻域继续进行搜索
- 在本邻域找到了一个比当前解更优的解的时候,就跳回第一个邻域进行重新搜索
步骤:
- 产生初始解
- 扰动,得到新解
- 对新解进行和变邻域下降搜索,又得新解
- 若满足边界条件则程序结束,输出最优解,否则跳回第二步