用的是《MATLAB智能算法30个案例分析》中的程序
1.文件名为PSO_PID.m
function z = PSO_PID(x)
assignin('base','Kp',x(1)); % 粒子群依次赋值给Kp 这部分运行结果> PSO_PID
assignin('base','Ki',x(2)); % 粒子群依次赋值给Ki Error using PSO_PID (line 2)
assignin('base','Kd',x(3)); % 粒子群依次赋值给Kd Not enough input arguments.
[ y_out] = sim('PID_Model', [0, 20]); % 使用命令行运行控制系统模块
z = y_out(end, 1); % 返回性能指标
2.文件名为Optm1_PSO_PID.m
%% 清空环境clearclc
%% 参数设置w = 0.6; % 惯性因子c1 = 2; % 加速常数c2 = 2; % 加速常数
Dim = 3; % 维数SwarmSize = 100; % 粒子群规模ObjFun = @PSO_PID; % 待优化函数句柄
MaxIter = 100; % 最大迭代次数 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
%% 个体极值和群体极值[bestf bestindex]=min(fSwarm);zbest=Swarm(bestindex,:); % 全局最佳gbest=Swarm; % 个体最佳fgbest=fSwarm; % 个体最佳适应值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);while( (iter < MaxIter) && (fzbest > MinFit) ) for j=1:SwarmSize % 速度更新 VStep(j,:) = w*VStep(j,:) + c1*rand*(gbest(j,:) - Swarm(j,:)) + c2*rand*(zbest - Swarm(j,:)); if VStep(j,:)>Vmax, VStep(j,:)=Vmax; end if VStep(j,:)Ub(k), Swarm(j,k)=Ub(k); end if Swarm(j,k)
figure(2) % 绘制PID控制器参数变化曲线plot(K_p)hold onplot(K_i,'k','LineWidth',3)plot(K_d,'--r')title('Kp、Ki、Kd 优化曲线','fontsize',18);xlabel('迭代次数','fontsize',18);ylabel('参数值','fontsize',18);set(gca,'Fontsize',18);legend('Kp','Ki','Kd',1);
2014-4-12 22:10 上传
仿真模型 文件名为PID_Model