如何在 python 优化中使用拉格朗日方法获取 lambda 值
How to get lamda values while using lagrange method in python optimization
我用拉格朗日方法解决了一个不等式的优化问题。
我得到了 x1 和 x2,但我还想得到 lamda1 和 lamda2 值。这可能吗?
x1 = Symbol("x_")
x2 = Symbol('x_2')
Z = Symbol("Z")
lamd1 = Symbol("\lambda_1")
lamd2 = Symbol("\lambda_2")
eq1 = Eq(Z, (x1-4)**2 + (x2-4)**2 +
lamd1*(6 - 2*x1 - 3*x2) + lamd2*(-12 + 3*x1 + 2*x2))
display(eq1)
def f(x):
return ((x[0] - 4)**2 + (x[1] - 4)**2)
cons = ({'type': 'ineq',
'fun' : lambda x: np.array([2*x[0] + 3*x[1] - 6,
-3*x[0] - 2*x[1] +12])})
x0 = np.array([2,2,1])
res = minimize(f, x0, constraints=cons)
res
假设我理解正确并且你想获得解约束的拉格朗日乘数,你可以使用trust-constr方法:
res = minimize(f, x0, constraints=cons, method="trust-constr")
# the lagrangian multipliers for all constraints
lagr = res.v
我用拉格朗日方法解决了一个不等式的优化问题。
我得到了 x1 和 x2,但我还想得到 lamda1 和 lamda2 值。这可能吗?
x1 = Symbol("x_")
x2 = Symbol('x_2')
Z = Symbol("Z")
lamd1 = Symbol("\lambda_1")
lamd2 = Symbol("\lambda_2")
eq1 = Eq(Z, (x1-4)**2 + (x2-4)**2 +
lamd1*(6 - 2*x1 - 3*x2) + lamd2*(-12 + 3*x1 + 2*x2))
display(eq1)
def f(x):
return ((x[0] - 4)**2 + (x[1] - 4)**2)
cons = ({'type': 'ineq',
'fun' : lambda x: np.array([2*x[0] + 3*x[1] - 6,
-3*x[0] - 2*x[1] +12])})
x0 = np.array([2,2,1])
res = minimize(f, x0, constraints=cons)
res
假设我理解正确并且你想获得解约束的拉格朗日乘数,你可以使用trust-constr方法:
res = minimize(f, x0, constraints=cons, method="trust-constr")
# the lagrangian multipliers for all constraints
lagr = res.v