資源簡介
本代碼基于matlab開發(fā),是完全自主研發(fā)的粒子群算法來求解約束多目標(biāo)優(yōu)化萬能code,希望對學(xué)習(xí)的同學(xué)有幫助

代碼片段和文件信息
function?PSOfirst()
%%?清空環(huán)境
clear;
clc;
%%?參數(shù)設(shè)置
w=0.9;%權(quán)值?將影響PSO?的全局與局部搜優(yōu)能力,?值較大,全局搜優(yōu)能力強(qiáng),局部搜優(yōu)能力弱;反之,則局部搜優(yōu)能力增強(qiáng),而全局搜優(yōu)能力減弱。
c1=0.1;%加速度,影響收斂速度
c2=0.1;
dim=6;%6維,表示企業(yè)數(shù)量
swarmsize=100;%粒子群規(guī)模,表示有100個(gè)解的空間
maxiter=200;%最大循環(huán)次數(shù),影響時(shí)間
minfit=0.001;%最小適應(yīng)值
vmax=0.01;
vmin=-0.01;
ub=[0.20.20.20.20.20.2];%解向量的最大限制
lb=[0.010.010.010.010.010.01];%解向量的最小限制
%%?種群初始化
range=ones(swarmsize1)*(ub-lb);
swarm=rand(swarmsizedim).*range+ones(swarmsize1)*lb;%粒子群位置矩陣
Y1=[33.08;
???21.85;?
???6.19;?
???11.77;?
???9.96;?
???17.15;];?
Y=Y1./100;%將百分?jǐn)?shù)化為小數(shù)
[ymyn]=size(Y);
for?i=1:swarmsize??%%?YX的約束
????s=swarm(i:);
????ss=s‘;
????while?sum(Y.*ss)<0.1*sum(Y)
????????ss=rand(dim1).*((ub-lb)‘)+ones(dim1).*((lb)‘);
????end
????swarm(i:)=ss‘;
end
vstep=rand(swarmsizedim)*(vmax-vmin)+vmin;%粒子群速度矩陣
fswarm=zeros(swarmsize1);%預(yù)設(shè)空矩陣,存放適應(yīng)值
for?i=1:swarmsize
????X=swarm(i:);
????[SUMGG]=jn(X);
????fswarm(i:)=SUMG;
????%fswarm(i:)=feval(jnswarm(i:));%以粒子群位置的第i行為輸入,求函數(shù)值,對應(yīng)輸出給適應(yīng)值
end
%%?個(gè)體極值和群體極值
[bestfbestindex]=min(fswarm);%求得適應(yīng)值中的最小適應(yīng)值,和,其所在的序列
gbest=swarm;%暫時(shí)的個(gè)體最優(yōu)解為自己
fgbest=fswarm;%暫時(shí)的個(gè)體最優(yōu)適應(yīng)值
zbest=swarm(bestindex:);%所在序列的對應(yīng)的解矩陣序列,全局最佳解
fzbest=bestf;%全局最優(yōu)適應(yīng)值
%%?迭代尋優(yōu)
iter=0;
yfitness=zeros(1maxiter);%1行100列矩陣,存放100個(gè)最優(yōu)值的空間矩陣
x1=zeros(1maxiter);%存放x的空間
x2=zeros(1maxiter);
x3=zeros(1maxiter);
x4=zeros(1maxiter);
x5=zeros(1maxiter);
x6=zeros(1maxiter);
while((iterminfit))
????for?j=1:swarmsize
????????%?速度更新
????????vstep(j:)=w*vstep(j:)+c1*rand*(gbest(j:)-swarm(j:))+c2*rand*(zbest-swarm(j:));
????????if?vstep(j:)>vmax??
????????????vstep(j:)=vmax;%速度限制
????????end
????????if?vstep(j:) ????????????vstep(j:)=vmin;
????????end
????????%?位置更新
????????swarm(j:)=swarm(j:)+vstep(j:);
????????for?k=1:dim
????????????if?swarm(jk)>ub(k)
????????????????swarm(jk)=ub(k);%位置限制
????????????end
????????????if?swarm(jk)
????????????????swarm(jk)=lb(k);
????????????end
????????end
???????
????????%?適應(yīng)值????????
?????????X=swarm(j:);
?????????[SUMGG]=jn(X);
?????????fswarm(j:)=SUMG;
????????%?可在此處增加約束條件,若滿足約束條件,則進(jìn)行適應(yīng)值計(jì)算
????????
????????%
????????%?個(gè)體最優(yōu)更新
????????if?fswarm(j) ????????????gbest(j:)=swarm(j:);%個(gè)體最優(yōu)解更新
????????????fgbest(j)=fswarm(j);%個(gè)體最優(yōu)值更新
????????end
????????%?群體最優(yōu)更新
????????if?fswarm(j) ????????????zbest=swarm(j:);%群體最優(yōu)解更新
????????????fzbest=fswarm(j);%群體最優(yōu)值更新
????????end
????end
????iter=iter+1;
????yfitness(1iter)=fzbest;
????x1(1iter)=zbest(1);%將全局最優(yōu)解的第1個(gè)元素,依次存儲(chǔ),共有MAXITER個(gè)
????x2(1iter)=zbest(2);
????x3(1iter)=zbest(3);
????x4(1iter)=zbest(4);
????x5(1iter)=zbest(5);
????x6(1iter)=zbest(6);
end
fzbest
zbest
X=zbest;
[SUMGG]=jn(X);
GGbest=G;GGbest
%%?畫圖
figure(1)
plot(yfitness‘linewidth‘2)
title(‘最優(yōu)基尼系數(shù)優(yōu)化曲線‘‘fontsize‘14);
xlabel(‘迭代次數(shù)‘‘fontsize‘14);
ylabel(‘基尼系數(shù)‘‘fontsize‘14);
figure(2)
plot(x1‘b‘)
hold?on
pl
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????5099??2013-06-23?17:02??PSO_byself.m
?????目錄???????????0??2018-12-02?20:26??__MACOSX\
?????文件?????????212??2013-06-23?17:02??__MACOSX\._PSO_byself.m
評論
共有 條評論