我想使用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是在现场,优化分歧,严重。有人能给我解释一下如何正确地包含拉格朗日乘子,以及如何初始化乘子吗?你知道吗
拉格朗日乘子的主要思想是构造一个新的目标函数,其中已经嵌入了约束。首先求解方程以找到乘数的值,然后优化新的目标函数(http://www.math.vt.edu/people/mcquain/1526_Lag_opt_2012.pdf)。但是在您的示例中,您试图通过优化找到乘数的值。通过遵循lik中提供的说明,您可以发现问题的拉格朗日乘数是4。你知道吗
希望有帮助
相关问题 更多 >
编程相关推荐