Problem with index in position 1 exceeding array bounds in PSO algorithm

1 visualizzazione (ultimi 30 giorni)
Hello guys,
I have a particle swarm optimization code in Mtalab that should find the local minima of a function with two variables. As of now the code is not running because I am getting the error: Index in position 1 exceeds array bounds.
Any thoughts on how to fix this? (I know this is a usuall beginner error but I am just that, a beginner)
I also have another question, anyone knows how to do the following in a if loop or such? I want to multily the weight w with a factor close to 1 such that the multpilication occurs with every iteration till the weight hits a lower limit of 0.3 and then it won't go below that.
This is is my script (I have another scrip for the main objective function):
x_min=[-5,-5];
x_max=[5,5];
n=100;
m=2;
c1=2;
c2=2;
w_max=1.4;
w_min=0.3;
B=0.95;
v_max=5;
Max_iter=100;
for i=1:n
for j=1:m
pos(i,j)=x_min(i,j)+rand().*(x_max(i,j) - x_min(i,j));
end
end
vel=pos;
%function evaluation
out=fun(pos);
pos_best_val=out;
pos_best=pos;
[fminval,index]=min(out);
glo_best=pos_best(index,:);
X=pos;
Out=fun(X);
k=1;
w=w_max;
while k <= Maxiter
w(k)=w_max*B;
if w<w_min
w=w_min;
end
%Update values and positions
new=find(out<=pos_best_val);
pos_best(new,:)=X(new,:);
pos_best_val=out(new);
[f_best_val,ind1]=min(pos_best_val);
if f_best_val<=f_min_val
f_min_value=f_best_val;
glo_best=pos_best(ind1,:);
end
for i=1:n
for j=1:m
vel(i,j)=w.*vel(i,j)+c1.*rand().*(pos_best(i,j)-pos(i,j)) + c2.*rand().*(glo_best(1,j)-pos(i,j)); %updating velocity
pos(i,j)=vel(i,j) + pos(i,j); %updating position
%Handling boundary conditions
if pos(i,j)<x_min(j)
pos(i,j)=x_min(j);
elseif pos(i,j)>x_max(j)
pos(i,j)=x_max(j);
%Velocity condition
if vel(i,j)> v_max
break
end
end
end
end
k=k+1
end
Minima(run)=fun(glo_best);
Minima_pos(run,:)=glo_best;

Risposte (1)

the cyclist
the cyclist il 21 Ago 2022
Modificato: the cyclist il 21 Ago 2022
x_min and x_max are 1x2 vectors, but in the loop you try to access a second row of those matrices, which do not exist.
I'm not sure what you intend to happen there, so I can't give advice.

Prodotti


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by