function out = PSO2(problem,params)
%% Problem Defenition
CostFunction =problem.CostFunction; %Cost Function
nVar=problem.nVar; % Number of Unknown(decision) Variables (dimension)
VarSize=[1 nVar]; %Matrix Size of Decision Variables
VarMin =problem.VarMin; % Lower Bound of Decision Variables
VarMax =problem.VarMax; % Upper Bound of Decision Variables
%% Parameters of PSO 参数
MaxIt=params.MaxIt; %Maximum Number of Iterations
nPop=params.nPop; %population Size (Swarm Size)
w=params.w; %Intertia Coefficient
wdamp=params.wdamp; %Damping Ratio of Inertia Weight
c1=params.c1;
c2=params.c2;
%The Flag for Showing Iteration Information
ShowIterInfo=params.ShowIterInfo;
MaxVelocity=(VarMax-VarMin)*0.2;
MinVelocity=-MaxVelocity;
%% Initialiazation
%The Particle Template
empty_particle.Position=[];
empty_particle.Velocity=[];
empty_particle.Cost=[];
empty_particle.Best.Position=[];
empty_particle.Best.Cost=[];
%Creat Population Array
particle=repmat(empty_particle,nPop,1);
%Initialize Global Best
GlobalBest.Cost=inf;
%Initialize Population Members
for i=1:nPop
%Generate Random Solution
particle(i).Position=unifrnd(VarMin,VarMax,VarSize);
%Initialize Velocity
particle(i).Velocity=zeros(VarSize);
%Evaluation
particle(i).Cost=CostFunction(particle(i).Position);
%Update the Personal Best
particle(i).Best.Position=particle(i).Position;
particle(i).Best.Cost=particle(i).Cost;
%Update Global Best
if particle(i).Best.Cost<GlobalBest.Cost
GlobalBest=particle(i).Best;
end
end
%Array to Hold Best Cost Value on Each Iteration
BestCosts=zeros(MaxIt,1);
%% Main Loop of PSO
for it=1:MaxIt
for i=1:nPop
%Update Velocity
particle(i).Velocity = w*particle(i).Velocity ...
+c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position)...
+c2*rand(VarSize).*(GlobalBest.Position-particle(i).Position);
%Apply Velocity Limits
particle(i).Velocity=max(particle(i).Velocity,MinVelocity);
particle(i).Velocity=min(particle(i).Velocity,MaxVelocity);
%Update Position
particle(i).Position=particle(i).Position+particle(i).Velocity;
%Apply Lower and Upper Bound Limits
particle(i).Position=max(particle(i).Position,VarMin);
particle(i).Position=min(particle(i).Position,VarMax);
%Evaluation
particle(i).Cost=CostFunction(particle(i).Position);
%Update Personal Best
if particle(i).Cost<particle(i).Best.Cost
particle(i).Best.Position=particle(i).Position;
particle(i).Best.Cost=particle(i).Cost;
%Update Global Best
if particle(i).Best.Cost<GlobalBest.Cost
GlobalBest=particle(i).Best;
end
end
end
%Store the Best Cost Value
BestCosts(it)=GlobalBest.Cost;
%Display Itreation Information
if ShowIterInfo
disp(['Iteration' num2str(it) ':Best Cost=' num2str(BestCosts(it))]);
end
%
w=w*wdamp;
end
out.pop=particle;
out.BestSol=GlobalBest;
out.BestCosts=BestCosts;
end
pso.zip_optimization_粒子群算法
版权申诉
73 浏览量
2022-09-15
01:43:14
上传
评论
收藏 4KB ZIP 举报
alvarocfc
- 粉丝: 108
- 资源: 1万+
最新资源
- MEM2307-VB一款SOT23封装P-Channel场效应MOS管
- 逐次分半积分实验.wps
- MEM2303XG-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- MEM2303-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 1_base.apk.1
- 基于FPGA深度学习的9I2C 读写 RTC 时钟实验,适合FPGA初学者
- MEM2303M3G-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- MEM2302XG-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- manage.py 相对路径
- 数据库设计课程设计-高校选课管理系统免费提供
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