问题遇到的现象和发生背景
天牛须算法-索引超出数组元素的数目(1)。
问题相关代码,请勿粘贴截图
function bas()
clear all;
% 初始化部分
eta=0.95;%步长衰减因子
c=5;% 步进和d0之间的比率
step=1;% 初始步骤设置为最大输入范围
n=100;% 迭代次数
k=2;% 空间维数
x=rands(1,k);% 初始化天牛须位置
fbest=fit(x);% 初始化最优适应度
A=zeros(100,1);
B=zeros(100,1);
record=zeros(n,1);
% fbest_store=fbest;
% x_store=[0;x;fbest];% 用于存储路径
% display(['0:','xbest=[',num2str(xbest'),'],fbest=',num2str(fbest)]);
% 迭代部分
for i=1:n
d0=step/c;% d0表示质点与须之间的长度
dir=rands(1,k); % 随机方向向量
dir=dir/(eps+norm(dir));% 归一化
xleft=x+dir*d0;% 左须
fleft=fit(xleft);
xright=x-dir*d0;% 右须
fright=fit(xright);
x=x-step.*dir.*sign(fleft-fright);% 判优
f=fit(x);
if f<fbest
f=fbest;
x=x(i);
elseif f>fbest
f=fbest;
x=x(i);
end
record(i)=fbest;
r=x(i,:);
for j=1:i
A(i,j)=sqrt(r(2*j)^2 + r(2*j-1)^2);
P(i,j)=atan(r(2*j-1)/r(2*j));
end
end
% % 数据显示部分
% figure(1),clf(1);
% plot(x_store(1,:),x_store(end,:),'r-o');
% hold on;
% plot(x_store(1,:),fbest_store,'b-.');
% xlabel('iteration');
% ylabel('maximum value');
end
function y=fit(x)
t=0.01;
H=[sin(2*pi*t) cos(2*pi*t)];
Q=[2*cos(2) 2*sin(2)];
V=H*Q';
y=sum((V-H*x').^2);
end
运行结果及报错内容
>> sbas
索引超出数组元素的数目(1)。
出错 sbas (line 39)
A(i,j)=sqrt(r(2*j)^2 + r(2*j-1)^2);