前导
有这样一个场景,二维坐标轴有一个曲线g(x,y) = x2*y = 3,如何求这个曲线到原点的最短距离呢?
在高等数学中,正常的方法将其转换成附加条件下的求极值问题。这是后话,先看下几何直观上,该如何求?
假设曲线到原点的最短距离为a,则与原点距离为a的点全部在半径为a的圆上。所以在不知道a为何值的情况下,可以渐渐从0加大以原点为圆心的圆半径,知道圆与曲线相切,则相切的圆半径就是我们要找到最短距离a,相切点就是我们要找的极值点。
实际上,上面的几个圆可以看成f(x,y)= x2+y2的等高线,而g(x,y) = x2*y = 3可以看成g(x,y) = x2*y的一条等高线。
上一篇讲到梯度有提到,梯度的方向与等高线切线的法向量是平行的。
问题转换
这里对前导进行总结,在相切点,圆的梯度向量和曲线的梯度向量是平行的。
有前面可以将求最短距离的问题进行转换,转换为两种等高线f(x,y)= x2+y2和g(x,y) = x2*y在某一点的梯度方向相同,且g(x,y)= 3 .
梯度平行得到下面的公式。
联立g(x,y)= 3 可得:
拉格朗日乘子法
函数f在g约束下的极值这种问题可以表示为:
最后联立方程进行求解:
多条件下的拉格朗日乘子法
如果求的是没有条件的极值,梯度等于0的点就是我们要找的极值点。
上面的例子是一个单条件的极值点问题,通过下面联立方程,即可求得极值点。
对于多条件极值呢?比如多加一个条件h(x,y)= x-y-3 = 0.很显然求到的极值点如下所示。
可以看到,极值点圆的法线是两条附加线的法线的线性组合。故三种线的梯度可以表示为:
同理,联立已知方程可得:
不等式条件下的拉格朗日乘子法
上面提到的同心圆,在没有任何附加条件下,它离原点最近的距离就是半径为0的圆。
若有一个附加条件 x+y <= 1,但其可行解包含了原点,故其约束无效。
若将约束条件换成x+y <= -2。
上图可以看出,它的约束条件跟x+y = -2是一样的效果,故可得:
这里有一个疑问,不等式和等式条件既然效果一样,那有什么区别呢?下面接着看。
我们都知道梯度的方向指向函数增大的最快方向,故下图可以看出两条曲线在相切点的梯度是相反的,故
因此刚才的方程组可以再增加一个条件:
KKT条件
KKT条件就是上面联立的方程组,只不过KKT汇总了所有的等式和不等式条件。
联立方程如下: