任务:
假设您要生产一定数量的产品,这取决于两名关键员工的工作时间,如下所示:
• 目标函数:f(x, y) = x^2 + 2y^2,其中 X 是第一个员工的工作时间,Y 是第二个员工的工作时间。
但是,您必须向这些员工支付总共20个小时的工作报酬,即:
• 约束:g(x, y) = x + y - 20 = 0
在这种情况下,您最多可以生产多少数量的商品?
问题:我正在尝试使用拉格朗日方法解决这个问题,我已经编制了一个由导数组成的方程组
from sympy import symbols,Eq,solveset,solve
x,y,w=symbols("x y w")
f_x_y= (x**2 + 2*y**2)
q=x+y-20
f_itog= f_x_y-w*q
f_diff_x=Eq(f_itog.diff(x),0)
f_diff_y=Eq(f_itog.diff(y),0)
f_diff_w=Eq(f_itog.diff(w),0)
sols=solve([f_diff_x,f_diff_y,f_diff_w],x,y,w)
但答案是错误的{λ:80/3,x:40/3,y:20/3}。必须有 x= 0 和 y= 20 只有在这种情况下 f(x, y) 才会最大。告诉我错误是什么? (也许这不能用拉格朗日方法解决)
你做出了正确的决定。利用拉格朗日方法,你找到了
f(x, y) = x^2 + 2y^2
约束条件下函数的条件极值x + y - 20 = 0
。然而,你找到的不是性能函数的最大值,而是最小值。这也太极端了吧?
严格来说,你的问题中的约束表述不正确。您不仅应该在线上寻找极值
y = 20-x
,还应该在第一象限中寻找极值x >= 0, y >= 0
。在有限区域内寻找条件极值时,仅仅使用拉格朗日方法找到一个点是不够的;还需要计算边界与约束函数交点处的值。就您而言,这些是要点
x=0, y=20
和x=20, y=0
。由于区域内有一个最小值,因此在边界处达到最大值。附言:如果你有兴趣,这里有一个绘制水平线的脚本