Code前端首页关于Code前端联系我们

为什么拉格朗日乘子法和KKT条件能够得到最优值?

terry 2年前 (2023-09-27) 阅读数 69 #数据结构与算法
拉格朗日乘子法无疑是优化理论中最重要的方法。但网上还没有一篇好的文章完整介绍整个方法。于是小编整理了下面这篇文章,希望能够赢得大家的点赞。 解决带约束的优化问题时,拉格朗日乘子法(Lagrange multiplier)和KKT条件是两种非常重要的方法。对于具有等式约束的优化问题,可以使用拉格朗日乘子法。采用朗格乘子法寻找最优值;如果存在不等式约束,可以利用KKT条件来求。这两种方法得到的结果当然只是必要条件。只有是凸函数才能保证其充要条件。 KKT 条件是拉格朗日乘子法的推广。之前学习的时候,知道如何直接应用这两种方法,但是不知道拉格朗日乘子法(Lagrange multiplier)和KKT条件为什么起作用。为什么我们需要通过这种方式找到最优值呢? 本文首先会介绍什么是拉格朗日乘子法(Lagrange multiplier)以及KKT条件;然后我们开始讲为什么我们需要通过这种方式找到最优值。 1。拉格朗日乘子法(Lagrange Multiplier)和KKT条件 通常我们需要解决的优化问题有以下几类: (i)无约束优化问题 ,可以写为: X); (ii) 具有等式约束的优化问题可写为:min f(x), s.t。 h_i(x) = 0; i =1, ..., n (iii) 具有不等式约束的优化问题 可写为: min f(x), s.t。 g_i(x) 对于(i)类型的优化问题经常使用 方法是费马定理,即通过求f(x)的导数,然后将其置为零,可以获得最优的候选值,然后在这些值之间进行验证;如果是凸函数,就可以保证是最优解。 对于第(ii)类的优化问题,经常使用的方法是拉格朗日乘子法(Lagrange multiplier),即等式条件h_i(x)使用系数和f(x)写为方程称为拉格朗日函数,系数称为拉格朗日乘子。通过使用拉格朗日函数对每个变量求导并将其设置为零,可以获得一组候选值,然后验证以获得最优值。 对于(iii)类优化问题,KKT条件是常用的方法。同样,我们将所有方程、不等式约束和f(x)写成公式,也称为拉格朗日函数,系数也称为拉格朗日乘子。通过一些条件我们可以找到该值的最优必要条件,这个条件称为KKT条件。 (a) 拉格朗日乘子法 对于等式约束,我们可以通过拉格朗日系数 a , x) = f(x) + a*h 将等式约束和目标函数组合成方程 L(a , x) ( x) ,这里a和h(x)被认为是向量形式,a是水平量,h(x)是列向量。之所以这么写,纯粹是因为csdn里的数学公式很难写,所以就凑合着用了……之后,要找到最优值,对每一个求导就可以得到零L (a,x) 中的参数并获得联立方程组。这在高等数学中有讨论,但没有解释为什么这样做。是的,下面简单介绍一下这个想法。 (b) KKT条件如何寻找包含不等式约束的优化问题的最优值?常用的方法是KKT条件。类似地,所有不等式约束、等式约束和目标函数都写成一个公式 L(a, b, x)= f(x) + a*g(x)+b *h(x),KKT 条件意味着最佳值必须满足以下条件:1。 L(a,b,x)对x的导数为零; 2。 h(x) = 0; 3。 a*g(x) = 0;解完这三个方程即可得到候选最优值。第三个公式很有趣,因为g(x)=0,我们可以将 f(x ) 写成: max_{a,b} L(a,b,x),为什么?由于h(x)=0,g(x)

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门