資源簡介
大學教授編寫的粒子群算法代碼,MATLAB實現。通用性好,函數參數模塊化,有詳細的注釋,便于移值。直接定義自己的目標函數(適應度函數、代價函數)即可使用。

代碼片段和文件信息
%
%?Copyright?(c)?2016?Yarpiz?(www.yarpiz.com)
%?All?rights?reserved.?Please?read?the?“license.txt“?for?license?terms.
%
%?Project?Code:?YTEA101
%?Project?title:?Particle?Swarm?Optimization?Video?Tutorial
%?Publisher:?Yarpiz?(www.yarpiz.com)
%?
%?Developer?and?Instructor:?S.?Mostapha?Kalami?Heris?(Member?of?Yarpiz?Team)
%?
%?Contact?Info:?sm.kalami@gmail.com?info@yarpiz.com
%
function?out?=?PSO(problem?params)
????%%?Problem?Definiton
????CostFunction?=?problem.CostFunction;??%?Cost?Function
????nVar?=?problem.nVar;????????%?Number?of?Unknown?(Decision)?Variables
????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?Coefficient
????c1?=?params.c1;?????????%?Personal?Acceleration?Coefficient
????c2?=?params.c2;?????????%?Social?Acceleration?Coefficient
????%?The?Flag?for?Showing?Iteration?Information
????ShowIterInfo?=?params.ShowIterInfo;????
????MaxVelocity?=?0.2*(VarMax-VarMin);
????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?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?=?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).Velocit
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????4316??2016-05-20?03:16??PSO.m
?????文件????????1415??2016-05-20?03:16??pso1.m
?????文件?????????448??2016-05-20?03:15??Sphere.m
- 上一篇:matlab處理數字圖像貼標簽
- 下一篇:MT4持倉助手v1.3
評論
共有 條評論