当前位置:文档之家› 用外点法求解非线性约束最优化问题

用外点法求解非线性约束最优化问题

题目:用外点法求解非线性约束最优化问题学院信息管理学院学生姓名余楠学号 ********专业数量经济学届别 2013指导教师易伟明职称教授二O一三年十二月用外点法求解非线性约束最优化问题摘要约束最优化问题是一类重要的数学规划问题。

本文主要研究了用外点罚函数法对约束非线性规划问题进行求解。

对于一个约束非线性规划用罚函数求解的基本思路是通过目标函数加上惩罚项,将原约束非线性规划问题转化为求解一系列无约束的极值问题。

本文最后利用c语言编程得到满足允许误差内的最优解。

本文主要对一个约束非线性规划问题的实例,首先利用上述迭代的方法,计算出各迭代点的无约束极值问题的最优解。

然后应用c语言编程,得到精确地最优解,需迭代四次次才使得ε≤0.001,得到的最优解为*X=(333.0)T。

.0,666关键词:外点罚函数法非线性规划约束最优化迭代最优解一、背景描述线性规划的目标函数和约束条件都是决策变量的线性函数,但如果目标函数或约束条件中含有决策变量的非线性函数,就称为非线性规划。

非线性规划与线性规划一样,也是运筹学的一个极为重要的分支,它在经济、管理、计划、统计以及军事、系统控制等方面得到越来越广泛的应用。

非线性规划模型的建立与线性规划模型的建立类似,但是非线性规划问题的求解却是至今为止的一个研究难题。

虽然开发了很多求解非线性规划的算法,但是目前还没有适用于求解所有非线性规划问题的一般算法,每个方法都有自己特定的适用范围。

罚函数法是应用最广泛的一种求解非线性规划问题的数值解法,它的基本思路是通过目标函数加上惩罚项,将原约束非线性规划问题转化为求解一系列无约束的极值问题。

这种惩罚体现在求解过程中,对于企图违反约束的那些迭代点,给予很大的目标函数值,迫使这一系列无约束问题的极小值点无限的向可行集(域)逼近,或者一直保持在可行集(域)内移动,直到收敛于原来约束问题的极小值点。

外点法的经济学解释如下:若把目标函数看成“价格”,约束条件看成某种“规定”,采购人员在规定的范围内采购时价格最便宜,但若违反了规定,就要按规定加收罚款。

采购人员付出的总代价应是价格和罚款的综合。

采购人员的目标是使总代价最小,当罚款规定的很苛刻时,违反规定支付的罚款很高。

这就迫使采购人员在规定的范围内采购。

数学上表现为罚因子足够大时,无约束极值问题的最优解应满足约束条件,而成为约束问题的最优解。

二、基础知识2.1 约束非线性优化问题的最优条件该问题是一个约束非线性优化问题,利用外点罚函数法求解该问题,约束非线性优化问题的最优解所要满足的必要条件和充分条件是我们设计算法的依据,为此有以下几个定理。

