1 大学数学实验 Experiments in Mathematics 实验7 无约束优化 清华大学数学科学系 最优化是工程技术、经济管理、科学研究、社 会生活中经常遇到的问题 , 如 : 优化模型和算法的重要意义 结构设计 资源分配 生产计划 运输方案 解决优化问题的手段 ? 经验积累,主观判断 ? 作试验,比优劣 ? 建立数学模型,求解最优策略 最优化: 在一定条件下,寻求使目标最大(小)的决策 运筹学 (OR: Operations/Operational Research) 管理科学 (MS: Management Science) 决策科学 (DS: Decision Science) (最 )优化理论是运筹学的重要内容 无 约 束 优 化 OR/ MS/ DS 优化 (Optimization), 规划 (Programming) 线 性 规 划 非 线 性 规 划 网 络 优 化 组 合 优 化 整 数 规 划 不 确 定 规 划 多 目 标 规 划 目 标 规 划 动 态 规 划 优化问题的数学模型 可行域目标函数,决策变量, ~~~ ?fx n x Rxxfz ??∈= ),(min ? 可行解(只满足 (2))与最优解(满足 (1),(2)) ? 无约束优化(只有 (1))与约束优化( (1),(2)) )2(,2,1,0)(.. )1()(min mixgts xfz i x L=≤ = ? 实际问题一般总有约束,何时可用无约束优化处理? 4. 优化工具箱的使用 2. 无约束优化的基本方法: 梯度法,牛顿法,拟牛顿法 1. 优化问题的最优解条件;算法模式 无约束优化的主要内容 3. 非线性最小二乘法 5. 实际问题中的无约束优化模型 实例1 产销量安排 牌号 产量 成本 价格 甲 x1 q1 p1 乙 x2 q2 p2 假设 A 产销平衡 假设 B p随 x (两种牌号 )增加而减小,呈线性关系 12111211121211111 ,0,,, aaaabxaxabp >>??= 某厂生产两个牌号的同一种产品,如何确定产量使利润最大 21222221222212122 ,0,,, aaaabxaxabp >>??= 2 22211121 , )()(),(max 21 xqpxqpxxz xx ?+?= 目标 利润最大 0,,, 0,,, 222222 111111 22 11 >+= >+= ? ? crcerq crcerq x x λ λ λ λ q随 x (本牌号 )增加而减小,呈负指数关系假设 C 实例1 产销量安排 0 y x VOR2 x=629, y=375 309.0 0 (1.3 0 ) 864.3(2.0) 飞机 x=?, y=? VOR1 x=764, y=1393 161.2 0 (0.8 0 ) VOR3 x=1571, y=259 45.1 0 (0.6 0 ) 北 DME x=155, y=987 飞机与监控台(图中坐标和测量距离的单位是 “公里 ”) 实例 2 飞机精确定位问题 飞机精确定位模型 4 2 4 2 4 )()( ),(atan2 dyyxx yyxx iii =?+? =?? θ 不考虑误差因素 超定方程组, 非线性最小二乘! )飞机位置坐标(要求计算: ,距离误差为记测量距离为 ,角度误差为记测量角度为 标分别为已知数据:设备位置坐 yx d i iyx ii ii , . ;3,...,1, 1,...4;),,( 44 σ σθ = = 量纲不符! ? 2 4 2 4 2 4 3 1 2 )()(),(atan2 ? ? ? ? ? ? ? ? ?+? + ? ? ? ? ? ? ? ? ?? ∑ = d yyxxyyxx Min i i ii x,y θ 飞机精确定位模型 44 2 4 2 444 )()( ),(atan2 σσ σθσθ +≤?+?≤? +≤??≤? dyyxxd yyxx iiiiii 考虑误差因素 Min x; Min y; Max x; Max y. 以距离为约束,优化角度误差之和(或平方和); 或以角度为约束,优化距离误差 . 非线性规划 误差非均匀分布! ? ? 仅部分考虑误差 ! 角度与距离的 “地位 ”不应不同! 有人也可能会采用其他目标,如: 飞机精确定位模型 2 4 2 4 2 44 2 3 1 )()(),(atan2 ),( ? ? ? ? ? ? ? ? ?+?? + ? ? ? ? ? ? ? ? ??? = ∑ = σσ θ yyxxdyyxx yxEMin i i iii 误差一般服从什么分布? 正态分布! 不同的量纲如何处理? 无约束非线性最小二乘模型 归一化处理! 角度需要进行预处理, 如利用 atan2函数 , 值域 (-pi, pi) 无约束优化:最优解的分类和条件 )(xfMin x 给定一个函数 f(x),寻找 x* 使得 f(x*)最小,即 nT n xxxx ?∈= ),,,( 21 L 其中 局部最优解 全局最优解 必要条件 0),,()( 1 * ==? T xx n ffxfL x * f(x) x l xg o 充分条件 0)(,0)( *2* >?=? xfxf Hessian阵 nn ji xx f f × ? ? ? ? ? ? ? ? ?? ? =? 2 2 3 求解无约束优化的基本思路 基本思想 在 n ? 中某一点,确定一个搜索方向 及沿该方向的移动步长,得到使目标函数下降的新的点 迭代 步骤 Step 1 初始化:初始点 x 0 ,终止准则等 Step 2 迭代改进:方向 d k ,步长 α k )()( 1 kk xfxf < +kkkk dxx α+= +1 Step 3 终止检验:得到近优解或 k+1?k转 2 选择 d k ,α k 使 f 下降更快 ? 不同算法 搜索方向的选择 1 最速下降法 (梯度法) 下降方向 最速下降方向 迭代改进格式 算法特点 初始阶段改进较快,最优解附近改进较慢 kkTkkkk dxfxfdxfxf )()()()( 1 ?+=+= + 0)( <? kkT dxf )( kk xfd ??= )( 1 kkk xfxx ??= + 将 )( 1+k xf 在 k x 点作泰勒展开,只保留一阶项,有 暂不考虑搜索步 长,可设 α k =1 (负梯度方向) 2 Newton方法 特点 局部 2阶收敛 ;需计算 Hessian阵 ,它可能病态或不正定 将 f(x k+1 )在 x k 点作泰勒展开至二阶项,用 d替代 d k 牛顿方程 牛顿方向 迭代格式 )()( 2 kk xfdxf ??=? dxfddxfxfdxfxf kTkTkkk )( 2 1 )()()()( 21 ?+?+=+= + )())(( 12 kkk xfxfd ???= ? )())(( 121 kkkk xfxfxx ???= ?+ )()]([ 11 kkkk xFxFxx ?+ ′?= 比较 的牛顿法 解 0)( =xF )()( xfxF ?? 求 d使 f(x k+1 )极小 ?右端对 d导数为0 0)()( 2 =?+?? dxfxf kk 3 拟 Newton方法 目的 不计算 Hessian阵,克服病态、不正定、计 算复杂等缺陷,同时保持收敛较快的优点 回顾解方程组 F(x)=0的拟牛顿法 )()()( 11 ?? ?=? kkkkkk xFxFxxAA 满足使 kkkk AAAA 计算用迭代方法 11 ?? ?+= 思路 )()]([ 11 kkkk xFxFxx ?+ ′?= )()( 11 kkkk xFAxx ?+ ?= )(xfMin x 优化问题 )()( xFxf 相当? fGfxFxf 222 ),()( ??′? 代替阵不一定正定,构造正定相当 3 拟 Newton方法(续) kkkkkk HHHGGG ?+=?+= ++ 11 或迭代公式构造 按照 拟牛顿条件: kkkkkk fHxfxG ?=??=? ++ 11 或 )()(, 11 kkkkkk xfxffxxx ???=??=? ++ 记 )( 1 kkkk xfHxx ??= + 设在第 k步 , G k 已得到 , H k =(G k ) -1 ,可计算 )( 1112 ++++ ??= kkkk xfHxx于是有 3.1 Davidon-Fletcher-Powell(DFP)公式 kkTk kTkkk kTk Tkk k fHf HffH fx xx H ?? ?? ? ?? ?? =? )( )( )( )( 3 拟 Newton方法 (续 ) kTk TkkkkTkk kTk Tkk kTk kkTk k fx fxGGxf fx ff fx xGx G ?? ??+?? ? ?? ?? ?? ?? +=? )( )()( )( )( ) )( )( 1( 3.2 Broyden-Fletcher-Goldfarb-Shanno(BFGS)公式 kkTk kTkkk kTk Tkk k xGx GxxG xf ff G ?? ?? ? ?? ?? =? )( )( )( )( kTk TkkkkTkk kTk Tkk kTk kkTk k fx xfHHfx fx xx fx fHf H ?? ??+?? ? ?? ?? ?? ?? +=? )( )()( )( )( ) )( )( 1( 4 搜索步长的确定 线性搜索 (Line Search)确定步长方法 问题 给定 x k 和方向 d k , 确定步长 α k , 使得 )(min kk dxf α α + 优化 算法 黄金分割 (0.618)法、 Fibonacci法、 Newton 切线法、割线法、 2次或 3次插值法 等 ~一维优化问题 0=k d df α α 0)()( =+? kkkTk dxfd α 非线性最小二乘(Least Square)拟合 问题 给定 (t i , y i ), i=1,…n, 拟合一个函数 y=f(t, x), 其中 x为待定的参数向量 , f 对 x非线性。 优化模型 )()()(min xrxrxR T x = ),()( xtfyxr iii ?= T n xrxrxr ))(),(()( 1 L= 记误差 根据目标函数是 r(x) 的二次函数的特点 构造简单算法 非线性最小二乘拟合 )()(2 xrxJR T =? SxJxJR T 2)()(2 2 +=? mmlkii xxrxr × ???=? )()( 22 讨论 ? 牛顿法要计算 Hessian矩阵,其中 S计算量大 ? 若 f 对 x线性 , 则化为线性最小二乘拟合 ,此时 S=0 特定算法考虑如何忽略或近似矩阵S。 mnji xrxJ × ??= )/()(记 )(xr 的雅各比阵为 )()()( xrxrxR T = )()( 2 1 xrxrS i n i i ?= ∑ = Gauss-Newton算法: 忽略矩阵 S )()()()( kkkkTk xrxJdxJxJ ?= f用 R代替,下降方向 d k 满足 G-N算法 收敛性依赖 f 对 x 的线性程度 , 及偏差 r的大小 非线性最小二乘拟合 )()( 2 kk xfdxf ??=?牛顿方程 )()(2 xrxJR T =? )()(2 2 xJxJR T =? Levenbery-Marquardt算法: G-N算法修正 )()())()(( kkkkkTk xrxJdIxJxJ ?=+α 其中 α k >0为修正参数 . d k 位于牛顿方向 (α k 很小 )和负梯度 方向 (α k 很大 )之间 L-M算法 非线性最小二乘拟合 )()()()( kkkkTk xrxJdxJxJ ?= 防止 J T J 出现病态 优化工具箱 基本用法: x=fminbnd(@f,lb,ub) x=fminunc(@f,x0) x=fminunc(@f,x0,options,P1,P2,...) x=fminsearch(@f,x0,options,P1,P2,...) f.m ~ f(x)的 m文件名 x0 ~初始点 ; x ~最优解 P1,P2, … ~ 传给 fun的参数 中间输入项缺省用 [ ]占位 n x RxxfMin ∈),(模型: 2 min 2 22 == + ba b y a x 其中 :例 Exam0701.m Exam0702.m ]8,1[x )x3sinx(min 1 ∈ +:例 5 非线性最小二乘法 )()()(min xrxrxR T ubxlb = ≤≤ ),()( xtfyxr iii ?= T n xrxrxr ))(),(()( 1 L= [x,resnorm,res,exitf,out,lambda,jacob]= lsqnonlin(@fun,x0,lb,ub,options,P1,P2,…) 输入的用法与 fminunc类似,但注意: f.m~f(x)的 m文件名 : function y=f(x,t) fun.m~r(x)的 m文件名 : function r=fun(x,t,y) 输出 resnom=r(x) T *r(x), res=r(x)(误差向量 ) [x,resnorm,res,exitf,out,lambda,jacob]= lsqcurvefit(@f,x0,t,y,lb,ub,options,P1,P2,…) 非线性最小二乘法 )()()(min xrxrxR T ubxlb = ≤≤ 3.015.247.459.3212.8914.1015.3618.1519.21c 864321.510.50.25t kt retc ? =)( 例 3 用下面一组数据拟合系数 r, k : exam0703fit.m exam0703lsq.m 控制精度,观察中间结果,控制迭代次数等 Optimset //显示控制参数 optimset optfun //显示 optfun的控制参数 opt=optimset //控制参数设为 [](即缺省值 ) opt=optimset(optfun)//optfun控制参数设缺省值 Opt=optimset('par1',val1,'par2',val2,...) Opt=optimset(oldopts,'par1',val1,...) opt=optimset(oldopts,newopts) val=optimget(opt,'par1','par2',…) val=optimget(opt,'par1','par2',…, default) Options 控制参数设定 /获取 : optimset; optimget Diagnostics ‘on’ | {‘off’} //是否显示诊断信息 Display 'off' | 'iter' | ‘final’ | ‘notify‘ //显示信息的级别 GradObj ‘on’ | {‘off’}//是否采用分析梯度 Jacobian ‘on’ | {‘off’} //采用分析 Jacob阵(用于约束优化中) LargeScale ‘on’ | {‘off’}//是否采用 大规模算法 MaxFunEvals 最大函数调用次数 MaxIter 最大迭代次数 TolCon 约束的控制精度(用于约束优化中) TolFun 函数值的控制精度 TolX 解的控制精度 主要控制参数(对大规模/中等规模算法均有效) 最一般的输出形式 [x,f,exitflag,out,grad,hess]=fminunc(...) 更多输出:最优值等 f 目标函数值 exitflag >0收敛 ,0达到函数或迭代次数 , <0不收敛 Output iterations 实际迭代次数 funcCount 实际函数调用次数 algorithm 实际采用的算法 cgiterations 实际 PCG迭代次数(大规模算法用) stepsize 最后迭代步长(中等规模算法用) firstorderopt 一阶最优条件(梯度的范数) grad 目标函数的梯度 hess 目标函数的 Hessian矩阵 例 4 1,10,min 2 2 2 1 ==+ ba b x a x Exam0704.m 用 optimset控制参数选择 6 算法选择: optimset中参数控制 LargeScale ‘on’ | ‘off’ ( on为缺省) 搜索步长的算法选择 系统缺省采用大规模算法(如果可能) 当设为 ‘off’时缺省: BFGS、混合 2, 3次多项式插值 LineSearchType='quadcubic' 混合 2, 3次多项式插值 LineSearchType='cubicpoly' 3次多项式插值 HessUpdate = ‘dfp’ ( DFP算法) HessUpdate = ‘steepdesc’(最速下降算法) 搜索方向的算法选择 计算结果 方向 步长 最优解 x 最优值 f n BFGS 2,3次 (9.9997e-001 9.9994e-001) 1.0944e-009 165 DFP 2,3次 (9.9997e-001 9.9994e-001) 2.1173e-009 165 steep 2,3次 (-8.0263e-001 6.5064e-001) 3.2536e+000 1003 BFGS 3次 (1.0001e+000 1.0003e+000) 3.1432e-008 162 DFP 3次 (9.0468e-001 8.1572e-001) 9.8270e-003 495 steep 3次 (-1.1831e+000 1.4056e+000) 4.7695e+000 1002 222 )1()(100),(min.5 xxyyxf ?+?=例 精确解: x=y=1, f(x,y)=0 Exam0705.m 无约束优化 n x RxxfMin ∈),(模型: 采用分析梯度: GradObj='on' x=fminunc(@fun,x0,opt,…) fun.m中还要有 一般形式 function [f,g]=fun(x) )( xf? 222 )1()(100),(min.5 xxyyxf ?+?=续例 ? ? ? ? ? ? ? ? ? ???? =? )(200 )1(2)(400 2 2 xy xxyx f算出 exam0705grad_run.m 方向 步长 最优解 x 最优值 f n BFGS 2,3次 (1.0001e+000 1.0002e+000) 8.9857-009 105 DFP 2,3次 (1.0001e+000 1.0003e+000) 2.2499e-008 109 BFGS 3次 (1.0000e+000 1.0001e+000) 2.7164e-009 53 DFP 3次 (7.4711e-001 5.5212e-001) 6.7609e-002 144 计算结果 与不用分析梯度的结果比较 方向 步长 最优解 x 最优值 f n BFGS 2,3次 (9.9997e-001 9.9994e-001) 1.0944e-009 165 DFP 2,3次 (9.9997e-001 9.9994e-001) 2.1173e-009 165 BFGS 3次 (1.0001e+000 1.0003e+000) 3.1432e-008 162 DFP 3次 (9.0468e-001 8.1572e-001) 9.8270e-003 495 x 0 * O 的图形 222 )1()(100),( xxyyxf ?+?= exam0705plot.m Rosenbrock 函数 (香蕉函数) 算法选择 : BFGS公式,混合 2, 3次插值,一般较好。 几个值得注意的问题 精度控制 :对迭代次数有重大影响,应适当选择。 梯度函数 :利用分析梯度 可能 改进算法的性能 改变初始值 由一个初值出发通常得到局部最优解, 如果函数存在多个局部最优,只有改变初值,对局 部最优进行比较,才有可能得到全局最优解。 其他算法选择 : (详细用法请查阅 help文档) 高度非线性、不连续时可用程序 fminsearch(@fun,x0) 单变量时可用程序 fminbnd(@fun,v1,v2) 7 非线性最小二乘法 )()()(min xrxrxR T ubxlb = ≤≤ ),()( xtfyxr iii ?= T n xrxrxr ))(),(()( 1 L= [x,resnorm,res,exitf,out,lambda,jacob]= lsqnonlin(@fun,x0,lb,ub,options,P1,P2,…) 输入的用法与 fminunc类似,但注意: fun.m ~r(x) 的 m文件名, Jacobian=‘on’时含有导数信息 function [r,J] = fun(x) )(xr? 算法选择 : 缺省:大规模算法( LargeScale = 'on' ) 当 LargeScale = 'off' : ?缺省: Levenberg-Marquardt算法; ?LevenbergMarquardt=‘off’:Gauss-Newton法 一维搜索(线搜索)步长选择与 fminunc中类似 非线性最小二乘法 )()()(min xrxrxR T ubxlb = ≤≤ exam0705lsq.m exam0705lsq_jacob_run.m 实例 1 产销量安排 ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? 280 100 22.0 1.01 2221 1211 b aa aa 已知 数据 ( ) ( ) )3020(,02.0015.0,10030 === TTT cr λ 2222221212 1112121111 )( )()(min 22 11 xcerxaxab xcerxaxabxf x x ????? ?????= ? ? λ λ ,2,1,0,,, 212211 =>??= iaabxaxabp iiiiiii ,2,1,0,,, =>+= ? icrcerq iiii x ii ii λ λ 22211121 , )()(),(max 21 xqpxqpxxz xx ?+?= 原问题 x = 23.9025 62.4977 y = 6.4135e+003 即甲产量为 23.9025,乙产量为 62.4977,最大利润为 6413.5 命令和最优解 x=fminunc(@f, x0) shili0701.m 702/502/ 22221111 ==== abxabx ,其解为 初始点 的选择 实例 1 产销量安排 ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? 22.0 1.01 2221 1211 aa aa 忽略成本及价 格中的 a 12 , a 21 2222211111 )()()(min xxabxxabxf ????= 问题简化为 作为原问题的初始点 飞机坐标 (978.31, 723.98), 误差平方和 0.6685 (<< 4) 实例2 飞机精确定位模型 2 4 2 4 2 44 2 3 1 )()(),(atan2 ),( ? ? ? ? ? ? ? ? ?+?? + ? ? ? ? ? ? ? ? ??? = ∑ = σσ θ yyxxdyyxx yxEMin i i iii 无约束非线性最小二乘模型 角度需要进行预处理, 如利用 atan2函数 , 值域 (-pi, pi) shili0702.m 其他 :非线性方程 (组 ) Rxxf ∈= ,0)(单变量方程求根: [x,fval,exitflag,output] = fzero(fun,x0,options,P1,P2,...) [x,fval,exitflag,output,jacobian] = fsolve(fun,x0,options,P1,P2, ... ) n RxxF ∈= ,0)(多变量方程组求零点: 8 2 2 2 1 0 min dCx x ? ≥ [x,resnorm,res,exitf,out,lambda]= lsqnonneg(C,d,x0,options) 数据拟合也可用 lsqcurvefit [x,resnorm,res,exitf,out,lambda,jacob] = lsqcurvefit(fun,x0,x,y,lb,ub,opt,P1,P2,…) () ∑ ?= ? ≥ i ii x ydataxdataxF ydataxdataxF 2 2 1 2 2 2 1 0 ),( ),(min 其他 :非负最小二乘 ubxlbbxAbxAts dCx x ≤≤≤≤ ? ≥ ,,.. min 2211 2 2 2 1 0 [x,resnorm,res,exitflag,output,lambda] = lsqlin(C,d,A1,b1,A2,b2,lb,ub,x0,options) 其他优化程序 Fgoalattain:多目标规划 fminimax :极小极大 fseminf :半无穷规划 其他优化程序 (实验 8) linprog :线性规划 quadprog:线性规划 fmincon :约束非线性规划 其他 :约束线性最小二乘 无约束优化实验内容 实验目的 1.掌握 Matlab 优化工具包的基本用法,对不同 算法进行初步分析、比较。 2. 练习建立和求解实际问题的无约束优化模型和 非线性最小二乘拟合模型。 内容 课上布置,或参见网络学堂