【发布时间】:2021-07-14 18:48:31
【问题描述】:
我想使用 scipy 优化例程,以便在应用一些约束的同时最小化函数。我想应用拉格朗日乘数法,但我认为我遗漏了一些东西。
我的简单示例:最小化 f(x,y)=x^2+y^2,同时保持约束:y=x+4.0
import numpy as np
from scipy.optimize import fmin_bfgs
#X=[x,y,l]
def f(X):
x=X[0]
y=X[1]
return x**2+y**2
def g(X):
x=X[0]
y=X[1]
return y-x-4.000
def L(X):
l=X[2]
return f(X)+l*g(X)
def dL(X):
x=X[0]
y=X[1]
l=X[2]
gx=2.0*x
gy=2.0*y
gl=g(X)
tmp=np.array([gx,gy,gl])
return tmp
x0=np.array([-2.0,2.0,0.0])
print "f(x0)\t\t g(x0) \t\t L(x0)"
print "%12.8f\t%12.8f\t%12.8f\t"%(f(x0),g(x0),L(x0))
print "dL(x0)"
print dL(x0)
xopt=fmin_bfgs(L,x0,fprime=dL,disp=True)
print xopt
即使我的 x0 在现场,优化也会严重偏离。有人可以解释一下如何正确包含拉格朗日乘数以及如何初始化乘数吗?
【问题讨论】: