用matlab和amesim联合仿真,利用智能算法去优化pid参数,为啥到达最大迭代次数后,仿真无法停止,设置迭代5次,运行不会报错,就是到达最大迭代次数后还会继续迭代,想请教各位
SwarmSize = 5; % 群规模
MaxIter =3; % 最大迭代次数
MinFit = 0.1; % 最小适应值
d=2;%距离
step=2;%步长
Ub = [50 50 50];%上下限
Lb = [0.1 0.1 0.1];
%% 初始化
for i=1:SwarmSize
pop(i,:)=Ub.*rand(1,Dim);
m(i)= BAS_PID(pop(i,:));
end
%% 个体极值和群体极值
[bestf,bestindex]=min(m);
zbest=pop(bestindex,:); % 最佳
fzbest=bestf; % 全局最佳适应值
iter = 0;
y_fitness = zeros(1,MaxIter); % 预先产生4个空矩阵
K_p = zeros(1,MaxIter);
K_i = zeros(1,MaxIter);
K_d = zeros(1,MaxIter);
for t=1:MaxIter
t;
for i=1:SwarmSize
dir=rand(1,Dim);
b=dir./(norm(dir));
xl(i,:)=pop(i,:)-d.*b;
fl(i)= BAS_PID(xl(i,:));
xr(i,:)=pop(i,:)+d.*b;
fr(i)= BAS_PID(xr(i,:));
pop(i,:)=pop(i,:)-step.*b.*sign(fr(i)-fl(i));
for k=1:Dim
if pop(i,k)>Ub(k), pop(i,k)=Ub(k); end
if pop(i,k)<Lb(k), pop(i,k)=Lb(k); end
end
mm(i)= BAS_PID(pop(i,:));
end
[aaa,bbb]=sort(mm);
zmm=aaa(1);
ccc=bbb(1);
bestxx=pop(ccc,:);
step=step*0.95;
d=0.95*d+0.01;
if zmm<= fzbest
fzbest=zmm;
zbest=bestxx;
end
iter = iter+1; % 迭代次数更新
y_fitness(1,iter) = fzbest; % 为绘图做准备
K_p(1,iter) = zbest(1);
K_i(1,iter) = zbest(2);
K_d(1,iter) = zbest(3);
end