智能优化算法——篇2(邻域搜索大家族)

目录

1.种群算法和邻域算法的区别与联系

2.算法原理总结

2.1 变邻域搜索算法VNS

2.2 自适应大邻域搜索算法ALNS


篇1中我们提到,算法很多,但是最经典的有8种,分别是:遗传算法、禁忌搜索算法、模拟退火算法、粒子群算法、蚁群算法、以及邻域搜索中的迭代邻域搜索算法、变邻域搜索算法、自适应大规模邻域搜索算法。前面5种篇1中已有表述,本篇对后面3种做下总结。

这些算法有人叫智能算法,有人叫启发式算法,有人叫元启发式算法等等,其实都可以。

1.种群算法和邻域算法的区别与联系

我之所以分为上下两篇,是因为在我的理解中,前面5种特点比较明确,后面3种本质是邻域,是对邻域的不同动作而产生的算法。当然,我还想补充两点。

(1)可以把禁忌搜索算法拿过来,放在后面3种的邻域类中也完全说的通。

(2)前面几种最醒目的点在于,退火是模拟退温,对劣解以一定的概率接受;遗传是基于自然界遗传交叉变异而产生的;禁忌搜索的本质是设置禁忌表防止陷入局部最优;粒子群是学习全体最优和当前最优;蚁群是仿照蚂蚁信息素的思维。本质上是框架搭建。

但是,解在变换的过程中,也就是产生新解,其实本质都是“邻域”或者说“算子”,这点是相通的,对吗?

邻域就是一个解生成别的解的过程。这点是通用的。具体怎么生成,邻域生成就是我们设计的关键所在。

现在的理解是以上这些,如果之后发现理解有误,我会回来修改。也希望看到自己理解的偏差,这样自己就永远在进步了。

2.算法原理总结

本篇我们对大邻域算法做一个总结。

其实,对于邻域的基础知识在禁忌搜索里有提到,它是后3种算法的基础。而且因为邻域算法的难度涉及到具体的操作,所以相对比之前者稍微难些。

2.1 变邻域搜索算法VNS

变邻域搜索算法是对局部搜索算法的一种改进,是一种改进型的局部搜索算法。和自适应大邻域搜索属于不同的体系,但属于邻域的大家族——完整介绍见这篇。

变邻域搜索算法的主要思想是:采用多个不同的邻域进行系统搜索。首先采用最小的邻域搜索,当无法改进解时,则切换到稍大一点的邻域。如果能继续改进解,则退回到最小的邻域,否则继续切换到更大的邻域。

2.2 自适应大邻域搜索算法ALNS

尽管大型邻域搜索技术中(如变邻域搜索算法)通过在当前解的多个邻域中寻找更满意的解,能够大大提高算法在解空间的搜索范围。但它有一个巨大的问题,那就是:它在使用算子时盲目地将每种算子形成的邻域结构都搜索一遍(发现有改进,就退回到最小的邻域从新搜索),缺少了一些启发式信息的指导时间成本较高。

这是官方的伪代码,注意,这里并没有出现权重更新——自适应大邻域搜索算法(Adaptive Large Neighborhood Search——ALNS)

 (补充的权重更新)

自适应大邻域搜索算法弥补了这种不足,首先ALNS算法允许在一次搜索中搜索多个邻域,它会根据算子的历史表现使用次数(会根据表现和使用次数,进行权重更新,同时权重更新的时候,会考虑类似蚁群的挥发系数)选择下一次迭代使用的算子,通过算子间的相互竞争(本质是轮盘赌选择)来生成当前解的邻域结构,而在这种结构中有很大概率能够找到更好的解。

在权重更新的时候,并不是每次选择destroy和repair算子都会更新,而是需要每隔一定迭代次数后(内循环结束后),权重才会更新。如是每次迭代都更新权重,那么对于本身随机性较强的ALNS,每次更新这种操作会放大这种随机性,就可能会出现差的那组算子组合的选择概率会一直被提高,好的算子组合概率迟迟不被提高。

通常的做法是:在迭代中设置有一个内循环和外循环(迭代次数),只有内循环结束时,才会进行权重更新,既降低了这种随机性,也综合多次的选择结果,不会降低算法的总体性能。

这种方法,国内用的人不太多。我在论文中看到有的人设计8种破坏算子和10种修复算子,甚至更多。

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值