码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • PSO、GA与simulink模型联合仿真分析(超详细算法解析)


    目录

    前言

    1.联和仿真函数介绍

    1.1 assignin函数

    1.2 sim函数

    1.3  feval函数

    2.使用粒子群算法优化simulink模型中的PID调节参数 

    2.1实现程序

    2.2仿真结果

    3.使用遗传算法优化simulink模型中的PID调节参数 

    3.1实现程序

    3.2仿真结果

    4.总结


    前言

    上几篇文章我们介绍了用常规遗传算法以及其工具箱、粒子群算法求多目标或者多元函数的最大值或者最小值问题,这篇文章将介绍如何利用优化算法与simulink联合仿真,优化控制中需要调节的参数问题。

    由于手动调参会非常麻烦,而且即使调节效果较好也难以找到全局最优解,所以非常有必要去使用优化算法全局寻优的能力进行自动调参,本篇文章以典型的PID调参为例进行介绍。其关键的地方在于:①如果在simulink建模,如何实现优化算法与simulink的联合仿真②选择适当的性能指标,或者说目标函数。

    1.联和仿真函数介绍

    与simulink联合仿真,常见的操作是在matlab命令行语句控制simulink的仿真和优化算法的迭代,当然也可以用s函数将优化算法编写到simulink模块,本文采样前一种,所以有必要介绍其中重要的两个函数。

    1.1 assignin函数

    作用:为指定工作区中的变量赋值

    格式:assignin(ws,var,val) 将值 val 赋给工作区 ws 中的变量 var。

    例如,assignin('base','x',42) 将值 42 赋予 MATLAB® 基础工作区中的变量 x。

    1.2 sim函数

    • 批量仿真
      当Simulink模型已经固定下来需要调参或者需要批量仿真的时候,循环语句+sim()函数能够轻松实现这个目标,而且还可以使数据自动导出保存。
    • 参数优化
      这其实已经是以函数的方式调用simulink模型了,这样的话,MATLAB一众的优化函数自然就能够用上了
    • 性能提升
      使用函数调用以后,仿真的时间是能够降下去的,主要是因为图形界面的开销没有了
    格式:[T,X,Y1,...,Yn] =sim('model',Timespan, Options, UT)

     更详细的介绍可以官方help文档。

    参考链接:

    [Matlab] Simulink用得多了,不知道sim()函数你又知多少? - 知乎

    对 Simulink 模型进行仿真 - MATLAB sim- MathWorks 中国

    1.3  feval函数

    [y1,...,yN] = feval(fun,x1,...,xM) 使用函数的名称或函数句柄以及输入参数 x1,...,xM 来计算函数的结果。

    如:

    示例: fun = 'cos'

    示例: fun = @sin

    再例如以下是等价的:

    fh = @eig;
    [V,D] = fh(A)
    
    [V,D] = feval(@eig,A)
    

    2.使用粒子群算法优化simulink模型中的PID调节参数 

    2.1实现程序

    这里假设粒子搜索的P、I、D三个维度/变量上下限不一样(虽然设置的一样),它的初始化方法会于单变量函数不同,读者可以细细体会。

    对于同一个程序求同一个目标函数的最大值或者最小值有两种方法,一种是将适应度函数取反或者倒数,这样处理后,最优解=群体最佳适应度的相反数或者倒数;第二种是采用相同的适应度函数,但是位置和速度更新上会有变化,详细可以查看我的上篇文章,详细介绍了如何用同一程序稍加改动即可实现求解同一目标函数的最大值和最小值。

    上篇文献链接:

    粒子群算法PSO求解最大值和最小值案例(超详细注释)_Mr. 邹的博客-CSDN博客

    优化性能(ITAE)指标:

    注:对于这种性能指标只是最小化即可,实际上很多优化问题还会有约束条件,后面会慢慢学习并与大家分享。

    本篇文章的粒子群优化PID参数程序 

    目标函数:

    1. function z=PSO_PID(x)
    2. assignin('base','Kp',x(1));
    3. assignin('base','Ki',x(2));
    4. assignin('base','Kd',x(3));
    5. [t_time,x_state,y_out]=sim('PID_Model',[0,10]);
    6. z=y_out(end,1);

    2.2仿真结果

    以简单的被动对象为传递函数,跟踪单位阶跃曲线,模型如下:

    由于是求最小值,而取目标函数为适应度函数,所以适应度是呈下降的趋势;由于这里PID优化参数中i的变化很小,为了展示其优化的过程,所以将PID3个参数的优化值分别拿出来展示。

    3.使用遗传算法优化simulink模型中的PID调节参数 

    这里直接使用遗传算法库函数GA进行优化,推荐大家去看我下面这篇文章,有关于库函数GA和工具箱的详细使用案例:

    遗传算法、遗传算法库函数ga和gamultiobj、遗传算法工具箱GADS实例介绍_Mr. 邹的博客-CSDN博客

    3.1仿真结果

    4.总结

    ①对于这样在matlab界面仿真分析,实际上每次优化simulink模型都会运行一次,如果模型稍复杂些,可能运行时间会很长,所以还有其他的方法,后续会进行学习与大家分享。

    ②对于粒子群算法而言Kp、Ki、Kd三个变量参数其实就是一个粒子的三个维度,或者说三个搜索的最优位置坐标,而适应度值即为最小化的ITAE性能指标

    注:由于本人也是在不断地学习期间,所以如果文章中有什么错误,欢迎大家指正批评,谢谢!

  • 相关阅读:
    Docker中快速安装RabbitMQ
    6-8模板方法设计模式及应用场景(多态的应用)
    虚拟桌面和云桌面办公系统
    java自定义Excel导出实现方案汇总
    用.bat文件做Airtest脚本的多设备批量运行
    模拟批量转换和报警功能块(博途SCL源代码)
    Canvas系列绘制图片学习:绘制图片和渐变效果
    解决使用keras训练模型Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR报错问题
    JVM详解
    关于闭包的递进理解
  • 原文地址:https://blog.csdn.net/weixin_50892810/article/details/127395818
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号