Как кодировать ограничения сравнения массивов в cvxopt

Я хочу использовать python software cvxopt для решения небольшой проблемы с тестированием, которую я имею (если программное обеспечение способно решить эту проблему, мой босс сможет использовать ее в будущем проекте). Тем не менее, мне трудно понять из документации, как я могу кодировать некоторые ограничения, которые не имеют форму Ax = b или Ax

Постановка задачи такова: x - это пустой массив (1-d). Найдите массив y такой, что:

(1) We minimize ||x-y||^2 
(2) y is increasing throughout (y[k] <= y[k+1] for all k)
(3) the last element of y = the last element of x
(4) y[0] >= 0

Я вижу, как можно выполнить условия кодирования (3) и (4), но как я могу кодировать условие (2)?

Спасибо христианин

1 ответ

Первое замечание: нет A<b только в (непрерывной) выпуклой оптимизации A<=b,

Ваше условие (2) - это просто попарное ограничение на соседей, например:

y[0] <= y[1]
y[1] <= y[2]
....

Чтобы привести его в стандартную форму:

y[0] <= y[1]
<=>
y[0] - y[1] <= 0

Теперь вы можете использовать A<=b формулировка:

A:
1  -1   0   0 ... meaning: y[0] <= y[1] 
0   1  -1   0 ...          y[1] <= y[2]
0   0   1  -1 ...

b:
0
0
0
...

Если вы не используете возможности cvxopt для настройки KKT-расчетов и соавторов. я настоятельно рекомендую использовать cvxpy (из того же учебного заведения), который намного проще в использовании, включая множество функций, таких как norm(x-y, 2) и многое другое.... Он также может использовать cvxopt в качестве решателя при необходимости (но также и другие решатели с открытым исходным кодом, такие как ECOS, SCS).

Другие вопросы по тегам