用的是《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