1 内容介绍

分数微积分已经被研究了将近 3 个世纪,并且已 经被科学家广泛应用到科学与控制工程领域中。分 数阶 PID 控制系统是由斯洛伐克学者 Podlubny于 1994 年提出,并应用于分数阶模糊系统中。在此项工 作之后,其他的工程师应用不同的设计与调整方法设 计出分数阶 PID 控制器。分数阶微积分为复杂成比例 的系统过程和事件提供完善的数学模型,应用于物理、 生物与控制理论方面。 分数模糊控制器( FFCs) 是传统模糊控制器与分 数阶算子结合,在多种动力系统中表现出比传统的模 糊控制器更好的性能。分数阶模糊控制器中的参数估 计问题一般用进化算法去优化求解,提高控制器的精 度与稳定性能。例如: 用遗传算法模糊分数阶控制器 模型问题; 用混沌粒子群算法对可再生发电混合动 力系统进行分数阶模糊控制器; 使用微分和声搜索 算法设计分数阶; 采用改进的重力搜索算法对抽水 蓄能水电机组进行快速模糊分数阶 PID 控制; 分数阶模糊 PID 控制器在机械手臂中的应用性能分析; 社会蜘蛛群算法对分数模糊控制器参数标定。虽然这些算法都获得比较理想的结果,但是仍然具有一 个很重要的局限性,由于其搜索策略中的勘探与开采 之间的平衡关系,容易陷入局部最优的解,这种行为会 导致整个种群快速集中在最优粒子周围,容易形成早 熟收敛,不利于搜索空间的探索。 灰狼优化算法是由 Mirjalili 等于 2014 年提出 的新型群智能优化算法。灰狼优化算法( GWO) 是模 拟灰狼的狩猎机制,包括搜索猎物、追踪猎物、包围猎 物与捕杀猎物等步骤,与其他的元启发式优化算法不 同,该算法考虑领导阶层。由于该算法具有较好的平 衡勘探与开采能力,所以该算法越来越受到相关领域 的人们重视,并成功地应用于一些实际工程问题中。

PID模糊控制在工业控制中是最广泛的一种控制方法,在一些复杂的实际系统中,应用分数阶PID模糊控制器在整定系统参数性能上优于整数模糊控制器.分数阶模糊控制器具有较多的控制参数,这些控制参数直接影响了模糊控制器的性能.用传统的算法校准分数阶模糊控制器并不能得到最佳的参数值,而且标定参数的过程较为复杂.因此提出用灰狼优化算法(Grey Wolf Optimizer,GWO)优化分数阶模糊控制器的参数.将基于灰狼优化算法的分数阶模糊控制器优化方法与其他五种典型的基于群智能的优化方法进行了比较.实验结果表明,该方法的控制效果更好.

2 仿真代码

