📄 pso.html
字号:
<html xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!--This HTML is auto-generated from an M-file.To make changes, update the M-file and republish this document. --> <title>Particle Swarm Optimization Simulation</title> <meta name="generator" content="MATLAB 7.2"> <meta name="date" content="2006-06-26"> <meta name="m-file" content="PSO"><style>body { background-color: white; margin:10px;}h1 { color: #990000; font-size: x-large;}h2 { color: #990000; font-size: medium;}/* Make the text shrink to fit narrow windows, but not stretch too far in wide windows. On Gecko-based browsers, the shrink-to-fit doesn't work. */ p,h1,h2,div.content div { /* for MATLAB's browser */ width: 600px; /* for Mozilla, but the "width" tag overrides it anyway */ max-width: 600px; /* for IE */ width:expression(document.body.clientWidth > 620 ? "600px": "auto" );}pre.codeinput { background: #EEEEEE; padding: 10px;}@media print { pre.codeinput {word-wrap:break-word; width:100%;}} span.keyword {color: #0000FF}span.comment {color: #228B22}span.string {color: #A020F0}span.untermstring {color: #B20000}span.syscmd {color: #B28C00}pre.codeoutput { color: #666666; padding: 10px;}pre.error { color: red;}p.footer { text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;} </style></head> <body> <div class="content"> <h1>Particle Swarm Optimization Simulation</h1> <introduction> <p>Simulates the movements of a swarm to minimize the objective function</p> <p><img vspace="5" hspace="5" src="PSO_eq76379.png"> </p> <p>The swarm matrix is</p> <p>swarm(index, [location, velocity, best position, best value], [x, y components or the value component])</p> <p>Author: Wesam ELSHAMY (<a href="mailto:wesamelshamy@yahoo.com">wesamelshamy@yahoo.com</a>) </p> </introduction> <h2>Contents</h2> <div> <ul> <li><a href="#1">Initialization</a></li> <li><a href="#2">Iterations</a></li> </ul> </div> <h2>Initialization<a name="1"></a></h2> <p>Parameters</p><pre class="codeinput">clearclciterations = 30;inertia = 1.0;correction_factor = 2.0;swarm_size = 49;<span class="comment">% ---- initial swarm position -----</span>index = 1;<span class="keyword">for</span> i = 1 : 7 <span class="keyword">for</span> j = 1 : 7 swarm(index, 1, 1) = i; swarm(index, 1, 2) = j; index = index + 1; <span class="keyword">end</span><span class="keyword">end</span>swarm(:, 4, 1) = 1000; <span class="comment">% best value so far</span>swarm(:, 2, :) = 0; <span class="comment">% initial velocity</span></pre><h2>Iterations<a name="2"></a></h2><pre class="codeinput"><span class="keyword">for</span> iter = 1 : iterations <span class="comment">%-- evaluating position & quality ---</span> <span class="keyword">for</span> i = 1 : swarm_size swarm(i, 1, 1) = swarm(i, 1, 1) + swarm(i, 2, 1)/1.3; <span class="comment">%update x position</span> swarm(i, 1, 2) = swarm(i, 1, 2) + swarm(i, 2, 2)/1.3; <span class="comment">%update y position</span> x = swarm(i, 1, 1); y = swarm(i, 1, 2); val = (x - 15)^2 + (y - 20)^2; <span class="comment">% fitness evaluation (you may replace this objective function with any function having a global minima)</span> <span class="keyword">if</span> val < swarm(i, 4, 1) <span class="comment">% if new position is better</span> swarm(i, 3, 1) = swarm(i, 1, 1); <span class="comment">% update best x,</span> swarm(i, 3, 2) = swarm(i, 1, 2); <span class="comment">% best y postions</span> swarm(i, 4, 1) = val; <span class="comment">% and best value</span> <span class="keyword">end</span> <span class="keyword">end</span> [temp, gbest] = min(swarm(:, 4, 1)); <span class="comment">% global best position</span> <span class="comment">%--- updating velocity vectors</span> <span class="keyword">for</span> i = 1 : swarm_size swarm(i, 2, 1) = rand*inertia*swarm(i, 2, 1) + correction_factor*rand*(swarm(i, 3, 1) - swarm(i, 1, 1)) + correction_factor*rand*(swarm(gbest, 3, 1) - swarm(i, 1, 1)); <span class="comment">%x velocity component</span> swarm(i, 2, 2) = rand*inertia*swarm(i, 2, 2) + correction_factor*rand*(swarm(i, 3, 2) - swarm(i, 1, 2)) + correction_factor*rand*(swarm(gbest, 3, 2) - swarm(i, 1, 2)); <span class="comment">%y velocity component</span> <span class="keyword">end</span> <span class="comment">%% Plotting the swarm</span> clf plot(swarm(:, 1, 1), swarm(:, 1, 2), <span class="string">'x'</span>) <span class="comment">% drawing swarm movements</span> axis([-2 30 -2 30]);pause(.2)<span class="keyword">end</span></pre><img vspace="5" hspace="5" src="PSO_01.png"> <p class="footer"><br> Published with MATLAB® 7.2<br></p> </div> <!--##### SOURCE BEGIN #####%% Particle Swarm Optimization Simulation
% Simulates the movements of a swarm to minimize the objective function
%
% $$ \left( x-15 \right) ^{2}+ \left( y-20 \right) ^{2} = 0$$
%
% The swarm matrix is
%
% swarm(index, [location, velocity, best position, best
% value], [x, y components or the value component])
%
% Author: Wesam ELSHAMY (wesamelshamy@yahoo.com)
%%
%% Initialization
% Parameters
clear
clc
iterations = 30;
inertia = 1.0;
correction_factor = 2.0;
swarm_size = 49;
% REPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASH initial swarm position REPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASH-
index = 1;
for i = 1 : 7
for j = 1 : 7
swarm(index, 1, 1) = i;
swarm(index, 1, 2) = j;
index = index + 1;
end
end
swarm(:, 4, 1) = 1000; % best value so far
swarm(:, 2, :) = 0; % initial velocity
%% Iterations
for iter = 1 : iterations
%REPLACE_WITH_DASH_DASH evaluating position & quality REPLACE_WITH_DASH_DASH-
for i = 1 : swarm_size
swarm(i, 1, 1) = swarm(i, 1, 1) + swarm(i, 2, 1)/1.3; %update x position
swarm(i, 1, 2) = swarm(i, 1, 2) + swarm(i, 2, 2)/1.3; %update y position
x = swarm(i, 1, 1);
y = swarm(i, 1, 2);
val = (x - 15)^2 + (y - 20)^2; % fitness evaluation (you may replace this objective function with any function having a global minima)
if val < swarm(i, 4, 1) % if new position is better
swarm(i, 3, 1) = swarm(i, 1, 1); % update best x,
swarm(i, 3, 2) = swarm(i, 1, 2); % best y postions
swarm(i, 4, 1) = val; % and best value
end
end
[temp, gbest] = min(swarm(:, 4, 1)); % global best position
%REPLACE_WITH_DASH_DASH- updating velocity vectors
for i = 1 : swarm_size
swarm(i, 2, 1) = rand*inertia*swarm(i, 2, 1) + correction_factor*rand*(swarm(i, 3, 1) - swarm(i, 1, 1)) + correction_factor*rand*(swarm(gbest, 3, 1) - swarm(i, 1, 1)); %x velocity component
swarm(i, 2, 2) = rand*inertia*swarm(i, 2, 2) + correction_factor*rand*(swarm(i, 3, 2) - swarm(i, 1, 2)) + correction_factor*rand*(swarm(gbest, 3, 2) - swarm(i, 1, 2)); %y velocity component
end
%% Plotting the swarm
clf
plot(swarm(:, 1, 1), swarm(:, 1, 2), 'x') % drawing swarm movements
axis([-2 30 -2 30]);
pause(.2)
end##### SOURCE END #####--> </body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -