2 两种改进的模拟退火算法
模拟退火算法(Simulatedannealing algorithm)是一种通用的概率算法,其思想源于固体退火过程:当固体物质温度很高时,固体内部粒子运动杂乱无序;而当温度逐渐降低时粒子又渐渐趋于有序运动。模拟退火算法往往用来求解优化问题的最小值问题,算法过程中会不断地对变量的当前赋值进行扰动,以产生新的赋值。如果新的赋值使得目标函数值变小,则接受新的赋值为当前赋值。反之,则以概率接受新的赋值,其中T是当前温度,为新赋值目标函数值,为当前赋值目标函数值,重复上述过程直到退火完毕或者目标函数值满足优化要求。
对于RB模型,设是一组完全赋值,把目标函数定义为不可满足约束的数目,即
(1)
其中
(2)
若存在X使得,则由RB模型生成的随机实例是可满足的,X是一个解;反之,则不满足,X不是解。
经典的模拟退火算法在求解RB模型随机实例时效率很低,考虑到RB模型随机实例的特点以及模拟退火算法本身的局限性,我们认为是由以下三个原因导致其效率低下:
(1)在求解过程中并没有针对RB模型的特点来采取一些比较能明显减少目标函数值的扰动策略;
(2)模拟退火算法在求解过程中没有有效利用已找到的最优赋值;
(3)模拟退火算法在RB模型问题求解上对初始赋值具有一定的依赖性。
对于第一个问题,本文改进了模拟退火算法的扰动策略,即随机挑选一个当前赋值不能满足的约束,再随机挑选一个在此约束中出现的变量,从相容赋值集合中挑选一组赋值作为此约束中出现的变量的赋值。对于第二个问题,结合模拟退火算法的特点,我们把退火思想引入到对当前赋值的扰动操作中。具体来说,在模拟退火算法搜索解的前期,即温度很高时,需要算法能在大范围的赋值空间中寻找优良赋值,因此采取无目的性的随机扰动策略;而在算法执行后期,即温度越来越低时,需要有针对性地寻找优良赋值,因此直接将目前找到的最佳赋值作为当前赋值,再利用上面扰动策略进行扰动。对于第三个问题,本文采用遗传算法对多组初始随机赋值进行优化,然后将遗传算法结束后返回的最佳赋值作为模拟退火算法的初始赋值。
本文针对这三个问题,在模拟退火算法的基础上提出了两种改进算法。一种是把策略性扰动引入模拟退火算法中,我们称之为RSA算法;另一种是在RSA算法的基础上利用遗传算法对初始赋值进行优化,我们称之为GSA算法。RSA算法是针对问题一和问题二而提出的改进算法。GSA算法又更进一步针对问题三做出了改进。
对,RB模型都是NP-完全的,故以下算法在由二元RB模型()生成的随机实例上执行。
2.1 RSA算法
总的来说,RSA算法分为三步。首先,随机生成一组初始赋值,再对这组赋值进行随机或者策略性扰动以产生新的赋值。随着温度的逐渐降低我们选择策略性扰动的概率会不断增大,这是为了避免经典模拟退火算法中由于随机扰动的盲目性而降低求解效率。其次,根据目标函数值以及当前温度来判断是否接受这组新赋值。最后,不断重复上述扰动与接受的过程,直到目标函数值满足优化条件,或者达到最大的重复次数为止。
RSA算法步骤:
输入:二元RB模型的一个随机实例,初始温度,终止温度,在同一温度下最大迭代次数。
输出:找到的最优赋值及对应的最少不可满足约束的数目。
Step 1:令当前温度,随机生成一组赋值,计算目标函数值,令最优赋值,最少不满足约束数目;
Step 2:while to do Step 3~Step 8;
Step 3:for to L do Step 4~Step 7;
Step 4:if () {return最优赋值,及最少不可满足约束的个数}
else{to do Step 5};
Step 5:随机取一个介于0到1的实数;
if (){随机选出中的变量重新随机赋值,从而得到新赋值}
else{令,随机选出的一个不可满足约束,从相容赋值集合中随机选取一组赋值,赋予这组约束中的变量,从而得到赋值};
Step 6:计算
if(){令}
else {随机取一个介于0到1的实数;
if(){令}
else{to do Step 7}};
Step 7:if(){,,to do Step 3}
else{to do Step 3};
Step 8:令to do Step 2;
Step 9:return,。
关于温度冷却表,本文采用的是的方式,其中是常数,是前一时刻温度,为后一时刻温度。
RSA算法是在经典模拟退火算法的基础上针对上文第一个问题与第二个问题做出的改进。算法开始时温度很高,目标函数值很大,对变量赋值进行扰动后接受新赋值的概率较大。此时需要在大范围的赋值空间中对变量赋值进行随机扰动。随着温度的降低,就需要对变量赋值进行有针对性地策略性扰动。具体来说,就是在Step 5中,以做为不同扰动方案的选择概率,当温度值很大时,以较大的概率选择随机扰动。但随着温度T的降低,就需要大概率地选择策略性扰动以便能使算法找到解或者最优解。
RSA算法采用了上述与温度相关的策略性扰动后,一方面它避免了算法陷入局部最优解,另一方面也避免了由于随机扰动的盲目性而产生的无意义新赋值,从而提高了求解RB模型的效率。另外,在算法运行的后期,RSA算法会更加有针对性地对当前最优赋值进行扰动,进一步加快算法收敛,得到更有效的新赋值。
RSA算法是针对问题一与问题二做出了改进,但是初始赋值是随机生成的,这会直接影响RSA算法找到解的效率。因此我们考虑首先利用融入退火思想的遗传算法来得到解或者近似最优解作为初始赋值,再借助模拟退火算法来得到解或者最优解,于是就提出了下面的GSA算法。