Matlab遗传算法工具箱与Simulink模型联合优化方法

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只能有一个。
Matlab遗传算法工具箱与Simulink模型联合优化方法_第1张图片

3. GATOOL的使用

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

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

Matlab遗传算法工具箱与Simulink模型联合优化方法_第2张图片

你可能感兴趣的:(Matlab,教程,matlab,算法)