一、基本介绍
1.概念
变领域搜索(Variable Neighborhood Search,VNS)算法是一种改进型的局部搜索算法,它利用不同的动作构成的领域结构进行交替搜索,在集中性和疏散性之间达到很好的平衡。其思想可以概括为“变则通”。
变领域依赖于以下事实:
(1)一个邻域结构的局部最优解不一定是另一个邻域结构的局部最优解。
(2)全局最优解是所有可能邻域的局部最优解。
变邻域搜索算法主要由以下两个部分组成:
(1)variable neighborhood descent(VND)
(2)shaking procedure
2.相关术语
领域:给定点附近其它点的集合。
在距离空间中,领域一般定义为以给定点为圆心的一个圆;
在组合优化问题中,领域一般定义为由给定转化规则对给定的问题域上每结点进行转化所得到的问题域上结点的集合。
领域动作:是一个函数,通过这个函数,对当前解s,产生其相应的邻居解集合。在TSP中,领域问题通常指变换、逆转、插入。
变领域下降(VND):一个算法结构。
- 给定初始解 S S S; 定义 m m m个邻域,记为 N k ( k = 1 , 2 , 3...... m ) ; i = 1 N_k(k = 1, 2, 3......m);i = 1 Nk(k=1,2,3......m);i=1
- 使用邻域结构 N i N_i Ni(即 N i ( S ) N_i(S) Ni(S))进行搜索,如果在 N i ( S ) N_i(S) Ni(S)里找到一个比S更优的解 S ′ S′ S′,则令 S = S ′ , i = 1 S=S′, i=1 S=S′,i=1。
- 如果搜遍邻域结构 N i N_i Ni仍找不到比 S S S更优的解,则令 i + + i++ i++。
- 如果 i ≤ m i≤m i≤m ,转步骤2。
- 输出最优解
S
S
S。
(1)当在本邻域搜索找不出一个比当前解更优的解的时候,我们就跳到下一个邻域继续进行搜索。如图中虚黑线所示。
(2)当在本邻域搜索找到了一个比当前解更优的解的时候,我们就跳回第一个邻域重新开始搜索。如图中红线所示。
领域扰动(shaking produce):扰动算子,类似于领域动作。通过这个算子可以产生不同的邻居解。扰动、抖动、邻域动作这几个本质上还是没有什么区别的,都是通过一定的规则,将一个解变换到另一个解而已。
贪心算法(Greedy Algorithm):也叫贪婪算法。是一种基于贪心策略的算法范式,通常用于优化问题。在每一步的选择中,贪心算法总是选择当前看起来最优的解,且不考虑全局最优解,它局部地做出在当前看来是最优的选择。
贪心算法一般步骤:
- 建立贪心选择集合:在当前状态下可以做出的所有选择中,找到一个最优的选择,构成贪心算法选择集合。
- 判断是否结束:判断当前问题是否已经得到了最优解,是则结束,否则继续。
- 执行贪心选择:执行贪心选择,更新当前解和问题的状态。
- 跳到下一步:回到第2步。
局限性:可能无法找到全局最优解。
二、主要运算过程
1.运算过程
①产生初始解
S
S
S;
②对初始解进行shaking procedure,得到邻域解
S
1
S_1
S1;
③对
S
1
S_1
S1进行VND操作,得到邻域解
S
2
S_2
S2;
④如果达到停止条件,则结束算法,否则跳回第二步。
2.终止准则
①规定一个最大的CPU运算时间;
②规定一个总的最大的迭代次数;
③规定一个最大迭代次数maxIte maxItemaxIte,若在maxIte之内解没有发生优化,则终止算法。