-
本文考虑如下非线性规划问题:
其中:x∈
${\mathbb{R}}$ n,f:${\mathbb{R}}$ n$ \longrightarrow $ ${\mathbb{R}}$ ,cj(j∈I):${\mathbb{R}}$ n$ \longrightarrow $ ${\mathbb{R}}$ 是二次连续可微的.可行集X={x∈${\mathbb{R}}$ n|cj(x)≤0,j∈I},有效集I(x)={j∈I|cj(x)=0}.非线性规划问题广泛应用于工程和社会生活的各个领域,并在其中起着举足轻重的作用.非线性规划问题的求解主要是最优性和可行性.为了使这两个规则都能满足,算法需要在迭代过程中每一步都保持这两种规则的平衡.目前关于非线性规划问题的求解方法多种多样[1-12].近年来,滤子法引起很多学者的密切关注.滤子法最早由Fletecher和Leyffer提出[1],它能有效避免选择罚函数的困难且具有良好的数值结果,从而近年来被广泛应用于各种优化问题的求解中[2-6].共轭投影梯度算法是解决非线性规划问题的另外一种有效算法[7].文献[8]将SQP方法和广义投影技巧结合,提出一个具有显式主搜索方向的共轭投影梯度算法,有效地简化了算法结构及计算工作量.为此,在文献[8]的基础上,本文提出一个修正的共轭投影梯度算法.该方法保证了每个试探点都不会远离可行域,同时在合适的条件下证明了算法的收敛性.
全文HTML
-
对于问题(1)的近似解xk∈X,σk>0,正定矩阵Bk=B(xk),集合Lk⊆I,为了便于讨论给出以下记号:
本文算法引用了文献[7]提出的共轭投影梯度技术,并采用文献[7]中定义的以下各量:
定义1[7] 如果函数μ(x):
${\mathbb{R}}$ n$ \longrightarrow $ ${\mathbb{R}}$ m满足以下条件:1) μ(x)连续.
2) 当x*是问题(1)的K-T点时,μ(x*)为相应的K-T乘子.则称μ(x)为乘子函数.
-
滤子技术能很好地平衡目标函数和约束条件,对于每次迭代,试探点被接受当且仅当约束违反度函数值或目标函数值相对于当前的滤子集中的点有充分的下降.
本文定义约束违反度函数为
其中
易知h(x)=0的充要条件是保证迭代点x是可行点,所以试探点应该使得约束违反度函数值降低或目标函数值减小.为了保证这两项至少有一项满足,参照文献[1]引入滤子的相关定义.
定义2 称点x1支配点x2当且仅当
定义3 滤子为具有形式为(hi,fi)的点集Z,使得任意点不能被其他点支配,即h(xi)≤h(xj)或f(xi)≤f(xj)对所有的i≠j成立.
在实际计算中,为了获得全局收敛性,需要添加一些条件,如文献[1]中定义了一个“包络”来阻止点任意接近滤子.从而有以下滤子准则:
定义4 一个点被滤子接受当且仅当对任意的(hj,fj)∈Z有
其中:hj=h(xj);fj=f(xj);0<γ<β<1且γ→0,β→1.
在算法的进程中需要将(hj,fj)对添加到滤子中,如果一个点xk被滤子集Z接受,则令xk+1=xk+tkdk且滤子按如下的规则更新
其中
事实上,这里“点x被滤子集Z接受”严格上说是将(hj,fj)对添加到滤子集中.如果点xk被滤子集接受或者已在滤子集中,那么满足
的点x也是被滤子接受的.
1.1. 相关符号
1.2. 滤子技术
-
算法1
步0 (初始化) 给定x0∈
${\mathbb{R}}$ n,μ(x0)∈${\mathbb{R}}$ m,B0是对称正定矩阵,选择σ0,ξ,ε,v∈(0,1),τ∈(2,3),δ>2且α1,α2,η∈(0,1),t0=1,初始化滤子集Z0,并令k=0.步1 (有效集Lk)
(a) 令i=0,σk,i=σ0;
(b) 若det(AkTAk)>σk,i,令Lk=Lk,i,ik=i,转步2,否则转步1(c),其中:
(c) 令i=i+1,σk,i=0.5σk,i-1,返回步1(b).
步2 (搜索方向) 通过式(2)-(5)获得d0k.若d0k=0,则获得一个K-T点,停止.否则,通过式(6)计算dk.
若
则转步3.否则,转步4.
步3 (滤子准则) 若xk+tkdk不被滤子接受,则令xk+1=xk,tk+1=0.5tk,k=k+1,转步4.若xk+tkdk被滤子接受,则令xk+1=xk+dk,fk+1=f(xk+dk),hk+1=h(xk+dk),并去除那些被xk+1支配的点,更新滤子集Zk+1,转步5.
步4 (线搜索) 通过式(7)获得qk,取
$ \left\{ {1, \frac{1}{2}, \frac{1}{4}, \cdots } \right\} $ 的最大值为λk,使其满足令dk=qk,tk=λk.
步5 (迭代更新) 令xk+1=xk+tkdk,更新正定对称矩阵Bk+1,k=k+1.返回步1.
-
算法A需要以下理论的支持.
假设A
(A1) 迭代序列{xk}⊆X非空且位于
${\mathbb{R}}$ n中的有界闭凸子集内;(A2) 对任意的x∈
${\mathbb{R}}$ n,向量组{▽cj(x),j∈I(x)}是线性无关的;(A3) ∀k,Bk∈
${\mathbb{R}}$ n是一个n阶对称正定矩阵且{Bk}一致有界;(A4) 目标函数f(x)和约束违反度函数h(x)都是二次连续可微的.
(A5) 存在两个常数0<a≤b,使得a‖d‖2≤dTBkd≤b‖d‖2,∀k,∀d∈
${\mathbb{R}}$ n.由于集合Lk⊆I的有限性,不妨设存在无穷子列K,使得
其中L为一个固定指标集.记A*,Q*,P*,π*,V*,d0*,d*,q*分别为式(3)-(7)中各式在x*处以B*代替B(x*)的相应各量,则Ak→A*,Qk→Q*,Pk→P*,d0k→d0*,qk→q*,k∈K,k→∞.
引理1 对任意的迭代指标k,算法1步1(b)和步1(c)之间的循环有限步终止.
证 利用反证法.
假设算法在步1(b)和步1(c)之间无限循环,则由算法结构知,
由Lk,i的定义有
又集合I是个有限集,从而对充分大的i有
并定义为Lk*.令i→∞,则
这与假设(A2)矛盾.
引理2 若假设A满足且迭代点xk∈X,则有下列结论成立
1) xk是问题(1)的K-T点当且仅当d0k=0.
2) 若xk不是问题(1)的K-T点,则dk仍是问题(1)在点xk处的一个可行下降方向,即有
证 参考文献[7]中定理1的证明.
引理3[7] 对于算法1产生的序列{xk},设x*是它的任意一个聚点.若xk+1=xk+tkdk均由步4和步5产生,且x*不是问题(1)的K-T点,则有
引理4 算法是可执行的.
证 只需证明在假设A成立的前提下,当k充分大时,算法不再执行步4.由算法知,只需证明由步4产生的迭代点也一定能被滤子接受.假设算法不能有限步终止,则有tk→0,k→∞,且新的迭代点xk+1=xk+tkqk不能被滤子接受.下面分两种情况讨论.
1) 若hk=0.由h(x)的定义可得,
由引理1知,
结合tk→0,k→∞,则存在一个常数β,使得
再由式(14)和引理2知
故
由式(16)-(17)可知新的迭代点xk+1=xk+tkqk能被滤子和xk接受.矛盾.
2) 若hk≠0.类似于情况(1),可得hk+1≤βhk.由于xk被滤子接受,所以有
由假设迭代点xk+1=xk+tkqk不能被滤子接受,则有
和
对于点xk,若hk≤βhi成立,则由引理1知,
结合tk→0,k→∞,则存在一个常数β,使得
这与式(18)矛盾.
对于点xk,若fk≤fj-βhj成立,则由引理1知,
结合tk→0,k→∞,则存在一个常数β,使得
这与式(19)矛盾.
综上分析,当k充分大时,算法不再执行步4,即算法是有效的.
引理5[9] 考虑{xk}是进入滤子集的无穷序列,与其对应的h(xk)>0且{f(xk)}有下界,则
引理6[9] 1)如果有无限多个点被添加到滤子集中,则
2) 如果有有限多个点被添加到滤子集中,则存在一个k1,使得当k>k1时,有
引理7 按式(6)计算的主方向dk满足‖dk‖~‖d0k‖,‖d1k‖=O(‖d0k‖2).
证 由算法1步4中λk的取法易知,当k充分大时,有λk≡1,此时xk+1=xk+dk.当j∈I*时有
而
所以,
从而当k充分大时有,
定理1 在假设A成立的前提下,算法1或有限次迭代终止于问题(1)的一个K-T点xk,或产生一个无穷迭代序列{xk},使得它的任意一个聚点x*是问题(1)的K-T点.
证 若算法1终止于点xk,则d0k=0.故由引理2可知迭代点xk是问题(1)的K-T点.即证明了定理1的前半部分.下面假设x*为无穷迭代序列{xk}的任意一个聚点,不妨设当k→∞时有xk→x*,k∈K,其中K为无穷指标集.下面分情况讨论.
1) 若存在一个无穷序列K1⊆K,使得迭代点xk+1=xk+tkdk均由算法1步2和步3产生.结合引理5、引理6知
$ \mathop {\lim }\limits_{k \to \infty } $ h(xk)=0.若$ \mathop {\lim }\limits_{k \in {K_1}, k \to \infty } $ dk‖=0,则易知x*是一个K-T点.由$ \mathop {\lim }\limits_{k \to \infty } h\left( {{\mathit{\boldsymbol{x}}^k}} \right) = 0 $ 和假设A中的(A5)可设存在一个k0,使得当k>k0,k∈K1,有$ h\left( {{\mathit{\boldsymbol{x}}^k}} \right) \le \frac{{a{\varepsilon ^2}}}{{2M}} \le \frac{{a{{\left\| {{\mathit{\boldsymbol{d}}^k}} \right\|}^2}}}{{2M}} \le \frac{{{{\left( {{\mathit{\boldsymbol{d}}^k}} \right)}^{\rm{T}}}{\mathit{\boldsymbol{B}}_k}{\mathit{\boldsymbol{d}}^k}}}{{2M}} $ ,结合K-T条件,对所有的k>k0,k∈K1有其中ωk为拉格朗日乘子.从而,
因此
再结合引理7可得
而
因此,根据引理2的证明,可证x*是问题(1)的一个K-T点.
2) 若存在一个无穷序列K1⊆K,使得若迭代点xk+1=xk+tkdk均由算法1步4和步5产生,反设x*不是问题(1)的一个K-T点,则由引理3知
再由式(14)知
这是一个矛盾.因此x*是问题(1)的一个K-T点.
-
在这一部分从数值计算的角度进一步说明本文给出的算法的有效性,算法的编程使用MATLAB软件.算法中涉及的参数取值如下:
Bk的更新选自BFGS公式修正[10]:
其中:
而乘子函数μ(x)=-(N(x)TN(x)+D(x))-1N(x)T▽f(x),其中N(x)=(gj(x),j∈I),D(x)=diag(cj2(x),j∈I).终止准则为‖d0k‖<10-6.
从文献[11]中选取了7个测试问题,对本文的算法进行测试,测试结果见表 1.
表 1问题编号即测试问题在文献[11]中的编号,n表示问题中变量的维数,m表示问题中约束的维数,X0表示问题的初始点,NF1,NF2分别表示本文算法和文献[11]的目标函数和约束函数的计算次数,NG1,NG2分别表示本文算法和文献[11]的梯度的计算次数,NIT1,NIT2分别表示本文算法和文献[11]的算法的迭代次数.
从上述分析可看出,本文给出的修正共轭投影梯度滤子算法是有效可行的.将共轭投影技术引入到滤子算法使得该算法不需要求解二次规划子问题,而且能有效避免常规滤子算法中的恢复算法,简化了计算.