搜索算法(篇二)

来源:互联网 发布:黑马程序员就业班教程 编辑:程序博客网 时间:2024/05/17 02:11

搜索算法(篇二)

1. 局部搜索算法的统一框架

​ 局部搜索算法是对一类算法的统称,符合其框架的算法很多,比如搜索算法(篇一) 中提到的爬山法、模拟退火法和禁忌搜索算法都属于局部搜索算法。尽管各个算法在优化过程中的细节存在差异,但在优化流程上呈现出很大的共性。我们可以将局部搜索算法的统一框架描述为:算法从一个或若干个初始解出发,在算法参数控制下由当前状态的邻域中产生若干个候选解,并以某种策略在候选解中确定新的当前解。伴随控制参数的调节,重复执行上述搜索过程,直至满足算法终止准则,结束搜索过程并输出优化结果。

在具体设计算法时,需要考虑以下几个方面:

  1. 搜索机制的选择

    搜索机制是构造算法框架和实现优化的关键,是决定算法搜索行为的根本点。比如爬山法是基于局部贪婪的搜索机制,而模拟退火算法时基于概率分布的搜索机制,禁忌搜索采用避免迂回的策略进行搜索。

  2. 邻域函数的设计

    邻域函数决定了邻域结构和邻域解的产生方式。算法对问题解的不同描述方式,会直接影响邻域函数的设计,进而影响算法的搜索行为。同时,即使在编码机制确定的情况下,邻域结构也可以采用不同的形式,以考虑新状态产生的可行性、合法性和对搜索效率的影响。在确定邻域结构后,当前状态邻域中候选解的产生方式即可以是确定的,也可以是随机性地。

  3. 状态更新方式的设计

    更新方式是指以何种策略在新旧状态中确定新的当前状态,是决定算法整体优化特性的关键步骤之一。基于确定性地状态更新方式的搜索,容易陷入局部最优;而随机性地状态更新方式,尤其是概率性劣向转移,往往取得较好的全局优化解,但是计算时间也比较长。

  4. 参数的控制方式

    控制参数是决定算法搜索进程和行为的又一关键因素。合适的参数控制有助于增强算法在邻域中的优化能力和效率,同时也必须以一定的准则和方式进行修改以适应算法性能的动态变化。

  5. 算法终止准则的设计

    终止准则是判断算法是否收敛的标准,决定了算法的最终优化性能。算法收敛理论为终止理论提供了明确的设计方案,但是基于理论分析所得的收敛准则往往很苛刻的,甚至难以应用。实际设计时,应兼顾算法的优化质量和搜索效率等多方面性能,或根据问题需要着重强调算法的某方面性能。

2. 变邻域搜索算法(Variable neighborhood search,VNS)

  • VNS算法介绍:

    变邻域搜索算法(VNS)是一种改进型的局部搜索算法,算法进行的每一步迭代都是通过搜索当前解的邻域得到的。VNS算法是在邻域搜索算法基础上不断改进邻域结构,通过变换邻域以增大搜索范围,一般情况下,搜索的邻域越大,局部搜索获得的最优解质量越好,因此最终得到的解精确度也就越高。

  • VNS依赖于以下观察事实:

    1. 一个邻域结构的局部最优解不一定是另一个邻域结构的局部最优解。
    2. 全局最优解是所有可能邻域的局部最优解。
    3. 对于很多问题,若干个邻域结构的局部最优解是相互靠近的。
  • 变邻域搜索算法过程如下:

其中S 表示初始解,邻域的个数为MNl 表示第l个邻域 。在进行变邻域搜索时,只要当前邻域搜索结束后优化了S,就重新返回到第一个邻域结构进行搜索,否则使用下一个邻域结构进行搜索,直到使用所有邻域结构都无法改进S为止。

  1. 输入:初始解S,定义M个邻域,记为N1N2.....,NM;l=1;
  2. 使用邻域结构Nl 进行搜索,直到陷入局部最优解S ;
  3. 如果S 优于S,令S=S,l=1; 否则,l++
  4. 如果lM ,转步骤1;
  5. 输出S;

在解决大规模问题时,不一定要在邻域Nl 中搜索最优的解x,可以在一定程度上随机选取一个可行解 x,然后和当前解进行比较。

3.变邻域搜索算法的改进优化策略

  1. 初始解的构造

    任何一个启发式算法都需要构造初始解,一个良好的初始解可以保证算法在较短的时间内获得全局最优解或近似最优解,所以对于VNS算法其初始解构造的好坏直接影响算法的性能。一般初始解的构造有两种方式:随机生成和启发式策略两种。

  2. 邻域结构集

    邻域结构集的构造是算法设计大的核心部分之一,它的原则是尽量保证算法的全局性。若能构造高质量的邻域结构集,那么算法的全局性可以得到保证,但是求解时间将会变长。对于固定的目标函数f(x) ,在不同的邻域结构集中,邻域内的可行解数量会不同。可行解的数量少,局部搜索速度就可以加快。在整个解空间存在数目不同的局部最优解。局部最优解越少,那么得到的近似解的目标函数就越接近最优值。目前邻域的结构一般是根据实现的难易程度、计算的速度及参照文献而采用的。

  3. 邻域结构之间的搜索顺序及移动策略

    邻域结构间的搜索顺序可以通过改变邻域结构间的次序,一般来说会按照邻域的大小顺序进行排序,从小到大,即:N1(x)N2(x)N3(x)......Nkmax(x); 当然根据不同的实际问题,搜索顺序可会有所改变,例如采用从简单到复杂的排序方式,邻域结构之间移动策略一般有两种:向前和向后。向前的策略是开始k=1 ,之后k 值自增到达kmax 。而向后的策略则开始于k=kmax ,k值自减,直到k=1

  4. 局部搜索

    局部搜索是VNS中另一个核心部分,在设计局部搜索的时候,可以考虑许多方式寻找新邻域,例如:交换、插入、增加等。同时为了让算法更有时效性,需特别注意解的更新。对于目标函数值的计算,尽量用最简单的计算方式。在比较新解与当前最优解的时候,也可以用一些目标函数值的比较来进行解的更新。

  5. 停止准则

    停止准则的选择对算法全局收敛性和时效性都有直接并且重要的影响。VNS算法常见的停止准则有3种:

    1. 寻遍所有邻域结构k=kmax 的次数;
    2. 设置邻域结构内的最大迭代次数tmax 和最优解的最大重复次数rmax
    3. 允许的最大CPU运行时间tmax ,根据实际问题,常常会选取其中一种或是集中组合的方式作为停止准则。

原创粉丝点击