给定数组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?
相关分类