局部搜索与禁忌搜索

转载http://blog.sina.com.cn/s/blog_4a064aed0100y28e.html

局部搜索算法:

step1选定一个初始可行解x0;记录当前最优解xbest:=x0,令p=N(xbest);

step2当p等于空集时,或满足其他停止运算准则时,输出计算结果,停止运算;否则,从N(xbest)中选一集合S,得到S中的最优解xnow;若f(xnow)<f(xbest),则xbest:=xnow,p:=N(xbest);否则,p:=P-S;重复step2

 

   改变局部搜索中只按下降规则转移状态的一个方法时蒙特卡洛(MonteCarlo)方法,主要变化时局部搜索算法的第二步为:

蒙特卡洛算法:

step2当满足停止运算准则时,停止运算;否则,从N(xbest)中随机选一点xnow;若f(xnow)<=f(xbest),则xbest:=xnow;否则,根据f(xnow)-f(xbest)以一定的概率接受xnow(xbest:=xnow);返回step2.

   蒙特卡罗算法是以一定的概率接受一个较坏的状态,如以均匀的概率

                                       p=1/|N(xbest)|

从N(xbest)中选任意一点,以概率

                                p=min{1,exp{-[f(xnow)-f(xbest)]/t}}

接受xnow。模拟退火算法就是采用这样的搜索方法。这样可能遍历所有的状态。不同于蒙特卡罗随机搜索算法的思想,禁忌搜索则是用确定性的方法跳出局部最优解。

   

    禁忌搜索是一种人工智能算法,是局部搜索算法的扩展。它的一个重要思想是标记已得到的局部最优解,并在进一步的迭代中避开这些局部最优解。禁忌对象是禁忌算法中的一个基本的因素。

   禁忌搜索算法是局部搜索算法的变形。应该注意到禁忌搜索算法计算中的关键点:禁忌对象、长度和候选集成为算法的主要特征。环绕这些特征需要考虑下列因素。

(1)是否有其他形式的候选集?

(2)禁忌的长度如何确定?如果在算法中记忆下搜索到的当前最优解,极端的两种情况是:一是将所有的对换个数作为禁忌长度,此时等价于将候选集中的所有的对换遍历;另外则取为1,这等价于局部搜索算法。

(3)是否有评价值的其他替代形式?有时计算目标值的工作量较大,或无法接受计算目标值所花费的时间,于是需要其他的方法。

(4)被禁的对换能否再一次解禁?有这样的直观现象,当搜索到一个局部最优解后,它邻域中的其他状态都被禁,我们是否解禁一些状态以便跳出局部最优?解禁的功能就是为了获得更大的搜索范围,以免陷入局部最优。

(5)如何利用更多的信息?在禁忌搜索算法中,还可记录其他一些信息。如一个被禁对象(交换)被禁的次数,评价值变化的大小等。

(6)终止原则,即一个算法停止的条件,怎样给出?

   综合上面的讨论,禁忌算法的特征由禁忌对象和长度、候选集和评价函数、停止规则和一些计算信息组成。

禁忌搜索算法:

step1 选定一个初始解xnow及给以禁忌表H等于空集;

