進化策略與進化規劃演算法 ES與EP

2021-08-29 22:43:47 字數 3851 閱讀 3956

github: 智慧型演算法的課件和參考資料以及實驗**

進化策略和遺傳演算法統稱為進化演算法,二者的思想很類似,但步驟和應用方向有所差別。

我們舉個二元函式最大值優化問題,分別用這兩種演算法簡單搜尋最優值:

用matlab實現:

es:

f2.m

function y = f2(x1, x2)

% 二元函式求最大值的優化問題 x1∈[-3.0, 12.1], x2∈[4.1, 5.8]

y = 21.5 + x1 * sin(4 *pi * x1) + x2 * sin(20 * pi * x2);

es.m

clear

clcn=10; % 初始種群規模

x1=15.1*rand(1,n)-3;

x2=1.7*rand(1,n)+4.1;

x=[x1;x2]; % 生成初始種群矩陣,一列表示乙個可行解

sigma=rand(2,n);

t=50; % 迭代次數

maxf=0; % 記錄最大適應度

for t=1:t

lamda=1;

while lamda<=7*n

pos=1+fix(rand(1,2)*(n-1)); % [1,9]範圍的二元行向量 此處範圍錯誤,應為[1, 10]

% pa1、pa2分別是x中的乙個隨機解,可能相同

pa1=x(:,pos(1));

pa2=x(:,pos(2));

% 隨機選出x1

if rand()<0.5

o(1)=pa1(1);

else

o(1)=pa2(1);

end% 隨機選出x2

if rand()<0.5

o(2)=pa1(2);

else

o(2)=pa2(2);

end% 隨機從sigma矩陣中選出兩列,相加求平均,sigmal是乙個二元列向量,範圍(0,1)

sigma1=0.5*(sigma(:,pos(1))+sigma(:,pos(2)));

% o是已知解x1, x2的隨機組合,也是一組解[x1,x2]

y=o+sigma1.*randn(2,1);

% y這個解可能會超出範圍 x1,x2

if y(1)>=-3 && y(1)<=12.1 && y(2)>=4.1 && y(2)<=5.8

% 儲存選擇出來的個體,個體數目lamda+1

offspring(:,lamda)=y; % 儲存選擇出來的子代

lamda=lamda+1;

endend

u=[offspring]; %70個解組成的矩陣 這裡是u,λ策略

% μ+λ選擇策略: 在原有的μ個個體和新生成的λ個體中選擇

% u,λ選擇策略: 從新生成的λ個體中選擇 ,建議λ/μ = 7

% μ/λ是壓力比,其越**擇壓力越大。

% u + λ策略改為u=[offspring, x]

% size(u, 2) 為u向量的列數,也就是子代數目

for i=1:size(u,2)

temp = u(:,i);

x1 = temp(1);

x2 = temp(2);

eva(i)=f2(x1, x2);

end% m_eval是排序的適應度值,從小到大,i是對應的適應值原來的下標

[m_eval,i]=sort(eva);

i1=i(end-n+1:end); % end-(end-n+1)+1從7*n子代中選出最好的n個的適應度下標行向量

x=u(:,i1); % 得到7*n中最好的n個個體

% 比較最大適應度與maxf記錄值,更新maxf,同時記錄x1,x2值

if m_eval(end)>maxf

maxf=m_eval(end);

opmx=u(:,end);

endmax_f(t)=maxf;

mean_f(t)=mean(eva(i1)); % 計算每代平均適應度

endplot(1:t,max_f,'b',1:t,mean_f,'g')

opmx

maxf

% result: x1 = 10.4391, x2 = 5.5460, maxf = 38.1892

可以看到結果接近最優值

%f1 此處顯示有關此函式的摘要

% 此處顯示詳細說明

x1 = x(1);

x2 = x(2);

y = 21.5 + x1 * sin(4 * pi * x1) + x2 * sin(20 * pi * x2);

endep.m

clear

clcn=20; % 初始種群數量

x1=15.1*rand(1,n)-3;

x2=1.7*rand(1,n)+4.1;

x=[x1;x2];

sigma=[3;3];

gen=1; % 代數

maxf=0; % 記錄種群中最大適應度

while gen<100

i=0;

while i=-3 && x0(1)<=12.1 && x0(2)>=4.1 && x0(2)<=5.8

y(:,i+1)=x0; % y儲存下一代

i=i+1;

endend

temp=[x,y]; % 父母代和子代2n數量

w=zeros(1,2*n);

% p是隨機選擇的,優良個體進入下一代的機會會大些,但是也有較差的個體會進入,建議p=0.9μ

% 隨機型p競爭法

% (1) 從μ個父代和μ個子代中,依此選出乙個個體i

% (2) 從2μ個個體中,隨機選擇p個個體

% (3) 比較個體i與p個個體適應度的優劣,記錄個體i的適應度優於或者等於p個體的次數

% 作為i的得分wi

% (4) 依次評價完2μ個個體

% (5) 對w進行排序,選出前μ個個體作為下一代

for j=1:2*n

p=0;

while pf1(temp(:,k))

w(j)=w(j)+1; % 如果大於就累加1

endend

endend

[w1,in]=sort(w); % 將適應度累加值從小到大排序

i1=in(n+1:2*n); % 選出最大適應度累加值的個體索引

x=temp(:,i1); % 選出來的n個比較好的個體

gen=gen+1; % 迭代次數+1

maxw=f1(x)

% 更新maxf,及最優解

if maxw>maxf

maxf=maxw;

opmx=temp(:,in(end)); % 選出此代適應度最優解

endmean_f(gen)=mean(w(i1)); % 此代平均適應度累加值

進化規劃演算法

ep 是 l.j.fogel 於20世紀60年代在人工智慧研究中提出的一種有限狀態機進化模型,在此模型中機器的狀態基於分布的規律進行編譯。d.b.fogel 在90年代拓廣了 ep 思想,使它可處理實數空間的優化問題,並在變異運算中引入了正態分佈變異運算元,這樣 ep 就變成了一種優化搜尋工具,並在...

遺傳演算法與進化演算法

1858年7月1日c.r.達爾文與a.r.華萊士在倫敦林奈學會上宣讀了演化論的 至此進化理論深入人心,為廣大吃瓜群眾開闢了乙個思想的新的天地。而我們的機器學習大師們向來喜歡從生物學家那裡找靈感,神經網路的靈感據說來自於人體的神經元,而根據演化論的思想,我們的大師們提出了遺傳演算法和進化演算法。其實我...

CI 模擬進化與遺傳演算法

模擬進化計算 simulated evolutionary computation 是近二十年來資訊科學 人工智慧與電腦科學的一大研究領域,由此所派生的求解優化問題的仿生類演算法 遺傳演算法 演化策略 進化程式 由於其鮮明的生物背景 新穎的設計原理 獨特的分析方法和成功的應用實踐,正日益形成全域性搜...