Я надеюсь, что этот вопрос не слишком специфичен для 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
Эта проблема представляет собой дифференцируемую выпуклую нелинейную задачу оптимизации, которая может быть решена в CVXOPT, IPOPT или любом другом решении выпуклой оптимизации.
Ответы:
Я написал полный ответ (ниже строки), прежде чем обнаружил CVXPY , который (как и CVX для MATLAB) делает всю сложную работу за вас и имеет очень короткий пример, почти идентичный вашему здесь . Вам нужно только заменить соответствующую строку на
Мой старый ответ, делать это сложнее с CVXOPT:
Следуя предложению Джеффа возвести в квадрат вашу целевую функцию,
Конечно, все термины являются скалярами, так что вы можете транспонировать третий и отбросить последний (так как он не зависит от и, следовательно, не изменится, какой дает вам минимум, хотя вам нужно будет добавить его обратно в после решения, чтобы получить правильное значение вашей цели), чтобы получить Это (включая ваши ограничения) имеет форму квадратичной программы, как указано в документация CVXOPT здесь , где также есть пример кода для решения такой проблемы.x x
источник
Вместо того, чтобы решить проблему, решите
Эта проблема представляет собой дифференцируемую выпуклую нелинейную задачу оптимизации, которая может быть решена в CVXOPT, IPOPT или любом другом решении выпуклой оптимизации.
источник