设具有不等式约束的极值问题:min ()X f s.t.i g (X)≥0 (*) 定理1(Kuhn-Tucker 条件)在(*)中假设:①*X 是局部最小值;②f (X),)(X g i i =1,2,…,m 在点*X 连续可微;③i g ∇(*X ),i {()}m i X g i E i ,2,1,0* ===∈线性无关,则存在一组参数,,2,1,0*m i u i=≥使得广义Lagrange 函数()()X g X f X L i m i i ∑=-=1)(,μμ满足:()()()⎪⎪⎪⎩⎪⎪⎪⎨⎧===≥=∇-∇∑=m i X g m i X g X f i i i mi i i ,2,1,0,2,1,00***1*** μμμ 对以上定理做几点说明: (1)()()∑==∇-∇mi iiX g Xf 1***μ本应是:()()0***=∇-∇∑∈X g X f Ei i i μ或()()∑∈∇=∇Ei i i X g X f ***μ,即()*X f ∇是紧约束函数()X g i 在*X 处的梯度的非负线性组合,但若规定:当E i ∉时,0*=iμ则等式可写成:()()0***=∇-∇∑=mii iiX g Xf μ(2)()0**=X g i iμ等价于()()()⎪⎩⎪⎨⎧=∉==∈=000******ii i i i i E i X g X g E i X g μμμ有时当有时当(3)如果对所有()*,X g E i i ∇∈线性无关,则*X 称为约束的一个正则点,即如果在*X 处起作用的约束函数的梯度是线性无关的,则*X 是一个正则点。

如果*X 不是正则点,则K-T 条件可能不成立。

定理2 设*X 是问题(*)的可行解,()X f ,()m i X g i ,2,1, =-是凸函数,且在*X 可微,又有*X 满足K-T 条件,则*X 是全局最优解。

根据以上两个定理可见,对凸规划来说,K-T 条件也是借的充分必要条件。

然而从具体例子可以看出利用极值的必要条件和充分条件去求非线性规划问题的最优解不都是很容易的,下面介绍应用广泛的外点罚函数法的基本算法。

2.2外点罚函数法的基本思想它的基本思路是通过目标函数加上惩罚项,这种惩罚体现在求解过程中,对于企图违反约束的那些迭代点,给与很大的目标函数值,迫使这一系列无约束问题的极小值点或者无限的向可行集逼近,或者一直保持在可行集内移动,直到收敛于原来约束问题的极小值点。

先考虑不含等式约束的非线性规划问题:()X f RX ∈min (){}m i X g X R i ,2,1,0 =≥= (1)构造一个函数:()⎩⎨⎧<∞≥=时当时当000t t t p现把()t X g i 视为,则当R x ∈时,()()m i X g P i ,,2,1,0 ==,当R X ∉时,()()m i X g P i ,,2,1, =∞=,即有:()()⎩⎨⎧∉∞∈=时当时当R X R X X g P i 0(2)再构造函数:()()()()∑=+=mi i X g P X f X 1ϕ 求解无约束极值问题:()X ϕmin(3)若(3)有极小值*X ,则由(2)可看出,这时应有()()m i X g P i ,,2,1,0* ==,即点R X ∈*,因而*X 不仅是问题(3)的最优解,同时也是原问题(1)的最优解。

从而把约束极值问题(1)的求解变为无约束极值问题(3)的求解。

但是,用上述方法构造的函数()t p 在0=t 处不连续,更没有导数。

为了求解方便,将该函数修改为:()⎩⎨⎧<≥=0002t tt t P 当当修改后的函数()t P 在0=t 处的导数等于0,而且()t P ,()t P '对任意的t 都连续。

当R X ∈时仍有()()01=∑=m i i X g P ,当R X ∉时有:()()∑=∞<<mi i X g P 10,而()X ϕ可改为:()()()()∑=+=mi i X g P M X f M X 1,ϕ或等价地:()()()[]∑=+=mi i X g M X f M X 12)(,0min ,ϕ问题(3)就变为:()M X ,m in ϕ (4) 如果原规划问题(1)有最优解,则式(4)的最优解为原问题(1)的最优解或近似最优解。

若()M M X ∈*,则()M X *是原问题的最优解,这是因为对任意的R X ∈有:()()()()()()()()M ,,**1X f M M X M X X g P M X f mi i =≥=+∑=ϕϕ即当R ∈X 时有:()()()M X f X f *≥。

即使()R M X ∉*,它也会相当接近于式(1)的约束条件的边界。

这是因为:若()M X *为式(4)的最优解,则在M 相当大的情况下,只可能使()()[]∑=mi i X g 12,0min 相当小,即()M X *相当靠近约束域R 的边界。

函数()M X ,ϕ称为罚函数,其中第二项()()∑=mi i X g P M 1称为惩罚项,M 称为罚因子。

实际计算时,总是先给定一个初始点()0X 和初始罚因子01>M ,求解无约束极值问题(4):()1,m in M X ϕ,若其最优解()R M X ∈1*,则它已是(1)的最优解;否则,以()1*M X 为新的起始点,加大罚因子,取21M M >,重新求解(4)。

如此循环,或者存在某个k M ,使得()k M X ,m in ϕ的最优解()R M X k ∈*,即是式(1)的最优解;或者存在k M 的一个无穷大序列: <<<<<k M M M 210,随着M 值的增大,罚函数中的惩罚项所起的作用增大,()M X ,m in ϕ的最优解()M X *与约束域R 的距离越来越近。

当k M 趋于无穷大时,最优点序列(){}k M X *就从R 的外部趋于R 的边界点。

即趋于原问题(1)最优解*X 。

2.3约束非线性优化问题的外点罚函数法迭代步骤 外点法的迭代步骤:第1步 选取初始点0x ,取01>M (可取11=M ),给定 ε>0,令k=1; 第2步 求无约束极值问题的最优解()k X :()()()k k k M X M X ,,min ϕϕ=,其中()()()()()()()[]∑=+=mi kikk k k X g M Xf M X12,0min ,ϕ;第3步 若对某一个()m i i ≤≤1有()()ε≥-k i X g ,则取k k CM M =+1,其中5=C ~10,置k=k+1,转(2);否则,迭代终止,取()k X X =*。

由以上计算步骤可知,外点罚函数法迭代终止时,求得的是目标函数驻点的一个近似点。

三、题目举例用外点罚函数法求解约束非线性规划问题:2212min(2)x x +,s.t.1x +2x 1≥设初始取为()0X =(1,1)T ,迭代到满足允许误差ε=0.001为止的解。

四、问题求解3.1对原无约束非线性规划迭代构造罚函数()()()()[]∑=+=mi i k k X g M X f M X 12,0min ,ϕ所以()()[]22122211,0min 2,-+++=x x M x x M X k k ϕ()1,0min 222111-++=∂∂x x M x x k ϕ()1,0min 242122-++=∂∂x x M x x k ϕ对于不满足约束条件的点()Tx x X 21,=,有:0121<-+x x令:021=∂∂=∂∂x x ϕϕ,得:()()01221,0m in 22211211=-++=-++x x M x x x M x k k ()()01241,0m in 24212212=-++=-++x x M x x x M x k k得()k M X ,min ϕ的解为:()Tk k k k k M M M M M X ⎪⎪⎭⎫⎝⎛++=23,232 即 2321+=k k M M x ,232+=k k M M x (**)首先进行第一次迭代给定初始点()()TX 1,10=,同时取11=M 代入公式(**)得521=x ,512=x ()()()001.052151521211=>=+--=-+-=-εx x X g i进行第二次迭代取C=10,得1012==CM M 代入公式(**) 得851=x ,1652=x ()()001.01611165852=>=+--=-εX g i进行第三次迭代1003=M 代入公式(**)得3022001=x ,3021002=x ()()001.0302213021003022003=>=+--=-εX g i进行第四次迭代10004=M 代入公式(**)得300220001=x ,300210002=x ()()001.030022130021000300220004=<=+--=-εX g i至此满足了精度要求,迭代终止,所得原问题的最优近似解为:667.0300220001≈=x 333.0300210002≈=x3.2对原约束非线性规划进行c 语言编程求解就这样无限的迭代下去,直到()()ε<-k i X g 为止,为此,我们可以用c 语言编程得到,其算法设计如下图所示:C 语言源程序代码: #include "stdio.h"void fun(double a[],double b[],double w) { double re[2]; re[0]=re[1]=0.0;if((a[0]==0.0&&a[1]==0.0)||(a[0]==0.0&&b[0]==0.0)||(b[0]==0.0&&b[1]==0.0)||(a[1]==0.0&&b[1]==0.0)){printf("无解");return;}if(a[0]!=0.0){if(a[0]*b[1]-a[1]*b[0]==0.0){printf("无解");}re[1]=(a[0]*b[2]-b[0]*a[2])/(a[0]*b[1]-a[1]*b[0]);re[0]=(a[2]-re[1]*a[1])/a[0];}else{ re[1]=a[2]/a[1];re[0]=(a[2]-a[1]*re[1])/b[0];}if(1-re[0]-re[1]<w);printf("x1=%f ",re[0]);printf("x2=%f\n",re[1]);}void main(){ double a1[3],b1[3],w;int m,c=1;printf("请输入初始罚因子:m=");scanf("%f",&m);printf("请输入所要到的精度:w=");scanf("%f",&c);a1[0]=2*m;a1[1]=4+2*m;a1[2]=2*m;b1[0]=2+2*m;b1[1]=2*m;b1[2]=2*m;fun(a1,b1,w);}所得结果截屏如图所示:五、结论与展望从求解的过程中可以看出,随着罚因子的增大,在求解无约束最优化问题的过程中,将迫使()kMX向可行域接近。

相关主题