数学建模(三):非线性规划问题

&1.非线性规划
1.当一个规划问题的约束条件或者是目标函数中包含至少一个非线性函数,那么这种规划问题就是⎡非线性规划问题⎦。
举个例子说明:在这里插入图片描述
设决策变量xi的意义为对第i个项目投资与否,则xi=1代表对这个项目投资,xi=0代表对这个项目不投资;可以得到对于投资金额来说,由于至少要对一个项目投资,并且总投资金额不能超过总资金A
在这里插入图片描述
对于决策变量,它是一个只能二元取值的变量,所以有xi(1-xi)=0,i=1,2,…,n
我们这里对于投资收益最大化的理解是投资总收益与总投资的比值最大化,所以这个规划问题综上所述可以表示为
在这里插入图片描述
《数学建模算法与应用》中还给出了对于一个实际问题把它转化为非线性规划问题的注意要点,但过于泛泛而谈,以至于光看这些注意要点对于所有的规划问题都能成立。我认为非线性规划问题在建模时应当注意⎡是否有必要引入非线性的目标函数和约束条件⎦,一个线性规划问题总是比非线性规划问题容易求得最优解,因为线性规划问题的最优解总是会在问题的可行域的边界上,而非线性规划问题的最优解却可以存在于问题的可行域中的任意一点;
非线性规划是可以通过matlab的FMINCON函数求解的;

2.如何求解非线性规划问题?
一种方法是迭代法。在讲述迭代法之前,我们需要知道整体最优解、严格整体最优解、局部最优解和严格局部最优解的定义,这里假定你已经知道了这些概念代表的含义。使用迭代法的基本思想是:选定初始点x0∈Rn,按照某种特定的迭代规则,可以由x0产生一系列的解,由它们组成点集{xk}:
1)当{xk}中元素个数是有限时,那该点集的最优一个点就是该非线性规划问题的最优解;
2)当{xk}中元素个数是无限时,那么它有极限点,并且这个极限点就是非线性规划问题的最优解;
假设xk∈Rn是第k轮迭代点,那么在它不是NP问题(Non-linear Programming,非线性规划)最优解情况下,它必定有下一个迭代点xk+1,它们之间的关系满足:

xk+1=xk+tkpk

式中的tk是一个实数,pk∈Rn,||pk||=1,并且pk方向为从xk向xk+1的方向。这里的pk我们称它为第k轮搜索方向,tk我们称它为沿pk方向的步长。
我们引入两个概念下降方向和可行方向:
1)下降方向:指当存在大于0的步长,使得目标函数在第k+1轮迭代中的结果小于第k轮迭代结果,此时的pk方向称为目标函数在xk点的下降方向;
2)可行方向:指当存在大于0的步长,使得第k+1轮的迭代结果在NP问题的可行域K中,此时的pk方向称为xk点关于可行域K的可行方向;
既是可行方向又是下降方向,我们称之为可行下降方向;接下来给出基本迭代格式求解NP问题的一般步骤:
0选取初始点x0,令k=0;
1构造搜索方向,按照迭代规则,得到可行下降方向pk
2寻找合适的步长tk,求出xk+1;若满足终止条件,则停止迭代;
3以xk+1代替xk,返回1步;

3.凸函数、凸规划
凸函数、严格凸函数的定义我们在此略去,考虑非线性规划在这里插入图片描述
假定f(x)为凸函数,gj(x)为凸函数,那么这样的规划称为凸规划。凸规划的可行域一定是凸集,它的局部最优解就是全剧最优解,它的最优解的集合可以形成一个凸集。当目标函数f(x)是严格凸函数时,假如凸规划问题有最优解,它的最优解是唯一的。

&2.无约束问题
1.一维搜索方法
沿某一已知方向求目标函数的极小值。常用的一维搜索方法:(1)试探发(Fibonacci法,黄金比例法);(2)插值法(抛物线插值法,三次插值法);(3)微积分中的求根法(切线法,二分法等)
在讲述详细的搜索方法之前,我们先考虑一维极小化问题,假设函数f(t)在a≤t≤b范围内有唯一的极值,那么我们通过不断缩短区间,来寻求近似最优解t*;在[a,b]区间中任取两个关于(a+b)/2对称的点t1,t2,假定t1<t2,通过测定法f(t1)和f(t2)的值,我们可以得到:
1)若f(t1)<f(t2),则必有t*∈[a,t2];
2)若f(t2)<f(t1),则必有t*∈[t1,b];
3)若f(t1)=f(t2),则必有t*∈[t1,t2];
(4.22 后续待更新)
1.1Fibonacci法
引入Fibonacci数列定义,假如数列{Fn}满足关系

