Matlab遗传算法工具箱与Simulink模型联合优化方法_simulink遗传算法工具箱-程序员宅基地

技术标签: matlab  算法  教程  Matlab  

1. 遗传算法适应度函数m文件

在matlab的官方帮助文档中,目标函数m文件是用来计算适应度值的,会在每次迭代中重复运行。
它遵循这样的一个结构:

 传入参数->m文件中计算适应度值->返回适应度值

在原官方示例中,计算适应度值是用m文件编写的,使用matlab语言,而这在一些仿真多有不便。因此,我在这里摸索出了一种可以使用simulink建立适应度函数的方法,它的结构如下:

传入参数->simulink中计算->返回适应度值

关键则在于simulink与m文件的数据交互上,我在此使用了assignin()函数,将m文件传入的参数载入当前的simulink工作空间中,从而使得simulink模型可以随意调用这些参数,然后用sim()函数运行simulink模型,获取其输出并作为适应度函数的返回值。
代码如下:

function z = opt_ga(u1) % u1为优化的参数,可以是向量
% 将u1载入到当前的workspace并命名为a1(命名可以随意修改,但要和自己的simulink模型对应)
assignin('base','a1',u1); 
%MATLAB R2009a 或更早版本用↓这个语句
[t,x,y]=sim('your_model',[0,25]); % 运行你的simulink模型 
%MATLAB 2009b以上版本用↓这个语句
out=sim('your_model',[0,25]); %
y=out.yout;

z = y; % 获取模型输出,并作为m文件的输出
end

这样做的好处是你可以不需要精通matlab编程而使用simulink快速搭建你的优化算法。坏处是每次迭代都需要对simulink模型进行重新编译,效率比较低。

2. 建立simulink模型IO接口

由于在m文件中已经将simulink运行所需要的参数载入到workspace中,因此在simulink中你可以随意调用这些参数,就像普通的变量一样。
我们需要定义的只有输出,由于sim()函数会返回模型的输出,因此我使用out模块将我需要的输出变量进行输出,sim()函数会自动获取这些out模块输出,并根据序号输出一个名为y的向量。由于遗传算法只能接受标量作为适应度值,因此这里的out只能有一个。
在这里插入图片描述

3. GATOOL的使用

在matlab2015b之前的版本中,直接在命令行中输入gatool即可打开遗传算法工具箱,而在之后的版本里需要到APP里打开optimization app。似乎在2020以后的版本中这个具有ui界面的工具箱就会被移除,超级生气! (╯▔皿▔)╯

  1. 选择GA算法
  2. 输入你的适应度m文件名称,格式为:@你的m文件名称,不需要.m后缀
  3. 根据需要设置你的约束和其他参数
  4. Start!

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012680687/article/details/105241052

智能推荐

TensorFlow 实现web人脸登录系统_tensorflow人脸注册-程序员宅基地

文章浏览阅读599次。作者git地址:https://github.com/chenlinzhong/face-login人脸检测MTCNN文件:fcce_detect.pymodel= os.path.abspath(face_comm.get_conf('mtcnn','model'))class Detect: def __init__(self): self.detector ..._tensorflow人脸注册

React高级特性之Context_react context-程序员宅基地

文章浏览阅读278次。Context提供了一种不需要手动地通过props来层层传递的方式来传递数据。_react context

三菱FX5U PLC与压力传感器485简单通讯_fx5u485通讯接线图-程序员宅基地

文章浏览阅读1.1w次。废话不多说,先上PLC与压力控制器485接线图对接线图不理解的可以留言.(1).压力控制器通电后设置参数,主要设置通讯参数第一:波特率,(此处我设置的是9600).第二设置通讯模式(此处设置的RTU模式)(2)5UPLC的参数设置如图上面通讯就完成了大家注意一点哦,这边是不需要你去算校验码的.如有问题,可留言探讨...._fx5u485通讯接线图

CentOS 7上部署Java项目开发环境_centos 7 部署java-程序员宅基地

文章浏览阅读857次。CentOS上部署Java项目开发环境CentOS上负责分发程序的yum命令。Ⅰ 安装软件的常用下载工具(1)yum的基本使用1)查看软件包列表(完整名称)yum list | grep [关键字]2)安装软件包 yum install [软件包完整名称]3)卸载软件包yum remove [软件包完整名称](2)wgetwget http://...hellp.zip -O down.zip(3) curlcurl 'http://...hellp.zip' -O down.zip_centos 7 部署java

LeetCode刷题笔记:Java实现选择排序_leetcode选择排序题目java-程序员宅基地

文章浏览阅读350次。选择排序_leetcode选择排序题目java

主动外观模型(AAM)_opencv 主动外观模型-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏2次。历史AAM的思想最早可以追溯到1987年kass等人提出的snake方法,主要用于边界检定与图像分割。该方法用一条由n个控制点组成的连续闭合曲线作为snake模型,再用一个能量函数作为匹配度的评价函数,首先将模型设定在目标对象预估位置的周围,再通过不断迭代使能量函数最小化,当内外能量达到平衡时即得到目标对象的边界与特征。 1989年yuille等人此提出使用参数化的可变形模板来代替snak_opencv 主动外观模型

随便推点

【matlab】 与cell相关的转换函数_cellmat-程序员宅基地

文章浏览阅读1.1k次。**【matlab】 与cell相关的转换函数**1、cell2mat:将cell转换为mat的char型2、str2num:将mat从char转换为double型3、cellstr:将char转cell4、num2str:将double转char5、num2cell:将double直接转cell_cellmat

pyspider创建淘女郎图片爬虫任务--出师不利_pyspider 卡住任务创建-程序员宅基地

文章浏览阅读6.2k次。首先pyspider all启动pyspider的所有服务,然后访问http://localhost:5000创建一个爬虫任务:taonvlang,点开任务链接编辑http://localhost:5000/debug/taonvlang,默认模板:右侧为代码编辑区,可以在crawl_config里做一些配置,具体可以参考官网API文档:http://docs.pyspider.org/e_pyspider 卡住任务创建

python---运算规则_python中(:)的运算规则-程序员宅基地

文章浏览阅读78次。布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。(~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。如果引用的不是同一个对象则返回结果 True,否则返回 False。如果在指定的序列中没有找到值返回 True,否则返回 False。_python中(:)的运算规则

记录刷题的日子2(2023.3.2)-程序员宅基地

文章浏览阅读39次。刷题记录,字符串

UE4在任意蓝图中可调用的C++函数:BlueprinFunctionLibrary_ue4 蓝图调用c++函数-程序员宅基地

文章浏览阅读4.2k次,点赞6次,收藏17次。如果蓝图是直接继承自一个C++类的,那么直接在这个C++类里面写入你需要的函数编译后就可以在蓝图里面调用了。下面讲的是一个全局的静态函数类,即不需要指定继承自某个C++类,这个全局类可以被当前工程下的所有蓝图类调用。首先新建一个c++类,选择显示所有类,在里面找到blueprintFunctionLibrary并创建一个新类:创建好之后打开VS文件,出现.h和.cpp文件。..._ue4 蓝图调用c++函数

有关linux中的文件IO的操作_服务器和客户端使用文件io操作-程序员宅基地

文章浏览阅读1.9k次。linux中一切皆文件,文件是linux系统的核心设计思想,所以掌握文件的操作是很重要的。_服务器和客户端使用文件io操作

推荐文章

热门文章

相关标签