<span style="color:#333333"><span style="background-color:rgba(0, 0, 0, 0.03)"><code>​</code><code>​</code><code><span style="color:#afafaf">%</span> <span style="color:#dd1144">Grey Wolf Optimizer</span></code><code>function <span style="color:#dd1144">[Alpha_score,Alpha_pos,Convergence_curve]=GWOr(SearchAgents_no,Max_iter,lb,ub,dim)</span></code><code>x0=<span style="color:#dd1144">[-pi pi 0 0 0 0];</span></code><code>Ts=<span style="color:#dd1144">[0 5]; </span></code><code><span style="color:#afafaf">%</span> <span style="color:#dd1144">initialize alpha, beta, and delta_pos</span></code><code>Alpha_pos=<span style="color:#dd1144">zeros(1,dim);</span></code><code>Alpha_score=<span style="color:#dd1144">inf; %change this to -inf for maximization problems</span></code><code>​</code><code>Beta_pos=<span style="color:#dd1144">zeros(1,dim);</span></code><code>Beta_score=<span style="color:#dd1144">inf; %change this to -inf for maximization problems</span></code><code>​</code><code>Delta_pos=<span style="color:#dd1144">zeros(1,dim);</span></code><code>Delta_score=<span style="color:#dd1144">inf; %change this to -inf for maximization problems</span></code><code>​</code><code><span style="color:#afafaf">%Initialize</span> <span style="color:#dd1144">the positions of search agents</span></code><code>Positions=<span style="color:#dd1144">initializationr(SearchAgents_no,dim,ub,lb);</span></code><code>​</code><code>Convergence_curve=<span style="color:#dd1144">zeros(1,Max_iter);</span></code><code>​</code><code>l=<span style="color:#dd1144">0;% Loop counter</span></code><code>​</code><code><span style="color:#afafaf">%</span> <span style="color:#dd1144">Main loop</span></code><code>while <span style="color:#dd1144">l<Max_iter</span></code><code>    l</code><code>    for <span style="color:#dd1144">i=1:size(Positions,1)  </span></code><code>        </code><code>        </code><code>       <span style="color:#afafaf">%</span> <span style="color:#dd1144">Return back the search agents that go beyond the boundaries of the search space</span></code><code><span style="color:#afafaf">%</span>         <span style="color:#dd1144">Flag4ub=Positions(i,:)>ub;</span></code><code><span style="color:#afafaf">%</span>         <span style="color:#dd1144">Flag4lb=Positions(i,:)<lb;</span></code><code><span style="color:#afafaf">%</span>         <span style="color:#dd1144">Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;   </span></code><code>        Kpd=<span style="color:#dd1144">Positions(i,:);</span></code><code>        <span style="color:#afafaf">[T,X]</span> = <span style="color:#dd1144">ode45(@(t,x) r2dof(t,x,Kpd),Ts,x0);</span></code><code>​</code><code>        qd1=<span style="color:#dd1144">sin(4.17*T);</span></code><code>        <span style="color:#afafaf">%</span> <span style="color:#dd1144">qdot_r1=4.17*cos(4.17*T);</span></code><code>        <span style="color:#afafaf">%</span> <span style="color:#dd1144">qdot2_r1=-4.17*4.17*sin(4.17*T);</span></code><code>        qd2=<span style="color:#dd1144">1.2*sin(5.11*T);</span></code><code>        <span style="color:#afafaf">%</span> <span style="color:#dd1144">qdot_r2=1.2*5.11*cos(5.11*T);</span></code><code>        <span style="color:#afafaf">%</span> <span style="color:#dd1144">qdot2_r2=-1.2*5.11*5.11*sin(5.11*T);</span></code><code>​</code><code>        th1=<span style="color:#dd1144">X(:,1); %theta1 wavwform</span></code><code>        th2=<span style="color:#dd1144">X(:,2);</span></code><code>        fitness=<span style="color:#dd1144">Fitnessr(th1,th2,qd1,qd2);</span></code><code>        <span style="color:#afafaf">%</span> <span style="color:#dd1144">Calculate objective function for each search agent</span></code><code><span style="color:#afafaf">%</span>         <span style="color:#dd1144">fitness=Fitnessr(Positions(i,:));</span></code><code>        </code><code>        <span style="color:#afafaf">%</span> <span style="color:#dd1144">Update Alpha, Beta, and Delta</span></code><code>        if <span style="color:#dd1144">fitness<Alpha_score </span></code><code>            Alpha_score=<span style="color:#dd1144">fitness; % Update alpha</span></code><code>            Alpha_pos=<span style="color:#dd1144">Positions(i,:);</span></code><code>        end</code><code>        </code><code>        if <span style="color:#dd1144">fitness>Alpha_score && fitness<Beta_score </span></code><code>            Beta_score=<span style="color:#dd1144">fitness; % Update beta</span></code><code>            Beta_pos=<span style="color:#dd1144">Positions(i,:);</span></code><code>        end</code><code>        </code><code>        if <span style="color:#dd1144">fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score </span></code><code>            Delta_score=<span style="color:#dd1144">fitness; % Update delta</span></code><code>            Delta_pos=<span style="color:#dd1144">Positions(i,:);</span></code><code>        end</code><code>    end</code><code>    </code><code>    </code><code>    a=<span style="color:#dd1144">2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0</span></code><code>    </code><code>    <span style="color:#afafaf">%</span> <span style="color:#dd1144">Update the Position of search agents including omegas</span></code><code>    for <span style="color:#dd1144">i=1:size(Positions,1)</span></code><code>        </code><code>        </code><code><span style="color:#afafaf">%</span>         <span style="color:#dd1144">for j=1:size(Positions,2)     </span></code><code>                       </code><code>            r1=<span style="color:#dd1144">rand(); % r1 is a random number in [0,1]</span></code><code>            r2=<span style="color:#dd1144">rand(); % r2 is a random number in [0,1]</span></code><code>            </code><code>            A1=<span style="color:#dd1144">2*a*r1-a; % Equation (3.3)</span></code><code>            C1=<span style="color:#dd1144">2*r2; % Equation (3.4)</span></code><code>            </code><code>            D_alpha=<span style="color:#dd1144">abs(C1*Alpha_pos-Positions(i,:)); % Equation (3.5)-part 1</span></code><code>            X1=<span style="color:#dd1144">Alpha_pos-A1*D_alpha; % Equation (3.6)-part 1</span></code><code>                       </code><code>            r1=<span style="color:#dd1144">rand();</span></code><code>            r2=<span style="color:#dd1144">rand();</span></code><code>            </code><code>            A2=<span style="color:#dd1144">2*a*r1-a; % Equation (3.3)</span></code><code>            C2=<span style="color:#dd1144">2*r2; % Equation (3.4)</span></code><code>            </code><code>            D_beta=<span style="color:#dd1144">abs(C2*Beta_pos-Positions(i,:)); % Equation (3.5)-part 2</span></code><code>            X2=<span style="color:#dd1144">Beta_pos-A2*D_beta; % Equation (3.6)-part 2       </span></code><code>            </code><code>            r1=<span style="color:#dd1144">rand();</span></code><code>            r2=<span style="color:#dd1144">rand(); </span></code><code>            </code><code>            A3=<span style="color:#dd1144">2*a*r1-a; % Equation (3.3)</span></code><code>            C3=<span style="color:#dd1144">2*r2; % Equation (3.4)</span></code><code>            </code><code>            D_delta=<span style="color:#dd1144">abs(C3*Delta_pos-Positions(i,:)); % Equation (3.5)-part 3</span></code><code>            X3=<span style="color:#dd1144">Delta_pos-A3*D_delta; % Equation (3.5)-part 3             </span></code><code>            </code><code>            <span style="color:#afafaf">Positions(i,</span>:<span style="color:#dd1144">)=(X1+X2+X3)/3;% Equation (3.7)</span></code><code>            </code><code><span style="color:#afafaf">%</span>         <span style="color:#dd1144">end</span></code><code>    end</code><code>    l=<span style="color:#dd1144">l+1;    </span></code><code>    <span style="color:#afafaf">Convergence_curve(l)</span>=<span style="color:#dd1144">Alpha_score;</span></code><code>end</code><code>​</code><code>​</code><code>​</code><code>​</code></span></span>

