三种智能算法优化PID参数软件,MATLABAPP开发

news2024/11/23 19:22:54

今天的主题是:三种智能算法优化常见传递函数的PID参数,采用MATLAB APP Designer 开发。提供代码源程序,可以自行修改源代码(不是封装软件)

这个软件基本涵盖了所有的传递函数类型,传递函数的参数简单易改。采用了三种不同的算法优化PID参数,包括灰狼,粒子群,麻雀算法,且做了简单的对比。结果也采用表格的方式,一目了然。

画面风格如下:

c602b262957b60589244bdcf24e02c47.png

软件一共分为三部分,接下来对每部分展开细讲:

第一部分: 被控对象模型参数设置

59cdca7fe8cebd1dc8471a73af54597b.png

这一部分有一个选项切换卡,点击这个选项切换卡可以切换传递函数,传递函数都是最常见的,基本上包含了所有传递函数的类型。

选择好相应的传递函数后,大家就可以自行修改每一个传递函数对应的参数了。剩余四个传递函数的界面如下:

4a76e09057893ed5ce8ee95473a019b4.png

除此之外,在点击开始运行之前,最好要先手动设置一个P,I,D参数,也就是这里的Kp,Ti,Kd,设置好之后,点击运行按钮,即可开始采用三种优化算法对P,I,D参数进行优化。

点击重置按钮,会将已经设置的参数全部归零。

第二部分: SSA-PSO-GWO优化PID参数---------单位阶跃响应

这一部分是三种算法的优化结果展示。分别为麻雀算法,粒子群算法,灰狼算法,最后一幅图是三个曲线图的综合图。

这里加了一个Running指示灯,当点击运行时,指示灯会变成绿色,当运行结束后,指示灯会变为灰色。

35efc19c3867a4ed131ab188926a0efa.png

这里说一下三种智能算法采用的目标函数:选择常用的ITAE指标和控制量动作的加权。这么做的目的可避免控制量动作过大,造成控制器损坏。目标函数也很方便修改。

第三部分: 三个算法优化后,阶跃响应曲线的参数表

参数表采用表格的方式呈现,一目了然。参数包括:P,I,D参数,超调量,峰值时间,上升时间,调节时间。

847b66cab924dd19755a719f902a7af1.png

代码:

%Ⅰ型
            %if flag~=2 && flag~=3 && flag~=3 && flag~=4 && flag~=5
            if flag==1
                K=app.KEditField.Value;
                assignin("base",'K',K)
                T=app.TEditField.Value;
                assignin("base",'T',T)
                n=app.nEditField.Value;
                assignin("base",'n',n)
                PI_1
            end
            %Ⅱ型
            if flag==2
                K=app.KEditField_2.Value;
                assignin("base",'K',K)
                Tz=[app.T1EditField.Value app.T2EditField.Value app.T3EditField.Value app.T4EditField.Value app.T5EditField.Value];
                assignin("base",'Tz',Tz)
                n=app.nEditField_2.Value;
                assignin("base",'n',n)
                PI_2
            end
            %Ⅲ型
            if flag==3
                K=app.KEditField_3.Value;
                assignin("base",'K',K)
                T=app.TEditField_2.Value;
                assignin("base",'T',T)
                n=app.nEditField_3.Value;
                assignin("base",'n',n)
                tt=app.mEditField_2.Value;
                assignin("base",'tt',tt)
                PI_3
            end
            %Ⅳ型
            if flag==4
                K1=app.K1EditField.Value;
                assignin("base",'K1',K1)
                T1=app.T1EditField_2.Value;
                assignin("base",'T1',T1)
                n1=app.n1EditField.Value;
                assignin("base",'n1',n1)
                tt1=app.m1EditField.Value;
                assignin("base",'tt1',tt1)


                K2=app.K2EditField.Value;
                assignin("base",'K2',K2)
                T2=app.T2EditField_2.Value;
                assignin("base",'T2',T2)
                n2=app.n2EditField.Value;
                assignin("base",'n2',n2)
                tt2=app.m2EditField.Value;
                assignin("base",'tt2',tt2)
                PI_4
            end
            %V型
            if flag==5
                K=app.KEditField_4.Value;
                assignin("base",'K',K)
                T=app.TEditField_3.Value;
                assignin("base",'T',T)
                n=app.nEditField_4.Value;
                assignin("base",'n',n)
                tt=app.mEditField.Value;
                assignin("base",'tt',tt)
                PI_5
            end

获取完整代码方式:后台回复关键词获取。

关键词:PIDAPP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java反射机制详解】—— 每天一点小知识

💧 J a v a 反射机制详解 \color{#FF1493}{Java反射机制详解} Java反射机制详解💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 《数据结构与算法》专栏的文章…

pytest 参数化进阶

目录 前言: 语法 参数化误区 实践 简要回顾 前言: pytest是一个功能强大的Python测试框架,它提供了参数化功能,可以帮助简化测试用例的编写和管理。 语法 本文就赶紧聊一聊 pytest 的参数化是怎么玩的。 pytest.mark.par…

week27

这周是磨难的一周不知道NT装了多少次系统,删除了多少数据好消息是把BIOS和ubuntu安装地很熟练了,而且经过爱上了心仪的Ubuntu23.04,就是她了坏消息是一个学期做的笔记全都没了,以后不好回忆了,好消息是不用考试了&…

总结929

今日做了一篇阅读题,差点全军覆没,通过这篇阅读,主要说明了两大问题,一个是单词,背的还不够牢固,其二,语法功底还不够扎实。但说实话,在语法方面,还是下了一番功夫&#…

linux 内网批量快速传输大文件 nc

使用nc工具 传输内网宽带拉满先运行接收端 开始监听使用 ansible 拷贝脚本到其它接收端服务器批量运行接收端脚本查看nc是否运行运行发送端运行发送端脚本开始传输文件 传输内网宽带拉满 先运行接收端 开始监听 接收端脚本 re.sh #!/bin/bash #Revision: 1.0 #Author:…

动态规划(一) —— 从背包系列问题看DP

前言 动态规划可以算是算法初学者的噩梦哈哈,这段时间荔枝在持续学习Java后端的同时也没有忘记刷题嘿嘿嘿,总算把代码随想录上给出的有关动态规划的题目刷完了。接下来的几篇文章荔枝将会对于刷过的动态规划问题做出总结并给出相应的个人体会和理解。在本…

compose之沉浸式(侵入式)状态栏(隐藏状态栏)

沉浸式(侵入式)状态栏 效果图: 1、代码加入:WindowCompat.setDecorFitsSystemWindows(window, false) ComposeTestTheme {WindowCompat.setDecorFitsSystemWindows(window, false)Greeting("Android")} 2、沉浸式(侵入式)主题: …

消息推送(websocket)集群化解决方案

目录 需求分析解决方案实现步骤架构图配置websocket请求地址配置websocket连接前置和连接关闭监听配置websocket处理程序配置redis交换机配置redis订阅监听配置redis发布监听需求分析 及时信息传递:消息推送功能能够确保网站向用户发送及时的重要信息,包括新闻更新、促销活动…

消息队列——rabbitmq的不同工作模式

目录 Work queues 工作队列模式 Pub/Sub 订阅模式 Routing路由模式 Topics通配符模式 工作模式总结 Work queues 工作队列模式 C1和C2属于竞争关系,一个消息只有一个消费者可以取到。 代码部分只需要用两个消费者进程监听同一个队里即可。 两个消费者呈现竞争关…

Redis进阶底层原理-主从复制

Redis的主从节点都会记录对方的信息,核心还包括ReplicationID 和 offset , ReplicationID : 主从节点实例的ID ,redis内部就是通过这个id去识别主从节点。offset:数据同步偏移量,也就是从节点每次从主节点同…

3.6 Bootstrap 导航元素

文章目录 Bootstrap 导航元素表格导航或标签胶囊式的导航菜单基本的胶囊式导航菜单垂直的胶囊式导航菜单 两端对齐的导航禁用链接下拉菜单带有下拉菜单的标签带有下拉菜单的胶囊标签页与胶囊式标签页 Bootstrap 导航元素 本文将讲解 Bootstrap 提供的用于定义导航元素的一些选项…

使用thrift编写C++服务器、客户端

在上一节《Linux 下编译 thrift》中,我们成功编译出了thrift的库文件,本节我们来编写thrift的C服务器,客户端。 官网 https://thrift.apache.org/tutorial/cpp.html 有thrift的C例子。在我们之前下载下来的thrift 源码根目录的tutorial/cpp目…

MySQL高级管理

目录 一、指定主键的一种方式 1.1高级操作 1.2数据表高级操作,克隆表 1.2.1 克隆表名 1.2.2备份表内容 1.3复制表 1.4删除指令 方法一: 方法二: 删除速度 二、创建临时表 三、MySQL中6种常见的约束 3.1创建主表 3.2创建从表 3.3为主表test01添加…

[Docker异常篇]解决Linux[文件异常]导致开机Docker服务无法启动

文章目录 一:场景复现二:解决思路2.1: 对比其他节点docker配置2.2:试着修改为正常节点配置2.2:根据上面异常显示,不一定是配置不对,可能是文件系统有损坏 三:解决 -> 执行命令 mo…

【机器学习算法】奇异值分解(SVD)

文章目录 奇异值分解(SVD)1.理论部分1.1特征分解(ED)1.2 奇异值分解(SVD)求解U和V求解Σ 2.应用部分2.1图像压缩2.2图像数据集成分分析2.3 数据降维(PCA的一种解法) Reference 奇异值分解(SVD) 奇异值分解(Singular Value Decomposition) 是矩阵低秩分解的一种方法,…

太猛了!Web安全漏洞批量扫描框架

关注【Hack分享吧】公众号,回复关键字【230528】获取下载链接 工具介绍 一个应用于web安全领域的漏洞批量扫描框架,可被应用于但不限于如下场景: 0Day/1Day全网概念验证(在没有测试环境(各种商业、闭源软件)或懒得搭建测试环境的情况下&…

D. Binary String Sorting

Problem - 1809D - Codeforces 思路:最后得到的结果就是前面是一串0后面是一串1,那么我们可以枚举分界点,如果枚举到i,那么就将1~i变为0,将i1变为1,我们发现如果一个1在1~i中,如果他是第i-1个,那…

Redis进阶底层原理-Cluster集群底层

Redis实现高可用的方案有很多中,先了解下高可用和分区的概念: 高可用是指系统在面对硬件故障、网络故障、软件错误等意外问题时,仍能给客户端提供正常的服务,尽量的减少服务的阻塞、终端现象。在高可用的方案中一般会采用冗余备份…

《洛谷深浅》第五章---数组与数据批量存储

文章目录 前言一、小鱼比可爱二、小鱼的数字游戏三、冰雹猜想四、校门外的树五、旗鼓相当的对手六、旗鼓相当的对手总结 前言 本节主要学习一维数组 和 多维数组 后边的知识我觉得 可以试着了解并不要求你掌握这么难的题目 因为ACM更多都是思维题目 所以这里把重要的题目掌握就…

【多线程系列-03】深入理解java中线程的生命周期,任务调度

多线程系列整体栏目 内容链接地址【一】深入理解进程、线程和CPU之间的关系https://blog.csdn.net/zhenghuishengq/article/details/131714191【二】java创建线程的方式到底有几种?(详解)https://blog.csdn.net/zhenghuishengq/article/details/127968166【三】深入…