cvxpy противоречивые уравнения нормализации (абс) - PullRequest
0 голосов
/ 15 октября 2018

Я работаю в задаче оптимизации (A * v = b), где я хотел бы оценить набор альтернатив X = {x1, x2, x3, x4}.Однако у меня есть следующее ограничение нормализации: | v [i] - v [j] |<= 1, который может иметь вид -1 <= v [i] - v [j] <= 1. Мой код выглядит следующим образом: </p>

import cvxpy as cp

n = len(X) #set of alternatives
v = cp.Variable(n)
objective = cp.Minimize(cp.sum_squares(A*v - b))
constraints = [0 <= v]
#Normalization condition -1 <= v[i] - v[j] <= 1
for i in range(n):
    for j in range(n):
        constraints = [-1 <= v[i]-v[j], 1 >= v[i]-v[j]]
prob = cp.Problem(objective, constraints)
# The optimal objective value is returned by `prob.solve()`.
result = prob.solve()
# The optimal value for v is stored in `v.value`.
va2 = v.value

Какой вывод:

[-0.15  0.45 -0.35  0.05]

Результат, который не близок к тому, что должно быть, и даже имеет отрицательные значения.Я думаю, что мой код для нормализации скорее всего неправильный.

1 Ответ

0 голосов
/ 15 октября 2018

Вы не добавляете свои ограничения, вместо этого вы перезаписываете их каждый раз.Вместо этой строки

constraints = [-1 <= v[i]-v[j], 1 >= v[i]-v[j]]

У вас должно быть

constraints += [-1 <= v[i]-v[j], 1 >= v[i]-v[j]]

Для чистоты вы можете изменить это

for i in range(n):
    for j in range(n):

Чтобы рассматривать каждую пару только один раз:

for i in range(n):
    for j in range(i+1, n):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...