Hello Mat

 找回密码
 立即注册
查看: 6152|回复: 2

基于花授粉算法的PID参数整定

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
发表于 2018-3-24 18:18:51 | 显示全部楼层 |阅读模式
基于花授粉算法的PID参数整定
百度网盘链接:https://pan.baidu.com/s/1A0KDqbQLDpskYdUi3y2kgw 密码:htpk
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1

  1. clc,clear,close all;
  2. warning off;
  3. format longG;
  4. % 花授粉算法FPA
  5. maxgen = 200;   % 迭代次数
  6. sizepop = 20;   % 种群数量
  7. nvar = 3;       % 3个未知量,kp, ki, kd
  8. popmin = [0,0,0];  popmax = [1,100,1]; % x
  9. % popmin = 0.*ones(1,nvar);  popmax = 10.*ones(1,nvar); % x
  10. beta = 1.5;     % beta控制常数
  11. pFPA = 0.6;     % 0.6-1.0之间
  12. % 初始化种群
  13. for i=1:sizepop
  14.     pop(i,:) = popmin + (popmax-popmin).*rand(1, nvar);
  15.     fitness(i) = PID_FPA(  pop(i,:)  );
  16. end
  17. % 记录一组最优值
  18. [bestfitness,bestindex]=min(fitness);
  19. zbest=pop(bestindex,:);   % 全局最佳
  20. gbest=pop;                % 个体最佳
  21. fitnessgbest=fitness;     % 个体最佳适应度值
  22. fitnesszbest=bestfitness; % 全局最佳适应度值

  23. % 迭代寻优
  24. for iter=1:maxgen
  25.     disp(['当前的迭代次数: ', num2str(iter)])
  26.     for j=1:sizepop
  27.         
  28.         % 种群的更新
  29.         pop(j,:) = pFPA*( pop(j,:)+rand*(gbest(j,:)-pop(j,:)) )+...
  30.             (1-pFPA)*( pop(j,:)+ Levy(beta,nvar).*(zbest - pop(j,:)) );
  31.         
  32.         % x
  33.         for kk=1:nvar
  34.             if pop(j,kk)>popmax(kk)
  35.                 pop(j,kk)=popmax(kk);
  36.             end
  37.             if pop(j,kk)<popmin(kk)
  38.                 pop(j,kk)=popmin(kk);
  39.             end
  40.         end
  41.         
  42.         % 适应度更新
  43.         fitness(j) = PID_FPA( pop(j,:) );
  44.         
  45.         % 比较  个体间比较
  46.         if fitness(j)<fitnessgbest(j)
  47.             fitnessgbest(j) = fitness(j);
  48.             gbest(j,:) = pop(j,:);
  49.         end
  50.         if fitness(j)<bestfitness
  51.             bestfitness = fitness(j);
  52.             zbest =  pop(j,:);
  53.         end
  54.     end
  55.     fitness_iter(iter) = bestfitness;
  56. end

  57. disp('最优解')
  58. disp(zbest)
  59. fprintf('\n')

  60. figure('color',[1,1,1])
  61. plot(fitness_iter,'ro-','linewidth',2)
  62. % loglog(fitness_iter,'ro-','linewidth',2)
  63. axis tight
  64. grid on

  65. save zbest.mat zbest

复制代码


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

使用道具 举报

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
 楼主| 发表于 2019-8-6 22:23:16 | 显示全部楼层
4个对应的整定传递函数:
  1. >> ts=0.001;
  2. sys=tf([1.0],[1 1])

  3. sys =

  4.     1
  5.   -----
  6.   s + 1

  7. Continuous-time transfer function.

  8. >> sys=tf([1.0],[1 1],'ioDelay',0.2)

  9. sys =

  10.                   1
  11.   exp(-0.2*s) * -----
  12.                 s + 1

  13. Continuous-time transfer function.

  14. >> sys=tf([1.6],[1 2.584 1.6])

  15. sys =

  16.           1.6
  17.   -------------------
  18.   s^2 + 2.584 s + 1.6

  19. Continuous-time transfer function.

  20. >> sys=tf([1.6],[1 2.584 1.6],'ioDelay',0.1)

  21. sys =

  22.                         1.6
  23.   exp(-0.1*s) * -------------------
  24.                 s^2 + 2.584 s + 1.6

  25. Continuous-time transfer function.
复制代码
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复 支持 反对

使用道具 举报

0

主题

1

帖子

6

金钱

新手上路

Rank: 1

积分
7
发表于 2019-12-26 14:38:42 | 显示全部楼层
学习学习,楼主辛苦了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 19:31 , Processed in 0.238773 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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