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

1 ビュー (過去 30 日間)
Christian Tsobanoglou
Christian Tsobanoglou 2022 年 8 月 21 日
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;

回答 (1 件)

the cyclist
the cyclist 2022 年 8 月 21 日
編集済み: the cyclist 2022 年 8 月 21 日
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.
  1 件のコメント
Christian Tsobanoglou
Christian Tsobanoglou 2022 年 8 月 25 日
I see, thank you for the answer!

サインインしてコメントする。

タグ

製品


リリース

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by