您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 用外点法求解非线性约束最优化问题
题目:用外点法求解非线性约束最优化问题学院信息管理学院学生姓名余楠学号81320442专业数量经济学届别2013指导教师易伟明职称教授二O一三年十二月2用外点法求解非线性约束最优化问题摘要约束最优化问题是一类重要的数学规划问题。本文主要研究了用外点罚函数法对约束非线性规划问题进行求解。对于一个约束非线性规划用罚函数求解的基本思路是通过目标函数加上惩罚项,将原约束非线性规划问题转化为求解一系列无约束的极值问题。本文最后利用c语言编程得到满足允许误差内的最优解。本文主要对一个约束非线性规划问题的实例,首先利用上述迭代的方法,计算出各迭代点的无约束极值问题的最优解。然后应用c语言编程,得到精确地最优解,需迭代四次次才使得0.001,得到的最优解为*X=(333.0,666.0)T。关键词:外点罚函数法非线性规划约束最优化迭代最优解3一、背景描述线性规划的目标函数和约束条件都是决策变量的线性函数,但如果目标函数或约束条件中含有决策变量的非线性函数,就称为非线性规划。非线性规划与线性规划一样,也是运筹学的一个极为重要的分支,它在经济、管理、计划、统计以及军事、系统控制等方面得到越来越广泛的应用。非线性规划模型的建立与线性规划模型的建立类似,但是非线性规划问题的求解却是至今为止的一个研究难题。虽然开发了很多求解非线性规划的算法,但是目前还没有适用于求解所有非线性规划问题的一般算法,每个方法都有自己特定的适用范围。罚函数法是应用最广泛的一种求解非线性规划问题的数值解法,它的基本思路是通过目标函数加上惩罚项,将原约束非线性规划问题转化为求解一系列无约束的极值问题。这种惩罚体现在求解过程中,对于企图违反约束的那些迭代点,给予很大的目标函数值,迫使这一系列无约束问题的极小值点无限的向可行集(域)逼近,或者一直保持在可行集(域)内移动,直到收敛于原来约束问题的极小值点。外点法的经济学解释如下:若把目标函数看成“价格”,约束条件看成某种“规定”,采购人员在规定的范围内采购时价格最便宜,但若违反了规定,就要按规定加收罚款。采购人员付出的总代价应是价格和罚款的综合。采购人员的目标是使总代价最小,当罚款规定的很苛刻时,违反规定支付的罚款很高。这就迫使采购人员在规定的范围内采购。数学上表现为罚因子足够大时,无约束极值问题的最优解应满足约束条件,而成为约束问题的最优解。二、基础知识2.1约束非线性优化问题的最优条件该问题是一个约束非线性优化问题,利用外点罚函数法求解该问题,约束非线性优化问题的最优解所要满足的必要条件和充分条件是我们设计算法的依据,为此有以下几个定理。4设具有不等式约束的极值问题:minXfs.t.ig(X)0(*)定理1(Kuhn-Tucker条件)在(*)中假设:①*X是局部最小值;②f(X),)(Xgii=1,2,…,m在点*X连续可微;③ig(*X),imiXgiEi,2,1,0*线性无关,则存在一组参数,,2,1,0*miui使得广义Lagrange函数XgXfXLimii1)(,满足:miXgmiXgXfiiimiii,2,1,0,2,1,00***1***对以上定理做几点说明:(1)miiiXgXf1***0本应是:0***XgXfEiii或EiiiXgXf***,即*Xf是紧约束函数Xgi在*X处的梯度的非负线性组合,但若规定:当Ei时,0*i则等式可写成:0***miiiiXgXf(2)0**Xgii等价于0000******iiiiiiEiXgXgEiXg有时当有时当(3)如果对所有*,XgEii线性无关,则*X称为约束的一个正则点,即如果在*X处起作用的约束函数的梯度是线性无关的,则*X是一个正则点。如果*X不是正则点,则K-T条件可能不成立。定理2设*X是问题(*)的可行解,Xf,miXgi,2,1,是凸函数,且在*X可微,又有*X满足K-T条件,则*X是全局最优解。根据以上两个定理可见,对凸规划来说,K-T条件也是借的充分必要条件。然而从具体例子可以看出利用极值的必要条件和充分条件去求非线性规划问5题的最优解不都是很容易的,下面介绍应用广泛的外点罚函数法的基本算法。2.2外点罚函数法的基本思想它的基本思路是通过目标函数加上惩罚项,这种惩罚体现在求解过程中,对于企图违反约束的那些迭代点,给与很大的目标函数值,迫使这一系列无约束问题的极小值点或者无限的向可行集逼近,或者一直保持在可行集内移动,直到收敛于原来约束问题的极小值点。先考虑不含等式约束的非线性规划问题:XfRXminmiXgXRi,2,1,0(1)构造一个函数:时当时当000tttp现把tXgi视为,则当Rx时,miXgPi,,2,1,0,当RX时,miXgPi,,2,1,,即有:时当时当RXRXXgPi0(2)再构造函数:miiXgPXfX1求解无约束极值问题:Xmin(3)若(3)有极小值*X,则由(2)可看出,这时应有miXgPi,,2,1,0*,即点RX*,因而*X不仅是问题(3)的最优解,同时也是原问题(1)的最优解。从而把约束极值问题(1)的求解变为无约束极值问题(3)的求解。但是,用上述方法构造的函数tp在0t处不连续,更没有导数。为了求解方便,将该函数修改为:0002ttttP当当修改后的函数tP在0t处的导数等于0,而且tP,tP'对任意的t都连续。当RX时仍有01miiXgP,当RX时有:miiXgP10,而X可6改为:miiXgPMXfMX1,或等价地:miiXgMXfMX12)(,0min,问题(3)就变为:MX,min(4)如果原规划问题(1)有最优解,则式(4)的最优解为原问题(1)的最优解或近似最优解。若MMX*,则MX*是原问题的最优解,这是因为对任意的RX有:M,,**1XfMMXMXXgPMXfmii即当RX时有:MXfXf*。即使RMX*,它也会相当接近于式(1)的约束条件的边界。这是因为:若MX*为式(4)的最优解,则在M相当大的情况下,只可能使miiXg12,0min相当小,即MX*相当靠近约束域R的边界。函数MX,称为罚函数,其中第二项miiXgPM1称为惩罚项,M称为罚因子。实际计算时,总是先给定一个初始点0X和初始罚因子01M,求解无约束极值问题(4):1,minMX,若其最优解RMX1*,则它已是(1)的最优解;否则,以1*MX为新的起始点,加大罚因子,取21MM,重新求解(4)。如此循环,或者存在某个kM,使得kMX,min的最优解RMXk*,即是式(1)的最优解;或者存在kM的一个无穷大序列:kMMM210,随着M值的增大,罚函数中的惩罚项所起的作用增大,MX,min的最优解MX*与约束域R的距离越来越近。当kM趋于无穷大时,最优点序列kMX*就从R的外部趋于R的边界点。即趋于原问题(1)最优解*X。72.3约束非线性优化问题的外点罚函数法迭代步骤外点法的迭代步骤:第1步选取初始点0x,取01M(可取11M),给定0,令k=1;第2步求无约束极值问题的最优解kX:kkkMXMX,,min,其中mikikkkkXgMXfMX12,0min,;第3步若对某一个mii1有kiXg,则取kkCMM1,其中5C~10,置k=k+1,转(2);否则,迭代终止,取kXX*。由以上计算步骤可知,外点罚函数法迭代终止时,求得的是目标函数驻点的一个近似点。三、题目举例用外点罚函数法求解约束非线性规划问题:2212min(2)xx,s.t.1x+2x1设初始取为0X=(1,1)T,迭代到满足允许误差=0.001为止的解。四、问题求解3.1对原无约束非线性规划迭代构造罚函数miikkXgMXfMX12,0min,所以22122211,0min2,xxMxxMXkk1,0min222111xxMxxk1,0min242122xxMxxk对于不满足约束条件的点TxxX21,,有:0121xx令:021xx,得:801221,0min22211211xxMxxxMxkk01241,0min24212212xxMxxxMxkk得kMX,min的解为:TkkkkkMMMMMX23,232即2321kkMMx,232kkMMx(**)首先进行第一次迭代给定初始点TX1,10,同时取11M代入公式(**)得521x,512x001.052151521211xxXgi进行第二次迭代取C=10,得1012CMM代入公式(**)得851x,1652x001.01611165852Xgi进行第三次迭代1003M代入公式(**)得3022001x,3021002x001.0302213021003022003Xgi进行第四次迭代10004M代入公式(**)得300220001x,300210002x001.030022130021000300220004Xgi至此满足了精度要求,迭代终止,所得原问题的最优近似解为:667.0300220001x333.0300210002x93.2对原约束非线性规划进行c语言编程求解就这样无限的迭代下去,直到kiXg为止,为此,我们可以用c语言编程得到,其算法设计如下图所示:否是C语言源程序代码:#includestdio.hvoidfun(doublea[],doubleb[],doublew){doublere[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]给定1C00X10,,,Mk:=1计算miikkXgMXfMX12,0min,求k,,minMXMXXkkk:1:1kkCMMkk—miXgki,,2,1?停kXX*10==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]);}voidmain(){doublea1[
本文标题:用外点法求解非线性约束最优化问题
链接地址:https://www.777doc.com/doc-5489052 .html