【问题标题】:SCIPY multi-dimensional minimizationSCIPY 多维最小化
【发布时间】:2017-04-11 15:52:53
【问题描述】:

目前我有很多变量作为 2D np.arrays。但我会用 then 来解决线性系统,例如:

min W
st:
w >= U - S
W >= 0

我已经尝试将 np.optimize.minimize 用作:

>>> W0=np.zeros((2,4))
>>> U = np.array([[18, 0, 0, 10],[210,0,0,20]])
>>> S = np.array([[16, 8, 12, 8],[80, 160, 80, 80]])
>>> cons = ({'type':'ineq', 'fun': lambda x: x - U + S})
>>> res = minimize(lambda x: x, W0, constraints=cons)

这最后一步导致错误:

ValueError: operands could not be broadcast together with shapes (8,) (2,4) 

预期的解决方案是:

 array([[   2, 0, 0, 2],
        [ 130, 0, 0, 0]])

谢谢

编辑

我可以解决:

 res=np.array([[minimize( fun, (0), bounds=[(0,None)], constraints = ({'type':'ineq', 'fun': lambda x: x -U[r,m] + S[r,m]})).x[0] for m in range(4)] for r in range(2)])

【问题讨论】:

  • 这看起来像一个线性规划问题,有linprog。但是当 W 是矩阵时,我不明白您所说的“最小 W”是什么意思。
  • @zaq:例如,W 是一个机器/资源矩阵。矩阵表示法很方便,但每个单元都是一个独立的系统。
  • Scipy.minimize 执行“一个或多个变量的标量函数的最小化”。它不会一次解决一堆最小化问题。

标签: python arrays multidimensional-array scipy linear-programming


【解决方案1】:

解决方法:

res=np.array([
               [
                 minimize( fun, (0), bounds=[(0,None)], 
                   constraints = ({'type':'ineq', 
                     'fun': lambda x: x -U[r,m] + S[r,m]}
                   )
                 ).x[0] 
                f or m in range(4)] 
              for r in range(2)]
            )

所以我称之为 R.M 最小化问题

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2021-10-25
    • 2016-05-27
    相关资源
    最近更新 更多