• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Matlab
  • 标签: 优化算法  

资源简介

传统粒子群算法的matlab实现代码,PSO是粒子群优化算法(——Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、兽群、鸟群和鱼群等的群集行为,这些群体按照一种合作的方式寻找食物,群体中的每个成员通过学习它自身的经验和其他成员的经验来不断改变其搜索模式。

资源截图

代码片段和文件信息

function out = PSO(problemparams)
out.GlobalBest=[];
out.BestCosts=[];
%% Problem Definition
func_num=problem.func_num;
CostFunction= problem.CostFunction;      %Change the cost function here
nVar=problem.nVar ;       %Number of Unknown (Decision) Variables
VarSize= [nVar 1];        %Matrix Size of Decision Variables
VarMin= problem.VarMin;   %Lower Bound of Decision Variable
VarMax= problem.VarMax;   %Upper Bound of Decision Variable

%% Parameter of PSO
MaxIt= params.MaxIt;     %Maximum Number of Iterations
nPop= params.nPop;         %Population Size (Swarm Size)
w= params.w;                  %Inertia Coefficient
wdamp= params.wdamp;    %Damping Ratio of Inertia Coefficient
c1= params.c1;                 %Personal Acceleration Coefficient
c2= params.c2;                 %Social Acceleration Coefficient

% The Flag for Showing Iteration Information
ShowIterInfo=params.ShowIterInfo;

%MaxVelocity = (VarMax-VarMin)*0.1;
%MinVelocity = -MaxVelocity;


%% Initialization
%The Particle Template
% empty_particle.Position=[];
% empty_particle.Velocity=[];
% empty_particle.Cost=[];
% empty_particle.Best.Position=[];
% empty_particle.Best.Cost=[];
% Create Population Members
particle = params.particle;    %%repmat(Matrixrowcol)

% Initialize Global Best
GlobalBest.Cost= inf;

for i=1:nPop
    % Generate Random Solution
    particle(i).Position=params.particle(i).Position;
    %Initialize Velocity
    particle(i).Velocity=zeros(VarSize);
    %Evaluation
    particle(i).Cost=feval(CostFunctionparticle(i).Positionfunc_num);
    
    %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(MaxIt1);

BestCosts(1)=GlobalBest.Cost;
%% Main Loop of PSO
for it=2:MaxIt
    for i=1:nPop
        %Update Velocity
        particle(i).Velocity= w*particle(i).Ve

评论

共有 条评论