首页 > 编程语言 >变邻域搜索算法通俗讲解

变邻域搜索算法通俗讲解

时间:2022-09-29 17:07:34浏览次数:47  
标签:讲解 邻域 搜索算法 搜索 算子 VNS 结构

首先声明本文是在参考数据魔术师》公众号的《干货 | 变邻域搜索算法(VariableNeighborhood Search,VNS)超详细一看就懂》这一篇文章的基础上,并结合自己的理解撰写《VNS通俗讲解》,并给出自己编写的VNS解决TSP问题的matlab代码

文章目录:

1.VNS基本知识

1.1.邻域结构

1.2 VNS操作流程

2.代码实例



1.VNS基本知识

变邻域搜索算法(Variable Neighborhood Search简称VNS)属于一种局部搜索算法。顾名思义,变邻域搜索是指通过改变邻域结构来达到搜索得到近优解的过程。

VNS基于以下2个事实:

  1. A local minimum w.r.t. oneneighborhood structure is not necessarily so for another;(一个邻居结构的局部最优解不一定是另一个邻域结构的局部最优解);
  2. A global minimum is a local minimum w.r.t. all possible neighborhood structures.(全局最优解是所有可能邻域的局部最优解)。

看到这里各位小伙伴可能还有点蒙,没关系,接下来小编先从邻域结构的定义开始阐述,然后详细讲解VNS的操作流程。

1.1邻域结构

还是以TSP问题为例,假设初始解为1 2 3 4

那么所谓的邻域结构就是通过某种算子的变换操作所得到的新的解的集合。这里我们以交换算子和插入算子为例

1)交换算子

交换算子就是交换两个元素的位置,共有6种可能,即:

(1)2 1 3 4 

(2)3 2 1 4 

(3)4 2 3 1 

(4)1 3 2 4 

(5)1 4 3 2 

(6)1 2 4 3

以上6个新解就组成了一个邻域结构

2)插入算子

插入算子就是随机选择一个元素插入到最开始的位置,其他元素依次后退。共有3种可能,即:

(1)2 1 3 4 

(2)3 1 2 4 

(3)4 1 2 3

以上3个解同样也组成了一个邻域结构

 


1.2VNS操作流程

基本VNS由两部分组成VND(variable neighborhood descent)和shaking

  • 首先来看VND

变邻域搜索算法通俗讲解_最优解

VND说白了其实就是一个算法框架,当你在第1个邻域中搜索到更好的解时,这时应该及时更新解,并且还在第1个邻域中继续搜索,直到在第1个邻域中,找不到比目前的解更好的解时。这时才可以换到第2个邻域搜索(因为在第1个邻域中已经找不到比目前的解更好的解了,再不换邻域是不是傻。。。),然后重复上述动作继续搜索,直到把所有的邻域都搜索完。其实小伙伴们可以发现这是一种“变则通”的思想。

  • 再来看shaking

其实shaking和算子变换操作一样,将当前解通过某种算子变换成另一个解。

通过上述两部分的讲解,VNS求解问题的流程图如下所示:

变邻域搜索算法通俗讲解_最优解_02



然说N_k(S)和N_l(S)可以相同,也可以不同,但小编建议最好还是将N_k(S)和N_l(S)设置为不同的邻域结构,个人建议,效果不好别打我。

 


2.VNS求解TSP问题matlab代码实例

运行方式打开VNS.m文件即可运行

链接:https://pan.baidu.com/s/1SLzV4cRJ9rCYtQFQBwEYIA

提取码:wqu2


最后小伙伴们可以后台留言,想学习什么优化算法,小编会尽可能给大家讲解。



标签:讲解,邻域,搜索算法,搜索,算子,VNS,结构
From: https://blog.51cto.com/u_15810430/5723526

相关文章

  • 禁忌搜索算法求解带时间窗的车辆路径问题(上)
    今天小编准备讲一下用禁忌搜索算法(下文简称TS)求解带时间窗的VRP问题(下文简称VRPTW)。下面小编带大家体会TS的思想。以VRPTW为例,VRPTW的解的形式为每辆车所经过的顾客,比如说有......
  • 大规模邻域搜索(LNS)求解带时间窗的车辆路径问题(VRPTW)(附MATLAB代码)
    祝大家元宵节快乐本文引用ShawP.UsingConstraintProgrammingandLocalSearchMethodstoSolveVehicleRoutingProblems[M]//PrinciplesandPracticeofConstrai......
  • 基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)
    本文依然参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书​上周有小伙伴后台问小编能否讲解一下关于多目标优化问题的算法,本周小编做足了功课,为大家更新这篇......
  • 混合粒子群算法通俗讲解(附MATLAB代码)
    还是先声明本文参考《MATLAB智能算法30个案例分析》今天小编为大家讲解粒子群算法(PSO),还是和往常一样,我的目的是为了带领大家快速入门,是为了让大家在最短的时间内上手粒子群......
  • 蚁群算法通俗讲解(附MATLAB代码)
    本文依然参考《MATLAB智能算法30个案例分析》一书,文末的源代码也来自本书今天小编与大家聊聊蚁群算法,蚁群算法一个显著的特点是蚂蚁在经过路径后会释放信息素,蚂蚁之间能够相......
  • VNS(变邻域搜索算法)求解CVRP问题
    最近小编在学(xiao)习(xi)CVRP问题,相信小伙伴们CVRP问题并不陌生,没错CVRP问题就是容量受限制的车辆路径问题,容量受限指的是每辆车的容量都有限制,我们对问题的目标进行设定,本......
  • 模拟退火算法通俗讲解
    编辑:连吃十三碗校正:随心目录1. 模拟退火算法基本概念2. 模拟退火算法基本流程3. 遗传模拟退火算法matlab代码1.模拟退火算法基本概念自然凝结的、不受外界干扰而形成的......
  • CH573F蓝牙从机(peripheral)例程讲解(二)
    在上一篇外设例程讲解中讲述了蓝牙从机的收发接口,这样可以快速的上手,那么接下来就讲解另一个重要设置,从机的广播。在peripheral例程中,一直是以50ms的周期进行广播,使用手机......
  • python 使用HOG进行目标检测 + 非极大值抑制代码讲解(HOG(Histogram of Oriented Gradi
    最近在看《深度学习全书公式+推导+代码+TensorFlow》——清华大学出版社这本书,看到第8章——目标检测,其中有使用HOG进行目标检测的代码,觉得写的通俗易懂,就分享给大家......
  • 分支结构实战讲解
    分支结构实战讲解:#1.根据用户输入内容打印其权限'''jason-->超级管理员tom-->普通管理员jack,rain-->业务主管其他-->普通用户''......