1.罚函数法:
构造罚函数:P(x)=x12+x22+1/2ρmax(0,x1+x2−1)2。
当x1+x2≤1 时,无惩罚项;当 x1+x2>1 时,有惩罚项,导致目标函数值增加。【目标是使目标函数最小】
2.障碍函数法:
构造障碍函数:B(x)=x12+x22−μlog(1−x1−x2) 。
当 x1+x2接近1 时,−log(1−x1−x2) 的值趋于无穷大,使得目标函数值增大。
3.拉格朗日乘子法:
构造拉格朗日函数:L(x,λ)=x12+x22+λ(x1+x2−1) 。
求解 ∇L=0 得到:2x1+λ=0 , 2x2+λ=0 ,x1+x2−1=0 。
解得 x1 = x2 =1/2 , λ =−1
实例二
我们需要最小化函数,并且满足约束条件x2+y2=1 。
罚函数法
1.构造罚函数:
首先,我们将约束条件转换为一个惩罚项。对于约束条件x2+y2=1 ,我们可以构造以下罚函数:P(x,y)=(x2+y2−1)2
这里,我们使用平方形式来确保任何违约束的情况都会被显著地惩罚。
2.构造新的目标函数:
将惩罚项加入到目标函数中,形成新的目标函数:
其中,ρ是一个正的罚参数,用来调整惩罚项的权重。
3.求解优化问题:
我们的目标是找到使新的目标函数 )F(x,y) 最小的x和y值。
图 6.1 的解释
图的描述
这两个图展示了二次罚函数在不同罚参数 σ值时的等高线图。等高线图是一种展示三维地形的方法,其中每条线表示函数值相同的点的集合。
1.左图 (a)σ=1:
这个图显示了当罚参数 σ=1 时的情况。等高线显示目标函数在不同点的值分布。
2.右图 (b) σ=10:
这个图显示了当罚参数σ=10 时的情况。我们可以看到等高线的形状和分布与左图有明显的不同。
图的含义
1. 罚函数的作用
罚函数的目的是将违反约束条件的解显著地惩罚,使得优化过程更倾向于在可行域内找到最优解。罚参数σ控制了这个惩罚的强度。
(1)低罚参数σ=1:惩罚强度较低,等高线分布较为平缓。违反约束条件的解不会受到很大的惩罚,因此优化过程可能会在可行域外找到较低的函数值点。
(2)高罚参数σ=10:惩罚强度较高,等高线分布较为陡峭。违反约束条件的解会受到显著的惩罚,因此优化过程更倾向于在可行域内找到最优解。
2. 等高线的变化
等高线的形状和分布反映了目标函数值在不同点的变化情况。
(1)左图 (a):当σ=1 时,等高线较为平滑,表明目标函数值的变化较为缓慢,罚函数的影响较小。
(2)右图 (b):当 σ=10 时,等高线变得更为密集和复杂,表明目标函数值在靠近约束边界时变化迅速,罚函数的影响显著增加。
详细解析
为了更好地理解这个图,让我们回顾一下罚函数法的目标函数形式:
原始目标函数:
罚函数:
随着 σ 的增加,罚函数的影响变得更加显著。这意味着在优化过程中,违反约束条件x2+y2=1 的点会被显著地惩罚,使得优化算法更倾向于找到满足约束条件的最优解。
直观解释
想象你在平地上行走(左图 (a)),地面比较平坦,因此你可以随意移动。但是,当地面上突然出现很多山谷和山峰(右图 (b)),你就会倾向于沿着较为平坦的区域移动,以避免爬山或下谷。高罚参数σ 就像这些山谷和山峰,迫使你在可行域内找到最优路径。
总结
(1)低罚参数 σ 使得优化过程在可行域外也能找到较低的目标函数值点,但可能不满足约束条件。
(2)高罚参数σ 强制优化过程在可行域内找到最优解,因为违反约束条件的点会被显著惩罚。
二次罚函数法算法详解
基本概念
1.目标函数:我们想最小化的函数。例如,
2.约束条件:限制条件,必须满足。例如,x2+y2=1 。
罚函数法通过将约束条件转换为惩罚项,加入到目标函数中,从而形成新的目标函数。这个新目标函数在每次迭代时会逐步增加惩罚力度,使得解最终满足约束条件。
步骤解析
第一步:初始化
1.给定初始罚参数 σ1>0:
这是初始的惩罚参数。惩罚参数决定了违反约束条件时受到的惩罚程度。
例如,设定 σ1=1。
2.设定初始点 x0:
这是我们开始优化的初始猜测值。
例如,x 0=[0.5,0.5] 。
3.设定迭代次数 k←1:
这是一个计数器,用于跟踪迭代次数。
4.设定惩罚因子增长系数ρ>1:
这是一个用来增加惩罚参数的因子,每次迭代后惩罚参数会乘以这个因子。
例如,设定 ρ=10。
第二步:迭代过程
1.while 循环:
这个循环会持续运行,直到满足某个收敛准则(例如,目标函数值变化很小,或达到最大迭代次数)。
2.以当前点为初始点,求解新的点:
我们要最小化新的目标函数PE(x,σk) ,找到新的xk+1。
新的目标函数形式为:
使用数值优化方法(如梯度下降法)来求解这个新的目标函数。
3.更新罚参数:
计算新的罚参数σk+1=ρσk。
4.更新迭代次数:
k←k+1 。
5.结束迭代:
当满足收敛准则时,结束 while 循环。
详细解释与实例
初始化
我们设定初始参数:
σ1=1,x0=[0.5,0.5],ρ=10,k=1
迭代过程
假设我们要最小化以下目标函数:
并且满足约束条件:x2+y2=1
第一次迭代
1. 构造新的目标函数:
其中 σ1=1。
2.求解新目标函数:
使用数值优化方法找到最小化PE(x,1) 的 x 和 y 值。
假设我们找到新的点x1。
3.更新罚参数:σ2=ρσ1=10×1=10
4.更新迭代次数:k←2
第二次迭代
1. 构造新的目标函数:
其中σ2=10。
2.求解新目标函数:
使用数值优化方法找到最小化PE(x,10) 的 x 和 y 值。
假设我们找到新的点 x2。
3.更新罚参数:σ3=ρσ2=10×10=100
4.更新迭代次数:k←3
这个过程不断重复,直到满足收敛准则为止。
什么是收敛准则
收敛准则是用来决定优化算法何时停止迭代的标准。常见的收敛准则包括以下几种:
1.目标函数值变化很小:
如果在连续的迭代中,目标函数的值变化很小(小于某个阈值),则认为算法已收敛,可以停止迭代。
例如,设定阈值为 ϵ \epsilonϵ,如果∣f(xk+1)−f(xk)∣<ϵ,则停止迭代。
2.梯度值很小:
如果目标函数的梯度(或导数)值很小,表示已经到达了极值点附近,则可以停止迭代。
例如,如果 ||∇f(xk)||<ϵ,则停止迭代。
3.迭代次数达到上限:
如果迭代次数达到了预先设定的最大迭代次数,则停止迭代。
例如,设定最大迭代次数为 N ,如果k≥N,则停止迭代。
————————————————
本文转载自CSDN博主:FOUR_A
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42932602/article/details/140228528