无法将_slsqp.slsqp的第8个参数“g”转换为Scipy.Optimize

时间:2017-07-01 05:44:33

标签: python numpy optimization scipy

我正在尝试在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确实返回标量,所以我现在很困惑。还有其他错误来源吗?

0 个答案:

没有答案