github: 智慧型演算法的課件和參考資料以及實驗**
進化策略和遺傳演算法統稱為進化演算法,二者的思想很類似,但步驟和應用方向有所差別。
我們舉個二元函式最大值優化問題,分別用這兩種演算法簡單搜尋最優值:
用matlab實現:
es:
f2.m
es.mfunction 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);
可以看到結果接近最優值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 是近二十年來資訊科學 人工智慧與電腦科學的一大研究領域,由此所派生的求解優化問題的仿生類演算法 遺傳演算法 演化策略 進化程式 由於其鮮明的生物背景 新穎的設計原理 獨特的分析方法和成功的應用實踐,正日益形成全域性搜...