step2若满足停止规则,停止计算;否则,在xnow的邻域N(H,xnow)中选出满足禁忌要求的候选集Can_N(xnow);在Can_N(xnow)中选一个评价值最佳的解xnext,xnow:=xnest;更新历史记录H,重复step2.

   禁忌算法的step2中,xnow的邻域N(H,xnow)中满足禁忌要求的元素包含两类:一类是那些没有被禁忌的元素,另一类是可以被解除禁忌的元素。

   比较局部搜索算法、蒙特卡罗算法和禁忌搜索算法,它们的主要区别是第二步对接受点选择的原则不同。在禁忌搜索算法中,若可行区域相对Can_N(xnow)是连通的,且H的记录充分大,则一定可以达到全局最优解。但若使得H的记录充分大,也就是遍历所有的状态,这不是我们希望的。我们的期望是用更少的花费得到我们期望的解。

   禁忌表中的两个主要指标是禁忌对象和禁忌长度。顾名思义,禁忌对象指的是禁忌表中被禁的那些变化元素。因此首先需要了解状态是怎样变化的。我们将状态的变化分为解的简单变化、解向量分量的变化和目标值变化三种情况。在这三种变化的基础上,讨论禁忌对象。

   1、解的简单变化

   这种变化最为简单。x,y属于D,D为优化问题的定义域,x变化为y,从一个解变化到另一个解。这种变化在局部搜索算法中经常采用,它将问题的解看成变化最基本因素。

   2、向量分量的变化

   这种变化考虑的更为精细,以解向量的每一个分量为变化的最基本因素。用数学表达式来描述向量分量的最基本变化为(x1,...,xi-1,xi,xi+1,...,xn)变化成(x1,...,xi-1,y,xi+1,...,xn),即只有第i个分量发生变化。向量的分量变化包含多个分量发生变化的情形。

   3、目标值变化

   在优化问题的求解过程中,我们非常关心目标值是否发生变化,是否接近最优目标值。这就产生一种观察状态变化的方式:观察目标值或评价值的变化。就犹如等位线的道理一样,把处在同一等位线的解视为相同,这种变化是考察H(a)={x属于D|f(x)=a},其中,f(x)为目标函数。它的表面是两个目标值的变化,即从a变成b,但隐含着两个解集合的各种变化。

    以上三种状态变化的情形,第一种的变化比较单一,而第二种和第三种变化则隐含着多个解变化的可能。因此在选择禁忌对象时,可以根据实际问题采用适当的变化。所谓禁忌就是禁止重复前面达到局部最优的状态。由于计算过程中解的状态在不断地变化,因此我们对造成状态的变化的对象进行禁忌。实际应用中,应根据具体问题采用一种方法。解的简单变化比解的分量变化和目标值变化的受禁忌范围要小,这可能造成计算时间的增加。但它也给予了较大的搜索范围。解分量的变化和目标值变化的禁忌范围要大,这减少了计算的时间,可能引发的问题是禁忌范围太大以致陷在局部最优点。

   由此可以得知,禁忌搜索算法中的技术很强。因为NP-hard问题不可能奢望计算得到最优解,在算法的构造和计算过程中,一方面要求尽量少的占用机器内存,这就要求禁忌长度、候选集合尽量少。正好相反,禁忌长度过短造成搜索的循环,候选集合过小造成过早地陷入局部最优。

 

   禁忌长度是被禁对象不允许选取的迭代次数。一般是给被禁对象x一个数(禁忌长度)t,要求对象x在t步迭代内被禁,在禁忌表中采用tabu(x)=t记忆,每迭代一步,该项指标做运算tabu(x)=t-1,直到tabu(x)=0时解禁。于是,我们可将所有元素分成两类,被禁元素和自由元素。有关禁忌长度t的选取,可以归纳为下面几种情况:

(1)t为常数,如t=10,t=n的开方,其中n为邻居的个数。这种规则容易在算法中实现。

(2)t属于[tmin,tmax]。此时t是可以变化的数,它的变化是依据被禁对象的目标值和邻域的结构。此时tmin,tmax是确定的。确定tmin,tmax的常用方法是根据问题的规模T,限定变化区间,也可以用邻域中邻居的个数n确定变化区间。当给定了变化区间,确定t的大小主要依据实际问题、实验和设计者的经验。当函数值下降较大时,可能谷较深,欲跳出局部最优,希望被禁的长度较大。

(3)tmin,tmax的动态选取。有的情况下,用tmin,tmax的变化能表达到更好的解。

   禁忌长度的选取同实际问题、实验和设计者的经验有紧密的联系,同时它决定了计算的复杂性。过短会造成循环的出现。如f(1)=1,f(2)=3.5,f(3)=2.5,f(4)=2,f(5)=3,f(6)=6,,极端情况禁忌长度是1,邻域为相距不超过1的整数点,一旦陷入局部最优点x=4,则出现循环而无法跳出局部最优。过长又造成计算时间较长。

 

   候选集合由邻域中的邻居组成。常规的方法是从邻域中选择若干个目标值或评价最佳的邻居人选。有时认为计算量太大,则不在邻域的所有邻居中选择,而是在邻域中的一部分邻居中选择若干个目标值或评价值最佳的状态入选。也可以用随机选取的方法实现部分邻居的选取。

 

   评价函数是候选集合元素选取的一个评价公式,候选集合的元素通过评价函数值来选取。以目标函数作为评价函数是比较容易理解的。目标值是一个非常直观的指标,但有时为了方便或易于理解,会采用其他函数来取代目标函数。我们将评价函数分为基于目标函数和其他方法两类。

1、基于目标函数的评价函数

  这一类主要包含以目标函数的运算所得到的评价方法。如记评价函数为p(x),目标函数为f(x),则评价函数可以用目标函数

                                       p(x)=f(x);

目标函数值与xnow目标值的差值

                                    p(x)=f(x)-f(xnow),

其中xnow是上一次迭代计算的解;目标函数值与当前最优解xbest目标值的差值

                                     p(x)=f(x)-f(xbest),

其中xbest是目前计算中的最好解。

   基于目标函数的评价函数的形成主要通过对目标函数进行简单的运算,它的变形很多。

