变邻域搜索算法(Variable Neighborhood Search)

定义:变邻域搜索算法(VNS)就是一种改进型的局部搜索算法。它利用不同的动作构成的邻域结构进行交替搜索,在集中性和疏散性之间达到很好的平衡。其思想可以概括为“变则通”。

变邻域搜索算法依赖于以下事实
1)一个邻域结构的局部最优解不一定是另一个邻域结构的局部最优解。
2)全局最优解是所有可能邻域的局部最优解。

变邻域搜索算法主要由以下两个部分组成

  1. VARIABLE NEIGHBORHOOD DESCENT (VND)
  2. SHAKING PROCEDURE

邻域:邻域就是指对当前解进行一个操作(这个操作可以称之为邻域动作)可以得到的所有解的集合。那么不同邻域的本质区别就在于邻域动作的不同了。

邻域动作:邻域动作是一个函数,通过这个函数,对当前解s,产生其相应的邻居解集合。例如:对于一个bool型问题,其当前解为:s = 1001,当将邻域动作定义为翻转其中一个bit时,得到的邻居解的集合N(s)={0001,1101,1011,1000},其中N(s) ∈ S。同理,当将邻域动作定义为互换相邻bit时,得到的邻居解的集合N(s)={0101,1001,1010}。

VARIABLE NEIGHBORHOOD DESCENT (VND)
VND其实就是一个算法框架,它的过程描述如下:

  1. 给定初始解S; 定义m个邻域,记为N_k(k = 1, 2, 3…m);i = 1。

  2. 使用邻域结构N_i(即 N_i(S))进行搜索,如果在N_i(S)里找到一个比S更优的解S′,则令S=S′, i=1 。

  3. 如果搜遍邻域结构N_i仍找不到比S更优的解,则令i++。

  4. 如果i≤m ,转步骤2。

  5. 输出最优解S。
    在这里插入图片描述

  6. 当在本邻域搜索找不出一个比当前解更优的解的时候,我们就跳到下一个邻域继续进行搜索。如图中虚黑线所示。

  7. 当在本邻域搜索找到了一个比当前解更优的解的时候,我们就跳回第一个邻域重新开始搜索。如图中红线所示。

shaking procedure
是一个扰动算子,类似于邻域动作的这么一个东西。通过这个算子,可以产生不同的邻居解。扰动、抖动、邻域动作这几个本质上还是没有什么区别的。都是通过一定的规则,将一个解变换到另一个解而已。

本文转载自:
https://mp.weixin.qq.com/s?__biz=MzU0NzgyMjgwNg==&mid=2247484621&idx=1&sn=f2e92f44c2306b58034cf158647bc737&chksm=fb49c974cc3e406228737e1a986c73368131bc7f0c0251d82b1e64266220df59134ab0a9def1&mpshare=1&scene=1&srcid=0828EK2xkjxczX8dMch3ud66&sharer_sharetime=1566963711577&sharer_shareid=054592193644de509623829748e83807&key=d4d627468bf29e729a37d96e9420f75ae8ee07d92976b165df3762d4a0bf2e01a06e3591d4793592a5980676c1d1668f96fe3e822792af675cd35f1752c460bc5edec3bfc0549fe8ec7273a4243355f3&ascene=1&uin=MjYzMDA1MzAyMQ%3D%3D&devicetype=Windows+10&version=62060834&lang=zh_CN&pass_ticket=mKdxom8osJJZb4ixH2eELB08AKAMdUQR7xMY0nJhEcpBIeHmtdQToh3Nk47Aacno

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值