非线性规划——惩罚函数外点法(六)

罚函数法又称乘子法,是将约束优化问题转换为无约束最优化问题的方法之一。其基本思想就是通过在原始的目标函数中添加一个障碍函数(也可以理解成惩罚函数)来代替约束条件中的不等式约束。如果当前解不满足约束条件,就在目标项上加上一个正向的惩罚(这里考虑的都是最小化问题),强迫当前解往可行域的方向走。至于正向惩罚的力度,取决于所用的映射函数,即惩罚函数。

一、非线性规划模型

minf(x) s. t. gi(x)0,i=1,,phj(x)=0,j=1,,q

其中,f(x),gi(x)(i=1,2,,p)hj(x)(j=1,2,,q)Rn上的连续函数。

!!!注意:后面惩罚函数的选取与这个模型相关,如果不等式约束方向相反惩罚函数就有所不同,也可以理解为该模型就是标准型。

由于约束条件是非线性的,不能用消元法将其转换为无约束问题,在求解时需同时考虑目标函数值下降和满足约束条件。可以通过由目标函数和约束条件组成惩罚函数,将原问题转化为极小化惩罚函数的无约束问题。

二、惩罚函数外点法

惩罚函数基本思想:通过构造惩罚函数将约束问题转化为无约束问题,进而用无约束最优化方法求解。主要分为内点法和外点法。注意:罚函数法对目标函数的凹凸性没有要求,且结合启发式算法(如遗传算法、蚁群算法、禁忌搜索等)几乎可以求解任何问题,因为启发式算法无需目标函数的梯度等信息。外点法不保证搜索点保持在可行域内(搜索范围包括可行域和不可行域),适用于包含不等式约束或等式约束的优化问题。
惩罚函数为:

ϕ(x,r(k))=f(x)+r(k)i=1p{max[0,gi(x)]}2

其中,r(k)为趋于无穷大的严格递增正数列,r(k)=Cr(k1)C>1limkr(k)=。迭代点在可行域内时,惩罚项为0,惩罚函数等于原函数;迭代点在可行域外时,惩罚项大于0,大于原函数。因此,由于罚因子严格递增,随着迭代进行,可以迫使惩罚项趋于0,从而逼近原函数。

参数选择

初始点x(0),可行域及非可行域内均可。
初始罚因子r(0)的选择对算法的成败和计算效率有显著影响。选取过小,则无约束求解的次数增多,收敛速度慢;选取过大,则非可行域内惩罚函数比原函数大得多,在起作用约束边界处产生尖点,函数形态变坏,从而限制了某些无约束优化方法的使用,导致计算失败。
罚因子递增系数C (一般取C=[5,10]

算法步骤

(1)在n维空间任取初始点x(0)
(2)选取初始罚因子r(0),递增系数C,并置k=0
(3)求解无约束优化问题minϕ(x,r(k)) ,得到最优点xk
(4)当k=0时转步骤5,否则转步骤6。
(5)置 k=k+1,r(k+1)=Cr(k),xk+1(0)=xk
(6)由终止准则,若满足则结束算法,输出最优解;否则转步骤5。

三、实例

例1:用外点法求等式约束问题

min12x12+16x22s.t.x1+x2=1

【解】(外点罚函数法)
① 构造罚函数

F(x,Mk)=12x12+16x22+Mk(x1+x21)2

② 求偏导

(1)Fx1=x1+2Mk(x1+x21)=0

(2)Fx1=13x2+2Mk(x1+x21)=0

③ 联立两个偏导式,求驻点,并得到 x1​和x2的表达式
联立 (1)和(2),得

(3)x2=3x1

将(3)代回 (1),得到

x1+2Mk(4x11)=0

x1=2Mk1+8Mk

根据 (3),得到

x2=3x1=6Mk1+8Mk

(4)x=[22Mk+8,62Mk+8]T

④ 令Mk,得到结果

x=[14,34]T

例2:求解非线性规划。

 min f(X)=x1+x2 s.t. x12x20x10

解:构造惩罚函数

P(X,M)=x1+x2+M[max(0,x12x2)]2+M[max(0,x1)]2

考察其驻点, 令

Px1=1+2M[max(0,x12x2)](2x1)2M[max(0,x1)]=0Px2=12M[max(0,x12x2)]=0

对于可行域外的点 (满足 x1<0,x2<0 ), 可解得驻点

{1+2M(x12x2)(2x1)+2Mx1=012M(x12x2)=0

 解得 {x1=12(1+M)x2=14(1+M)212M 令 M+, 则 {x10x20, 而 [00]T 是可行点  问题的最优解。 

例3:用惩罚函数法解如下非线性规划问题。

minf(x1,x2)=2x1+2x2+2s.t.{x1+x221x25

解:将问题改写为

minf(x1,x2)=2x1+2x2+2s.t.{g1(x)=x1+x2210g2(x)=x2+50

参考文献

  1. 惩罚函数法
  2. 最优化方法——乘子法和外点罚函数法
posted @   郝hai  阅读(2146)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示