如何使用多个数组优化函数?

给定数组a, b, 和c:


import numpy as np


a = np.array([100, 200, 300])

b = np.array([[1, 0, 0],

              [1, 0, 1],

              [0, 1, 1],

              [1, 1, 1]])

c = np.array([150, 300, 500, 650])

我想进行优化a,以使每个值最小化c_prime.


c_prime = c - np.sum(a*b, axis=1)

print(c_prime)

print(np.abs(c_prime).sum())


[  50 -100    0   50]

200

手动...通过更改 中的第一个元素a,c_prime开始达到预期的结果。


a = np.array([150, 200, 300])


c_prime = c - np.sum(a*b, axis=1)

print(c_prime)

print(np.abs(c_prime).sum())


[   0 -150    0    0]

150

现在,令人尴尬的是,我的问题是我怎样才能达到预期的结果?我已经试过了scipy.optimize.minimize,但很明显这段代码没有达到目标,而且这个函数在概念上可能完全不正确。


def f(x, b, c):

    return np.abs(c - np.sum(x*b, axis=1)).sum()


x0 = a

minimize(f, x0, args=(b,c))


      fun: 200.0

 hess_inv: array([[1, 0, 0],

       [0, 1, 0],

       [0, 0, 1]])

      jac: array([-1.,  0.,  1.])

  message: 'Desired error not necessarily achieved due to precision loss.'

     nfev: 327

      nit: 0

     njev: 63

   status: 2

  success: False

        x: array([100., 200., 300.])

鉴于从手动设置a[0]到150上述的改进结果,为什么这些结果返回非最佳x?


互换的青春
浏览 165回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java