matlab优化工具箱的使用(以遗传算法为例)

  在使用matlab时,我们可以方便地调用函数解决许多优化问题,而不用关注解决问题的具体算法过程。例如,我们可调用linprog()函数解决线性规划问题,调用quadprog()函数解决含约束的二次规划问题。然而这种需要通过编程调用函数来解决问题的方法还是不够简便,不方便记忆,在使用时也稍显繁琐。

  在matlab中,还提供了一种图形化的操作界面解决优化问题,它就是“Optimization Toolbox”,优化工具箱。

点击图中Optimization按键,进入优化工具箱

这个操作界面如图所示,我们首先要关注的是画红框的这部分内容

点击箭头所指的内容,会有一个下拉框,如图所示

在这里我们可以找到许多不同类型的优化函数,其中fmincon(),linprog(),quadprog(),函数我们在前面已经使用过,其他的大部分函数也与之大同小异。在弄懂了fmincon()这几个函数的调用方法之后,约束条件的定义自然就明白了,这个操作箱只不过通过图形化的操作界面提供了输入参数的接口。约束条件的定义方法可参考https://blog.csdn.net/qq_42138454/article/details/100141583

许多优化函数的功能可以参考文章https://blog.csdn.net/kuvinxu/article/details/35570865

现在我们以数学建模中常用的算法“遗传算法”为例,说明工具箱如何使用

1.选中遗传算法工具

2.进行参数设置

如图是所需要填写的内容

仍然使用例子说明如何填写

【例】解决优化问题

【分析】

1.首先定义目标函数与非线性约束函数

新建一个脚本文件,取名为fun.m,输入以下内容


function y=fun(x)

y=x(1)^4-4*x(1)-8*x(2)+15;

同目标函数的定义,使用函数句柄或者新建脚本来创建约束条件。

对照约束函数的标准形式:

可以知道:

1.需要将约束条件转化成“不等式左边为式子,右边为0”的形式。

(注意不等号的方向!)

2.标准形式中这里的Ceq表示等式约束,与二次规划中是类似的,当不含有等式约束时,Ceq为空,即Ceq=[]

新建脚本cons.m


function [c,ceq]=cons(x)

c=[9-x(1)^2-x(2)^2];

ceq=[];

2.输入约束参数

非线性约束条件部分参考之前《matlab解决含约束的二次规划问题》博文

如图填入约束条件后点击start即可运行遗传算法
 

箭头所指表示取得最优解时,目标函数的值

final point栏中画圈的两个值分别代表s和t的最优解

这样就完成了!

发布了29 篇原创文章 · 获赞 6 · 访问量 3423

猜你喜欢

转载自blog.csdn.net/qq_42138454/article/details/100154412