在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模型进行重新编译,效率比较低。
由于在m文件中已经将simulink运行所需要的参数载入到workspace中,因此在simulink中你可以随意调用这些参数,就像普通的变量一样。
我们需要定义的只有输出,由于sim()
函数会返回模型的输出,因此我使用out模块将我需要的输出变量进行输出,sim()
函数会自动获取这些out模块输出,并根据序号输出一个名为y的向量。由于遗传算法只能接受标量作为适应度值,因此这里的out只能有一个。
在matlab2015b之前的版本中,直接在命令行中输入gatool即可打开遗传算法工具箱,而在之后的版本里需要到APP里打开optimization app。似乎在2020以后的版本中这个具有ui界面的工具箱就会被移除,超级生气! (╯▔皿▔)╯
.m
后缀文章浏览阅读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人脸注册
文章浏览阅读278次。Context提供了一种不需要手动地通过props来层层传递的方式来传递数据。_react context
文章浏览阅读1.1w次。废话不多说,先上PLC与压力控制器485接线图对接线图不理解的可以留言.(1).压力控制器通电后设置参数,主要设置通讯参数第一:波特率,(此处我设置的是9600).第二设置通讯模式(此处设置的RTU模式)(2)5UPLC的参数设置如图上面通讯就完成了大家注意一点哦,这边是不需要你去算校验码的.如有问题,可留言探讨...._fx5u485通讯接线图
文章浏览阅读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
文章浏览阅读350次。选择排序_leetcode选择排序题目java
文章浏览阅读3.2k次,点赞2次,收藏2次。历史AAM的思想最早可以追溯到1987年kass等人提出的snake方法,主要用于边界检定与图像分割。该方法用一条由n个控制点组成的连续闭合曲线作为snake模型,再用一个能量函数作为匹配度的评价函数,首先将模型设定在目标对象预估位置的周围,再通过不断迭代使能量函数最小化,当内外能量达到平衡时即得到目标对象的边界与特征。 1989年yuille等人此提出使用参数化的可变形模板来代替snak_opencv 主动外观模型
文章浏览阅读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
文章浏览阅读6.2k次。首先pyspider all启动pyspider的所有服务,然后访问http://localhost:5000创建一个爬虫任务:taonvlang,点开任务链接编辑http://localhost:5000/debug/taonvlang,默认模板:右侧为代码编辑区,可以在crawl_config里做一些配置,具体可以参考官网API文档:http://docs.pyspider.org/e_pyspider 卡住任务创建
文章浏览阅读78次。布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。(~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。如果引用的不是同一个对象则返回结果 True,否则返回 False。如果在指定的序列中没有找到值返回 True,否则返回 False。_python中(:)的运算规则
文章浏览阅读39次。刷题记录,字符串
文章浏览阅读4.2k次,点赞6次,收藏17次。如果蓝图是直接继承自一个C++类的,那么直接在这个C++类里面写入你需要的函数编译后就可以在蓝图里面调用了。下面讲的是一个全局的静态函数类,即不需要指定继承自某个C++类,这个全局类可以被当前工程下的所有蓝图类调用。首先新建一个c++类,选择显示所有类,在里面找到blueprintFunctionLibrary并创建一个新类:创建好之后打开VS文件,出现.h和.cpp文件。..._ue4 蓝图调用c++函数
文章浏览阅读1.9k次。linux中一切皆文件,文件是linux系统的核心设计思想,所以掌握文件的操作是很重要的。_服务器和客户端使用文件io操作