同时引用 3 个元素的二维数组的 CVXPY 约束

CVXPY constraint on 2d array with 3 elements referenced simultaneously

我有一个大小为 VxV 的矩阵 S。我想对其施加几个形式的约束:。我已经尝试这样做了,但是这段代码 运行 变成了问题 ValueError: Atoms must be at most 2D.

我整理了一个我的问题的简化示例:

def ILP_example(scores):
    V = scores.shape[0]
    u, v, w = np.meshgrid(range(V), range(V), range(V))

    arr = cp.Variable(scores.shape)

    objective = cp.Maximize(
        cp.sum(cp.multiply(scores, arr))
    )
    constraints = [
        arr[u, v]           + arr[v, w]          - arr[u, w]          <= 1,
      ]
    prob = cp.Problem(objective, constraints)
    prob.solve()
    return

尝试 运行 这个,例如 ILP_example(np.random.rand(5, 5)) 会导致错误 ValueError: Atoms must be at most 2D. 我该如何解决这个问题?

似乎 cvxpy 不支持超过 2 个维度,这就是你在用 uv 和 [=16= 索引 arr 时所做的事情].

作为替代方案,您可以简单地重塑这些索引变量,使它们成为一维的:

u, v, w = [x.reshape(-1) for x in np.meshgrid(range(V), range(V), range(V))]

那么这就可以了:

constraints = [arr[u, v] + arr[v, w] + arr[u, w] <= 1]

arr[u, v] 现在是一个 125 长度的向量:

Expression(AFFINE, UNKNOWN, (125,))