1、1第八章 非线性规划模型非线性规划是线性规划的进一步发展和继续。许多实际问题如设计问题、经济平衡问题都属于非线性规划的范畴。还有一种规划问题和时间有关,叫做“动态规划”。近年来在工程控制、技术物理和通讯中的最佳控制问题中,已经成为经常使用的重要工具。8.1 非线性规划的实例与定义如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不像线性规划有单纯形法这一通用方法,非线性规划目前还没有适于各种问题的一般算法,各个方法都有自己特定的适用范围。一、非线性规划的实例下面通过实例归纳出非线性规划数学模型的一般形式,介绍有关
2、非线性规划的基本概念。例 8.1 (投资决策问题) 某企业有 个项目可供选择投资,并且至少要对其中一个n项目投资。已知该企业拥有总资金 元,投资于第 个项目需花费资金 元,Ani,21ia并预计可收益 元,试选择最佳投资方案。 ib解 设投资决策变量为 , .则投资总1,0i ix决 定 投 资 第 个 项 目, 决 定 不 投 资 第 个 项 目 1,2in额为 ,投资总收益为 。因为该公司至少要对一个项目投资,并且总的投资金1niax1nib额不能超过总资金 ,故有限制条件为 .A10niaxA另外,由于 只取值 0 或 1,所以还有约束 .(1,2)ixn (1)0(1,2)iixn最佳
3、投资方案应是投资额最小而总收益最大的方案,所以这个最佳投资决策问题归结为总资金以及决策变量(取 0 或 1)的限制条件下,极大化总收益和总投资之比。因此,其数学模型为: 11max.0,()2,.niiniiibQstAxn2二、非线性规划的定义在一组等式或不等式的约束下,求一个函数的最大值(或最小值)问题,其中目标函数或约束条件中至少有一个非线性函数,这类问题称之为非线性规划问题,简记为(NLP)。可概括为一般形式 :min().0,12, ().jifxsthjqNLPgip其中 称为模型(NLP)的决策变量, 称为目标函数, ,12,Tnxx f()igx和 称为约束函数。另外, ()i
4、p (,jh1,2)q ()01,2i p称为等式约束, 称为不等式约束。 0,jxj对于一个实际问题,在把它归结成非线性规划问题时,一般要注意如下几点: ( 1 )确定供选方案:首先要收集同问题有关的资料和数据,在全面熟悉问题的基础上,确认什么是问题的可供选择的方案,并用一组变量来表示它们。 ( 2 )提出追求目标:经过资料分析,根据实际需要和可能,提出要追求极小化或极大化的目标。并且,运用各种科学和技术原理,把它表示成数学关系式。 ( 3)给出价值标准:在提出要追求的目标之后,要确立所考虑目标的“好”或“坏”的价值标准,并用某种数量形式来描述它。 ( 4 )寻求限制条件:由于所追求的目标一
5、般都要在一定的条件下取得极小化或极大化效果,因此还需要寻找出问题的所有限制条件,这些条件通常用变量之间的一些不等式或等式来表示。 三、 线性规划与非线性规划的区别如果线性规划的最优解存在,其最优解只能在其可行域的边界上达到(特别是可行域的顶点上达到);而非线性规划的最优解(如果最优解存在)则可能在其可行域的任意一点达到。非线性规划的 Matlab 解法对于标准型为: min().,()0,eqeqeqfxstAbBCx其中 x 为 n 维变元向量,C(x)与 Ceq(x)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.用 Matlab 求解上述问题,基本步骤分三步:1. 首
6、先建立 M 文件 fun.m,定义目标函数 :xffunction f=fun(x);3f= ;xf2. 若约束条件中有非线性约束:C( x)0或Ceq(x)=0,则建立M文件nonlcon.m定义函数C(x)与Ceq(x) :functionc,ceq=nonlcon(x)c=.ceq =.3. 建立主程序.非线性规划求解的函数是 fmincon,命令的基本格式如下:(1) x=fmincon(fun,X0,A,b)(2) x=fmincon(fun,X0,A,b,Aeq,beq)(3) x=fmincon(fun,X0,A,b, Aeq,beq,VLB,VUB)(4) x=fmincon(
7、fun,X0,A,b,Aeq,beq,VLB,VUB,nonlcon)(5)x=fmincon(fun,X0,A,b,Aeq,beq,VLB,VUB,nonlcon,options) (6) x,fval= fmincon(.)(7) x,fval,exitflag= fmincon(.)(8)x,fval,exitflag,output= fmincon(.)注意:1 fmincon 函数提供了大型优化算法和中型优化算法。默认时,若在 fun 函数中提供了梯度(options 参数的 GradObj 设置为on ) ,并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有
8、等式约束又有梯度约束时,使用中型算法。2 fmincon 函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用 BFGS 法更新拉格朗日 Hessian 矩阵。3 fmincon 函数可能会给出局部最优解,这与初值 X0 的选取有关。例 8.2 2121minxxfs.t. 0,5463221x1、写成标准形式 21212120 05463 . minxbsxf2、先建立 M-文件 fun1.m:function f=fun1(x);f=-x(1)-2*x(2)+(1/2)*x(1)2+(1/2)*x(2)23、再建立主程序 youh2.m:x0=1;1;A=2 3 ;
9、1 4; b=6;5;Aeq=;beq=;VLB=0;0; VUB=;4x,fval=fmincon(fun1,x0,A,b,Aeq,beq,VLB,VUB)4、运算结果为:x = 0.7647 1.0588fval = -2.0294例 3 015. )1242()min2211xxts xefx1先建立 M 文件 fun2.m,定义目标函数:function f=fun2(x); f=exp(x(1)*(4*x(1)2+2*x(2)2+4*x(1)*x(2)+2*x(2)+1);2再建立 M 文件 mycon.m 定义非线性约束:function g,ceq=mycon(x)g=x(1)+
10、x(2);1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10;3主程序 youh3.m 为:x0=-1;1;A=;b=;Aeq=1 1;beq=0;vlb=;vub=;x,fval=fmincon(fun2,x0,A,b,Aeq,beq,vlb,vub,mycon)3. 运算结果为:x = -1.2250 1.2250fval = 1.8951例8.3 资金使用问题设有400万元资金, 要求4年内使用完, 若在一年内使用资金 x万元, 则可得效益万元(效益不能再使用),当年不用的资金可存入银行, 年利率为10%. 试制定出资金的x使用计划, 以使4年效益之和为最大.设变
11、量 表示第 i年所使用的资金数,则有i4,321,04.532.8.40max321 432ixxtsxxzi1先建立 M 文件 fun3.m,定义目标函数:function f=fun3(x)f=-(sqrt(x(1)+sqrt(x(2)+sqrt(x(3)+sqrt(x(4);52再建立 M 文件 mycon.m 定义非线性约束:function g,ceq=mycon(x)g(1)=x(1)-400;g(2)=1.1*x(1)+x(2)-440;g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)
12、-532.4;ceq=03主程序为:x0=1;1;1;1;vlb=0;0;0;0;vub=;A=;b=;Aeq=;beq=;x,fval=fmincon(fun3,x0,A,b,Aeq,beq,vlb,vub,mycon)得到:1.438.152,.6,2.04,86432z xx例 8.4 求下列非线性规划问题 2121min()8.0,.fxstx首先,编写 M 文件 fun1.m function f=fun1(x); f=x(1)2+x(2)2+8; 和 M 文件 fun2.m function g,h=fun2(x); g=-x(1)2+x(2); h=-x(1)-x(2)2+2;
13、%等式约束 然后,在 Matlab 的命令窗口依次输入 options=optimset; x,y=fmincon(fun1,rand(2,1),zeros(2,1), . fun2, options) 得到:Optimization terminated successfully:First-order optimality measure less than options.TolFun andmaximum constraint violation is less than options.TolConActive Constraints:14x =1.00001.0000y =610.
14、0000即得到:当 , 时,最小值 .1x210y求解非线性规划的基本迭代格式记(NP)的可行域为 。若 ,并且,则称 是(NP)的整体最优解, 是(NP)的整体最优值。如果有则称 是(NP)的严格整体最优解, 是(NP)的严格整体最优值。若 ,并且存在 的邻域 ,使,则称 是(NP)的局部最优解, 是(NP)的局部最优值。如果有则称 是(NP)的严格局部最优解, 是(NP)的严格局部最优值。由于线性规划的目标函数为线性函数,可行域为凸集,因而求出的最优解就是整个可行域上的全局最优解。非线性规划却不然,有时求出的某个解虽是一部分可行域上的极值点,但并不一定是整个可行域上的全局最优解。对于非线性
15、规划模型(NP),可以采用迭代方法求它的最优解。迭代方法的基本思想是:从一个选定的初始点 出发,按照某一特定的迭代规则产生一个点列 ,使得当 是有穷点列时,其最后一个点是(NP)的最优解;当 是无穷点列时,它有极限点,并且其极限点是(NP)的最优解。设 是某迭代方法的第 轮迭代点, 是第 轮迭代点,记(1)这里 ,显然 是由点 与点 确定的方向。式(1)就是求解非线性规划模型(NP)的基本迭代格式。7通常,我们把基本迭代格式(1)中的 称为第 轮搜索方向, 为沿 方向的步长,使用迭代方法求解(NLP)的关键在于,如何构造每一轮的搜索方向和确定适当的步长。设 ,若存在 ,使 ,则称向量 是 在点
16、 处的下降方向。()fx设 ,若存在 ,使 ,则称向量 是点 处关于 的可行方向。一个向量 ,若既是函数 在点 处的下降方向,又是该点关于区域 的可行方向,则称之为函数 在点 处关于 的可行下降方向。现在,我们给出用基本迭代格式(1)求解(NLP)的一般步骤如下:1、 选取初始点 ,令 。2、 构造搜索方向,依照一定规则,构造 在点 处关于 的可行下降方向作为搜索方向 。3、 寻求搜索步长。以 为起点沿搜索方向 寻求适当的步长 ,使目标函数值有某种意义的下降。4、求出下一个迭代点。按迭代格式(1)求出。若 已满足某种终止条件,停止迭代。5、 以 代替 ,回到 2 步。 8.2 无约束优化问题一
17、维搜索方法当用迭代法求函数的极小点时,常常用到一维搜索,即沿某一已知方向求目标函数的极小点。一维搜索的方法很多,常用的有:(1)试探法(“成功失败”,斐波那契法,0.618 法等);插值法(抛物线插值法,三次插值法等);(3)微积分中的求根法(切线法,二分法等)。 考虑一维极小化问题 (2) 8若 是 区间上的下单峰函数,我们介绍通过不断地缩短 的长度,来搜索得(2)的近似最优解的两个方法。 为了缩短区间 ,逐步搜索得(2)的最优解 的近似值,我们可以采用以下途径:在 中任取两个关于 是对称的点 和 (不妨设 , 并把它们叫做搜索点),计算 和 并比较它们的大小。对于单峰函数,若 ,则必有 ,
18、因而 是缩短了的单峰区间;若 ,则有 ,故 是缩短了的单峰区间;若 ,则 和 都是缩短了的单峰。因此通过两个搜索点处目标函数值大小的比较,总可以获得缩短了的单峰区间。对于新的单峰区间重复上述做法,显然又可获得更短的单峰区间。如此进行,在单峰区间缩短到充分小时,我们可以取最后的搜索点作为(2)最优解的近似值。 应该按照怎样的规则来选取探索点,使给定的单峰区间的长度能尽快地缩短?Fibonacci 法是大家常采用的一种方法。Fibonacci 法 若数列 满足关系: 则称 为 Fibonacci 数列, 称为第 个 Fibonacci 数,称相邻两个 Fibonacci数之比 为 Fibonacc
19、i 分数。 当用斐波那契法以 个探索点来缩短某一区间时,区间长度的第一次缩短率为 ,其后各次分别为 。由此,若 和 是单峰区间 中第 1 个和第 2 个探索点的话,那么应有比例关系 , 从而 9,(3) 它们关于 确是对称的点。 如果要求经过一系列探索点搜索之后,使最后的探索点和最优解之间的距离不超过精度 ,这就要求最后区间的长度不超过 ,即 (4) 据此,我们应按照预先给定的精度 ,确定使(4)成立的最小整数 作为搜索次数,直到进行到第 个探索点时停止。 用上述不断缩短函数 的单峰区间 的办法,来求得问题(2)的近似解,是 Kiefer(1953 年)提出的,叫做 Finbonacci 法,
20、具体步骤如下: 1、 选取初始数据,确定单峰区间 ,给出搜索精度 ,由(4)确定搜索次数 。 2、 ,计算最初两个搜索点,按(3)计算 和 。 3、 while if else end end4、当进行至 时,这就无法借比较函数值 和 的大小确定最终区间,为此,取10其中 为任意小的数。在 和 这两点中,以函数值较小者为近似极小点,相应的函数值为近似极小值。并得最终区间 或 。由上述分析可知,斐波那契法使用对称搜索的方法,逐步缩短所考察的区间,它能以尽量少的函数求值次数,达到预定的某一缩短率。8.3 约束规划问题带有约束条件的极值问题称为约束极值问题,也叫约束规划问题。求解约束极值问题要比求解
21、无约束极值问题困难得多。为了简化其优化工作,可采用以下方法:将约束问题化为无约束问题;将非线性规划问题化为线性规划问题,以及能将复杂问题变换为较简单问题的其它方法。库恩塔克条件是非线性规划领域中最重要的理论成果之一,是确定某点为最优点的必要条件,但一般说它并不是充分条件(对于凸规划,它既是最优点存在的必要条件,同时也是充分条件) 。一、二次规划若某非线性规划的目标函数为自变量 x的二次函数,约束条件又全是线性 Matlab 中二次规划的标准模型为:VUBXL .21minbeqAsCHzeqTT这里 H 是实对称矩阵, f , b 是列向量,A 是相应维数的矩阵。用 MATLAB 软件求解,其
22、输入格式如下 :1. x=quadprog(H,C,A,b);2. x=quadprog(H,C,A,b,Aeq,beq); 3. x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB);4. x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0);5. x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0,options);6. x,fval=quaprog(.);7. x,fval,exitflag=quaprog(.);8. x,fval,exitflag,output=quaprog(.);例 8.5 min f(x1
23、,x2)=-2x1-6x2+x12-2x1x2+2x22s.t. x1+x2211-x1+2x22x10, x20 1、写成标准形式: 2121216 -,minxxxz T2120 .xbs2、 输入命令:H=1 -1; -1 2; c=-2 ;-6;A=1 1; -1 2;b=2;2;Aeq=;beq=; VLB=0;0;VUB=;x,z=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)3、运算结果为:x =0.6667 1.3333 z = -8.2222例 8.6 求解二次规划0, 943 3642)(min21 2121x x-x-f解 编写如下程序:h=4,-4;
24、-4,8;f=-6;-3;a=1,1;4,1;b=3;9;x,value=quadprog(h,f,a,b,zeros(2,1)求得 x =1.95001.0500value =-11.0250即当 时,最小值为: 。05.19x 025.1infxM罚函数法利用罚函数法,可将非线性规划问题的求解,转化为求解一系列无约束极值问题,因12而也称这种方法为序列无约束最小化技术,简记为 SUMT (Sequential Unconstrained Minimization Technique)。罚函数法求解非线性规划问题的思想是,利用问题中的约束函数作出适当的罚函数,由此构造出带参数的增广目标函数,
25、把问题转化为无约束非线性规划问题。主要有两种形式,一种叫外罚函数法,另一种叫内罚函数法,下面介绍外罚函数法。考虑如下问题: )(minxft.,1i ,0)(ks, ,.i xhrigtsi取一个充分大的数 M ,构造函数 tiisiirii xkMxhgxfP 111 |)(|)0,(mn),(ma)(,((或 |,0, 32KHMxGf 这里 , , , 321,为适当的行)( )(1xgGr)( )(1xhHs)( 1xkKt向量,Matlab 中可以直接利用 和 函数。 )则以增广目标函数 为目标函main),(MxP数的无约束极值问题 ),(inMxP的最优解 x也是原问题的最优解。
26、例 8.7 求下列非线性规划.0,x 2- 8)(min12121xf解 (i)编写 M 文件 test.m function g=test(x);M=50000;f=x(1)2+x(2)2+8;g=f-M*min(x(1),0)-M*min(x(2),0)-M*min(x(1)2-x(2),0).+M*abs(-x(1)-x(2)2+2);(ii)在 Matlab 命令窗口输入x,y=fminunc(test,rand(2,1)13即可求得问题的解。Maximum number of function evaluations exceeded;increase options.MaxFunE
27、valsx =1.67840.5671y =11.1386习 题 八1. 某工厂现有一台使用了 3 年的机床,已知这种机床最多可使用4 年,题 1 表给出该种机床每年的检修费及年度末的价值,而一台新机床的售价为 20000 元,试制订该厂在未来4 年内对该机床的更新计划。题 1 表年限 1 2 3 4年末检修费 7000 5000 9000 -年末价值 10000 8000 2000 02.某工厂根据合同,每月某种货物的交货量如题 2 表所示,该厂的生产能力为每月 400 件,仓库的存货能力为 300 件,已知工厂在开工生产该种货物的月份,固定成本为 400 元,每百件货物的生产成本核算 10000 元,仓库保管费为每百元每月 1000 元,假设开始时及 6 个月末交货后无存货,试制订完成合同的费用最小的生产计划。题 2 表年限 1 2 3 4 5 6月供货量100 200 500 300 200 100