F0=F1=1
Fn=Fn-2+Fn-1,n=2,3,…,

数列{Fn}就被称为Fibonacci数列,Fn称为第n个Fibonacci数,相邻两个Fibonacci数的比值Fn-1/Fn称为Fibonacci分数,Fibonacci分数始终是小于等于1的。
接下来我们介绍通过不断缩小区间[a,b],求得单峰目标函数f(t)在这个区间的极值的Fibonacci法:
1给定搜索精度𝛅>0,通过关系式(b-a)/Fn≤𝛅,可以得到n的值;
2k=1,根据t1=a+Fn-2/Fn*(b-a),t2=a+Fn-1/Fn (b-a);可以计算出最初两个搜索点;
3当k<n-1时,计算函数值f(t1)与f(t2),若f(t1)<f(t2),则令b=t2;t2=t1;t1=b+Fn-1-k/Fn-k
(a-b),即左端点a不动,更新其他三个参数;
若f(t1)>f(t2),则令a=t1;t1=t2;t2=a+Fn-1-k/Fn-k *(b-a),即右端点b不动,更新其他三个参数;
k += 1;
4重复3,直到k=n-1;
5此时t1=t2=(b+a)/2,此时令t1=(b+a)/2,t2=a+(1/2+𝛆)(b-a);𝛆为任意小的数;取此时f(t1)与f(t2)中的较小值作为近似极小值,相应的区间为[a,t2]或[t1,b]

1.2黄金比例法
一种Fibonacci法的近似方法,实现起来较为容易,黄金比例指一个事物的(√5-1)/2倍,约为0.618,令𝛚=(√5-1)/2,这个数满足𝛚/1=(1-𝛚)/𝛚,而且它是Fibonacci分数当n趋近于无穷时的极限;它和Fibonacci方法较为相似,不过缩短区间的比例为0.618,也就是𝛚的近似数;

2.二次插值法
对于f(t)在[a,b]上连续时的极小化问题,可以考虑使用多项式插值进行求解。通过不断用低次多项式(指二次以及二次以下)来近似f(t),用插值多项式的极小点来逼近原问题的最优解;

3.无约束极值问题
当不限制区间,也不限制极值个数时,这样的极值问题我们称它为无约束极值问题,这种问题有解析法和直接法两种方法,区别是前者会用到导数,而后者不需要;我们分别对这两种方法进行介绍

3.1解析法
3.1.1梯度法(最速下降法)
我们在之前迭代法中介绍了最基本的迭代格式xk+1=xk+tkpk,我们介绍pk时,说明了它是一个方向,能够使得函数f(x)的值在点xk下降;假设我们要求这个方向pk上f(x)的值在点xk下降得最快,那么由微积分知识告诉我们这个方向应该是f(x)在点xk的负梯度方向(关于这一点的说明可以参考这里,我并不打算花很多篇幅来说明此事,但我希望本文读者假如无法解决⎡为什么函数在某一点的最速下降方向是它的负梯度方向?⎦这样的问题,应该去仔细读一读这篇文章),所以我们令pk=-∇f(xk);梯度法的终止条件是∇f(xx)=0或||∇f(xk)||≤𝛆,我们来谈一谈具体步骤:
1选取初始点x0,给定终止误差𝛆,令k=0;
2求梯度向量,计算∇f(xk),当∇f(xx)=0或||∇f(xk)||≤𝛆时,停止迭代,输出xk
3构造pk=-∇f(xk),并求得tk,使得f(xk+tkpk) = min f(xk+tpk)(t≥0)
4令xk+1=xk+tkpk,k+=1,转2
关于如何求梯度,可以自行解决,不做赘述。

3.1.2Newton法(在讲述这一块时,我假定你已经懂得了多元函数的泰勒展开以及黑塞矩阵及黑塞矩阵正定的性质)
对于一个多元目标函数f(x)而言,在点xk处通过泰勒展开可以获得它的二次逼近式:
f(x)≈Q(x)=f(xk)+∇f(xk)T(x-xk)+1/2*(x-xk)T2f(xk)(x-xk);我们假设黑塞矩阵∇2f(xk)是正定的,因此Q(x)的驻点即为它的极值点。若设xk+1为Q(x)的极值点,有∇Q(xk+1)=∇f(xk)+∇2f(xk)(xk+1-xk)=0,就可以得到xk+1=xk-[∇2f(xk)]-1∇f(xk),此时[∇2f(xk)]-1∇f(xk)被我们称作Newton方向,并且此时步长tk取固定值1,接下来我们给出Newton法具体步骤:
1选取初始点x0,给定终止误差𝛆>0,令k=0;
2求梯度向量,即∇f(xk),若||∇f(xk)||≤𝛆,则停止迭代,输出xk。否则进行3
3计算[∇2f(xk)]-1,取pk=-[∇2f(xk)]-1∇f(xk);
4求得下一迭代点xk+1=xk+pk
Newton法的优点是收敛速度快;缺点是初始点对于求解过程的影响较大,选择了一个不大理想的初始点,可能会导致求不出解。