3 运行结果

4 参考文献

[1]范鲁娜. 灰狼算法优化分数阶模糊控制器参数[J]. 计算机应用与软件, 2021, 38(10):6.

[1]阎晓妹, 尚婷, 赵小国. 基于分数阶滑模控制器的不确定分数阶混沌系统同步[J]. 应用数学学报, 2018, 41(6):12.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【控制】基于灰狼算法改进分数阶PD滑模控制器附matlab代码相关推荐

  1. 【预测模型】基于麻雀算法改进广义回归神经网络(GRNN)实现数据预测matlab代码

    1 简介 为实现精准施肥"减施增效"的数字化农业施肥技术,本文基于并运用了麻雀搜索算法,对广义回归神经网络(GRNN)进行了结合与改进,并构建作物广义回归神经网络(GRNN)结合麻 ...

  2. 【预测模型-DELM分类】基于哈里斯鹰算法改进深度学习极限学习机实现数据分类附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  3. 【lssvm预测】基于天鹰算法优化最小二乘支持向量机lssvm实现数据回归预测附matlab代码

    1 简介 短时交通流预测是实现智能交通控制与管理,交通流状态辨识和实时交通流诱导的前提及关键,也是智能化交通管理的客观需要.到目前为止,它的研究结果都不尽如人意.现有的以精确数学模型为基础的传统预测方 ...

  4. 【图像识别】基于支持向量机算法svm实现脸部动态特征人脸表情识别附matlab代码

    1 简介 人脸表情识别技术涉及情感计算,图像处理,机器视觉模式识别,生物特征识别等研究领域,是一个极富挑战性的交叉课题.该文介绍一种基于lpq特征,利用支持向量机(SVM)进行分类的人脸表情识别技术. ...

  5. 【lssvm回归预测】基于鸽群算法优化最小二乘支持向量机PIO-lssvm实现数据回归预测附matlab代码

    ​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  6. 【DBN分类】基于麻雀算法优化深度置信网络SSA-DBN实现数据分类附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  7. 基于灰狼算法优化概率神经网络PNN的分类预测-附代码

    基于灰狼算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于灰狼算法优化概率神经网络PNN的分类预测 - 附代码 1.PNN网络概述 2.变压器故障诊街系统相关背景 2.1 模型建立 3. ...

  8. 【控制】粒子群算法(PSO)优化滑模控制器参数

    PSO优化滑模控制器参数 PSO优化滑模控制器参数 1.粒子群算法 1.1粒子群算法原理 1.2粒子群算法求函数最值 2.滑模变结构控制 2.1被控对象 2.2滑模控制器设计 2.3实验仿真 3.粒子 ...

  9. 智能优化算法-阿里巴巴和四十大盗算法Ali baba and the Forty Thieves algorithm(附Matlab代码)

    引言 阿里巴巴和四十大盗算法Ali baba and the Forty Thieves algorithm是一种新的元启发式算法,用于解决全局优化问题.回想一下著名的阿里巴巴和四十大盗的故事,阿里巴 ...

