本系列教程来源于出版书籍《基于MATLAB编程基础与典型应用书籍》,如涉及版权问题,请联系:156204968@qq.com。 出版社:人民邮电出版社, 页数:525。
本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:156204968@qq.com
应用最优化技术解决实际工程问题称为工程优化技术。最优化方法是运筹学的一个重要组成部分,在自然科学、社会科学、生产实践、工程设计中有着重要的实用价值和参考意义。利用最优化技术,可以实现生产成本最小花、运行效率最大化、车辆路线最短化等等。本章主要介绍Matlab的优化工具箱在工程优化中的应用,主要内容包括:
- 工程优化问题概述
- 优化问题
- 最小二乘问题
- 方程求解问题
11.1 工程优化问题概述
在现代工程设计、经济管理和市场规划等领域,广泛地涉及到工程优化问题。对于工厂企业,如何在消耗总工时最小的情况下获取最大的产品数量?如何安排物流秩序,在满足最大效率的前提下,达到成本最低,运费最小?工程优化问题几乎涉及了社会生活的每一个领域。对于工程优化问题,利用最优化理论和方法进行求解,帮助决策者作出最优的决策,以最小的成本,获取最大的利润。
假设某种物资有个产地,个销地。第个产地的产量为 ;第j个销地的需求量为。考虑到实际情况,产量不小于销量,即满足,由产地前往销地的运输成本为,那么如何安排运输才能既满足各地的需求,同时使花费的运输成本最小?
对于这样一个工程优化问题,给出了实际问题的背景,利用最优化理论和方法来求解实际生产问题时,都需要将实际问题进行抽象化,并且加以简化,提取问题的核心,建立数学模型,此时需要决策者确定问题的决策变量、决策目标以及各个不同的约束条件,形成最优化数学模型;虽然实际问题进行了抽象简化,但有些时候建立的模型比较复杂,不利于数学手段的求解,还需要对数学模型进行变换,使之更加简洁,并且能够被求解;最后还要分析求解结果是否符合实际情况。下面将以这样的步骤分析运输问题:
(1)选取决策变量:以产地运往销地的货物数量为决策变量;
(2)确定决策目标:运输问题要求的运输成本最小,那么很明显,问题的决策目标为运输的总成本;
(3)确定约束条件:在约束条件中,首先必须保证运输货物能够满足各地的需求,既产地运往销地的总量为,得到各销地需求量的等式约束:。同时从第个产地运出的货物总数不能超过其产量,得到产量不等式约束:。另外决策变量自身取值范围的约束,即:。于是运输问题就可以转化为一个以下数学模型的最优化问题:
对该数学模型进行求解,就可以得到决策变量:从产地运往销地的货物数量。此时一方面,能够满足各地的需求,同时使总的运输成本最小。
通过上面简单的一个运输问题可以看出,工程优化问题存在于实际生活的每一个角落,因此掌握工程优化文件数学建模方法和求解,对于决策者将起到至关重要的作用。在实际问题中,不同问题所设计的数学模型不同,没有统一的方法来进行数学建模,但是对于建立好的数学模型,只有经过求解,得到求解结果后,应用于实际生活中,才能体现出求解结果的优劣程度。因此,本章不进行数学建模的相关介绍,这也不是本书的目的,而是以给定的数学模型,利用Matlab最优化工具箱对不同类型的数学模型进行求解。
11.2 优化问题
Matlab优化工具箱提供了大量的优化函数来求解不同类型的优化问题,包括线性规划问题、无约束优化问题、有约束优化问题、二次规划问题、最小最大化问题和多目标规划问题等。利用Matlab优化工具箱,可以非常便捷地进行优化问题求解。本节通过大量的实例演示正确使用Matlab优化工具箱来求解优化问题的方法。首先,介绍优化工具箱中常用函数共同的输入输出参数。在实例演示中,将不再对这些规定的参数进行解释。
对于一个实际问题,根据目标函数和约束条件的形式不同,把问题划分乘线性规划问题和非线性规划问题。对于非线性规划问题,考虑约束条件不同,又可以划分为有约束问题和无约束问题。考察下面的标准的优化问题形式:
―――――――――――①目标函数
―――――――――――②线性不等式约束
――――――――――③线性等式约束
―――――――――――④非线性不等式约束
―――――――――――⑤非线性等式约束
―――――――――――⑥变量上下限约束
在使用Matlab优化工具箱时,求解问题都必须转化成以上标准的优化问题形式。
①目标函数可以是线性,也可以是非线性,以m文件形式定义或者以inline函数定义,或者通过柄操作符@来进行调用。
②线性不等式约束对应于求解问题中线性的不等式约束, 对应于线性约束条件的系数矩阵, 对应于线性约束条件常数项向量。
③线性等式约束对应于求解问题中线性等式约束,对应于线性等式约束的系数矩阵,对应于等式约束常数项向量。
④非线性不等式约束和⑤非线性等式约束为求解问题中非线性约束条件,通常定义成m文件形式。
⑥变量上下限约束,,分别对应于决策变量的上下限,没有则为空集。
表11.1所示,为最优化工具箱共同输入变量的含义和数据格式定义。
同时Matlab优化工具箱提供了许多优化函数迭代过程显示,最大迭代次数设置等一系列的选型设置。通过optimset和optimget函数即可获得当前优化工具箱的默认属性设置。在进入优化函数介绍前,把这些属性设置进行简单地介绍,在后续实例中,不再对options选项进行说明。在命令窗口中输入:
>> optimset %获取Matlab优化工具箱所有的属性设置选项
就可以得到Matlab优化工具箱所有的属性设置选项,及相应的属性值和取值类型。或者在命令行窗口中输入:
>> optimset fmincon %获取fmincon优化函数当前的默认属性值
就可以得到fmincon优化函数当前的默认属性值。通过optimget命令可以获取优化函数的属性参数。
(1)Optimset函数
Optimset函数用来获取或者设置优化函数的属性选项结构体。其调用格式如下:
①options = optimset('param1',value1,'param2',value2,...)
②optimset
③options = optimset
④options = optimset(optimfun)
⑤options = optimset(oldopts,'param1',value1,...)
⑥options = optimset(oldopts,newopts)
第①条命令创建一个包含设定属性选项的空的options属性结构体;第②条命令没有任何输入参数和返回参数,得到优化工具箱属性选项结构体及属性值的可行值和取值类型;第③条命令返回属性选项结构体,其中属性值全为空集;第④条命令获取具体优化函数的默认属性选项结构体;第⑤条命令复制oldopts的所有属性选项,并且修改设定属性选型。第⑥条命令将newopts所有属性值覆盖oldopts对应的属性选项的属性值。如果想修改fmincon函数中属性选项Display为Iter,TolFun属性选项为1e-8。那么可以在Matlab命令窗口中输入:
>> oldopts=optimset('fmincon'); %获取fmincon函数的属性选项结构体
>> newopts=optimset(oldopts,'Display','iter','TolFun',1e-8); %设置属性结构体,并保存为newopts
>> optimget(newopts,'Display') %获取新结构体中Display的属性值
ans =
iter
同样可以使用以下的一些方法:
>> options=optimset('Display','iter','TolFun',1e-8);
(2)Optimget函数
optimget函数和optimset函数相对应,用来获取属性结构体中属性选项的属性值。其调用格式如下:
①val = optimget(options,'param')
②val = optimget(options,'param',default)
第①条命令获取options中给定属性选型的属性值;第②条命令获取options属性中给定属性选项的默认属性值。在Matlab命令窗口中输入:
>> options=optimset('fminbnd'); %获取fminbnd函数的属性结构体
>> val = optimget(options,'Display','iter') %获取fminbnd函数默认的Display属性值
val =
notify
>> options=optimset(options,'Display','iter'); %修改Display属性值为iter
>> val = optimget(options,'Display') %重新获取fminbnd函数的Display属性值
val =
iter
options属性结构体中共有51个属性选项,它们其中有些可适用于大中规模优化问题,有些仅适用于大规模求解问题,或者中规模求解问题。如果读者对这些属性选项感兴趣,可以查阅相关的帮助文档,在这里,表11.2仅列出在实际优化算法中使用较为频繁的一些属性选项。其他属性项在演示实例中出现时,作特别的说明和介绍。
表11.2 常用属性选项及属性描述
属性选项 | 属性描述 |
---|---|
Display | 迭代过程的显示属性设置,可行的属性值包括’off’ ‘iter’ ‘final’ ‘notify’,off表示不作任何输出显示,iter表示显示每一步迭代过程,final表示只显示最后的求解结果,notify表示只显示目标函数不收敛时的输出。 |
GradObj | 目标函数梯度值,属性值包括on,{off},默认值为off,即不计算目标函数梯度值 |
Hessian | Hessian矩阵,属性值包括on, {off},默认值为off,使用有限差分近似Hessian矩阵。 |
Jacobian | Jacobian矩阵,属性值包括on ,off},默认为off,使用有限差分近似Jacobian矩阵 |
LargeScale | 是否使用大规模算法,属性值包括on ,{off},默认为off,表示使用标准算法 |
MaxFunEvals | 最大的函数计算次数 |
HessUpdate | Quasi-Newton法更新方法,包括bfgs,dfp,和steepdesc法,默认为bfgs法 |
LineSearchType | 线性搜索方法选择,包括cubicpoly,{quadcubic},三次样条内插和混合多项式内插 |
TolX | 优化变量最小的改变量,用于退出标志设置 |
TolFun | 目标函数最小的变化量,用于退出标志设置 |
作者:德特数据
联系方式:156204968@qq.com