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控制,下边第一张图是三相电路的主电路图,第二张是控制电路图
现在我打算对PID控制器用PSO进行优化,由此出错一直没解决,还请各位指点一下!!