Particle Swarm Optimization Matlab

Γενικά θέματα για τις γλώσσες προγραμματισμού που δεν καλύπτονται από τις άλλες περιοχές της κατηγορίας.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
johnpag
Δημοσιεύσεις: 1
Εγγραφή: 28 Ιαν 2014 23:35

Particle Swarm Optimization Matlab

Δημοσίευση από johnpag » 28 Ιαν 2014 23:51

Καλησπέρα,

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

ο κώδικας μου είναι αυτός αλλά με απασχολεί το Mouse click

Κώδικας: Επιλογή όλων

%% 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  &#40; iter < steps &#41;
iter = iter + 1;

for i = 1&#58;n,
current_fitness&#40;i&#41; = Live_fn&#40;current_position&#40;&#58;,i&#41;&#41; ;    

end


for i = 1 &#58; n
        if current_fitness&#40;i&#41; < local_best_fitness&#40;i&#41;
           local_best_fitness&#40;i&#41;  = current_fitness&#40;i&#41;;  
           local_best_position&#40;&#58;,i&#41; = current_position&#40;&#58;,i&#41;   ;
        end   
 end


 &#91;current_global_best_fitness,g&#93; = min&#40;local_best_fitness&#41;;


if current_global_best_fitness < global_best_fitness
   global_best_fitness = current_global_best_fitness;

    for i=1&#58;n
        globl_best_position&#40;&#58;,i&#41; = local_best_position&#40;&#58;,g&#41;;
    end

end


 velocity = w *velocity + c1*&#40;R1.*&#40;local_best_position-current_position&#41;&#41; + c2*&#40;R2.*&#40;globl_best_position-current_position&#41;&#41;;
 current_position = current_position + velocity; 




x=current_position&#40;1,&#58;&#41;;
y=current_position&#40;2,&#58;&#41;;

clf    
    plot&#40;x, y , 'h'&#41;   
    axis&#40;&#91;-5 5 -5 5&#93;&#41;;

pause&#40;.2&#41;
&#91;x,y&#93; = ginput&#40;1&#41;


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


              &#91;Jbest_min,I&#93; = min&#40;current_fitness&#41; % minimum fitness
               current_position&#40;&#58;,I&#41; % best solution
              
%
Ευχαριστώ πολυ

kostis_ma
Δημοσιεύσεις: 1
Εγγραφή: 30 Ιαν 2014 20:06

Particle Swarm Optimization Matlab

Δημοσίευση από kostis_ma » 30 Ιαν 2014 20:11

Καλησπέρα johnpag!

Πολύ ενδιαφέρον θέμα. Δεν είμαι σίγουρος κατά πόσο αυτό που έχω στο μυαλό μου μπορεί να σε βοηθήσει αλλά θα το κοιτάξω και θα σε ενημερώσω.

Ο αλγόριθμος είναι στα πλαίσια κάποιας εργασίας ή τον έφτιαξες από προσωπικό ενδιαφέρον?

Απάντηση

Επιστροφή στο “γλώσσες προγραμματισμού - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης