1

嗨,我是 scipy 和 numpy 的新手,

我正在尝试将 QP 问题用于课堂作业

minimize x^t * H * x  + f^t * x 
where x > 0

其中 H 是 2 X 2 块矩阵,每个元素是 ak X k 维矩阵,x 和 f 是 2 X 1 向量,每个元素是 ak 维向量。

np.shape(H) = (2, 2, k, k)
np.shape(x) = (2, k)

即使我认为功能正确,我也会收到形状不匹配错误

这是我的实现:

def func(x):    #This function runs perfectly ,returns a value 

    return 0.5 * np.tensordot(x, np.tensordot(H, x, axes=([1,3],[0,1]))) + np.tensordot(x,f)

x_init = np.ones((2, k))

bnds = (0, None)

theta = opt.minimize(func , x_init, bounds = bnds)
# I get an error here. 
# ValueError: shape-mismatch for sum

我错过了一些明显的东西吗?

4

1 回答 1

1

问题是x_initopt.minimize. x您可以通过在函数内部进行重塑来解决此问题:

def func(x):
    x = x.reshape(2, -1)
    return 0.5 * np.tensordot(x, np.tensordot(H, x, axes=([1,3],[0,1]))) + np.tensordot(x,f)

结果由属性捕获theta并优化,您将看到它也被展平,需要相同的重塑。xtheta.x

于 2013-11-03T10:49:05.570 回答