⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gapso.m

📁 遗传粒子群的最新改进算法
💻 M
字号:
%Particle Swarm Optimization---mypath Function
function res=GAPSOf(X1,Y1,X2,Y2)
%Initialization==================================================
POPU_SIZE=20; %设置群体规模
DIMENSION=8; %设置粒子的维数
GENERATION_MAX=8; %设置最大迭代次数
WEIGHT_MAX=0.9; %设置权重最大值
WEIGHT_MIN=0.4; %设置权重最小值
gbest=rand; %全局最优值寄存器
PBEST=rand(1,POPU_SIZE); %历史最优值寄存器
GBEST=rand(DIMENSION,1); %全局最优位置寄存单元
m=rand(1,GENERATION_MAX); %各代最优值寄存单元,绘图时使用
V_MAX=1; %设置最大速度
T=rand(DIMENSION,POPU_SIZE)-0.5; %设置粒子的初始位置
PBEST_T=T; %设置粒子历史最优位置寄存单元
VT=V_MAX+2*(-V_MAX)*rand(DIMENSION,POPU_SIZE); %设置粒子的初始
速度
%Calculate-first-generation-all-particles-fitness==========================
for j=1:POPU_SIZE
PBEST(j)=mypath(T(:,j)');
end
[order,index]=sort(PBEST);
gbest=order(1);
GBEST=T(:,index(1));
%Main-Program*******************************************************
for iter_number=1:GENERATION_MAX;
tt1=(WEIGHT_MAX-WEIGHT_MIN);
tt2=(GENERATION_MAX-iter_number);
WEIGHT=tt1*tt2/GENERATION_MAX+WEIGHT_MIN;
%备选种群
for a=1:POPU_SIZE%-9
temp=mypath(T(:,a)');
if temp<PBEST(a)
PBEST_T(:,a)=T(:,a);
PBEST(a)=temp;
if temp<gbest
GBEST=T(:,a);
gbest=temp;
end
end
for b=1:DIMENSION
tempt1=WEIGHT*VT(b,a);
tempt2=1.5*rand*(PBEST_T(b,a)-T(b,a));
tempt3=2.6*rand*(GBEST(b,1)-T(b,a));
VT(b,a)=0.729*(tempt1+tempt2+tempt3);
if VT(b,a)>V_MAX
VT(b,a)=V_MAX;
end
if VT(b,a)<-V_MAX
VT(b,a)=-V_MAX;
end
T(b,a)=T(b,a)+VT(b,a);
%%%边界约束条件?
if T(b,a)>0.5
T(b,a)=0.5-0.001*rand;
end
if T(b,a)<-0.5
T(b,a)=-0.5+0.001*rand;
end
end
end
%>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
%1 找出优秀粒子的基因
mypathhc=mypath(T(:,1)');
for a=2:POPU_SIZE
mypathhc=[mypathhc mypath(T(:,a)')];
end
[mypathhc indexhc]=sort(mypathhc);
%粒子在这里交叉繁殖,(是否变异?)
for a=1:10
for b=1:DIMENSION
randhc=rand;
temp11=randhc*T(b,indexhc(a));
temp12=(1-randhc)*T(b,indexhc(a+1));
Thc(b,a)=temp11+temp12+rand*0.01;
end
end
for a=POPU_SIZE-9:POPU_SIZE
for b=1:DIMENSION
T(b,a)=Thc(b,POPU_SIZE-a+1);
end
end
%*******************************************************************
for a=POPU_SIZE-9:POPU_SIZE
temp=mypath(T(:,a)');
if temp<PBEST(a)
PBEST_T(:,a)=T(:,a);
PBEST(a)=temp;
if temp<gbest
GBEST=T(:,a);
gbest=temp;
end
end
for b=1:DIMENSION
%%%边界约束条件?
if T(b,a)>0.5
T(b,a)=0.5;
end
if T(b,a)<-0.5
T(b,a)=-0.5;
end
end
end
%===========================================================
m(iter_number)=gbest;
end
%*******************************************************************
res=gbest;
GBEST
plot([1:GENERATION_MAX],log10(m),'r')
title('mypath function with PSO')
legend('PSO')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -