【粒子群算法整定PID参数】MATLAB2016b(02一些细节问题)

2023-05-16

此帖主要针对01帖的细节方面

很抱歉更新的晚了,现在我对01帖发布到现在,用粒子群算法整定PID参数时存在的细节问题进行讲解,以便于帮助大家学会此方法,降低整定参数的难度。


问题一:matlab函数使用问题

这个问题主要针对MATLAB的初学者:
matlab中函数的使用,一般定义一个function,这样可以直接调用使用。我们知道整定参数时要计算参数的适应度,在我的代码中便是通过定义一个function,来获得参数的适应度,以便用于判断当前参数的优劣。所以要明白函数的调用方法。

function z = pso_pid(kp,ki,kd)
%赋值运行且返回参数适应度
%assigin函数,作用是可在m文件里控制simulink,对变量kp进行赋值
assignin('base','kp',kp);
assignin('base','ki',ki);
assignin('base','kd',kd);
try  %% 用于应对simulink仿真异常,返回一个极大值作为适应度,表明当前参数很差
    y_out=sim('l.slx',[0,10]);    %sim函数,可运行siumlink模型,[0,10]代表仿真10s
    z=simout1.data(end,1);		  %适应度用返回给z
catch
    z=1e6;						  %如果异常,就返回1e6。通常异常都是由于参数太差引起的。
end

问题二:仿真运行框中一直出现警报

警报是由于仿真模型部分连接问题或者参数问题:

1.仿真模型连接不完全,有时也会引起警报,但并不影响仿真运行。
2.参数整定的迭代过程中,出现很不符合系统的参数,导致仿真不收敛等情况而出现警报,这会影响仿真运行。
警报图片

解决方案:

出现警报时,同时查看显示波形的示波器:
如果正常运行,则是第一种情况,警报可以忽略。

如果示波器发现仿真卡在某个时间点或者仿真运行很慢,则是第二种情况,此时需要点示波器上的停止按钮,跳过此次仿真。但这样会导致该参数对应的适应度很优秀,这时,我们可以重新设计一个适应度函数,来使它的适应度变的很差。
点击暂停,跳过此次仿真

问题三:为什么整参时很容易出现适应度都是1e6的情况

1.定义的function中有bug,返回适应度值有问题。
2.算法初始取定的参数范围有问题。

1解决方案

.返回函数的问题,即sim函数的问题,一般的代码如下

	y_out=sim('l.slx',[0,10]);    %sim函数,可运行siumlink模型,[0,10]代表仿真10s
    z=simout1.data(end,1);	%simout是simulink中的一个模块,可以记录数值并可以通过m文件得到

这时可能发生bug,y_out是一个结构体,当用z=simout1.data(end,1)时,会出现找不到这个值,所以就会出现异常,z也就取了我们设定的1e6,这样就无法区分参数的优劣。
代码改为如下,可以避免这个BUG

    s_out=sim('zitai_sliding.slx',[0,15]);    %使用命令行运行控制系统模型
    yout=s_out.get('simout');
    z=yout.data(end,1);

2解决方案

如果是电脑性能好,时间足,可以通过增大种群数和迭代次数来克服。但仍要先给出一个粗略的参数可能的取值范围,这样不容易产生令仿真出现异常的参数,同时也可以更大概率的获得全局最优参数。对于不同的系统,仍需要手动调试,这样会避免后续出现的问题、

gens=100;
np=80;
nd=3;
%范围
kpmax=0.1;
kpmin=0;
kimax=0.05;
kimin=0;
kdmax=0.04;
kdmin=0;

这是我自己之前调的一个系统,刚开始定义的参数范围特别大,便让程序开始跑了,结果跑完了发现没有合适的解,这就说明我定义的pid参数范围根本不符合系统。再加上我的种群数量又小,很容易产生不出来适合的解,从而导致一直在非可行域打转。
最后还是通过对被控系统分析了一下,才知道参数不能取的过大,于是我慢慢缩小范围,然后用算法跑,来获得了较优的可行解。
因此,我们在进行参数范围设定时,很有必要花费一点时间手动调试一下适合系统的参数范围,找出一个可行范围,再利用算法跑,这样极不容易出现仿真卡顿,而且粒子群算法的寻优速度快的优势也会被很好的表现出来。

最后

如果仍然难以处理的bug,还没有学会此方法,欢迎加q320820676。
免费提供:简单仿真模型+代码
有偿:包教会,帮调PID、SMC、ADRC模型参数


后续跟新粒子群算法整定ADRC参数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【粒子群算法整定PID参数】MATLAB2016b(02一些细节问题) 的相关文章

  • 信号量和互斥量(锁)的区别

    信号量 xff1a 那是多线程同步用的 xff0c 一个线程完成了某一个动作就通过信号告诉别的线程 xff0c 别的线程再进行某些动作 互斥量 xff1a 这是多线程互斥用的 xff0c 比如说 xff0c 一个线程占用了某一个资源 xff
  • C++的struct和class的区别

    目录 1 C 43 43 的struct和class的区别1 1 成员访问范围的差异1 struct2 class 1 1 继承关系访问范围的差异1 struct struct2 struct class3 struct private c
  • Android 8.0 以后前台服务的启动方式

    前言 在官方文档 Android 8 0之后的行为变更 中有这样一段话 xff1a Android 8 0 有一项复杂功能 xff1b 系统不允许后台应用创建后台服务 因此 xff0c Android 8 0 引入了一种全新的方法 xff0
  • PID控制算法的c语言实现 附录2 直流电机PWM调速系统中控制电压非线性研究

    附录2 直流电机PWM调速系统中控制电压非线性研究 引言 由于线性放大驱动方式效率和散热问题严重 xff0c 目前绝大多数直流电动机采用开关驱动方式 开关驱动方式是半导体功率器件工作在开关状态 xff0c 通过脉宽调制PWM控制电动机电枢电
  • Android中dispatchDraw分析

    Android中dispatchDraw分析 View中 xff1a public void draw Canvas canvas 1 Draw the background 绘制背景 2 If necessary save the can
  • CMake命令之execute_process

    用途 xff1a 执行一个或多个子进程 execute process COMMAND lt cmd1 gt args1 COMMAND lt cmd2 gt args2 WORKING DIRECTORY lt directory gt
  • 利用反射 Mirror 快速的获取/打印枚举值

    在 Swift 中 xff0c 枚举是一等类型 xff0c 可以给其添加计算属性 xff0c 实例方法 xff0c 构造函数 xff0c 遵循协议 xff0c 另外 xff0c 还可以定义枚举来存储任意类型的关联值 这些特性可以让枚举适用于
  • linux 应用层编程之内核链表list的使用

    linux内核提供了一个经典通用的双向循环链表list的实现 xff0c 任何模块都可以借助该接口实现自己的内部循环链表 因为是通用的 xff0c 可以直接移植到用户态中使用 xff0c 下面介绍相关的接口与一个简单操作例子 xff0c 包
  • EFR32修改开发板VCOM串口波特率的方法

    Silabs官方开发板上的Jlink CDC串口 xff08 VCOM xff09 默认的波特率是115200 xff0c 在普通的终端软件 xff08 如 串口调试助手 xff09 里设置别的波特率是不起作用的 要让它支持其他的波特率 x
  • 用 Latex 生成英文论文中的 算法步骤/伪代码 并插入 word 中

    准备工作 xff1a 1 先安装 CTEX https mirrors tuna tsinghua edu cn ctex legacy 2 9 2 下载 algorithm2e 包 xff08 里面有详细的使用说明文档 xff09 htt
  • Docker 大势已去,Podman 万岁

    前言 郑重声明 xff1a 本文不是 Podman 的入门篇 xff0c 入门请阅读这篇文章 xff1a 再见 Docker xff0c 是时候拥抱下一代容器工具了 Podman 原来是 CRI O 项目的一部分 xff0c 后来被分离成一
  • 生产者消费者问题--练习题目

    10 os考研题目 改题目中p0 xff0c p1两个进程可以互斥的进入临界区 xff0c 会出现饥饿现象 xff08 答案给的是D xff0c 但是自我认为可以出现饥饿现象 xff09 互斥的访问 xff1a p0 Flag 0 61 T
  • PromQL的简单使用

    PromQL的简单使用 一 背景二 PromQL的数据类型三 字面量1 字符串字面量2 浮点数字面量 四 时间序列选择器1 即时向量选择器1 组成部分2 指标名称和匹配器的组合3 匹配器 2 区间向量选择器1 时间格式 3 偏移量修改器 五
  • 一步一步在平衡车上实现卡尔曼滤波

    这是一个翻译版本 xff0c 其中的一些公式 xff0c 符号太多 xff0c 我就不一个一个去上传 xff0c 大家可以参考下面网址去对照着看 A practical approach to Kalman filter and how t
  • 浮点数的二进制表示(IEEE 754标准)

    浮点数是我们在程序里常用的数据类型 xff0c 它在内存中到底是怎么样的形式存在 xff0c 是我了解之前是觉得好神奇 xff0c 以此记录 xff0c 作为学习笔记 现代计算机中 xff0c 一般都以IEEE 754标准存储浮点数 xff
  • vscode如何打开settings.json

    解决方案步骤 xff1a 打开vscode编辑器 xff0c 本文演示的vscode是英文版 点击左下角齿轮状的图标 在弹出的菜单中选择 Settings Settings点击后 xff0c 会出现一个设置窗口 在Settings窗口中点击
  • Failed to execute ‘createObjectURL‘ on ‘URL‘ Overload resolution failed

    vue使用二进制流下载文件 xff0c 使用 link href 61 window URL createObjectURL blob 报错 xff1a Failed to execute createObjectURL on URL Ov
  • openwrt安装docker并启动

    在软件包中下载docker和dockerd 也可以自行下载ipk文件安装 安装成功后启动xshell连上openwrt 执行 etc init d dockerd 启动docker的daemon服务 若要dockerd自启动则执行 ln s
  • Mysql环境变量配置

    一 mysql的环境变量配置步骤 1 1 在桌面选择 计算机 的图标 xff0c 右键 gt 属性 gt 点击 高级系统设置 gt 点击 环境变量 2 2 新建MYSQL HOME变量 xff0c 并将值设置为C Program Files
  • MySQL安装配置教程(超级详细)

    一 下载MySQL Mysql官网下载地址 xff1a MySQL Download MySQL Installer Archived Versions 1 选择要安装的版本 xff0c 本篇文章选择的是5 7 31版本 xff0c 点击D

随机推荐

  • mysql字符切割的四种方式

    1 从左开始截取字符串 left xff08 str length xff09 说明 xff1a left xff08 被截取字段 xff0c 截取长度 xff09 select left 39 如果暴力不是为了杀戮 xff0c 那将变得毫
  • Podman 使用指南

    原文链接 xff1a Podman 使用指南 Podman 原来是 CRI O 项目的一部分 xff0c 后来被分离成一个单独的项目叫 libpod Podman 的使用体验和 Docker 类似 xff0c 不同的是 Podman 没有
  • ClickHouse查询语句详解

    ClickHouse查询语句兼容大部分SQL语法 xff0c 并且进行了更加丰富的扩展 xff0c 查询语句模板如下 xff1a WITH expr list subquery SELECT DISTINCT ON column1 colu
  • Mysql和Redis如何保证数据一致性

    文章目录 前言一 先更新数据库 xff0c 再更新redis二 先更新redis xff0c 在更新数据库三 先更新数据库 xff0c 再删除redis四 先删除redis xff0c 再更新数据库总结 前言 如何保证数据库和缓存双写一致
  • SQL——左连接(Left join)、右连接(Right join)、内连接(Inner join)

    文章目录 前言 一 概念 二 例子 总结 前言 最近在做SQL相关的练习 发现以前那么自信的SQL放久了不碰也变得棘手起来 特别是这一块表之间的内外连接 所以这篇是关于这个内外连接的整理 一 概念 首先还是介绍一下这三个的定义 1 Left
  • UCOSII之项目实战总结

    电子IT行业博大精深 xff0c 没有人能够用笔记本天天记录自己所学的知识 xff0c 于是乎 xff0c 撰写博客就成了每个 IT民工 的专长 再者 xff0c 写一篇博客 xff0c 其意义与不但记录了自己所需的知识 xff0c 更提高
  • 明白了一句话:“加速度信号对高频敏感,位移信号对低频敏感”

    以前听别人说这些 xff0c 然后记住了 但是一直不大理解 最近在调试IEPE传感器 xff0c 正好要算位移 速度 加速度 对于相同的速度 xff0c 频率越高 xff0c 加速度值就越大 因为从公式就能看出来 xff0c 对于固定频率的
  • ubuntu 16.04使用IntelRealSense D435i调用realsense ROS包时,报symbol lookup error和undefined symbol错误的解决办法

    在ubuntu 16 04使用IntelRealSense D435i调用realsense ROS包时 xff0c 运行 roscore roslaunch realsense2 camera rs rgbd launch 出现错误 xf
  • Android浪潮

    Google的Android手机就要席卷世界了 xff01 IT技术的发展常常太出人意料 xff0c 我也想不太清楚Google的Android平台究竟吸引人在哪里 xff0c 但我相信Android会很快改变手机平台的格局 新的形势会出人
  • 卡尔曼滤波相关介绍及优缺点

    1 卡尔曼滤波算法为什么会叫滤波算法 xff1f 以一维卡尔曼滤波为例 xff0c 如果我们单纯的相信测量的信号 xff0c 那么这个信号是包含噪声的 xff0c 是很毛糙的 xff0c 但是当我们运行卡尔曼滤波算法去做估计 xff0c 我
  • STM32单片机(五)-寄存器地址理解和控制LED闪烁

    芯片 xff1a stm32f103zet6 1 存储单元一般应具有存储数据和读写数据的功能 一般以8位二进制作为一个存储单元 也就是一个字节 每个单元有一个地址 是一个整数编码 可以表示为二进制整数 2 stm32是32位单片机 xff0
  • 跨平台构建 Docker 镜像新姿势,x86、arm 一把梭

    点击 34 阅读原文 34 可以获得更好的阅读体验 在工作和生活中 xff0c 我们可能经常需要将某个程序跑在不同的 CPU 架构上 xff0c 比如让某些不可描述的软件运行在树莓派或嵌入式路由器设备上 特别是 Docker 席卷全球之后
  • 正点原子STM32F4笔记

    使用寄存器操作 xff0c 不错的博客 xff1a https blog csdn net w471176877 article category 1230060 https blog csdn net w471176877 article
  • JAVA中this用法小结

    我知道很多朋友都和我一样 xff1a 在 JAVA 程序中似乎经常见到 this xff0c 自己也偶尔用到它 xff0c 但是到底 this 该怎么用 xff0c 却心中无数 xff01 很多人一提起它 xff0c 就说 当前对象 xff
  • Linux Platform总线+SPI总线分析

    2015 07 1 11 20 本文以MPC8308 powerpc架构 xff0c HX软件包为依据 xff0c 详细内容可参考源码 CPU e300c3MPC8308 400MHz BOARD Freescale MPC8308ERDB
  • ubuntu下SD卡分区与挂载

    本来只是想借SD卡来做一个OK6410的升级 但笔记本上只装了ubuntu xff0c 一开始是可以识别sd卡的 xff0c 但按照网上的教程不小心将 dev sdb1删除了 导致ubuntu不能识别sd卡了 记录一下解决过程 1 sd的设
  • 信号量与互斥锁的一些理解

    一直对信号量和互斥锁只有一个模糊的认识 xff0c 今天特别学习了 xff0c 总结一下 一 从作用上来讲 互斥锁是用在多线程多任务互斥的 信号量用于线程的同步 二 从原理上讲 线程互斥锁 pthread mutex t 的实现原理 xff
  • springboot2.x +kafka使用和源码分析九(KafkaListenerEndpointRegistry暂停启动容器)

    我们在运行中如果需要暂停启动容器时可以通过此类KafkaListenerEndpointRegistry来处理 KafkaListenerEndpointRegistry源码 只解释了核心代码 public class KafkaListe
  • H3C 交换机配置命令

    H3C 交换机配置命令 三层和二层交换机配置命令 dis this 查看下属命令 save 保存 reboot 重启 初始化命令和提示选项 reset saved configuration 初始 清除所有配置信息后 提示是否初始化 xff
  • 【粒子群算法整定PID参数】MATLAB2016b(02一些细节问题)

    此帖主要针对01帖的细节方面 很抱歉更新的晚了 xff0c 现在我对01帖发布到现在 xff0c 用粒子群算法整定PID参数时存在的细节问题进行讲解 xff0c 以便于帮助大家学会此方法 xff0c 降低整定参数的难度 问题一 xff1a