【问题标题】:Minimize System of Equations with constraints (scipy.optimize.minimize)使用约束最小化方程组 (scipy.optimize.minimize)
【发布时间】:2016-03-20 00:29:23
【问题描述】:

考虑以下代码:

import numpy as np
from scipy.optimize import minimize

def eq( p ):
    s1,s2,s3 = p 
    f1 = 1.1**3 / s1*1.1**1+s2*1.1**2+s3*1.1**3
    f2 = 0.9**1 / s1*0.9**1+s2*0.9**2+s3*0.9**3
    return (f1, f2) 

bnds = ( (0, None), (0, None), (0, None) )
cons = ( { 'type' : 'ineq', 'fun': lambda p: p[0]+p[1]+p[2] - 1} )


minimize( eq, (0.3,0.3,0.3),  bounds=bnds, constraints=cons )

抛出错误

TypeError: unsupported operand type(s) for -: 'tuple' and 'tuple'

我想最小化 f1f2 使得 s_t > 0sum s_t <= 1,对于 t = 1、2、3。

【问题讨论】:

  • p[0]+[p1]+[p2] 这是不对的,不是吗?
  • 这应该模拟sum s_t <= 1 的约束。我还注意到我需要指定method='SLSQP' 以允许约束,但随后它因error: failed in converting 8th argument g' of _slsqp.slsqp to C/Fortran array 而失败 - 我在stackoverflow 上的另一个主题中看到了这个错误,但没有答案..

标签: python numpy scipy minimize


【解决方案1】:
minimize( eq, (0.3,0.3,0.3),  bounds=bnds, constraints=cons )

第二个参数应该是一个 ndarray 而不是一个元组。 args 元组出现在初始猜测 (x0) 之后。

http://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.optimize.minimize.html

【讨论】:

    【解决方案2】:

    第二个参数应该是ndarray类型,试试用

     minimize( eq, np.ndarray([0.3,0.3,0.3]),  bounds=bnds, constraints=cons )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 2021-11-13
      • 2013-12-03
      • 2016-10-11
      • 1970-01-01
      相关资源
      最近更新 更多