【调度】变领域搜索算法

变邻域搜索(variableneighborhoodsearch,VNS)算法是Mladenovic和Hansen在1997年提出的一种有效的局部搜索方法。求解组合优化问题时有以下几个特点。
(1)对于不同的邻域结构,一个邻域结构的局部最优解不一定是另一个邻域结构的局部最优解。
(2)对于所有的邻域结构,全局最优解必然是某个邻域结构的局部最优解。
(3)对于多数组合优化问题,某个邻域结构或某几个邻域结构的局部最优解之间的距离可能很近,即局部最优解具有聚集性。
变邻域搜索算法就是依据以上特点,在基本的局部搜索算法的基础上提出的。基本的局部搜索算法是基于“贪婪接受”的思路,利用邻域结构进行搜索的方法。算法从一个初始解出发,利用邻域结构,持续地在当前解的邻域中搜索比它好的解,若能找到,则更新当前解,如此反复迭代,直到满足终止条件为止。变邻域搜索算法的基本思想是:在局部搜索范围内,系统化地改变多个邻域结构。变邻域搜索的邻域结构不是单一不变的,而是有多个邻域结构,在同一个初始解的情况下,有更广泛和深入的搜索空间,能够较好地跳出局部最优解,以较快的速度求得问题的近似最优解。
一般变邻域搜索算法的优化过程是比较简单的。算法首先设计若干邻域结构,同时定义一个邻域序列并给出标号Nk,k=1,2,…,kmax。然后生成初始解s,初始化邻域标号k=1并开始迭代过程。主循环包含三个阶段:晃动(shaking)、基本局部搜索(localsearch)和移动(moveornot)。晃动阶段将从当前解s的第k个邻域中随机选择一个解s′作为基本局部搜索的初始解。基本局部搜索过程可以采用任意某个邻域结构而不限于算法所定义的那些结构,搜索结束后得到一个新的局部最优解s′′,若解s′′优于s,则替换s,并重新从k=1开始下一次迭代,否则k加1后重新使用新的邻域结构开始晃动阶段大多数局部搜索算法只采用了一种,至多两种邻域结构,而变邻域搜索算法在搜索全局最优解的过程中使用多种邻域结构,比使用单一的邻域结构有更大可能得到全局最优解,并且由于变邻域搜索算法简单、易操作,在比较多的优化问题和实际生产领域得到了应用。Gao和Liu等利用变邻域搜索算法与其他优化算法结合,在求解FJSP取得了较好成果。但是多个邻域结构的不断循环变换会占用一定的优化时间,在实际应用时,往往根据不同的优化问题,在优化结果可接受的条件下,将某些步骤进行简化或扩展,使效率得到提高,如确定性的变邻域下降算法、变邻域分散搜索、SkewedVNS和并行变邻域搜索算法等。
本章采用简化变邻域下降算法,具体的执行步骤如下。
步骤1初始化,定义一系列邻域结构,设定Nk,k=1,2,…,kmax,给定一个初始解s。
步骤2重复下列过程,直至算法终止为止。
步骤2.1令k=1。步骤2.2重复下列过程,直到k=kmax为止。
步骤2.2.1当前解s在邻域结构Nk内局部搜索,得到最优解s′。
步骤2.2.2若s′优于s,则s=s′,k=1;否则k=k+1。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值