南有暖树i 2021-12-22 20:39 采纳率: 0%
浏览 29
已结题

AMEsim与MATLAB联合仿真遇到的问题

用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

img

img

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月30日
    • 创建了问题 12月22日

    悬赏问题

    • ¥30 靶向捕获探针设计软件包
    • ¥15 react-diff-viewer组件,如何解决数据量过大卡顿问题
    • ¥20 遥感植被物候指数空间分布图制作
    • ¥15 安装了xlrd库但是import不了…
    • ¥20 Github上传代码没有contribution和activity记录
    • ¥20 SNETCracker
    • ¥15 数学建模大赛交通流量控制
    • ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
    • ¥50 paddleocr最下面一行似乎无法识别
    • ¥15 求某类社交网络数据集