Particle Swarm Optimization

...office, φωτογραφία, CAD, spss, latex, κλπ

Συντονιστής: adem1

Particle Swarm Optimization

Δημοσίευσηαπό johnpag » 28 Ιαν 2014, 18:06

Καλησπέρα σε όλους,

Αντιμετωπίζω ένα πρόβλημα στη δημιουργία ενός προγράμματος για τον αλγόριθμο PSO έχω δημιουργήσει-βρει-τροποποιήσει τον παρακάτω κώδικα:

Κώδικας: Επιλογή όλων
%% Initialization
clear
clc
n = 10; % Αριθμός σωματιδίων
steps = 50; % Μέγιστος αριθμός βημάτων
dim = 2; % Διάσταση προβήματος

c2 =1.1; % PSO parameter C2
c1 = 0.12; % PSO parameter C1
w =0.9; % pso ώθηση ή αδράνεια
fitness=0*ones(n,steps);
%-----------------------------%
% initialize the parameter %
%-----------------------------%

R1 = rand(dim, n);
R2 = rand(dim, n);
current_fitness =0*ones(n,1);

%------------------------------------------------%
% Initializing swarm and velocities and position %
%------------------------------------------------%

current_position = 10*(rand(dim, n)-.5);
velocity = .3*randn(dim, n) ;
local_best_position = current_position ;


%-------------------------------------------%
% Evaluate initial population %
%-------------------------------------------%

for i = 1:n
current_fitness(i) = Live_fn(current_position(:,i));

end


local_best_fitness = current_fitness ;
[global_best_fitness,g] = min(local_best_fitness) ;

for i=1:n
globl_best_position(:,i) = local_best_position(:,g) ;

end
%-------------------%
% VELOCITY UPDATE %
%-------------------%

velocity = w *velocity + c1*(R1.*(local_best_position-current_position)) + c2*(R2.*(globl_best_position-current_position));

%------------------%
% SWARMUPDATE %
%------------------%


current_position = current_position + velocity ;

%------------------------%
% evaluate anew swarm %
%------------------------%


%% Main Loop
iter = 0 ; % Iterations’counter
while ( iter < steps )
iter = iter + 1;

for i = 1:n,
current_fitness(i) = Live_fn(current_position(:,i)) ;

end


for i = 1 : n
if current_fitness(i) < local_best_fitness(i)
local_best_fitness(i) = current_fitness(i);
local_best_position(:,i) = current_position(:,i) ;
end
end


[current_global_best_fitness,g] = min(local_best_fitness);


if current_global_best_fitness < global_best_fitness
global_best_fitness = current_global_best_fitness;

for i=1:n
globl_best_position(:,i) = local_best_position(:,g);
end

end


velocity = w *velocity + c1*(R1.*(local_best_position-current_position)) + c2*(R2.*(globl_best_position-current_position));
current_position = current_position + velocity;




x=current_position(1,:);
y=current_position(2,:);

clf
plot(x, y , 'h')
axis([-5 5 -5 5]);

pause(.2)
[x,y] = ginput(1)


end % end of while loop its mean the end of all step that the birds move it


[Jbest_min,I] = min(current_fitness) % minimum fitness
current_position(:,I) % best solution

%




Το έχω κάνει σε Octave αλλά με απασχολεί το εξής δεν ξέρω αν δίνεται η δυνατότητα με ένα mouse click να ορίζει ένα σημείο στο χώρο ενός παραθύρου με διαστάσεις [min1, max1] και [min2,max2]. Στη συνέχεια ένα σμήνος που θα αποτελείται από n=10 σωματίδια θα αρχικοποιείται και θα αναζητά το σημείο που όρισε αρχικά ο χρήστης. Οι διαδοχικές θέσεις των σωματιδίων του σμήνους θα απεικονίζονται σε κάθε επανάληψη του αλγορίθμου δίνοντας την εντύπωση της κίνησης του σμήνους. Το πρόγραμμα θα τελειώνει όταν όλα τα σωματίδια του σμήνους βρεθούν πάνω στο σημείο που όρισε ο χρήστης.

Ευχαριστώ πολύ για το χρόνο σας και συγνώμη εκ των προτέρων
Γνώσεις Linux: Ικανοποιητικό ⇛ Προγραμματισμού: Ικανοποιητικό ⇛ Αγγλικών: Πολύ καλό

⇛Ubuntu 12.04 precise
⇛Pentium Dual-Core CPU T4300 2.10GHz ⇛RAM 3919 MiB ⇛ FUJITSU EF7A - FUJITSU AMILO Pi 3560
⇛GeForce GT 240M
⇛wlan: Realtek RTL8191SEvB Wireless ⇛eth: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
johnpag
Ubuntistas
Ubuntistas
 
Δημοσιεύσεις: 46
Εγγραφή: 30 Ιουν 2013, 23:38
Τοποθεσία: Άρτα, Κέρκυρα
Launchpad: Johnpag
Εκτύπωση

Επιστροφή στο Εφαρμογές για Γραφείο / Γραφιστική / Επιστήμες