資源簡介
針對解形式為二進制編碼形式的問題的粒子群優化算法matlab源碼
代碼片段和文件信息
function?[?Besfi?Besi?Bfi?DIVS?]?=?BPSO(?SizeGc1c2wdeviceprice?)
% 基本粒子群優化算法(Particle?Swarm?Optimization)
%?輸入參數
%???c1????????????????學習因子1
%???c2????????????????學習因子2
%???w?????????????????慣性權重
%???G?????????????????最大迭代次數
%???Size??????????????初始化群體個體數目
%?輸出參數
%???輸出參數
%???Besfi????????優化后最優個體適應度
%???pg???????????最優個體
%???Bfi??????????每次迭代中最優個體的適應度,1*n向量
%???DIVS?????????種群多樣性
%創建一個進度條以監視優化進度
%?hWaitbar=waitbar(0‘開始優化計算...‘‘Name‘[num2str(Size)?‘-‘?num2str(G)?‘-‘?num2str(c1)?‘-‘?num2str(c2)?‘-‘?num2str(w)]);
%?set(hWaitbar‘Windowstyle‘‘modal‘);??%窗口鎖定最前
%?btnCancel?=?findall(hWaitbar‘style‘‘pushbutton‘);?%查找“取消“按鈕
%?set(btnCancel‘string‘‘取消‘‘fontsize‘10);?????%設置“取消“按鈕顯示字符
%優化對象參數提取
[concodedevicenumcodesizes]?=?Getcontrolcode(?device?);???%提取未優化時的運行編碼
%?D:搜索空間維數(未知數個數)
D=size(concode2);
%搜索范圍和個體移動速度限制
Maxx=ones(1D);
Minx=zeros(1D);
Maxv=ones(1D);
Minv=zeros(1D);
%?Maxv=(Maxx-Minx)/4;
%?Minv=-Maxv;
%------初始化種群的個體?(可以在這里限定位置和速度的范圍)------------
for?i=1:Size
????for?j=1:D
%?????????x(ij)=rand*(Maxx(j)-Minx(j)+Minx(j));??%隨機初始化位置
????????v(ij)=rand*(Maxv(j)-Minv(j))+Minv(j);??%隨機初始化速度
????????x(ij)=round(v(ij));
????end
end
%------先計算各個粒子的適應度,并初始化Pi和Pg----------------------
for?i=1:Size
????ps(i)=fun(deviceround(x(i:))devicenumcodesizesprice);
????y(i:)=x(i:);
end
pg=round(x(1:));?????????????%Pg為全局最優
Besfi=ps(1);
for?i=2:Size
????if?ps(i) ????????pg=round(x(i:));
????????Besfi=ps(i);
????end
end
%------進入主要循環,按照公式依次迭代,直到滿足精度要求------------
for?k=1:G
????time(k)=k;
???%?bf(t)=fitness(pgp);
??%計算多樣性
?S=max(Maxx-Minx)/2;
?for?xj=1:1:D
????avgxj(xj)=mean(x(:xj));
?end
?DIVS(k)=0;
?for?xi=1:1:Size
?????tmpd=0;
?????for?xj=1:1:D
?????????tmpd=tmpd+(x(xixj)-avgxj(xj))^2;
?????end
?????DIVS(k)=DI
- 上一篇:copula程序及算法.zip
- 下一篇:基于matlab的人臉識別算法(PCA
評論
共有 條評論