scipy.optimize.minimize边界外的结果

时间:2015-12-03 10:49:57

标签: python python-3.x optimization scipy

我想要解决一组3个方程式。变量c [0],c [1],c [2]是成本函数,范围为-1到1.从我在网上发现的scipy优化是最好的方法。除了c [0]到c [3]之外,等式中的所有内容都是常数且已知。

  

0 = a + u * c [0]

     

0 = b + v * c [1] + w * c [2]

     

0 = d - n * c [1] + m * c [2]

我将其转化为以下优化问题,包含边界和约束,因此我需要SLSQP

c=np.array([])
def fun(c):
    return abs(c[0])+abs(c[1])+abs(c[2])

x0 = [0.05,0.05,0.05]

bnds = [(-1.0,1.0),(-1.0,1.0),(-1.0,1.0)]

cons = ({'type': 'eq', 'fun': lambda c: a+u*c[0]},
    {'type': 'eq', 'fun': lambda c: b+v*c[1]+w*c[2]},
    {'type': 'eq', 'fun': lambda c: d-n*c[1]+m*c[2]},
    )

res = minimize(fun, x0, method='SLSQP',
                        bounds=bnds,
                        constraints=cons)

我明白了:

status: 0
success: True
   njev: 3
   nfev: 15
    fun: 33.015905119807698
      x: array([  1.04805004e-02,   1.01768804e+01,  -2.28285442e+01])
message: 'Optimization terminated successfully.'
    jac: array([ 1.,  1., -1.,  0.])
    nit: 3

所以我的界限似乎被忽略了。翻译不平等的边界会产生相同的结果

计算的值是

a = -3943.3960306568406
b = 172710.8224501527
d = -380842.9800419506
u = 376260.28
v = 112878.084
w = 57886.196
n = -3205737.5856
m = 1412423.1824

1 个答案:

答案 0 :(得分:0)

尝试使用Scipy版本> = 0.15.0。

在没有给出约束函数的jacobian的情况下,SLSQP例程在先前版本中存在已知错误。