我正在尝试在python中优化以下等式:
argmax(Z)L = Z ^ TA + rZ ^ TB s.t. Z ^ TB = 0(请原谅我无法发布图片,因为这个帐号经常不使用,但^ T表示转置)
其中r是标量,Z,A和B是列向量。我该怎么把它放在scipy.optimize.minimize中?但我一直收到一个我不认识的错误。
目前我的代码是
def func(x, sign = 1.0):
""" Objective function """
sums = 0
for i in range(len(a)):
sums = sums - x[i] * a[i] - rm * x[i] * b[i]
return sums
def func_deriv(x, sign = 1.0):
""" Derivative of objective function """
return - a[i] - rm * b[i]
def c1(x):
sums = 0
print x
for i in range(len(a)):
sums = sums + x[i] * b[i]
return sums
cons = ({'type': 'eq',
'fun' : c1,})
res = minimize(func, np.zeros(len(a)), jac=func_deriv, constraints=cons, method='SLSQP')
目前,constraints=cons
部分发生了以下错误:
error: failed in converting 8th argument
g'的_slsqp.slsqp到C / Fortran数组`
我在this question上看到这个错误意味着返回的对象需要是一个标量。但函数c1
确实返回标量,所以我现在很困惑。还有其他错误来源吗?