在使用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的最优解
这样就完成了!