爬山算法与局部搜索

爬山算法

基本思路:

  1. 不断和邻居值进行比较,朝临近值大的方向前进
  2. 当左右值相同时,就停止,即得到算法最优解
  3. 仅作为局部最优解,避免了遍历,仅启发部分节点

步骤:
① 随便找一个值作为解
② 循环:

  1. 找到相邻点
  2. 比较所有邻居解的大小,找到最大值
  3. 如果最好的邻居值仍然小于当前值,则返回;否则选邻居值中最大值作为结果

注意点:

  • 变量类型选什么
  • 如何初始化
  • 如何取邻居值
  • 目标函数是什么

工具:

  • python3的matplotlib库

局部搜索

基本思路:

  1. 从一个初始解开始
  2. 通过邻域动作,产生邻居解,判断邻居解的质量,根据某种策略来选择邻居解
  3. 重复上述过程,直到达到终止条件

基于个体的启发式算法

五大要素:
| 目标函数
| 邻域
| 初始解
| 新解的产生
| 接受规则和终止准则

算法思路

步骤

爬山法:如上述

模拟退火:

  • 退火现象指物体逐渐降温的物理现象,物体的能量状态会低;
  • 模拟退火在搜索得到局部最优解之后,会以一定概率接受继续搜索;

模拟退火基本思路:

  • 若移动后得到更优解,则总是接受该移动;若移动之后得到比当前差的解,则以一定概率接受移动,而且这个概率随着时间推移逐渐降低(退火的降温过程)

注意点:

  • 可基于蒙特卡洛,每次计算的结果都可能不一致

禁忌搜索:

对于找到的一部分局部最优解,有意识地避开它,从而获得更多的搜索区域

注意点:

  • 禁忌长度:长度越短,解禁范围越大,搜索范围的上限越大,但同时又容易造成搜索循环,即实际上去搜索的范围很小,过早陷入局部最优;长度越大,计算时间就越长
  • 特赦规则:
  1. 基于评价值的规则——出现一个解的目标值好于前面任何一个最佳候选解,可特赦
  2. 基于最小错误的规则——所有对象都被禁忌,特赦一个评价值最小的解
  3. 基于影响力的规则——特赦对于目标值影响大的对象
  • 候选集:由邻域中的邻居组成,可选择所有邻居,也可选择表现较好的邻居,还可以随机选择几个邻居

  • 评价函数:
    直接评价函数——直接使用目标值作为评价函数
    间接评价函数——反映目标函数特性的函数

  • 终止规则:
    确定步数终止,但无法保证解的效果,仅记录当前最优解
    频率控制原则,当某个解、目标值和元素序列的频率超过一个给定值时,终止计算
    目标控制原则,在给定步数内当前最优值没有变化,可终止计算

Explorative local search methods ↓

迭代局部搜索

基本思路:

  • 在局部最优解上加入了扰动,然后再重新进行局部搜索

步骤:

  1. 从初始解中进行局部搜索,找到局部最优解
  2. 扰动局部最优解,获得新解
  3. 从新解中进行局部搜索,再次得到局部最优解
  4. 基于判断策略,对最新的局部最优解的好坏进行判断,选择接受或退回新解
  5. 直到找到满足条件的最优解,不然跳回第二步

注意点:

  • 感觉是针对目标明确的问题的搜索方式,比较接近搜索引擎的样子,并没有发现它比其他的算法贴合最小面积的要求

变邻域搜索VNS

算法思路:

  • 在本邻域内找不到比当前解更优的解的时候,就跳到下一个邻域继续进行搜索
  • 在本邻域找到了一个比当前解更优的解的时候,就跳回第一个邻域进行重新搜索

步骤:

  1. 产生初始解
  2. 扰动,得到新解
  3. 对新解进行和变邻域下降搜索,又得新解
  4. 若满足边界条件则程序结束,输出最优解,否则跳回第二步
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值