变遗传参数配置原因

​   在遗传算法的初期阶段,种群需要更多的多样性来探索解空间,较大的交叉概率有助于促进新基因组合,同样较大的变异概率有助于引入更多新基因,增加种群的多样性,这有利于避免过早收敛到局部最优解。随着进化的进行,算法逐渐接近最优解,这时应适当减小交叉概率和变异概率,以保护已获得的优良基因型不被破坏,同时允许细微的搜索来改进解的质量。因此总的来说,交叉概率函数和变异概率函数应设计为单调减函数,个体适应值越大,当前的交叉概率和变异概率应越小。

自适应遗传算法策略:

线性自适应遗传算法

Srinvas提出

交叉概率变化:
Pc={k1(fmax−fcmax)fmax−favg,fcmax≥favgk2,fcmax<favg P_{c}=\begin{cases}\frac{k_{1} (f_{max} - f_{c}^{max} ) }{f_{max}-f_{avg}} ,f_{c}^{max}\ge f_{avg} \\ k_{2} ,f_{c}^{max}< f_{avg} \end{cases} Pc={fmaxfavgk1(fmaxfcmax),fcmaxfavgk2,fcmax<favg
其中fmaxf_{max}fmax表示种群中适应值的最大值,favgf_{avg}favg表示种群适应值的平均值,fcmaxf_{c}^{max}fcmax表示参与交叉父代中适应值较大一方的适应值,k1,k2k_{1},k_{2}k1,k2为常数。

变异概率变化:
Pm={k3(fmax−fm)fmax−favg,fm≥favgk4,fm<favg P_{m}=\begin{cases}\frac{k_{3} (f_{max} - f_{m} ) }{f_{max}-f_{avg}} ,f_{m}\ge f_{avg} \\ k_{4} ,f_{m}< f_{avg} \end{cases} Pm={fmaxfavgk3(fmaxfm),fmfavgk4,fm<favg
其中fmf_{m}fm表示变异个体的适应值,k3,k4k_{3},k_{4}k3,k4为常数。

改进的线性自适应遗传算法

交叉概率变化:
Pc={Pcmax−(Pcmax−Pcmin)(fcmax−favg)fmax−favg,fcmax≥favgPcmax,fcmax<favg P_{c}=\begin{cases}P_{c}^{max} - \frac{(P_{c}^{max} - P_{c}^{min})(f_{c}^{max}-f_{avg}) }{f_{max}-f_{avg}},f_{c}^{max}\ge f_{avg} \\ P_{c}^{max} ,f_{c}^{max}< f_{avg} \end{cases} Pc={Pcmaxfmaxfavg(PcmaxPcmin)(fcmaxfavg),fcmaxfavgPcmax,fcmax<favg
其中Pcmax,PcminP_{c}^{max},P_{c}^{min}Pcmax,Pcmin分别表示交叉概率的上界、下界,fmaxf_{max}fmax表示种群中适应值的最大值,favgf_{avg}favg表示种群适应值的平均值,fcmaxf_{c}^{max}fcmax表示参与交叉父代中适应值较大一方的适应值,取值范围为[Pcmin,Pcmax][P_{c}^{min},P_{c}^{max}][Pcmin,Pcmax].

变异概率变化:
Pm={Pmmax−(Pmmax−Pmmin)(fm−favg)fmax−favg,fm≥favgPmmax,fm<favg P_{m}=\begin{cases}P_{m}^{max} - \frac{(P_{m}^{max} - P_{m}^{min})(f_{m}-f_{avg}) }{f_{max}-f_{avg}},f_{m}\ge f_{avg} \\ P_{m}^{max} ,f_{m}< f_{avg} \end{cases} Pm={Pmmaxfmaxfavg(PmmaxPmmin)(fmfavg),fmfavgPmmax,fm<favg
其中Pmmax,PmminP_{m}^{max},P_{m}^{min}Pmmax,Pmmin分别表示变异概率的上界、下界,fmaxf_{max}fmax表示种群中适应值的最大值,favgf_{avg}favg表示种群适应值的平均值,fmf_{m}fm表示变异个体的适应值。当fm≥favgf_{m}\ge f_{avg}fmfavg时,函数为单调递减函数,取值范围为[Pmmin,Pmmax][P_{m}^{min},P_{m}^{max}][Pmmin,Pmmax].

余弦改进型的自适应遗传算法

交叉概率变化:
Pc={Pcmax+Pcmin2+Pcmax−Pcmin2cos⁡(fcmax−favgfmax−favgπ),fcmax≥favgPcmax,fcmax<favg P_{c}=\begin{cases}\frac{P_{c}^{max} + P_{c}^{min}}{2} + \frac{P_{c}^{max} - P_{c}^{min}}{2}\cos(\frac{f_{c}^{max}-f_{avg}}{f_{max}-f_{avg}} \pi ),f_{c}^{max}\ge f_{avg} \\ P_{c}^{max} ,f_{c}^{max}< f_{avg} \end{cases} Pc={2Pcmax+Pcmin+2PcmaxPcmincos(fmaxfavgfcmaxfavgπ),fcmaxfavgPcmax,fcmax<favg
其中Pcmax,PcminP_{c}^{max},P_{c}^{min}Pcmax,Pcmin分别表示交叉概率的上界、下界,fmaxf_{max}fmax表示种群中适应值的最大值,favgf_{avg}favg表示种群适应值的平均值,fcmaxf_{c}^{max}fcmax表示参与交叉父代中适应值较大一方的适应值。当fcmax≥favgf_{c}^{max}\ge f_{avg}fcmaxfavg时,可以函数单调递减函数,取值范围为[Pcmin,Pcmax][P_{c}^{min},P_{c}^{max}][Pcmin,Pcmax]

变异概率变化:
Pm={Pmmax+Pmmin2+Pmmax−Pmmin2cos⁡(fm−favgfmax−favgπ),fm≥favgPmmax,fm<favg P_{m}=\begin{cases}\frac{P_{m}^{max} + P_{m}^{min}}{2} + \frac{P_{m}^{max} - P_{m}^{min}}{2}\cos(\frac{f_{m}-f_{avg}}{f_{max}-f_{avg}} \pi ),f_{m}\ge f_{avg} \\ P_{m}^{max} ,f_{m}< f_{avg} \end{cases} Pm={2Pmmax+Pmmin+2PmmaxPmmincos(fmaxfavgfmfavgπ),fmfavgPmmax,fm<favg
其中Pmmax,PmminP_{m}^{max},P_{m}^{min}Pmmax,Pmmin分别表示变异概率的上界、下界,fmaxf_{max}fmax表示种群适应值中的最大值,favgf_{avg}favg表示种群适应值中的平均值,fmf_{m}fm表示变异个体的适应值,取值范围为[Pmmin,Pmmax][P_{m}^{min},P_{m}^{max}][Pmmin,Pmmax].。

改进的自适应遗传算法

  论文《自适应遗传算法交叉变异算子的改进》提出的方法(IAGA,邝航宇),原论文经过验证发现其取值范围存在问题,函数本身不适用,可能是打印错误。

神经元激活函数常选用sigmoid函数,该函数在线性和非线性行为之间显现出较好的平衡。
sig(x)=11+e−x sig(x)=\frac{1}{1+e^{-x} } sig(x)=1+ex1
x≥9.903438x\ge 9.903438x9.903438时,sig(x)sig(x)sig(x)的值接近于1,当x<−9.903438x<- 9.903438x<9.903438时,sig(x)sig(x)sig(x)的值接近于0.

交叉概率变化:
Pc={Pcmax−Pcmin1+exp(−c0+2c0(fcmax−favgfmax−favg))+Pcmin,fcmax≥favgPcmax,fcmax<favg P_{c}=\begin{cases}\frac{P_{c}^{max} - P_{c}^{min}}{1+exp(-c_{0}+\frac{2c_{0}(f_{c}^{max}-f_{avg}}{f_{max}-f_{avg}})) }+P_{c}^{min} ,f_{c}^{max}\ge f_{avg} \\ P_{c}^{max} ,f_{c}^{max}< f_{avg} \end{cases} Pc= 1+exp(c0+fmaxfavg2c0(fcmaxfavg))PcmaxPcmin+Pcmin,fcmaxfavgPcmax,fcmax<favg
其中Pcmax,PcminP_{c}^{max},P_{c}^{min}Pcmax,Pcmin分别表示交叉概率的上界、下界,fmaxf_{max}fmax表示种群中适应值的最大值,favgf_{avg}favg表示种群适应值的平均值,fcmaxf_{c}^{max}fcmax表示参与交叉父代中适应值较大一方的适应值,c0c_{0}c0取值为9.903438。

变异概率变化:
Pm={Pmmax−Pmmin1+exp(−c0+2c0(fm−favg)fmax−favg)+Pcmin,fm≥favgPmmax,fm<favg P_{m}=\begin{cases}\frac{P_{m}^{max} - P_{m}^{min}}{1+exp(-c_{0}+\frac{2c_{0}(f_{m}-f_{avg})}{f_{max}-f_{avg}}) }+P_{c}^{min} ,f_{m}\ge f_{avg} \\ P_{m}^{max} ,f_{m}< f_{avg} \end{cases} Pm= 1+exp(c0+fmaxfavg2c0(fmfavg))PmmaxPmmin+Pcmin,fmfavgPmmax,fm<favg
其中Pmmax,PmminP_{m}^{max},P_{m}^{min}Pmmax,Pmmin分别表示变异概率的上界、下界,fmaxf_{max}fmax表示种群中适应值的最大值,favgf_{avg}favg表示种群适应值的平均值,fmf_{m}fm表示变异个体的适应值。

​ 在matlab上进行绘图测试,设置Pcmax,PcminP_{c}^{max},P_{c}^{min}Pcmax,Pcmin分别为0.8和0.5,设置fmax,favgf_{max},f_{avg}fmax,favg分别为200,150。

clear;clc;
% 测试自适应交叉概率曲线
pcmax = 0.8;
pcmin = 0.5;

c0 = 9.903438;

% 平均适应值
favg = 150;
%最大适应值
fmax = 200;

x = favg : fmax;
myFun =@(x)(pcmax - pcmin)./(1+exp(-c0 + 2*c0*(x-favg)/(fmax-favg))) + pcmin;

y = myFun(x);

plot(x,y);
xlabel('适应值');
ylabel('交叉概率');

曲线结果如下:
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