Question

I new in matlab i need some help about with a code in matlab. I want make the Particle Swarm Optimization and i want put a mouse click to define a point in space with a window size [min1, max1] and [min2, max2]. Then a cluster consisting of n = 10 particles initialized and searches for the point set initially by the user.

my code is this:

clear all;

numofdims = 30;

numofparticles = 50;

c1 = 2;

c2 = 2;

numofiterations = 1000;

V = zeros(50, 30);

initialpop = V;

Vmin = zeros(30, 1);

Vmax = Vmin;

Xmax = ones(30, 1) * 100;

Xmin = -Xmax;

pbestfits = zeros(50, 1);

worsts = zeros(50, 1);

bests = zeros(50, 1);

meanfits = zeros(50, 1);

pbests = zeros(50, 30);

initialpop = Xmin + (Xmax - Xmin) .* rand(numofparticles, numofdims);

X = initialpop;

fitnesses = testfunc1(X);

[minfit, minfitidx] = min(fitnesses);

gbestfit = minfit;

gbest = X(minfitidx, :);

for i = 1:numofdims

    Vmax(i) = 0.2 * (Xmax(i) - Xmin(i));

    Vmin(i) = -Vmax(i);

end


for t = 1:1000

    w = 0.9 - 0.7 * (t / numofiterations);


    for i = 1:numofparticles

        if(fitnesses(i) < pbestfits(i))

            pbestfits(i) = fitnesses(i);

            pbests(i, :) =  X(i, :);

        end

    end

    for i = 1:numofparticles

        for j = 1:numofdims

            V(i, j) = min(max((w * V(i, j) + rand * c1 * (pbests(i, j) - X(i, j))...

                + rand * c2 * (gbest(j) - X(i, j))), Vmin(j)), Vmax(j));

            X(i, j) = min(max((X(i, j) + V(i, j)), Xmin(j)), Xmax(j));

        end

    end


    fitnesses = testfunc1(X);

    [minfit, minfitidx] = min(fitnesses);

    if(minfit < gbestfit)

        gbestfit = minfit;

        gbest = X(minfitidx, :);

    end


    worsts(t) = max(fitnesses);

    bests(t) = gbestfit;

    meanfits(t) = mean(fitnesses);

end
Was it helpful?

Solution

You might use ginput to get the coordinates of mouse click:

[x,y] = ginput;

and then define your window accordingly.

OTHER TIPS

I made previous code thank you very much.

I have found a new code about PSO and i want put a mouse click to define a point in space with a window size [min1, max1] and [min2, max2].

Then a cluster consisting of n = 10 particles initialized and searches for the point set initially by the user.

the code is this:

%% Initialization
clear
clc
n = 50;          % Size of the swarm " no of birds "
bird_setp  = 50; % Maximum number of "birds steps"
dim = 2;          % Dimension of the problem

c2 =1.1;          % PSO parameter C1 
c1 = 0.12;        % PSO parameter C2 
w =0.9;           % pso momentum or inertia  
fitness=0*ones(n,bird_setp);
                                       %-----------------------------%
                                       %    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 < bird_setp )
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)


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






%  
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top