📄 psoqiaoshikkd.m
字号:
clear;clc;
popsize=20;num=5;
bujian=zeros(popsize,num+3); %第num+3列放系统可靠度,系统费用,适应值
newbujian=zeros(popsize,num+3);
vol=zeros(popsize,num);
c1=1.4962;c2=1.4962;
maxgen=100;k=1;
for i=1:popsize,
for j=1:num,
bujian(i,j)=rand;newbujian(i,j)=rand;
end
newbujian(i,:)=PSOjisuankekaodunewmodify(newbujian(i,:));
end
bestbujian=newbujian(1,:);
%%%%%%%%%%%%开始主循环%%%%%%%%%%%%
while(k<=maxgen)
for i=1:popsize,
bujian(i,:)=PSOjisuankekaodunewmodify(bujian(i,:));
end
%计算个体极值与全局极值
for i=1:popsize,
if bujian(i,num+3)>newbujian(i,num+3) newbujian(i,:)=bujian(i,:); end
if newbujian(i,num+3)>bestbujian(num+3) bestbujian=newbujian(i,:); end
end
track(k,1)=k;
track(k,2)=bestbujian(num+2);
track(k,3)=min(bujian(:,num+1));
track(k,4)=max(bujian(:,num+1));
track(k,5)=mean(bujian(:,num+1));
%更新位置与速度
quanzhong=0.9-0.5*k/maxgen;
for i=1:popsize,
for j=1:num,
vol(i,j)=quanzhong*vol(i,j)+c1*rand*(newbujian(i,j)-bujian(i,j))+c2*rand*(bestbujian(j)-bujian(i,j)); %更新速度
bujian(i,j)=bujian(i,j)+vol(i,j); %更新位置
if(bujian(i,j)<0) bujian(i,j)=0; end
if(bujian(i,j)>1) bujian(i,j)=1; end
end
end
k=k+1;
end
%%%%%%%%%%%%结束主循环%%%%%%%%%%%%
bestbujian,
% plot(track(:,1),track(:,2),'b-+',track(:,1),track(:,3),'r-x',track(:,1),track(:,4),'m-*');
% t=max(track(:,2));
% plot(track(:,1),track(:,2),'r');hold on
plot(track(:,1),track(:,5));
% axis([1,maxgen,80,t+1]);
xlabel('Generation');ylabel('Fitness)');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -