日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ES算法

發布時間:2023/11/28 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ES算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ES(Evolutionary Strategy)

在20世紀60年代初,柏林工業大學的I. Rechenberg和H.-P. Schwefel等在進行風洞實驗時,由于在設計中描述物體形狀的參數難以用傳統的方法進行優化,從而他們利用生物變異的思想來隨機地改變參數值并獲得了較好的結果。隨后,他們便對這種方法進行了深入的研究和發展,形成了演化計算的另一個分支—演化策略。

關鍵理念:“演化的演化”

以個體的變異算子為主,重組算子為輔

認為變異強度是演化的關鍵,稱為演化策略參數

將演化策略參數納入演化本身,不斷優化參數

演化策略的基本框架

個體表示:
(x1,x2,…,xn,σ1,σ2,…,σn),前面的x為一個個體n維,而后面的σ為此個體的各個維度變異強度。一個個體的強度可以相同

接下來介紹ES算法的主要部分——變異和生存選擇:

ES算法的變異對于使用這個算法的人來說也是非常友好的,因為它也和EP一樣直接給出了公式:

當μ個父代個體的都產生了子代,那么就會存在μ+μ個個體,如何從這μ+μ個個體中選出下一代呢?這個就是生存選擇索要解決的事情,我們可以采用(μ+μ)隨機q競爭選擇,也可以簡單排序擇優選擇。

當然ES相較于EP還多了一個重組,這里的重組對于變量部分是全局重組,要想重組出一個子代,那就要隨機選取2倍維度數量的父代然后從每兩個父代中誕生子代的每一維,至于怎么誕生,可以從兩個父代的第隨機個維隨機選擇一個。 策略部分的重組則是采用這兩個父代的第隨機個維的均值。當然重組這個模塊對于演化策略似乎并不是太重要。

有了這些東西我們就可以編出相應的代碼:

function [answer,best]=ESpro(fun)
global popnum ubound lbound vs dim cost times
best=inf;
answer=zeros(times,cost/popnum);
for i=1:times[X,D]=initpop();for j=1:(cost/popnum) [newX,newD]=rcb(X,D);[newX,newD]=variant(newX,newD);[luck,fa]=selecsur(X,newX);x=[X;newX];X=x(luck,:);d=[D;newD];D=d(luck);last=keepbest(fa);answer(i,j)=last;if last<bestbest=last;endend
endfunction [X,D]=initpop()
X=unifrnd(lbound,ubound,popnum,dim);
D=unifrnd(0,ubound,popnum,1);
endfunction [newX,newD]=rcb(X,D)
newX=zeros(popnum,dim);
for i1=1:popnumfor j1=1:dimselect=randperm(popnum,2); %隨機選出兩個父代個體的下標choose=X(select,:); %提取被選中的父代個體newX(i1,j1)=choose(unidrnd(2),j1); %重被選中的父代個體中隨機選擇一個end
end
newD=zeros(popnum,1);
for i2=1:popnumselect=randperm(length(D),2);choose=D(select);newD(i2)=mean(choose);
end
endfunction [newX,newD]=variant(X,D)
newX=zeros(popnum,dim);
newD=zeros(popnum,1);
rho0=randn();
rho=randn(popnum,1);
for i3=1:popnum newD(i3)=D(i3)*exp(sqrt(2*popnum)*rho0+sqrt(2*sqrt(popnum))*rho(i3));if newD(i3)<vsnewD(i3)=vs;endfor j3=1:dimnewX(i3,j3)=X(i3,j3)+newD(i3)*randn();end
end
endfunction f=fit(X)
f=zeros(length(X),1);
for i4=1:length(X)f(i4)=fun(X(i4,:));
end
endfunction [luck,fa]=selecsur(X,newX)
X=[X;newX];
f=fit(X);
[~,b]=sort(f);
luck=b(1:length(b)/2);
fa=f(luck);
end
end
function best=keepbest(X)
best=min(X);
end

測試branin函數:

global popnum ubound lbound vs dim cost times
popnum=50; %種群數量
ubound=15; %個體維度大小上限
lbound=-5; %個體維度大小下限
vs=0.3;  %變異強度臨界值
dim=2;   %個體維度大小
cost=20000;  %計算代價
times=30;   %重復計算次數
fun=@(x)(x(2)-(5.1/(4*pi^2))*x(1)^2+5*x(1)/pi-6)^2+10*(1-1/(8*pi))*cos(x(1))+10;
[answer,best]=ESpro(fun) %best為ES找到的最優值,answer為每次計算得到的最好結果變化矩陣
plt(answer);
function plt(answer)  %繪制L曲線圖
hisbest=reshape(answer',1,size(answer,1)*size(answer,2));
hisbest(1)=max(hisbest);
for k=2:length(hisbest)if hisbest(k)>hisbest(k-1)hisbest(k)=hisbest(k-1);end
end
for t=2:length(hisbest)hisbest(t)=(hisbest(t)+hisbest(t-1)*(t-1))/t;
end
plot(log(hisbest));
hold on
end

結果如下:

總結

以上是生活随笔為你收集整理的ES算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。