susan34521 2023-12-03 22:16 采纳率: 0%
浏览 13

PSO优化PID粒子群,在Simulink中输出性能指标这一步报错(位置 1 处的索引无效。数组索引必须为正整数或逻辑值),应该如何修改?

PSO优化PID粒子群,在Simulink中输出性能指标这一步报错(位置 1 处的索引无效。数组索引必须为正整数或逻辑值),应该如何修改?
程序是<MATLAB智能算法30个案例分析(第2版)>这本书中的案例,我稍微改了改。
这是截至到出错位置的主程序:

clc
w = 0.8;     
c1 = 2;       
c2 = 2;       
Dim = 3;          
SwarmSize = 30;    
ObjFun = @PSO_PID;  
MaxIter = 50;    
MinFit = 0.1;       
Vmax = 1;           
Vmin = -1;         
Ub = [300 300 300];  
Lb = [0 0 0];       
    Range = ones(SwarmSize,1)*(Ub-Lb);
    Swarm = rand(SwarmSize,Dim).*Range + ones(SwarmSize,1)*Lb      % 初始化粒子群
    VStep = rand(SwarmSize,Dim)*(Vmax-Vmin) + Vmin                          % 初始化速度
    fSwarm = zeros(SwarmSize,1);
for i=1:SwarmSize
    fSwarm(i,:) = feval(ObjFun,Swarm(i,:));                      % 粒子群的适应值
end

这是ObjFun调用的子程序:

function z=PSO_PID(x) 
assignin('base','Kp',x(1)); 
assignin('base','Ki',x(2)); 
% assignin('base','K',x(3));  
[t_time,x_state,y_out]=sim('LTCL_PID',[0,1]);
z=y_out(end,1);  

报错信息如下:

位置 1 处的索引无效。数组索引必须为正整数或逻辑值。

出错 PSO_PID (第 12 行)
z=y_out(end,1);  

出错 PSO (第 24 行)
    fSwarm(i,:) = feval(ObjFun,Swarm(i,:));                        % 粒子群的适应值

调用的simulink模型是三相并网逆变器的PID控制,下边第一张图是三相电路的主电路图,第二张是控制电路图

img

img


现在我打算对PID控制器用PSO进行优化,由此出错一直没解决,还请各位指点一下!!

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-04 09:26
    关注

    【相关推荐】




    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月3日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