3.1.3 变尺度法(Variable Metric Algorithm)
变尺度法避免了计算二阶导数矩阵及其求逆过程,又比梯度法收敛速度快,使得它获得了很高的声誉。我们接下来介绍它一种方法——DFP法。
为了不计算Newton方法中的二阶导数矩阵及其逆矩阵,我们使用一个构造矩阵,它能够近似于[∇2f(xk)]-1,因此这种方法也叫做拟牛顿法;
关于矩阵构造过程,我们不多赘述,我们要清楚的是这是一个迭代过程,每一步中得到的近似矩阵为H(k),而迭代关系满足H(k+1)=H(k)+ΔH(k),ΔH(k)被叫做校正矩阵;经过一些数学过程,我们可以得到
在这里插入图片描述
这里的ΔG(k)=∇f(xk+1)-∇f(xk);
于是我们得到确切的迭代关系,而一般我们取H(0)为单位矩阵,下面我们给出DFP法的步骤:
1给定初始点x0以及终止误差𝛆;
2若||∇f(x0)||≤𝛆,则停止迭代,输出xk。否则进行3
3令H(0)=I(单位矩阵),p0=-H0∇f(x0),在p0方向进行一维搜索,确定最佳步长t0使得f(x0+t0p0)最小,并得到x1=x0+t0p0;
4计算[∇2f(xk)]-1,||∇f(xk)||≤𝛆,则停止迭代,输出xk,否则计算H(k),并令pk = -H(k)∇f(xk),得到xk+1=xk+tkpk
5若xk+1满足精度要求,则得到近似解xk+1,否则转会4,直到满足要求;

3.2 直接法
在函数不可导或者是导函数的解析式难以表示时,人们一般需要使用直接搜索方法。我们介绍其中一种Powell方法。
这个方法主要由基本搜索、加速搜索和调整搜索方向三部分组成,具体步骤如下:
1选取初始点x0以及n个线性无关初始方向,组成P={p0,p1,p2,…,pn-1},给定终止误差𝛆>0,令k=0;
2进行基本搜索,令y0=xk,沿着P中的方向进行一维搜索,对应的可以得到y1,y2,…,yn,即yj=yj-1+tj-1pj-1;f(yj)=min f(yj-1+tpj-1);
3构造加速方向。令pn=yn-y0,若||pn||≤𝛆,停止迭代,输出xk+1=yn,否则进行4
4确定调整方向,有f(ym-1)-f(ym)=max{f(yj-1)-f(yj)|1≤j≤n}找到m,当f(y0)-2f(yn)+f(2yn-y0)<2[f(ym-1)-f(ym)]成立进行5,都则进行6
5调整搜索方向组,xk+1=yn+tnpn:f(yn+tnpn)=min f(yn+tpn)
同时,更新P为{p0,p1,…pm-1,pm+1,…,pn-1,pn},k+=1,转2
6不调整搜索方向组,令xk+1=yn,k+=1,转2

&3 约束极值问题
求解约束极值问题会比求解无约束极值问题要难得多,可以采用的方法有:将约束问题转化为无约束问题;将非线性规划问题化为线性规划问题,以及能将复杂问题转化为简单问题的其他方法;
1)罚函数法
利用该方法可以讲非线性规划问题求解转化为求解一系列无约束极值问题,因而这种方法又称为序列无约束最小化技术(SUMT,Sequential Unconstrained Minization Technique)。
罚函数法求解的思想是,利用问题中的约束函数做出适当的罚函数,由此构造出带参数的增广目标函数,把问题转化为无约束非线性规划;罚函数有外罚函数法和内罚函数法,下面介绍外罚函数法;
举个例子
在这里插入图片描述
我们选取一个充分大的正数M,构造函数
在这里插入图片描述
这里G(x)=[g1(x) … gr(x)],H(x)=[h1(x) … hs(x)],K(x)=[k1(x) … kt(x)],则我们可以得到一个无约束极值问题min P(x,M)。

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值