第八章MATLAB优化工具箱——求解工程优化问题一、优化工具箱概述二、各类优化问题的优化函数的介绍无约束一维极值问题无约束多维极值问题约束优化问题非线性最小二乘优化问题线性规划0-1规划内容2020/2/12例题1:某工厂在计划期内要安排生产I,II两种产品,已知生产单位产品所需的设备台时及A、B两种原料的消耗如下表。产品I和II的单位获利分别为2元和3元。问应如何安排生产,可使该厂获利最多?产品I产品II资源现有数设备128台时原料A4016kg原料B0412kg单位产品获利2元3元工程优化问题2020/2/12决策变量:12x,x——产品I和产品II的计划产量目标函数:12maxz2x3x——利润函数(生产利润最大)约束条件:设备:12x2x8——资源的使用不超过可用量原料A:14x16原料B:24x12蕴含约束:12x,x0——产量为非负数产品I产品II资源现有数设备128台时原料A4016kg原料B0412kg单位产品获利2元3元工程优化问题2020/2/12例2工厂1排出的污水流到工厂2前有20%可自然净化。问:每厂各应处理多少污水,方可在保证河水中污水含量不大于0.2%的前提下,使总费用最小?工厂1工厂2每天排污水量(单位:万m3)21.4污水处理费(单位:元/万m3)1000800B500万m3A工厂1工厂2实际每天排污量2-x11.4-x2工程优化问题2020/2/12决策变量:12x,x——工厂1和工厂2每天处理污水量目标函数:12minz1000x800x——费用函数(总费用最小)约束条件:A段污水达标:1(2x)/5002/1000B段污水达标:12[(2x)0.8(1.4x)]/7002/1000工厂1排污量:1x2工厂2排污量:2x1.4蕴含约束:12x,x0——排污量为非负数改写约束条件为:112121210.81.621.4,0xxxxxxx工厂1工厂2每天实际排污量2-x11.4-x2污水处理费1000800B500万m3A工厂1工厂22020/2/12工程优化问题的提出:上述两例代表了一般工程优化问题,其共性特征为:–建立工程优化问题的数据模型:决策变量、约束条件、目标函数–选择合适的优化方法,求出最优解。优化工具箱的功能优化工具箱主要可以用于解决以下问题:(1)求解无约束条件非线性极小值;(2)求解约束条件下非线性极小值,包括目标逼近问题、极大-极小值问题以及半无限极小值问题;(3)求解二次规划和线性规划问题;(4)非线性最小二乘逼近和曲线拟合;(5)非线性系统的方程求解;(6)约束条件下的线性最小二乘优化;(7)求解复杂结构的大规模优化问题。优化工具箱的结构优化工具箱函数工具箱函数函数输入参数优化选项参数options优化选项参数options可以通过函数optimset创建或修改。函数常用格式如下:(1)options=optimset(‘optimfun’)创建一个含有所有参数名,并与优化函数optimfun相关的默认值的选项结构options.(2)options=optimset(‘param1’,value1,‘param2’,value2,…)创建一个名称为options的优化选项参数,其中指定的参数具有指定值,所有未指定的参数取默认值。例如:opts=optimset(‘Display’,’iter’,’TolFun’,1e-7),该语句创建一个称为opts的优化选项结构,其中显示参数设为iter,TolFun参数设为1e-7其中,常用的options参数中常用的几个参数如下:Display:结果显示方式,取值为off时,不显示任何结果,取值为iter时,显示每次迭代的信息,取值为final时,显示最终结果,默认值final,取值notify时,只有当求解结果不收敛时才显示结果。MaxFunEvals:允许进行函数计算的最大次数,取值为正整数。MaxIter:允许进行迭代的最大次数,取值为正整数。TolFun:函数值(计算结果)的精度,取值为正数。TolX:自变量的精度,取值为正数优化选项参数options函数输出参数模型输入时需要注意的问题(1)目标函数最小化优化函数fminbnd、fminsearch、fminunc、fmincon、fgoalattain、fminmax和lsqnonlin都要求目标函数最小化。如果优化问题要求目标函数最大化,可以通过使该目标函数的负值最小化即-f(x)最小化来实现。(2)约束非正优化工具箱要求非线性不等式约束的形式为Ci(x)≤0,通过对不等式取负可以达到使大于零的约束形式变为小于零的不等式约束形式的目的。如形式的约束等价于,形式的约束等价于iC(x)0iC(x)0-iC(x)biC(x)0-+b5.3GUI优化工具MATLAB的优化工具箱提供了各种优化函数,这些优化函数可以通过在MATLAB的命令行输入相应的函数名加以调用,此外,为了用户使用方便,Matlab还提供了图形界面的优化工具GUIOptimizationtool.优化工具(optimtool)是2006年9月在MATLAB7.2版本优化工具箱3.1版本中推出的,它是执行下列常见优化任务的图形用户界面。选择求解器并定义优化问题;设置和检查优化选项;运行问题并将结果可视化;在MATLAB工作空间和优化工具之间导入和导出问题定义、算法选项和结果;自动生成M文件代码,以获取工作并自动执行任务;GUI优化工具的启动启动GUIOptimizationtool有以下两种方法。(1)在命令行上输入optimtool;(2)在MATLAB主界面单击左下角的“Start”按钮,然后依次选择“Toolboxes→Optimization→Optimizationtool(optimtool)。GUI优化工具的界面GUI优化工具的界面主要分为三大块:左边为优化问题的描述及计算结果显示(ProblemSetupandResults);中间为优化选项的设置(Options);右边为帮助(QuickReference)。为了界面的简洁,可以单击右上角的“”按钮将帮助隐藏起来。GUI优化工具的界面1.优化问题的描述及计算结果显示:包括选择求解器、目标函数描述、约束条件描述等部分。Solver:选择优化问题的种类,每类优化问题对应不同的求解函数Algorithm:选择算法,对于不同的求解函数,可用的算法也不同。Problem框组用于描述优化问题,它包括以下内容:Objectivefunction:输入目标函数Derivatives:选择目标函数微分(或梯度)的计算方式Startpoint:初始点GUI优化工具的界面Constraints框组用于描述约束条件,它包括以下内容:Linearinequalities:线性不等式约束,其中A代表约束系数矩阵,b代表约束向量Linearequalities:线性等式约束,其中Aeq代表约束系数矩阵,beq代表约束向量。Bounds:自变量上下界约束NonlinearConstraintsfunction:非线性约束函数Derivatives:非线性约束函数的微分(或梯度)的计算方式。Runsolverandviewresults框组用于显示求解过程和结果对于不同的优化问题类型,输入内容可能会不同,这是因为各个求解函数需要的参数个数不一样,例如fminunc函数就没有Constraints框组。GUI优化工具的界面2.优化选项GUI优化工具的优化选项包括9大类。Stoppingcriteria:停止准则;Functionvaluecheck:函数值检查;User-suppliedderivatives:用户自定义微分(或梯度)函数;Approximatedderivatives:自适应微分(或梯度);Algorithmsettings:算法设置;Inneriterationstoppingcriteria:内迭代停止准则;Plotfunctions:用户自定义绘图函数;Outputfunctions:用户自定义输出函数;Displaytocommandwindow:输出到命令行窗口。GUI优化工具的界面3、帮助每选择一个函数求解器,帮助部分都有对这个函数的功能说明,同时还会给出相应的各个输入项的说明。GUI优化工具使用步骤GUI优化工具的基本使用步骤如下。1、选择求解器solver和优化算法;2、选定目标函数;3、设定约束条件的相关参数;4、设置优化选项;5、单击“Start”按钮,运行求解;6、查看求解器的状态和求解结果;7、将目标函数、选项和结果导入/导出。GUI优化工具应用实例例1fminunc求解器应用实例。例2fminsearch求解器应用实例。例3fmincon求解器应用实例。例4lsqnonlin求解器应用实例。例5linprog求解器应用实例。例6ga求解器应用实例。无约束优化(fminunc求解器)建立目标函数文件FunUnc.m文件:functiony=FunUnc(x)y=x^2+4*x-6;然后启动优化工具:在Solver下拉选框中选择fminunc;Algorithm下拉选框中选择Mediumscale;目标函数栏输入@FunUnc;初始点输入0,其余参数默认;单击Start按钮运行。图5-5无约束优化实例无约束优化(fminsearch求解器)启动优化工具:然后在Solver下拉选框中选择fminsearch;目标函数栏输入@(x)abs(x^2-3*x+2)(采用匿名函数);初始点输入-7,其余参数默认;单击Start按钮运行。运行就可得到极小值2.4e-5和对应的值x=2而用fminunc的求解结果为极小值0.24,X=1.5,这显然不对。图5-7用fminsearch求解非光滑优化问题约束优化(fmincon求解器)约束优化采用的求解器为fmincon,可用的算法有三种:Trustregionreflective(信赖域反射算法)、Activeset(有效集算法)、Interiorpoint(内点算法)。Reflective只能求解含线性等式约束的优化问题,其它两种算法可以求解含非线性约束及不等式约束的优化问题。启动优化工具:在Solver下拉选框中选择fmincon;Algorithm下拉选框中选择Activeset;目标函数栏输入@FunCon;初始点输入[10;10;10];在约束条件的Linearinequalities输入框中输入A为[-1-2-2;122],b为[0;72],其余参数默认;单击Start按钮运行。目标值-3456,极小点[24,12,12]非线性最小二乘优化(lsqnonlin求解器)启动优化工具:在Solver下拉选框中选择lsqnonlin;可用的算法有三种:Trustregionreflective(信赖域反射算法)、Levenberg-Marquardt(L-M算法)、Gauss-Newton(高斯-牛顿算法),当选择信赖域反射算法时,可以输入自变量上下界约束,而其余两种算法不能有自变量上下界约束。算法采用L-M算法;目标函数栏输入@(x)[x^2+x-1;2*x^2-3];初始点输入5,其余参数默认;单击Start按钮运行。运行就可得到极小值和对应的值目标值1.958,极小点1.041线性规划(linprog求解器)线性规划采用的求解器为linprog,可用的算法有三种:Largescale(大规模算法)、Mediumscale-simplex(中等规模-单纯形算法)和Mediumscale-Activeset(中等规模-有效集算法),当Mediumscale-Activeset算法时,还要