优化工具箱的使用MATLAB的优化工具箱提供了各种优化函数,这些优化函数可以通过在命令行输入相应的函数名加以调用;此外为了使用方便,MA TLAB还提供了图形界面的优化工具(GUI Optimization tool)。
1 GUI优化工具GUI优化工具的启动有两种启动方法:(1)在命令行输入optimtool;(2)在MA TLAB主界面单击左下角的“Start”按钮,然后依次选择“Toolboxes→Optimization→Optimization tool”GUI优化工具的界面界面分为三大块:左边(Problem Setup and Results)为优化问题的描述及计算结果显示;中间(Options)为优化选项的设置;右边(Quick Reference)为帮助。
为了界面的简洁,可以单击右上角“<<”、“>>”的按钮将帮助隐藏或显示。
1、优化问题的描述及计算结果显示此板块主要包括选择求解器、目标函数描述、约束条件描述等部分。
选择合适的求解器以及恰当的优化算法,是进行优化问题求解的首要工作。
✧Solver:选择优化问题的种类,每类优化问题对应不同的求解函数。
✧Algorithm:选择算法,对于不同的求解函数,可用的算法也不同。
Problem框组用于描述优化问题,包括以下内容:✧Objective function: 输入目标函数。
✧Derivatives: 选择目标函数微分(或梯度)的计算方式。
✧Start point: 初始点。
Constraints框组用于描述约束条件,包括以下内容:✧Linear inequalities: 线性不等式约束,其中A为约束系数矩阵,b代表约束向量。
✧Linear equalities: 线性等式约束,其中Aeq为约束系数矩阵,beq代表约束向量。
✧Bounds: 自变量上下界约束。
✧Nonlinear Constraints function; 非线性约束函数。
✧Derivatives: 非线性约束函数的微分(或梯度)的计算方式。
Run solver and view results框组用于显示求解过程和结果。
(对于不同的优化问题类型,此板块可能会不同,这是因为各个求解函数需要的参数个数不一样,如Fminunc 函数就没有Constraints框组。
)2、优化选项(Options)✧Stopping criteria: 停止准则。
✧ Function value check: 函数值检查。
✧ User-supplied derivatives: 用户自定义微分(或梯度)。
✧ Approximated derivatives: 自适应微分(或梯度)。
✧ Algorithm settings: 算法设置。
✧ Inner iteration stopping criteria: 内迭代停止准则。
✧ Plot function: 用户自定义绘图函数。
✧ Output function: 用户自定义输出函数。
✧ Display to command window: 输出到命令行窗口。
对于不同的优化问题类型,此板块也会不同,3、帮助(Quick Reference )每选择一个函数求解器,帮助部分都有对这个函数的功能说明,同时还会给出相应的各个输入项说明。
GUI 优化工具的使用步骤(1)选择求解器Solver 和优化算法。
(2)选定目标函数。
(3)设定目标函数的相关参数。
(4)设置优化选项。
(5)单击“Start ”按钮,运行求解。
(6)查看求解器的状态和求解结果。
(7)将目标函数、选项和结果导入/导出。
(在菜单文件中寻找)GUI 优化工具的应用实例1、无约束优化(fminunc 求解器)fminunc 求解器可用的算法有两种:➢ Large scale (大规模算法)➢ Medium scale (中等规模算法)对于一般问题,采用中等规模算法即可。
例1:用优化工具求()246f x x x =+-的极小值,初始点取x=0。
解:首先在当前MA TLAB 的工作目录下建立目标函数文件文件:function y= FunUnc1(x) % function 必须为小写,如果F 为大写则不行y=x^2+4*x-6; %平方符号输入时用键盘上数字6上的符合,否则错误然后启动优化工具:✧ 在Solver 下拉选框中选择fminunc ;✧ Algorithm 下拉选框中选择Medium scale ;✧ 目标函数栏输入@FunUnc1; %运算时输入函数不知什么原因老有错误,直接输入目标函数却没有错误 ✧ 初始点输入0,其余参数默认;✧ 单击“Start ”按钮运行。
从求解结果可以看出,函数的极小值为-10,且在x=-2时取到,而且从Current iteration 框可以看出迭代的步数。
对于函数形式比较简单的情况,可以直接输入目标函数,而不用建立目标函数文件,在目标函数栏中直接输入@(x )x^2+4*x-6,也可求出结果。
此题能否用进退法和黄金分割法(或二次插值法)求解吗?不能,要用进退法或黄金分割法得自己先编程序,然后才能调用这样的函数。
2、无约束优化(fminsearch 求解器)fminsearch 求解器也可用来求解无约束优化问题,它有时候能求解fminunc 不能解决的问题。
例2:用优化工具求()232f x x x =-+的极小值,初始点取x=-7,比较fminunc 和fminsearch 求出的结果。
解:通过数学计算,可以得到本例中的极小点有两个x1=1,x2=2。
启动优化工具:✧ 在Solver 下拉选框中选择fminunc ;✧ Algorithm 下拉选框中选择Medium scale ;✧ 目标函数栏输入@(x)abs(x^2-3*x+2);✧ 初始点输入-7,其余参数默认;✧ 单击“Start ”按钮运行。
Fminunc 求得的结果为x=,显然数值不对,它是未加绝对值时函数()232f x x x =-+的极小值。
✧ 然后在Solver 下拉选框中选择fminsearch ;✧ Algorithm 下拉选框中选择Medium scale ;✧ 目标函数栏输入@(x)abs(x^2-3*x+2);✧ 初始点输入-7,其余参数默认;✧ 单击“Start ”按钮运行。
fminsearch 求得的结果为x=2,显然数值是对的。
可为什么不能求出数值x=1呢,因为此时的函数值也是最小的。
由此可得结论:对于非光滑优化问题Fminunc 可能求不到正确的结果,而fminsearch 却能很好地胜任这类问题的求解。
2 MATLAB优化工具箱在一维优化问题中的应用应用fminbnd函数在MA TLAB中,fminbnd函数可用来求解一维优化问题,其调用格式为:(1)x=fminbnd(fun,x1,x2); %求函数fun在区间(x1,x2)上的极小值对应的自变量值。
(2)x=fminbnd(fun,x1,x2,options); % 按options结构指定的优化参数求函数fun在区间(x1,x2)上的极小值对应的自变量值,而options结构的参数可以通过函数optimset来设置,其中options结构中的字段如下:Display——设置结果的显示方式:off——不显示任何结果;iter——显示每步迭代后的结果;final——只显示最后的结果;notify——只有当求解不收敛的时候才显示结果。
FunValCheck——检查目标函数值是否可接受:On——当目标函数值为复数或NaN时显示出错信息;Off——不显示任何错误信息。
MaxFunEvals——最大的目标函数检查步数。
MaxIter——最大的迭代步数。
OutputFcn——用户自定义的输出函数,它将在每个迭代步调用。
PlotFcns——用户自定义的绘图函数。
TolX——自变量的精度。
(3)[x,fval]= fminbnd(...); %此格式中的输出参数fval返回目标函数的极小值。
(4)[x,fval,exitflag]= fminbnd(...); %此格式中的输出参数exitflag返回函数fminbnd的求解状态(成功或失败),说明如下:exitflag=1——fminbnd成功求得最优解,且解的精度为TolX;exitflag=0——由于目标函数检查步数达到最大或迭代步数达到最大值而推出。
exitflag=-1——用户自定义函数引起的退出。
exitflag=-2——边界条件不协调(x1>x2)。
(5)[x,fval,exitflag,output]= fminbnd(...); %此格式中的输出参数output返回函数fminbnd的求解信息(迭代次数、所用算法等),说明如下:output结构中的字段:: 优化算法: 优化迭代步数: 目标函数检查步数: 退出信息例1:用fminbnd 求函数()421f x x x x =-+-在区间[-2,1]上的极小值。
解:在MA TLAB 命令窗口输入>>[x,fval,exitflag,output]= fminbnd(‘x^4-x^2+x-1’,-2,1)所得结果为x =fval =exitflag =1output = iterations: 11 %迭代次数为11次funcCount: 12 %函数计算了12次algorithm: 'golden section search, parabolic interpolation' % fminbnd 用了黄金分割法和抛物线算法求本例函数的极小值message: [1x112 char]要查看结果的精度,可以接着在MA TLAB 命令窗口中输入>>可得如下信息ans =Optimization terminated:the current x satisfies the termination criteria using of说明求得结果的精度为,如果想提高精度,可以通过option 结构来指定,在MATLAB 命令窗口输入 >>opt=optimset(‘TolX ’,;>>format long;>>[x,fval,exitflag,output]= fminbnd(‘x^4-x^2+x-1’,-2,1,opt)所得结果为x =fval =exitflag = 1output = iterations: 11funcCount: 12algorithm: 'golden section search, parabolic interpolation'message: [1x112 char]这样求得的结果x 就有了的精度。