外罚函数法的 是从可行域 S 的外部逼近最优解
,这样得到的近似最优解只是近似地满足约束条件。对于一些工程实际问题,这样的解是不可接受的,因为它虽是最优解,但并非可行解。
为了使迭代点总是可行的,本文介绍一种方法——内罚函数法。
内罚函数法:
内罚函数法在迭代过程中总是从可行点出发,并保持在可行域内部进行搜索,因此这种方法仅适用于只有不等式约束的最优化问题。
考虑问题:
它的可行域 S 的内部定义为:
罚函数定义为:
其中,参数 r 是很小的正数,B(x) 是定义在 int S 上的非负实值函数,当 x 趋于可行域 S 的边界时, 。
显然,罚函数 对企图脱离可行域的点给予惩罚,相当于在可行域的边界上设置了障碍,不让迭代点穿越到可行域之外,因此,也称为障碍函数(Barrier function)。
下面介绍两种常用的障碍函数:
--------------倒数障碍函数
---------对数障碍函数
由 定义可知,r 取值越小,
问题 的最优解越接近原问题
的最优解。
初始内点的选取:
在内罚函数中,必须先知道一个初始内点 ,如果初始内点不能直观找出,必须要有一个求初始内点的算法。下面介绍一个寻找初始内点的迭代算法,它是基于内罚函数的思想而得到的。
算法步骤:
步骤1:给定初始点 ,初始参数
,缩小系数
,允许误差
,令 k=1;
步骤2:求解无约束优化问题 得到它的最优解
;
步骤3:如果 ,迭代停止,
为原问题近似最优解,否则,令
,转步骤2。
例题解析:
例题1:利用对数障碍函数求解不等式约束优化问题:
要求
解:构造罚函数:
当
最优值为:
例题2:用倒数障碍法求解:
。
解:构造倒数障碍函数:
当
最优值为:
总结:
内外罚函数法的比较:
内罚函数法 | 外罚函数法 | |
初始点 | 必须在可行域内部 | 可任取 |
面对对象 | 求解不等式约束问题 | 求解等式约束问题和不等式约束问题 |
解 | 近似解和最优解都在可行域内 | 近似解不属于可行域,最优解有可能落在可行域 |
罚函数性质 | 障碍函数在可行域内部可微的阶数与约束函数的相同 | 罚函数一般只具有一阶偏导数,二阶偏导数在边界上一般不存在 |
(行文中若有纰漏,希望大家指正)