最新文章

  1. Maltego更新到4.1.6
  2. Linux下程序的保护机制(checksec)
  3. Spark内存管理(2)—— 统一内存管理
  4. 烧录imx6需要的linux空间,IMX6Q学习笔记——开发板的Linux系统更新和烧录
  5. mysql中lead_SqlServer2012中LEAD函数简单分析_MySQL
  6. 保存点云数据_3D点云配准(二多幅点云配准)
  7. ASP.NET MVC路由扩展:路由映射
  8. 负载均衡研究 基础
  9. java quartz Scheduler 操作JobDetail
  10. 45度地图遮挡问题解决方案(cocos2d-x)
  11. Linux系统重要快捷键 Shell 常用通配符
  12. linux下免密认证登录失败原因总结
  13. lpush rpush 区别_redis中lpush、rpush、lset、lrem是什么
  14. 嵌入式系统的开发概述(三星s5p6818系统为例)
  15. 牛顿?不不不,是牛逼顿
  16. matlab蜂窝异构网络基站用户矩阵 依照最近距离配对/快速计算两矩阵彼此距离
  17. 【错误记录/Blender】python中使用bpy模块
  18. 普洱市企业登记“区块链云签名”试点工作启动, 用户操作仅需5分钟!
  19. ps 2019直装版 for Mac
  20. folly::ConcurrentSkipList 详解

热门文章

  1. LoadRunner软件安装步骤+资料
  2. js操作滚动条事件实例
  3. AUTOCAD2013激活方法-使用注册机生成激活码
  4. Android群发短信草稿保存与发送机制
  5. 过去十年,我们用了哪些即时战略游戏训练AI?
  6. JDBC中的ResultSetMetaData获取列名字
  7. 如何恢复格式化的东西?u盘被格式化了怎么恢复
  8. 不用下载的网页版Axure在这里
  9. 关于如何将python中多维数组的数字保留两位有效数字
  10. 无限幻斗那个服务器人多,《无限幻斗》旅团出新玩法 魔物狩猎探秘惊喜