请选择 进入手机版 | 继续访问电脑版

Hello Mat

 找回密码
 立即注册
查看: 10348|回复: 9

7-PSO_PID--粒子群算法的PID参数整定(微分抗饱和调节)

[复制链接]

1277

主题

1500

帖子

85

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22528
发表于 2019-8-7 22:19:53 | 显示全部楼层 |阅读模式
7-PSO_PID--粒子群算法的PID参数整定(微分抗饱和调节)
百度网盘链接:https://pan.baidu.com/s/1LfRMuEDkmz9mKrNP3eZBsw 提取码:8mi4
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1
程序如下:
  1. %% 清空环境
  2. clc,clear,close all
  3. warning off
  4. format longG
  5. addpath(genpath('./PID_funtion'))
  6. % addpath(genpath('./test_function'))
  7. %% 参数设置
  8. w = 0.6;      % 惯性因子
  9. c1 = 2;       % 加速常数
  10. c2 = 2;       % 加速常数

  11. Dim = 3;            % 维数
  12. sizepop = 50;       % 粒子群规模
  13. maxiter  = 50;      % 最大迭代次数
  14. MinFit = 0.1;       % 最小适应值
  15. Vmax = 1;
  16. Vmin = -1;
  17. Ub = [500 500 500];
  18. Lb = [0 0 0];

  19. %% 适应度函数
  20. choosed = 2;
  21. if choosed==1
  22.     fun = @(x)PID_Fun_1(x);
  23. elseif(choosed==2)
  24.     fun = @(x)PID_Fun_2(x);
  25. elseif(choosed==3)
  26.     fun = @(x)PID_Fun_3(x);
  27. elseif(choosed==4)
  28.     fun = @(x)PID_Fun_4(x);
  29. end
  30. %% 粒子群初始化
  31. Range = ones(sizepop,1)*(Ub-Lb);
  32. pop = rand(sizepop,Dim).*Range + ones(sizepop,1)*Lb;    % 初始化粒子群
  33. V = rand(sizepop,Dim)*(Vmax-Vmin) + Vmin;                 % 初始化速度
  34. fitness = zeros(sizepop,1);
  35. for i=1:sizepop
  36.     fitness(i,:) = fun(pop(i,:));                         % 粒子群的适应值
  37. end

  38. %% 个体极值和群体极值
  39. [bestf, bestindex]=min(fitness);
  40. zbest=pop(bestindex,:);   % 全局最佳
  41. gbest=pop;                % 个体最佳
  42. fitnessgbest=fitness;              % 个体最佳适应值
  43. fitnesszbest=bestf;               % 全局最佳适应值

  44. %% 迭代寻优
  45. iter = 0;
  46. y_fitness = zeros(1,maxiter );   % 预先产生4个空矩阵
  47. K_p = zeros(1,maxiter );
  48. K_i = zeros(1,maxiter );
  49. K_d = zeros(1,maxiter );
  50. while( (iter < maxiter ) && (fitnesszbest > MinFit) )
  51.     for j=1:sizepop
  52.         % 速度更新
  53.         V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
  54.         if V(j,:)>Vmax,
  55.             V(j,:)=Vmax;
  56.         end
  57.         if V(j,:)<Vmin,
  58.             V(j,:)=Vmin;
  59.         end
  60.         % 位置更新
  61.         pop(j,:)=pop(j,:)+V(j,:);
  62.         for k=1:Dim
  63.             if pop(j,k)>Ub(k),
  64.                 pop(j,k)=Ub(k);
  65.             end
  66.             if pop(j,k)<Lb(k),
  67.                 pop(j,k)=Lb(k);
  68.             end
  69.         end
  70.         % 适应值
  71.         fitness(j,:) =fun(pop(j,:));
  72.         % 个体最优更新
  73.         if fitness(j) < fitnessgbest(j)
  74.             gbest(j,:) = pop(j,:);
  75.             fitnessgbest(j) = fitness(j);
  76.         end
  77.         % 群体最优更新
  78.         if fitness(j) < fitnesszbest
  79.             zbest = pop(j,:);
  80.             fitnesszbest = fitness(j);
  81.         end
  82.     end
  83.     iter = iter+1;                      % 迭代次数更新
  84.     y_fitness(1,iter) = fitnesszbest;         % 为绘图做准备
  85.     K_p(1,iter) = zbest(1);
  86.     K_i(1,iter) = zbest(2);
  87.     K_d(1,iter) = zbest(3);
  88. end
  89. %% 绘图
  90. disp(['PSO最优解', num2str(zbest)])
  91. disp(['PSO最优解对应的目标值', num2str(fitnesszbest)])
  92. fprintf('\n')

  93. figure(1)      % 绘制性能指标ITAE的变化曲线
  94. plot(y_fitness,'LineWidth',3)
  95. title('最优个体适应值','fontsize',10);
  96. xlabel('迭代次数','fontsize',10);ylabel('适应值','fontsize',10);
  97. set(gca,'Fontsize',10);
  98. grid on

  99. figure(2)      % 绘制PID控制器参数变化曲线
  100. plot(K_p,'b-','LineWidth',2); hold on
  101. plot(K_i,'k-.','LineWidth',2)
  102. plot(K_d,'r--','LineWidth',2)
  103. title('Kp、Ki、Kd 优化曲线','fontsize',10);
  104. xlabel('迭代次数','fontsize',10);   ylabel('参数值','fontsize',10);
  105. set(gca,'Fontsize',10);
  106. legend('Kp','Ki','Kd',1);
  107. grid on;hold off;

  108. % PID响应
  109. if choosed==1
  110.     [rint, yout]=PID_Fun_1_response(zbest);
  111. elseif(choosed==2)
  112.     [rint, yout]=PID_Fun_2_response(zbest);
  113. elseif(choosed==3)
  114.     [rint, yout]=PID_Fun_3_response(zbest);
  115. elseif(choosed==4)
  116.     [rint, yout]=PID_Fun_4_response(zbest);
  117. end
  118. figure('color',[1,1,1])
  119. plot(rint,'b-','linewidth',2);hold on;
  120. plot(yout,'r.-','linewidth',2);
  121. axis tight;grid on;
  122. hold off;

  123. rmpath(genpath('./PID_funtion'))
  124. % rmpath(genpath('./test_function'))
复制代码
微分抗饱和调节:
游客,如果您要查看本帖隐藏内容请回复






算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

15

帖子

1

金钱

新手上路

Rank: 1

积分
13
发表于 2020-3-31 01:01:45 | 显示全部楼层
很好哒分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

15

金钱

新手上路

Rank: 1

积分
17
发表于 2020-6-14 19:22:27 | 显示全部楼层
很好,谢谢
回复

使用道具 举报

0

主题

9

帖子

2

金钱

新手上路

Rank: 1

积分
11
发表于 2020-8-27 15:30:42 | 显示全部楼层
认真学习粒子群算法的PID参数整定
回复 支持 反对

使用道具 举报

0

主题

54

帖子

1

金钱

注册会员

Rank: 2

积分
55
发表于 2021-1-10 13:39:35 | 显示全部楼层
1111111111111111
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

金钱

新手上路

Rank: 1

积分
24
发表于 2021-5-15 17:33:56 | 显示全部楼层
66666666666666
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

金钱

新手上路

Rank: 1

积分
8
发表于 2021-5-16 22:02:55 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

金钱

新手上路

Rank: 1

积分
8
发表于 2023-4-27 21:06:43 | 显示全部楼层
支持,很好的分享,支持
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-3-5 01:39 , Processed in 0.228990 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表