2、其他方法

   有时计算目标值比较复杂或耗时较多,解决这一问题的方法之一是采用替代的评价函数。替代的评价函数还应该反应原目标函数的一些特性,如原目标函数对应的最优点还应该是替代函数的最优点。构造替代函数的目标是减少计算的复杂性。具体问题的替代函数构造依问题而定。

 

   在禁忌搜索算法的迭代过程中,会出现候选集中的全部对象都被禁忌,或有一对象被禁,但若解禁则其目标值将有非常大的下降情况(TSP问题中)。在这样的情况下,为了达到全局最优,我们会让一些禁忌对象重新可选。这种方法称为特赦,相应的规则称为特赦规则。

   一下罗列三种常用的特赦规则,在下面的讨论中,认为评价值越小越好。

(1) 基于评价值的规则。在整个计算过程中,记忆已出现的最好解xbest。当候选集中出现一个解xnow,其评价值(可能是目标值)满足c(xbest)>c(xnow)时,虽说从xbest达到xnow的变化是被禁忌的,此时,解禁xnow使其自由。直观理解,我们得到一个更好的解。

(2) 基于最小错误的规则。当候选集中所有的对象都被禁忌时,而(1)的规则又无法是程序继续下去。为了得到更好的解,从候选集的所有元素中选一个评价值最小的状态解禁。

(3)基于影响力的规则。有些对象的变化对目标值的影响很大,而有的变化对目标值的变化较小,我们应该关注影响大的变化。从这个角度理解,如果一个影响大的变化成为被禁对象,我们应该使其自由,这样才能得到问题的一个更好的解。需要注意的是,我们不能理解为:对象的变化对目标影响大就一定使得目标(或是评价值)变小,它只是一个影响力指标。这一规则应结合禁忌长度和评价函数值使用。如在候选集中目标值都不及当前的最好解,而一个禁忌对象的影响指标很高且很快将被解禁时,我们可以通过解禁这个状态以期望得到更好的解。

 

   在计算的过程中,记忆一些信息对解决问题是有利的。如一个最好的目标值出现的频率很高,这使我们有理由推测:现有参数的算法可能无法再得到更好的解,因为重复的次数过高,使我们认为可能出现了多次循环。根据解决问题的需要,我们可以记忆解集合、有序被禁对象组、目标值集合等的出现频率。一般可以根据状态的变化将频率信息分为两类:静态和动态。

   静态的频率信息主要是某些变化,诸如解、对换或目标值在计算中出现的频率。求解它们的频率相对比较简单。如可以记录它们在计算中出现的次数,出现的次数与总的跌代数的比率,从一个状态出发再回到该状态的迭代次数等。这些信息有助于我们了解一些解、对换或目标值的重要性,是否出现循环和循环的次数。在禁忌搜索中,为了更充分的利用信息,一定要记忆目前最优解。

   动态的频率信息主要是从一个解、对换或目标值到另一个解、对换或目标值的变化趋势,如记忆一个解序列的变化,或即一个解序列变化的若干个点等。由于记录比较复杂,因此它提供的信息量也较大。在计算动态频率时,通常采用的方法为:

(1)一个序列的长度,即序列中元素个数。在记录若干个关键点的序列中,按这些关键点的序列长度的变化进行计算;

(2)从序列中的一个元素出发,再回到该序列该元素的迭代次数;

(3)一个序列的平均目标(平均)值,从序列中一个元素到另一个元素目标(平均)值的变化情况;

(4)该序列出现的频率。

    频率信息有助于进一步加强禁忌搜索的效率。我们可以根据频率信息动态控制禁忌的长度。当一个元素或一个序列重复出现,我们可以增加禁忌长度以避开循环。当一个序列的目标(评价)值变化较小时,有必要增加该序列每一个对象的禁忌长度,反之,减少每一个对象的禁忌长度。一个最佳的目标值出现的频率很高,有理由终止计算而将这一值认为是最优值。

 

    无论如何,禁忌搜索算法是一个启发式算法。我们不可能让禁忌长度充分大,只希望在可接受的时间里给出一个满意的解。于是很多直观、易于操作的原则包含在终止规则中。下面给出常用的终止规则:

(1)确定步数终止。给定一个充分大的数N,总的迭代次数不超过N步。即使算法中包含其他的终止原则,算法的总迭代次数有保证。这种原则的优点是易于操作和可控计算时间,但无法保证解的效果。在采用这个规则时,应记录当前最优解。

(2)频率控制原则。当某一个解、目标值或元素序列的频率超过一个给定的标准时,如果算法不做改进,只会造成频率的增加,此时的循环对解的改进已无作用,因此,终止计算。这一规则认为:如果不改进算法,解不会再改进。

(3)目标值变化控制原则。在禁忌搜索算法中,提倡记忆当前最优解。如果在一个给定的步数内,目标值没有改变,同(2)相同的观点,如果算法没有其他改进,解不会改进。此时,停止运算。

(4)目标值偏离程度原则。对一些问题可以简单地计算出它们的下界(目标为极小),目标计算得到的解与最优值很接近,终止计算。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值