source: liacs/nc/laser-pulse-shaping/pso.m@ 44

Last change on this file since 44 was 37, checked in by Rick van der Zwet, 15 years ago

Working under matlab

File size: 3.4 KB
Line 
1% Particle Swarm optimalisation
2% BSDLicence
3% Rick van der Zwet - 0433373 - <hvdzwet@liacs.nl>
4% Modeled after http://en.wikipedia.org/wiki/Particle_swarm_optimization
5
6% Dimention settings
7parameters = 80;
8
9% If global optimum does not change this many steps bail out
10iteration_break = 5;
11max_iterations = 1000;
12max_time = 5 * 60; % in sec
13
14% Flock properties
15local_swarm_size = 10;
16local_swarms = 50;
17
18%% Particle properties
19% Speed of walking around to a certain direction
20wander = 0.4;
21
22% 'Influence' of the envirionment with regards to solutions
23% Trust the group global solution to be feasible
24c_social = 0.4;
25% Trust the neighbor solution to be feasible
26c_cognitive = 0.4;
27% Trust the own best solution to be feasible
28c_ego = 0.2;
29
30% Variables used for plotting
31fitness_history = [];
32fitness_iterations = [];
33
34% Initiate all particles
35flock_p = rand(parameters,local_swarm_size,local_swarms) .* (2 * pi);
36flock_v = zeros(size(flock_p));
37
38
39% Global best placeholder
40g_best = zeros(parameters,1);
41g_fitness = 1;
42% at (:,x) lives the neighbor best of local_swarm 'x'
43n_best = zeros(parameters,local_swarms);
44n_fitness = ones(parameters,local_swarms);
45% at (:,p,x) leves the local best of particle 'p' in local_swarm 'x'
46l_best = zeros(parameters,local_swarm_size,local_swarms);
47l_fitness = ones(local_swarm_size, local_swarms);
48
49idle_counter = 0;
50tic();
51
52% Code not optimised for performance, but for readablility
53for i = 1:max_iterations
54 for s = 1:local_swarms
55 fitness = SHGa(flock_p(:,:,s));
56 % See if we got any better local optimum
57 for p = 1:local_swarm_size
58 if fitness(p) < l_fitness(p,s)
59 l_fitness(p,s) = fitness(p);
60 l_best(:,p,s) = flock_p(:,p,s);
61 end
62 end
63
64 % See if we got any better neighbor optimum
65 for p = 1:local_swarm_size
66 if l_fitness(p,s) < n_fitness(s)
67 n_fitness(s) = l_fitness(p,s);
68 n_best(:,s) = l_best(:,p,s);
69 end
70 end
71 end
72
73 idle_counter = idle_counter + 1;
74
75 % See wether we have a new global optimum
76 for s = 1:local_swarms
77 if n_fitness(s) < g_fitness
78 g_fitness = n_fitness(s);
79 g_best = n_best(:,s);
80 idle_counter = 0;
81 end
82 end
83
84 % Stop conditions
85 if idle_counter == iteration_break
86 fprintf('Caught by idle_counter\n');
87 return;
88 end
89 if toc > max_time
90 fprintf('Caught by max_time used \n');
91 return;
92 end
93
94
95 fprintf('%i : %.15f\n', i, g_fitness);
96 fitness_iterations = [fitness_iterations, i];
97 fitness_history = [fitness_history, g_fitness];
98
99
100 % Update particles to new value
101 r_cognitive = rand();
102 r_social = rand();
103 r_ego = rand();
104 for s = 1:local_swarms
105 for p = 1:local_swarm_size
106 flock_v(:,p,s) = flock_v(:,p,s) * wander + ...
107 (g_best - flock_p(:,p,s)) * (c_cognitive * r_cognitive) + ...
108 (n_best(:,s) - flock_p(:,p,s)) * (c_social * r_social) + ...
109 (l_best(:,p,s) - flock_p(:,p,s)) * (c_ego * r_ego);
110 flock_p(:,p,s) = flock_p(:,p,s) + flock_v(:,p,s);
111 end
112 end
113end
114
115
116plot(fitness_iterations,fitness_history);
117title(sprintf('Particle Swarm Optimalisation on Laser-Pulse shaping problem'));
118ylabel('fitness');
119xlabel('iterations');
120grid on;
121legend(sprintf('Parameters %i',parameters));
122print('pso-fitness.eps','-depsc2');
Note: See TracBrowser for help on using the repository browser.