遗传算法与模拟退火算法比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、遗传算法与模拟退火算法比较
分析模拟退火算法的基本原理可以看出,模拟退火算法是通过温度的不断下降渐进产生出最优解的过程,是一个列马尔科夫链序列,在一定温度下不断重复Metropolis过程,目标函数值满足Boltzmann概率分布。
在温度下降足够慢的条件下,Boltzmann分布收敛于全局最小状态的均匀分布,从而保证模拟退火算法以概率为1收敛到全局最优。
另外,不难看出,模拟退火算法还存在计算结构简单、通用性好以及鲁棒性强等优点。
但是,模拟退火算法存在如下缺陷:
1. 尽管温度参数下降缓慢时理论上可以保证算法以概率为1地收敛到最优值,但是需要的时间过长加之误差积累与时间长度的限制,难以保证计算结果为最优;
2.如果降温过程加快,很可能得不到全局最优解,因此,温度的控制是一个需要解决的问题;
3.在每一种温度下什么时候系统达到平衡状态,即需要多少次Metropolis过程不易把握,从而影响模拟退火算法的最终结果。
与模拟退火算法相比较,遗传算法具有如下典型特征:
这两种算法的相同点是都采用进化控制优化的过程。
主要不同点是模拟退火是采用单个个体进行进化,遗传算法是采用种群进行进化。
模拟退火一般新解优于当前解才接受新解,并且还需要通过温度参数进行选择,并通过变异操作产生新个体。
而遗传算法新解是通过选择操作进行选择个体,并通过交叉和变异产生新个体。
具体说来,遗传算法具有如下特点:
(1)与自然界相似,遗传算法对求解问题的本身一无所知,对搜索空间没有任何要求(如函数可导、光滑性、连通性等),只以决策编码变量作为运算对象并对算法所产生的染色体进行
评价,可用于求解无数值概念或很难有数值概念的优化问题,应用范围广泛;
(2)搜索过程不直接作用到变量上,直接对参数集进行编码操作,操作对象可以是集合、序列、矩阵、树、图、链和表等;
(3)搜索过程是一组解迭代到另一组解,采用同时处理群体中多个个体的方法,因此,算法具有并行特性;
(4)遗传算法利用概率转移规则,可以在一个具有不确定性的空间寻优,与一般的随机性优化方法相比,它不是从一点出发按照一条固定路线寻优,而是在整个可行解空间同时搜索,可以有效避免陷入局部极值点,具有全局最优特性;
(5)遗传算法有很强的容错能力.由于遗传算法初始解是一个种群,通过选择、交叉、变异等操作能够迅速排除与最优解相差较大的劣解.
与模拟退火算法相比,遗传算法存在局部搜索能力差、容易陷入过早收敛等缺陷,因此,人们将模拟退火算法与遗传算法相结合得到的混合算法可以避免两种算法的缺陷,有利于丰富优化过程的搜索行为,增强全局和局部意义下的搜索能力和效率。
二、混合遗传算法举例
遗传算法的不足:如求解精度不尽如意、难以控制、局部搜索能力较差,随之而来的问题就是算法的稳定性较差、算法的收敛速度较慢.这些不足都妨碍了它的进一步推广.因此,如何提高算法的精度、稳定性以及算法摆脱局部最优的能力,成了当前遗传算法研究的难点与热点.
另一方面,在一些实际应用中,存在许多含有针对该问题的有效知识型启发式算法,这些算法可以克服遗传算法局部搜索能力弱的缺陷,通常具有局部搜索能力强、计算效率较高的优点(例如,神经网络算法、模拟退火算法、共轭梯度法等),因此,在遗传算法的搜索过程中融入这些专门领域知识或高效局部算法的思想,构成一种混合遗传算法(hybrid genetic algorithm, 简记为Hybrid GA),从而达到提高遗传算法效率和算法质量的一种行之有效的手段.
混合遗传算法的主要特点体现在下面两个方面:
(1)在遗传算法的执行步骤中增加局部搜索过程.基于种群X t中各个个体的表现形态,进行局部搜索,从而接受为新一代()
个体的是()
X t中个体所对应在当前环境下的局部最优解.
(2)在遗传算法的设计(如编、解码过程、交叉与变异操作)中融入与问题相关的启发式信息.
下面通过两个个例子说明混合遗传算法的应用.首先考虑添加局部搜索的混合遗传算法.
例1(函数优化问题的混合遗传算法)考虑下列多元函数优化问题
min ()X E
f X ∈ 其中1212(,,,),,T n n i X x x x E E E E E ==⨯⨯⨯为某个定义区间,()f X 为多元函数.
求解例1 的混合遗传算法与传统遗传算法相比较,其特点是在每一代找到最优个体后并不立即进行下一代操作,而是以当代最优个体为中心的一个固定区域(如半径为ε的圆)进行局部搜索.以便找到更好的个体.
算法描述( ε混合遗传算法)
第一步:初始化种群;
第二步:计算种群中个体适应值,选择最优个体;
第三步:以种群中适应值最大的个体为中心,在ε为半径的圆内进行最优寻优(可以采用神经网络或梯度类算法),进入循环过程,直到满足循环停止条件;
第四步:将当代最优个体用局部寻优得到的最优值代替; 第五步:种群内部进行选择、交叉、变异;
第六步:转入第二步继续算法,直到满足进化条件.
利用上面描述的ε混合遗传算法,下面具几个具体案例. 例2 分别用下面的两个测试函数验证ε混合遗传算法的性能.
案例1 性能测试函数F2
22211()[100()(1)]
[ 5.12,5.12]
n i i i i i f X x x x x +==⨯-+-∈-∑ F2 函数是一个单峰函数,极小值点为[1,1,,1]T ,最小值为0,极小值点的位置既不位于定义域 的中心,也不位于定义域边界,是一种有一定难度的优化问题.将标准遗传算法和ε混合遗传算法分别运行100次,其中混合遗传策略编码长度为10,局部搜索半径ε取值为1,标准遗传算法的编码长度为80,两种算法的种群规模和最大进化代数都为200,它们每次运行的最优值的折线图分别如图1与图2所示:
图1 ε混合遗传算法搜索效果图
图2 标准遗传算法搜索效果图
从上面的图1与图2可以看出,混合遗传算法的最好的绝对误差可达到1310-,其中95%的求解精度达到1110-以上,只有5次的求解精度比1110-低,最差的结果为210-,而标准遗传算法的最好结果为510-,而且只出现三次,其一般的求解精度为310-,因此,求解精度以及算法稳定性等方面,混合遗传算法比标准遗传算法有显著提高.
案例2 对大海捞针Nih 问题(Nedle-in-a-Haystack )进行对比实验,其中,大海捞针函数的表达式如下:
222122(,)[()],,[ 5.12,5.12]()a f x y x y x y b x y -=++∈-++ 求函数的最小值.为简单计,取 3.0,0.05a b ==进行计算,1min (0,0)3600
f =
,四个局部极值点为( 5.12, 5.12)±±,局部极小值为12748.48. 分别对两种算法实验100次,最大进化代数均取为300,种群规模设定为400,标准遗传算法的编码长度为120,混合遗传算法的编码长度为20,试验结果如下表所示:
表1 ε混合遗传算法与标准遗传算法求解效果对照表
从表1的结果可以看出,ε混合遗传算法比标准遗传算法性能要好.对于大海捞针问题,ε混合遗传算法有60次准确找到了最优值13600,而标准遗传算法没有一次找到最优值,而从平均值的角度来看,标准遗传算法明显陷入局部最优的陷阱.
综上所述,将局部搜索策略引入遗传算法可以大大提升算法的性能,性能的提升主要体现在两个方面:一是算法的精度大大得到提高;另一方面,算法的稳定性得到极大增强,因此,算法的可靠性随之得以提高.
下面讨论的例子则通过在遗传算子的设计中溶入与问题相关的启发式信息从而建立一种混合遗传算法。
例3(背包问题(ZOKP ) 的混合遗传算法)
求解ZOKP 的贪婪算法(Greedy algorithm )常采用下面的启发式策略:首先将物品按照价值密度,1,2,,i i i c v i n w ==从大到小
进行排列,依次将物品装入背包,直到背包容量达到最大为止.采取该贪婪策略可以求得ZOKP 的近似较好解,但是有可能得不到最优解.采用标准遗传算法求解,当问题规模不大时,可以求出近似最优或最优解,但当问题规模变得较大时,由于标准遗传算法在较大的搜索空间中搜索能力较差,从而很难得到该质量的解,因此,为了提高标准遗传算法的搜索能力,将求解背包问题的贪婪算法溶入到遗传算法中,得到一种混合遗传算法,其思想描述为:
(1)编码格式: 采用0-1字符串进行编码,一个字符串代表一种编码策略,例如,个体12{0,1}n n X a a a =∈与装包策略的关系为:0,1i a or =分别对应于将第i 件物品不装入(或者装入)袋中;
(2)混合繁殖算子:对于选取的选择算子S,交叉算子C 和
变异算子M,引进背包问题已有的贪婪算法以改进繁殖算子,具体做法是:首先引进贪婪变换:{0,1}{0,1}n n G →,对于任意的12n X x x x =,12()n G X y y y =,其中,1,2,,i y i n =由下列贪婪算法得到:
贪婪算法:
第一步(排序):对所有1i x =的物品,物品按照价值密度,1,2,,i i i c v i n w ==从大到小进行排列,形成队列()l i ;
第二步(赋值):1. :1k =;
2.计算()1k
k l j j W w ==∑;
3.如果k W W ≤,则将第()l i 号物品装入袋中,即()1l j y =,赋值1k k ←+并回到2. 否则转下一步
4. ()0,1,,l j y j k n ==+
该贪婪变换把任意一个个体变换成可行解,此时,我们把贪婪变换与所选定的交叉与变异算子分别作复合运算,从而形成新的混合交叉与混合遗传算子:
,h h C G C M G M == (1)
(3)适应度度量:121()(,,,)n n i i
i J X f x x x c x ===∑
按照上面描述的编码格式、混合的交叉与变异算子以及适应度度量,即可建立一种求解背包问题的混合遗传算法.例如,考虑由50件物品组成的背包问题,其中物品价值{}i c 、容积{}i w 和背包容量W 分别为
{}{220,208,198,192,180,180,165,162,160,158,155,130,125,122,120,118,115,110,105,101,100,10098,96,95,90,88,82,80,77,75,73,72,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5,3,1}{}{80,82,85,70,72,70,66,i i c w ==50,55,25,5055,40,48,50,32,22,60,30,32,40,3835,32,25,28,30,22,50,30,45,30,6050,20,65,20,25,30,10,20,25,15,1010,10,4,4,2,1}1000
W = 分别采用贪婪算法、标准的遗传算法(含比例选择、单点交叉和点变异)和上述构造混合遗传算法进行求解,其中运行参数取为
第一组:{,,,}{80,500,0.6,0.1}
c m
M T P P=;
第二组:{,,,}{50,500,0.6,0.5}
c m
M T P P=
其中,M T分别代表种群规模和终止进化代数,各算法独立运行1000次,然后对结果进行统计,其统计结果如表2所示,而最好结果如表3 所示.
表2 求背包问题的贪婪算法、标准遗传算法与混合遗传算法的
比较(100次实验)
算法及参数结果超过贪
婪算法的解
的次数
结果超过贪婪
算法解时的进
化代数
最好求解结果
(总价值/总
重量)
标准遗传算法{80,500,0.6,0.1}17132
3044/9
99
混合遗传算法{80,500,0.6,0.1}99045
3094/9
99
标准遗传算法{50,500,0.6,0.5}206238
3077/9
99
混合遗传算法{50,500,0.6,0.5}10035
3103/9
99
贪婪算法3036/999表3标准遗传算法、混合遗传算法与贪婪算法求解50个物品背包问题的最好解比较
算法个体X 求解结果(总价值/
总重量)
标准遗传算法110110111110100110111
1111 101000000101001100000
1000
3077/999
混合遗传算法110101011110110110110
1111 111010000101001100000
1000
3103/999
贪婪算法111111110110100110110
0111 101000000101001000000
3036/999
0001
从表2与表3不难看出,由于将求解背包问题的贪婪算法溶入遗传算法得涉及中,无论是解的质量还是在求解速度方面,混合遗传算法比标准遗传算法和贪婪算法都有显著改进.。