变遗传参数配置原因
在遗传算法的初期阶段,种群需要更多的多样性来探索解空间,较大的交叉概率有助于促进新基因组合,同样较大的变异概率有助于引入更多新基因,增加种群的多样性,这有利于避免过早收敛到局部最优解。随着进化的进行,算法逐渐接近最优解,这时应适当减小交叉概率和变异概率,以保护已获得的优良基因型不被破坏,同时允许细微的搜索来改进解的质量。因此总的来说,交叉概率函数和变异概率函数应设计为单调减函数,个体适应值越大,当前的交叉概率和变异概率应越小。
自适应遗传算法策略:
线性自适应遗传算法
Srinvas提出
交叉概率变化:
P
c
=
{
k
1
(
f
m
a
x
−
f
c
m
a
x
)
f
m
a
x
−
f
a
v
g
,
f
c
m
a
x
≥
f
a
v
g
k
2
,
f
c
m
a
x
<
f
a
v
g
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={fmax−favgk1(fmax−fcmax),fcmax≥favgk2,fcmax<favg
其中
f
m
a
x
f_{max}
fmax表示种群中适应值的最大值,
f
a
v
g
f_{avg}
favg表示种群适应值的平均值,
f
c
m
a
x
f_{c}^{max}
fcmax表示参与交叉父代中适应值较大一方的适应值,
k
1
,
k
2
k_{1},k_{2}
k1,k2为常数。
变异概率变化:
P
m
=
{
k
3
(
f
m
a
x
−
f
m
)
f
m
a
x
−
f
a
v
g
,
f
m
≥
f
a
v
g
k
4
,
f
m
<
f
a
v
g
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={fmax−favgk3(fmax−fm),fm≥favgk4,fm<favg
其中
f
m
f_{m}
fm表示变异个体的适应值,
k
3
,
k
4
k_{3},k_{4}
k3,k4为常数。
改进的线性自适应遗传算法
交叉概率变化:
P
c
=
{
P
c
m
a
x
−
(
P
c
m
a
x
−
P
c
m
i
n
)
(
f
c
m
a
x
−
f
a
v
g
)
f
m
a
x
−
f
a
v
g
,
f
c
m
a
x
≥
f
a
v
g
P
c
m
a
x
,
f
c
m
a
x
<
f
a
v
g
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={Pcmax−fmax−favg(Pcmax−Pcmin)(fcmax−favg),fcmax≥favgPcmax,fcmax<favg
其中
P
c
m
a
x
,
P
c
m
i
n
P_{c}^{max},P_{c}^{min}
Pcmax,Pcmin分别表示交叉概率的上界、下界,
f
m
a
x
f_{max}
fmax表示种群中适应值的最大值,
f
a
v
g
f_{avg}
favg表示种群适应值的平均值,
f
c
m
a
x
f_{c}^{max}
fcmax表示参与交叉父代中适应值较大一方的适应值,取值范围为
[
P
c
m
i
n
,
P
c
m
a
x
]
[P_{c}^{min},P_{c}^{max}]
[Pcmin,Pcmax].
变异概率变化:
P
m
=
{
P
m
m
a
x
−
(
P
m
m
a
x
−
P
m
m
i
n
)
(
f
m
−
f
a
v
g
)
f
m
a
x
−
f
a
v
g
,
f
m
≥
f
a
v
g
P
m
m
a
x
,
f
m
<
f
a
v
g
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={Pmmax−fmax−favg(Pmmax−Pmmin)(fm−favg),fm≥favgPmmax,fm<favg
其中
P
m
m
a
x
,
P
m
m
i
n
P_{m}^{max},P_{m}^{min}
Pmmax,Pmmin分别表示变异概率的上界、下界,
f
m
a
x
f_{max}
fmax表示种群中适应值的最大值,
f
a
v
g
f_{avg}
favg表示种群适应值的平均值,
f
m
f_{m}
fm表示变异个体的适应值。当
f
m
≥
f
a
v
g
f_{m}\ge f_{avg}
fm≥favg时,函数为单调递减函数,取值范围为
[
P
m
m
i
n
,
P
m
m
a
x
]
[P_{m}^{min},P_{m}^{max}]
[Pmmin,Pmmax].
余弦改进型的自适应遗传算法
交叉概率变化:
P
c
=
{
P
c
m
a
x
+
P
c
m
i
n
2
+
P
c
m
a
x
−
P
c
m
i
n
2
cos
(
f
c
m
a
x
−
f
a
v
g
f
m
a
x
−
f
a
v
g
π
)
,
f
c
m
a
x
≥
f
a
v
g
P
c
m
a
x
,
f
c
m
a
x
<
f
a
v
g
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+2Pcmax−Pcmincos(fmax−favgfcmax−favgπ),fcmax≥favgPcmax,fcmax<favg
其中
P
c
m
a
x
,
P
c
m
i
n
P_{c}^{max},P_{c}^{min}
Pcmax,Pcmin分别表示交叉概率的上界、下界,
f
m
a
x
f_{max}
fmax表示种群中适应值的最大值,
f
a
v
g
f_{avg}
favg表示种群适应值的平均值,
f
c
m
a
x
f_{c}^{max}
fcmax表示参与交叉父代中适应值较大一方的适应值。当
f
c
m
a
x
≥
f
a
v
g
f_{c}^{max}\ge f_{avg}
fcmax≥favg时,可以函数单调递减函数,取值范围为
[
P
c
m
i
n
,
P
c
m
a
x
]
[P_{c}^{min},P_{c}^{max}]
[Pcmin,Pcmax]。
变异概率变化:
P
m
=
{
P
m
m
a
x
+
P
m
m
i
n
2
+
P
m
m
a
x
−
P
m
m
i
n
2
cos
(
f
m
−
f
a
v
g
f
m
a
x
−
f
a
v
g
π
)
,
f
m
≥
f
a
v
g
P
m
m
a
x
,
f
m
<
f
a
v
g
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+2Pmmax−Pmmincos(fmax−favgfm−favgπ),fm≥favgPmmax,fm<favg
其中
P
m
m
a
x
,
P
m
m
i
n
P_{m}^{max},P_{m}^{min}
Pmmax,Pmmin分别表示变异概率的上界、下界,
f
m
a
x
f_{max}
fmax表示种群适应值中的最大值,
f
a
v
g
f_{avg}
favg表示种群适应值中的平均值,
f
m
f_{m}
fm表示变异个体的适应值,取值范围为
[
P
m
m
i
n
,
P
m
m
a
x
]
[P_{m}^{min},P_{m}^{max}]
[Pmmin,Pmmax].。
改进的自适应遗传算法
论文《自适应遗传算法交叉变异算子的改进》提出的方法(IAGA,邝航宇),原论文经过验证发现其取值范围存在问题,函数本身不适用,可能是打印错误。
神经元激活函数常选用sigmoid函数,该函数在线性和非线性行为之间显现出较好的平衡。
s
i
g
(
x
)
=
1
1
+
e
−
x
sig(x)=\frac{1}{1+e^{-x} }
sig(x)=1+e−x1
当
x
≥
9.903438
x\ge 9.903438
x≥9.903438时,
s
i
g
(
x
)
sig(x)
sig(x)的值接近于1,当
x
<
−
9.903438
x<- 9.903438
x<−9.903438时,
s
i
g
(
x
)
sig(x)
sig(x)的值接近于0.
交叉概率变化:
P
c
=
{
P
c
m
a
x
−
P
c
m
i
n
1
+
e
x
p
(
−
c
0
+
2
c
0
(
f
c
m
a
x
−
f
a
v
g
f
m
a
x
−
f
a
v
g
)
)
+
P
c
m
i
n
,
f
c
m
a
x
≥
f
a
v
g
P
c
m
a
x
,
f
c
m
a
x
<
f
a
v
g
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+fmax−favg2c0(fcmax−favg))Pcmax−Pcmin+Pcmin,fcmax≥favgPcmax,fcmax<favg
其中
P
c
m
a
x
,
P
c
m
i
n
P_{c}^{max},P_{c}^{min}
Pcmax,Pcmin分别表示交叉概率的上界、下界,
f
m
a
x
f_{max}
fmax表示种群中适应值的最大值,
f
a
v
g
f_{avg}
favg表示种群适应值的平均值,
f
c
m
a
x
f_{c}^{max}
fcmax表示参与交叉父代中适应值较大一方的适应值,
c
0
c_{0}
c0取值为9.903438。
变异概率变化:
P
m
=
{
P
m
m
a
x
−
P
m
m
i
n
1
+
e
x
p
(
−
c
0
+
2
c
0
(
f
m
−
f
a
v
g
)
f
m
a
x
−
f
a
v
g
)
+
P
c
m
i
n
,
f
m
≥
f
a
v
g
P
m
m
a
x
,
f
m
<
f
a
v
g
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+fmax−favg2c0(fm−favg))Pmmax−Pmmin+Pcmin,fm≥favgPmmax,fm<favg
其中
P
m
m
a
x
,
P
m
m
i
n
P_{m}^{max},P_{m}^{min}
Pmmax,Pmmin分别表示变异概率的上界、下界,
f
m
a
x
f_{max}
fmax表示种群中适应值的最大值,
f
a
v
g
f_{avg}
favg表示种群适应值的平均值,
f
m
f_{m}
fm表示变异个体的适应值。
在matlab上进行绘图测试,设置 P c m a x , P c m i n P_{c}^{max},P_{c}^{min} Pcmax,Pcmin分别为0.8和0.5,设置 f m a x , f a v g f_{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('交叉概率');
曲线结果如下: