Решение задачи наименьших квадратов с линейными ограничениями в Python


12

Мне нужно решить

minx‖Ax−b‖22,s.t.∑ixi=1,xi≥0,∀i.

Я думаю, что это квадратичная проблема, которая должна быть решена с помощью CVXOPT , но я не могу понять, как.


Я надеюсь, что этот вопрос не слишком специфичен для compsci.
— Tillsten

Джефф Оксберри: Просто любопытство, но почему вы отредактировали линейную часть? Я думаю, что это довольно бессильная часть описания проблемы, решение было бы совсем другим для нелинейной оптимизации наименьших квадратов.
— Tillsten

Кстати, другие правки великолепны!
— Tillsten

Вы можете легко решить эту проблему с помощью собственного кода очень эффективным способом. Нет необходимости в CVXOPT.
— Рой

Ответы:


11

Я написал полный ответ (ниже строки), прежде чем обнаружил CVXPY , который (как и CVX для MATLAB) делает всю сложную работу за вас и имеет очень короткий пример, почти идентичный вашему здесь . Вам нужно только заменить соответствующую строку на

 p = program(minimize(norm2(A*x-b)),[equals(sum(x),1),geq(x,0)])

Мой старый ответ, делать это сложнее с CVXOPT:

Следуя предложению Джеффа возвести в квадрат вашу целевую функцию,

‖Ax−b‖22=⟨xTAT−bT,Ax−b⟩=xTATAx−bTAx−xTAb−bTb

Конечно, все термины являются скалярами, так что вы можете транспонировать третий и отбросить последний (так как он не зависит от и, следовательно, не изменится, какой дает вам минимум, хотя вам нужно будет добавить его обратно в после решения, чтобы получить правильное значение вашей цели), чтобы получить Это (включая ваши ограничения) имеет форму квадратичной программы, как указано в документация CVXOPT здесь , где также есть пример кода для решения такой проблемы.xx

xTATAx−bT(A+AT)x

4

Вместо того, чтобы решить проблему, решите

minx‖Ax−b‖22,s.t.∑ixi=1,xi≥0,∀i.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.