同时引用 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 个维度,这就是你在用 u
、v
和 [=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,))
我有一个大小为 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 个维度,这就是你在用 u
、v
和 [=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,))