主要内容
课程: 多变量微积分 > 单元 3
课程 4: 受约束的优化 (文章)拉格朗日乘数的解释
拉格朗日乘数不仅仅是帮助解决约束优化问题的神秘变量..。
背景知识
拉格朗日乘数技巧, 快速回顾
多元函数 的约束条件是, 另一个多元函数 等于一个常数. 如果你想最大化(或最小化)这个多元函数f, 你可以遵照下面的步骤进行:
- 步骤 1: 引入一个新的变量
, 并定义一个新的函数 , 如下所示:
函数 叫做 "拉格朗日函数", 新的变量 即所谓的 "拉格朗日乘数"
- 步骤 2: 将
的梯度设置为零向量.
换句话说, 我们要求解 的临界点 .
- 步骤 3: 考虑每个解
. 将每个解代入 . 或者, 先去掉 分量, 然后代入 , 这是因为 不是 的一个输入. 那个使函数值最大 (最小) 的解 就是你要求的最大 (或最小) 的点.
重新温习预算约束
在上一篇文章 中,我们给出了应用拉格朗日乘数的例子, 其中包括下面这个问题.
- 问题: 假设你经营一家工厂, 工厂生产某种以钢材为原料的零件. 成本主要是人工, 工人的工资是每小时
, 钢材每吨 . 假设工厂的收益 可粗略用这个式子表示:
这里
代表工人工作的小时数 代表消耗钢材的吨数
如果你的预算是 , 那么最大可能收益是多少?
下面这张交互关系图有助于你理解这个问题, 这张图让你知道哪些 值可以让你取得给定的收益 (蓝色曲线), 又是哪些个值满足约束条件 (红线).
求解的全部细节可在上篇文章中找到. 这里我们的目的是让你知道, 当我们遵照拉格朗日乘数方法的步骤求解这道题时, 我们会得到什么.
- 我们根据函数
及其约束条件 , 写出拉格朗日函数 . - 然后我们求
的临界点,也就是下面这个方程的解 - 这个方程可能有好几个解
,
对于每个解, 你把 和 分量代入收益函数 , 看看哪一个能得到最大值.
通常我们把使函数取得最大值的临界点写成 , 用星号上标表示这是一个解. 也就是说, 和 表示你应该采纳的人工小时数和钢材吨数, 从而让你在预算内能获得最大的收益. 但是我们怎样理解使函数取得最大值的拉格朗日乘数 ? 这是本文所要讨论的核心议题.
原来 让我们知道通过改变预算我们能多赚多少钱.
我们来了解一下改变预算意味着什么. 下面的方法与上面的类似, 红线表示满足预算约束的点 , 但当预算在 附近变化时, 红线也随之移动. 预算用变量 表示.
对于每个预算 的值, 确保两曲线仍有交点的情况下, 让 最大化. 注意, 如果 发生变化, 的最大值也随之发生改变. 我们要研究的是改变发生的细节.
令 表示你实现的最大收入. 在下一个交互关系图中, 你能改变的唯一变量是 , 你会看到 的值如何随 发生变化.
换句话说, 最大收入 是预算 的函数, 所以把它写成:
我们现在给出一个让人惊讶的事实: 拉格朗日乘数 是 的导数:
根据上面的交互关系图, 这意味着当你移动代表 的绿点时, 代表 的黑点的变化率就是 .
要证明这一点有点儿麻烦, 但首先, 我们花点儿时间解释一下. 例如, 如果我们知道 , 这意味着你花在预算上的钱每增加一元, 你的收益会增加 . 相反, 预算每减少一元, 那么你的收益也将减少那么多钱.
这种对 的解释在经济学中非常常见, 人们给它起了个名字: "影子价格". 它表示约束条件的放松或加强对收益的影响: 即预算增加(约束放松)一元, 你多赚的钱; 或者相反, 当预算减少(约束强化)一元, 你少赚的钱.
总结
我们来总结一下上述关于预算的例子, 看看为什么它是对的. 讲清楚来龙去脉需要很长的篇幅, 但你应该始终在脑子里想着这个问题: "当约束条件改变时, 答案如何变化?".
我们从拉格朗日乘数的引入开始讲起. 我们想要让这个函数取得最大值.
但约束条件是,
我们先写下拉格朗日函数,
令 表示 的临界点, 他们其实就是预算优化问题的解. 换言之,
并且 使 取得最大值(取决于约束条件).
当我们把 视为变量时, 我们必须考虑到这样一个事实: 解 随约束条件 的变化而变化. 为此, 我们将每个分量作为 的一个函数:
换言之, 当约束等于某一值 的时候, 拉格朗日乘数问题的解是 .
现在我们让 表示作为 的函数的 的 (受限制的) 最大值, 它可以用 , 和 表示如下:
我们最终要证明的结果是
这是一个有约束条件的函数的极值问题, 而拉格朗日乘数 给出了这个极值问题的解的变化率.
想要比老师聪明吗?
证明这个结果可能让你会做噩梦, 因为没有给出函数 , , 或 的确切的公式. 这意味着你要从 , 和 的定义着手, 即 , 然后找到 . 这不是一件容易事 (但值得一试!).
有一个有趣的故事, 说一个教授被问及他从学生那儿学到的最严酷的事实是什么. 这位教授回忆起一个经历, 他曾经教过一节课, 在课上他要完成一项冗长复杂的数学证明. 结果有个学生提出了一个简单得多的证明方法. 他说, 那节课让他意识到他并不像他想像得那么聪明.
他提到的这个证明恰巧是我们现在要证明的. 尽管学生的方法并不 很 简单, 像故事说的那样, 但这个方法仍然是解决这个问题的一个简洁的方法. 更重要的是, 相比其他证明方法, 它更易被记住, 因此我这里会详细说明这种方法. 在数学中经常会发生这样的情况, 一点洞察就能让我们免于复杂的代数过程.
洞察
这个关键的洞察就是拉格朗日函数的解 使其实现最大值 . 这是因为拉格朗日函数中的项 " " 等于零 (因为解必须满足约束条件), 因此我们有:
考虑到我们要求解 , 这表明我们应该找到一种方法使 成为 的函数. 那么我们就有可能将该导数与函数 在 上的导数联系起来.
后续操作
首先将 视为四个变量而不是三个变量的函数, 因为 现在是一个变化的值:
深度思考: 当 被写成四变量函数时, 是多少?
这个偏导数很有用, 因为我们的目标是证明 , 而且我们知道极值的解满足 . 然而我们还有工作要做.
对于给定的值 , 我们其实只关心当解是 时, 的值, 因此我们用 和 代替 和 . 他们是 的函数, 是给定一个 "常数" 时, 对应的拉格朗日函数问题的解.
因此我们可以把 写成 的函数, 如下所示:
请注意, 上述表达式中的每个偏导数应该是其在极值点 上的值, 但那样写的话会让这个表达式比现在的形式乱得多.
这个表达式可能看起来有点儿长, 但记住每个项 , 和 的定义是什么. 每个偏导数 , , 和 在极值点 上的值为零. 极值解 正是这样被定义的 ! 这意味着前三项都为零.
此外, 由于 , 整个表达式简化为
请务必注意, 这样简化的原因在于解 所具有的特殊性质. 否则, 根据多变量链式法则计算全导数简直是一场噩梦!
为了表达上的简洁, 上面的表达式略去了求导函数的输入(自变量), 现在我们把他们写进去.
根据上面深度思考问题的答案 , 我们得到
已完成