第九章 优化方法的Matlab实现
 
在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。
用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:
1) 建立数学模型  即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。
2) 数学求解  数学模型建好以后,选择合理的最优化方法进行求解。
最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。
 
 
9.1  概  述
 
    利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。
9.1.1 优化工具箱中的函数
    优化工具箱中的函数包括下面几类:
    1.最小化函数
表9-1 最小化函数表
函    数
描      述
fgoalattain
多目标达到问题
fminbnd
有边界的标量非线性最小化
fmincon
有约束的非线性最小化
fminimax
最大最小化
fminsearch, fminunc
无约束非线性最小化
fseminf
半无限问题
linprog
线性课题
quadprog
二次课题
 
2.方程求解函数
表9-2 方程求解函数表
函  数
描      述
\
线性方程求解
fsolve
非线性方程求解
fzero
标量非线性方程求解
 
3.最小二乘(曲线拟合)函数
表9-3 最小二乘函数表
函  数
描      述
\
线性最小二乘
lsqlin
有约束线性最小二乘
lsqcurvefit
非线性曲线拟合
lsqnonlin
非线性最小二乘
lsqnonneg
非负线性最小二乘
 
4.实用函数
表9-4 实用函数表
函  数
描      述
optimset
设置参数
optimgetmatlab求导
 
 
    5.大型方法的演示函数
表9-5 大型方法的演示函数表
函  数
描        述
circustent
马戏团帐篷问题二次课题
molecule
用无约束非线性最小化进行分子组成求解
optdeblur
用有边界线性最小二乘法进行图形处理
 
6.中型方法的演示函数
表9-6 中型方法的演示函数表
函  数
描        述
bandemo
香蕉函数的最小化
dfildemo
过滤器设计的有限精度
goaldemo
目标达到举例
optdemo
演示过程菜单
tutdemo
教程演示
 
9.1.3 参数设置
    利用optimset函数,可以创建和编辑参数结构;利用optimget函数,可以获得options优
化参数。
optimget函数
功能:获得options优化参数。
语法
val = optimget(options,'param')
val = optimget(options,'param',default)
描述
val = optimget(options,'param') 返回优化参数options中指定的参数的值。只需要用参数开头的字母来定义参数就行了。
val = optimget(options,'param',default) 若options结构参数中没有定义指定参数,则返回缺省值。注意,这种形式的函数主要用于其它优化函数。
举例
1.      下面的命令行将显示优化参数options返回到my_options结构中:
        val = optimget(my_options,'Display')
2.      下面的命令行返回显示优化参数options到my_options结构中(就象前面的例子一样),但如果显示参数没有定义,则返回值'final':
      optnew = optimget(my_options,'Display','final');
参见
optimset
 
optimset函数
功能:创建或编辑优化选项参数结构。
语法
options = optimset('param1',value1,'param2',value2,...)
optimset
options = optimset
options = optimset(optimfun)
options = optimset(oldopts,'param1',value1,...)
options = optimset(oldopts,newopts)
描述
options = optimset('param1',value1,'param2',value2,...) 创建一个称为options的优化选项参数,其中指定的参数具有指定值。所有未指定的参数都设置为空矩阵[](将参数设置为[]表示当options传递给优化函数时给参数赋缺省值)。赋值时只要输入参数前面的字母就行了。
optimset函数没有输入输出变量时,将显示一张完整的带有有效值的参数列表。
options = optimset (with no input arguments) 创建一个选项结构options,其中所有的元素被设置为[]。
options = optimset(optimfun) 创建一个含有所有参数名和与优化函数optimfun相关的缺省值的选项结构options。
options = optimset(oldopts,'param1',value1,...) 创建一个oldopts的拷贝,用指定的数值修改参数。
options = optimset(oldopts,newopts) 将已经存在的选项结构oldopts与新的选项结构newopts进行合并。newopts参数中的所有元素将覆盖oldopts参数中的所有对应元素。