Ограничение CVXPY для двумерного массива с 3 элементами, на которые ссылаются одновременно - PullRequest
1 голос
/ 09 марта 2019

У меня есть матрица S размера VxV.Я хочу наложить на него несколько ограничений вида: Constraint.Я пытался сделать это, но этот код сталкивается с проблемой 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. Как это исправить?

1 Ответ

0 голосов
/ 10 марта 2019

Кажется, что cvxpy не поддерживает более двух измерений, что вы делаете, когда индексируете arr с u, v и w.

КакВ качестве альтернативы, вы можете просто изменить эти индексные переменные так, чтобы они были одномерными:

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,))
...