1-變異方式的選擇
? 在進(jìn)化算法中,多項式的變異方式,變異算子的作用與進(jìn)化代數(shù)是沒有關(guān)系的,所以當(dāng)算法演化到一定代數(shù)的時候,算法會缺乏局部搜索能力。為了將變異算子的作用與代數(shù)關(guān)聯(lián)起來,使得算法可以在前期變異的范圍會較大,隨著演化代數(shù)的增加,變異范圍越來越小,增加算法的微調(diào)能力。Z.Michalewicz提出了非均勻變異。
2-非均勻變異方式介紹
設(shè)
x
=
(
x
1
,
x
2
,
.
.
.
x
n
)
為待變異個體,變異產(chǎn)生一個新基因
y
,首先隨機(jī)生成一個整數(shù)
k
∈
[
1
,
n
]
然后對
x
的第
k
個基因
進(jìn)行變異。
\begin{aligned} &設(shè)x=(x_1,x_2,...x_n)為待變異個體,變異產(chǎn)生一個新基因y,首先隨機(jī)生成一個整數(shù)k\in[1,n]然后對x的 第k個基因\\&進(jìn)行變異。 \end{aligned} \\
?設(shè)x=(x1?,x2?,...xn?)為待變異個體,變異產(chǎn)生一個新基因y,首先隨機(jī)生成一個整數(shù)k∈[1,n]然后對x的第k個基因進(jìn)行變異。?
y
k
=
{
x
k
+
Δ
(
t
,
u
k
?
x
k
)
i
f
x
≤
0.5
x
k
?
Δ
(
t
,
u
k
?
x
k
)
e
l
s
e
y_k=\{ \begin{aligned} & x_k+\Delta(t,u_k-x_k)\quad if \quad x\leq 0.5 \\& x_k-\Delta(t,u_k-x_k)\quad else \end{aligned} \\
yk?={?xk?+Δ(t,uk??xk?)ifx≤0.5xk??Δ(t,uk??xk?)else?
則產(chǎn)生的新個體為
y
=
(
x
1
,
x
2
,
.
.
,
x
k
,
.
.
.
,
x
n
)
。
其中隨機(jī)數(shù)
r
∈
(
0
,
1
)
,
t
為當(dāng)前進(jìn)化代數(shù),函數(shù)
Δ
(
t
,
z
)
返回的是一個
[
0
,
z
]
的值,并且隨
t
的增加
,
函數(shù)
Δ
(
t
,
z
)
趨于
0
的概率增加。函數(shù)
Δ
(
t
,
z
)
的特性使算法在前期具有較大的搜索范圍,在后期可以進(jìn)行小范圍的調(diào)整。其中函數(shù)
Δ
(
t
,
z
)
表示為:
Δ
(
t
,
z
)
=
z
.
(
1
?
r
(
1
?
t
/
T
)
b
)
上式中
r
是一個
0
到
1
的隨機(jī)數(shù),
T
表示最大演化代數(shù),
b
是一個分均勻度的參數(shù),一般取值為
2
到
5
。
\begin{aligned}& 則產(chǎn)生的新個體為y=(x_1,x_2,..,x_k,...,x_n)。 \\& 其中隨機(jī)數(shù)r\in(0,1),t為當(dāng)前進(jìn)化代數(shù),函數(shù)\Delta (t,z)返回的是一個[0,z]的值,并且隨t的增加,函數(shù)\Delta (t,z)趨于0 \\& 的概率增加。函數(shù) \Delta (t,z)的特性使算法在前期具有較大的搜索范圍,在后期可以進(jìn)行小范圍的調(diào)整。其中函數(shù)\Delta (t,z)\\& 表示為: \end{aligned} \\ \Delta (t,z) = z.(1-r^(1-t/T)^b) \\ \begin{aligned}& 上式中r是一個0到1的隨機(jī)數(shù),T表示最大演化代數(shù),b是一個分均勻度的參數(shù),一般取值為2到5。 \quad \quad \quad \quad \quad \quad \quad \quad \end{aligned}
?則產(chǎn)生的新個體為y=(x1?,x2?,..,xk?,...,xn?)。其中隨機(jī)數(shù)r∈(0,1),t為當(dāng)前進(jìn)化代數(shù),函數(shù)Δ(t,z)返回的是一個[0,z]的值,并且隨t的增加,函數(shù)Δ(t,z)趨于0的概率增加。函數(shù)Δ(t,z)的特性使算法在前期具有較大的搜索范圍,在后期可以進(jìn)行小范圍的調(diào)整。其中函數(shù)Δ(t,z)表示為:?Δ(t,z)=z.(1?r(1?t/T)b)?上式中r是一個0到1的隨機(jī)數(shù),T表示最大演化代數(shù),b是一個分均勻度的參數(shù),一般取值為2到5。?
3-MATLAB代碼實現(xiàn)
function child_pop = MyGA_mutate(parent_pop,dimension,bounds,t,T,x)
% t當(dāng)前進(jìn)進(jìn)化次數(shù),T最大迭代次數(shù),x,問題編號
%GA算法
parent_pop = sortrows(parent_pop,[2+dimension+1,-(2+dimension+2)]);
parent_pop = parent_pop(:,1:dimension);
[popsize,~] = size(parent_pop);
%定義交叉變異的概率
mutation = 0.6;
%變異參數(shù)。b影響變異的范圍。
b = 3;
child = [];
% 每個變異個體只做隨機(jī)的單點變異
for i = 1:popsize
%判斷個體是否進(jìn)行遺傳操作
m_r = rand(1);
if m_r < mutation
k = randperm(dimension,1); % 取一個整數(shù),確定變異點
rk = rand(1);
child1 = parent_pop(i,:);
if rk >= 0.5 % 變異計算
z = bounds(k,2) - parent_pop(i,k);
xk = parent_pop(i,k) + z*(1-rand^((1-t/T)^b));
child1(1,k) = xk;
else
z = parent_pop(i,k) - bounds(k,1);
xk = parent_pop(i,k) - z*(1-rand^((1-t/T)^b));
child1(1,k) = xk;
end
child = [child;child1];
end
end
child_eva = calculation(child,x);
child_pop = [child,child_eva];
4-對比
只對比變異方式的不同,其余策略保持一致。
初始化:隨機(jī)初始化
父代選擇:錦標(biāo)賽選擇方式
交叉方式:多項式交叉
4.1-ZDT函數(shù)比較
非均勻變異 | 多項式變異 |
---|---|
ZDT1 ![]() |
ZDT1![]() |
ZDT2 ![]() |
ZDT2![]() |
ZDT3 ![]() |
ZDT3![]() |
ZDT4 ![]() |
ZDT4![]() |
ZDT6 ![]() |
ZDT6 ![]() |
4.2-分析
從4.1的對比可以看出,采用非均勻變異和多項式變異的最大區(qū)別在ZDT4上,采用非均勻變異在ZDT4函數(shù)的求解中,是可以求得最佳前言的,而多項式變異在500代的時候依然差很遠(yuǎn)。而其他函數(shù)比較中,兩者相差不遠(yuǎn),甚至有些是多項式變異反而更優(yōu)一點。
從非均勻變異的實現(xiàn)中,可以知道,越到后面,變異的范圍就越小。所以最大迭代次數(shù)對變異有很大的影響,而多項式變異并不會受到這個方面的影響。
5-總結(jié)
算法步驟中實現(xiàn)策略的不同,效果也不同。一個策略的改變可能在某些方面上更優(yōu),但不一定在所有方面上都會更好。在針對不同問題的時候,對部分策略的改變也許就會得到更好的結(jié)果。
思考:文章來源:http://www.zghlxwxcb.cn/news/detail-678985.html
在【NSGA-II的算法介紹】中,多項式變異在處理超出邊界的方案,是否合適呢?能否改為超出邊界的時候,在范圍空間中隨機(jī)呢?這樣做效果是否會更好呢?同樣多項式交叉中的處理方式也是如此,改變之后的效果如何呢?多項式的交叉和變異也可以通過指數(shù)的變化控制變化范圍,這個指數(shù)怎么???是動態(tài)變化好還是固定好?文章來源地址http://www.zghlxwxcb.cn/news/detail-678985.html
到了這里,關(guān)于NSGA-II改進(jìn)之非均勻變異的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!