資源簡介
有約束的基于適應度和連續世代策略的混沌自適應粒子群算法,利用混沌系統產生混沌粒子群,利用混合自適應策略調節每個粒子的慣性因子和種群規模,利用懲罰函數法去處理約束條件,融合多種改進方案,實現了收斂速度和收斂精度的良好均衡。
代碼片段和文件信息
function?[gbestxmfvMWn]=yueshu_APSO_FCG_norm(testNc1c2MwmaxwminxmaxxminymaxyminNmaxNmin)
%有約束的基于適應度和連續世代策略的自適應粒子群算法:調節w、N初始化為范圍內隨機
%test函數為增廣目標函數
%停止條件為:最大迭代次數和連續9次最優適應度沒有更新
%全局最優增廣適應度:gbest
%目標函數的最小值的自變量值:xm
%目標函數的最小值:fv
%最大迭代次數:M
%粒子數目動態軌跡:n
%test增廣適應度函數
%粒子數目初始值:N
%學習因子1:c1
%學習因子2:c2
%最大權重:wmax
%最小權重:wmin
%優化變量范圍:wmax、wmin、ymaxymin
format?long;
%%?在粒子范圍內隨機初始化
x1=10*rand(N1);
x2=10*rand(N1);
x=[x1x2];
v=rand(N2);
W=zeros(MN);%存放慣性因子,方便繪圖
n=zeros(M1);%存放種群規模
gbest=zeros(1M);%預定義全局最優適應度
%%?求解有約束的初始化粒子的歷史最優適應度和位置
for?i=1:N
????f(i)=test(x(i:)0xmaxxminymaxymin);%求解增廣適應度
????p(i:)=x(i:);%歷史最優
end
%比較適應度
pg=x(N:);?????%pg為全局最優
a=N;
for?i=1:(N-1)
????if?f(i) ????????pg=x(i:);
????????v1=v(i:);%存放歷史最優位置的速度
????????a=i;
????end
end
%%?粒子群算法更新
for?t=1:M?
????n(t)=N;
????for?j=1:N?
????????fv(j)=test(x(j:)txmaxxminymaxymin);??%計算增廣目標函數
????end??????????????
%%?自適應慣性因子???????????
????fvag=sum(fv)/N;?????????%適應度平均值
????fmin=min(fv);???????????%適應度最小值
????for?i=1:N
????????if?fv(i) ????????????w=wmin+(fv(i)-fmin)*(wmax-wmin)/(fvag-fmin);%減少w
????????else
????????????w=wmax;%適應度差,增強全局
????????end
????????W(ti)=w;%慣性因子
%%?更新位置和速度?????????????????
????????v(i:)=w*v(i:)+c1*rand*(p(i:)-x(i:))+c2*rand*(pg-x(i:));
????????x(i:)=x(i:)+v(i:);??
%%?更新有約束的歷史最優和全局最優????????
????????if?test(x(i:)txmaxxminymaxymin) ????????????f(i)=test(x(i:)txmaxxminymaxymin);%歷史最優適應度
????????????p(i:)=x(i:);%歷史最優位置
????????????a=i;
????????end
????????if?f(i) ????????????pg=p(i:);
????????????v1=v(i:);%全局最優位置的速度
????????end?????????
????end
????gbest(t)=test(pgtxmaxxminymaxymin);%全局最優適應度
%%?連續世代調整種群規模
????if?t>=4?????%更新4代及其以上時候使用連續世代策略(因為設定連續三代,所以從第四代開始統計
????????if?gbest(t)==gbest(t-1)&&gbest(t)
評論
共有 條評論