資源簡介
兩個函數進行多目標粒子群優化,可以修改適應值即兩個目標函數進行替換
代碼片段和文件信息
clc
clear?all
%**************************************************************%
%---決策空間的設置1---%
m=20;?????????????%population?size
D=33;?????????????%each?particle?position?dimension
xmin=0;????????????%search?space?upper?limit
xmax=2500;?????????%search?space?lower?limit
vmax=xmax-xmin;?????%maximum?of?velocity
%---決策空間設置1結束--%
%******種群位置與速度初始化*******%
%--薛師兄版本--%?????
for?i=1:m?????????????????????????????????????
for?j=1:D
????x(ji)=xmin+(xmax-xmin)*rand;?%?產生D*m維矩陣作為粒子的位置信息
????v(ji)=rand*vmax;
end
end
%--薛師兄版本?完畢--%
%******種群位置初始化結束********%
%---目標空間設置---%
maxFun=2;?????????%number?of?objective?function
%--目標空間設置結束--%
%--進化參數設置--%
maxIterations=40;??%maximum?of?iterations
wmax=0.9;??????????%maximum?of?inertia?factor?
wmin=0.4;??????????%minimum?of?inertia?factor
c1=2;??????????????%1.4962;?%learning?factor1
c2=2;??????????????%1.4962;?%learning?factor2
%--進化參數設置結束--%
%***************************************************************%
%*******計算初始種群的適應度值****%
disp(‘開始計算初始種群的適應度值....‘)
for?i=1:m
????i
????f(1i)=fitness1(x(:i)D);
????f(2i)=fitness2(x(:i)D);
end
disp(‘計算初始種群的適應度值完畢....‘)
%--計算初始種群的適應度值結束--%
%--將粒子的“位置”信息與“適應度f1,f2”信息結合,生成Stem1矩陣--%
%Stem1矩陣共有m行,D+3列;
%前D列存放m個粒子的位置信息,第D+1列和D+2列分別對應存放雙目標的適應度信息f1,f2,第D+3列存放對應粒子的擁擠距離信息
disp(‘生成Stem矩陣....‘)
for?i=1:m
????Stem1(i1:D)=x(:i);????????%存放位置信息
end
Stem1(:D+1)=f(1:);????????????%存放適應度信息f1
Stem1(:D+2)=f(2:);????????????%存放適應度信息f2
Stem1(:D+3)=0;?????????????????%存放粒子擁擠距離信息
pbest=Stem1;
for?i=1:m
????px(:i)=pbest(i1:D);???????%初始化粒子的歷史最優位置px,D*m矩陣
end
%-----外部歸檔集初始化初始化;外部歸檔集以Stem1的形式保存粒子信息(位置;適應度;擁擠距離信息)------%
disp(‘外部歸檔集初始化...‘)
archive=[];
for?i=1:m??%每次只考慮將一個粒子加到外部歸檔集
????if(isempty(archive))????????%第一個粒子直接存入archive
????????archive(1:)=Stem1(i:);?
????else????????????????????????%第二個粒子開始,通過和archive中的所有粒子進行比較,進而判斷是否將粒子存入archive
????????
????????%%--for循環作用:①判斷第i個粒子是否可加入檔案(“支配”或“非支配”所有archive中粒子)?②標記archive中被粒子i支配的粒子,準備刪除
????????for?k=1:size(archive1)?%?依次與archive中的所有粒子進行比較,
????????????????????????????????%注意:【支配】【被支配】【非支配】三種關系?。。?br/>????????????????????????????????%【if與else分支】若待加入的粒子i“支配”某個archive中粒子,則將i支配的所有粒子標記(準備刪除),但粒子i不一定被加入檔案
????????????????????????????????%若待加入的粒子i與archive中所有粒子均“無支配”(“非支配”)關系,無法判斷優劣,則insert-flag置1,?
????????????????????????????????%【elseif分支】若待加入粒子i被archive中某個粒子支配,即“被支配”,則inser-flag
????????????????????????????????%置0,不將第i個粒子加入檔案(即使它有可能支配archive其中的粒子)但是被i支配的archive中粒子已被標記!?
????????????if((Stem1(iD+1)<=archive(kD+1))&&(Stem1(iD+2)<=archive(kD+2))&&(~((Stem1(iD+2)==archive(kD+2))&&(Stem1(iD+1)==archive(kD+1)))))
????????????????%--i?dominate?k--%
????????????????archive(k1)=1000000;%mark?delete?k
????????????????insert_flag=1;
????????????elseif((Stem1(iD+1)>=archive(kD+1))&&(Stem1(iD+2)>=archive(kD+2))&&(~((Stem1(iD+2)==archive(kD+2))&&(Stem1(iD+1)==archive(kD+1)))))
????????????????????%--k?dominate?i--%
????????????????insert_flag=0
評論
共有 條評論