主要内容
课程: 多变量微积分 > 单元 3
课程 4: 受约束的优化 (文章)拉格朗日乘数, 介绍
"拉格朗日乘数法" 是解决约束优化问题的一种方法。 倍有用!
我们要做的是什么:
- 拉格朗日乘数法使得当对于你能够被允许使用的输入值存在一些条件时,你能够找到一个多元函数
的最大值或最小值。 - 这种方法只适用于看起来像这样的限定条件:
这里 是另外一个和 具有相同输入空间的多元函数,且 是常数。
- 和新想法就是找到
和 等高线彼此相切的点。 - 这就如同找到使得
和 的梯度向量彼此平行的点。 - 整个过程可以被归结为设置一个特定函数,被叫做拉格朗日,使得它的梯度等于零向量。
激励的例子
假设你要最大化此函数:
但是, 让我们假设你将自己限制在满足以下公式的输入值 :
换句话说, 上,哪个点 的 值最大?
这就是所谓的约束优化问题。 对与满足 的点的限制被称为 "约束", 而 是需要优化的函数。
这里有一种可视化的方法: 首先绘制 的图像, 它看起来像一个倾斜得平面,因为 是线性的。 接下来,将圆 从 平面垂直投影在 的图像上。我们寻找的最大值对应于图像上投影的圆的最高点。
更一般的形式
通常, 约束优化问题涉及最大化最小化 一个多变量函数, 该函数的输入具有任意数量的维度:
不过, 它的输出将始终是一维的, 因为向量值结果没有一个明确的 "最大" 概念。
拉格朗日乘数法所使用的约束类型必须采取其他多元函数 的形式使其被设定等于常数 .
由于这意味着对 输入值的约束, 的输入值的纬数和 i 一样. 比如,上面概述的例子符合此一般形式,如下所示:
使用等高线图
如果我们不使用图像,而是用等高线可视化 ,关于这个问题的推理将变得更容易。
作为提醒, 的等高线是满足对于常数 , 的所有点的集合 。后面的交互工具展现的这条线(以蓝色绘制)是怎样随着常数 的变化而改变。 圆 也显示出来 (红色). 在一直允许 的等高线和圆相交的情况下尝试让 尽可能大/小。
概念检查:如果对于一个特定的 值,表示 的蓝线不和表示 的圆相交,那意味着什么?
请注意,该圆圈中 可以被认为是函数 的等高线。因此,有了这些,下面是考虑约束优化问题的巧妙方法:
关键观察: 的最大值和最小值, 受约束条件 , 对应于和 相切的 的等高线。
如果 是不同的函数,它的轮廓可能并不总是直线。我们的例子是独特的,因为 是线性的。比如,请看一下这个函数:
,
其等高线如下所示:
尽管入此, 关键观察仍然有效,并且值的重复:当 是受约束的 的最大值或最小值, 的等高线会和 表示的轮廓相切。
梯度起作用的地方
如何将两条等高线相切的想法构成一个可以求解的公式?
为了回答这个问题, 我们转向我们的忠实朋友-- gradient。 有许多方法来解释 : 最陡峭的上升方向, 一个计算方向导数的工具, 等等。但就我们这里的目的而言, 我们关心的属性是 在点 上计算出的 的梯度总是给出一个垂直于通过该点的等高线的矢量。
这就意味着当两个函数 和 的等高线相切的时候, 它们的梯度向量是平行的。以下是对于任意函数 和 可能看起来的样子:
等高线是切线的事实并不能告诉我们每个梯度向量的大小, 但这没关系。 当两个向量指向同一方向时, 这意味着我们可以将一个向量乘以某个常数来得到另一个向量。 具体而言, 让 表示一个特定的点, 其中 和 的等高线相切 (用 下标写 和 , 只是表示我们正在考虑常数, 因此也就是一个具体的点)。 由于这种相切意味着它们的梯度向量对齐, 下面是你可以写下的内容:
这里, 代表某个常数。 一些作者使用负常数, , 但是我个人更喜欢正常数, 因为它在之后给出了 的更清晰的解释。
让我们看看在我们的例子中,当 和 时是什么样子的。 的梯度是
因此, 相切条件的结果如下所示:
在特定情况下解决问题
总之, 我们目前的情况是, 我们正在寻找具有以下属性的输入点 :
, 这对于我们的示例意味着- 对于某常数
, , 这对于我们的示例意味着
有 个方程和 个未知数, 所以这是一个完全可以解决的情况。
拉格朗日函数
在1700代, 我们的哥们约瑟夫·路易斯·拉格朗日研究了这种约束优化问题, 他找到了一个巧妙的方法来用单一方程表达我们所有的条件。
你可以写出这些条件并且通常指明我们是要寻找常数 , 和 来满足以下条件:
- 约束 :
- 相切条件:
.这可以分解成以下几个部分:
lagrange写下了一个特殊的新函数, 它包括了所有跟 和 相同的输入变量, 以及镇上的新孩子 , 这里它被认为是一个变量, 而不是一个常数。
比如,考虑我们上面的例子。
这就是这个新函数看起来的样子
注意, 关于 的偏导数是 :
所以我们把条件 转化为
并且,看一下当我们把其中一个偏导数设为 时我们得到了什么:
那刚好是我们的条件中的另一个!几乎完全一样,条件 转化为
总之, 这些条件和以下表达是一致的。
因此, 我们需要解决的三个条件,以找到 和 简化为了各种偏导数 等于 。这可以通过将 的梯度设置为零向量来编写的非常紧凑:
例如, 使用上面的特定函数, 我们可以看到这是如何构建我们需要解决的方程组的:
作为对ol' Joey Lou的赞扬, 我们将这个函数 叫做 "拉格朗日", 并且将我们引入的新变量 叫做"拉格朗日乘数"。 想象如果有某个人在你的姓氏后面加上“的”,然后让它成为每个人使用的函数的名字。那真贴心!
警告: 一些作者习惯将 符号反过来:
这在解决问题方面没有任何区别, 但你应该记住它, 以防你正在学习的课程或你正在阅读的文本遵循这个惯例。
总结
多元函数 的约束条件是, 另一个多元函数 等于一个常数. 如果你想最大化(或最小化)这个多元函数f, 你可以遵照下面的步骤进行:
- 步骤 1: 引入一个新的变量
, 并定义一个新的函数 , 如下所示:
函数 叫做 "拉格朗日函数", 新的变量 即所谓的 "拉格朗日乘数"
- 步骤 2: 将
的梯度设置为零向量.
换句话说, 我们要求解 的临界点 .
- 步骤 3: 考虑每个解
。 将每个解代入 。 或者, 先去掉 分量, 然后代入 , 这是因为 不是 的一个输入. 那个使函数值最大 (最小) 的解就是你要求的最大 (或最小) 的点.