Розв’язування задачі з найменшими квадратами з лінійними обмеженнями в Python


12

Мені потрібно вирішити

хвхАх-б22,с.т.iхi=1,хi0,i.

Я думаю, що це квадратична проблема, яку слід вирішити з CVXOPT , але я не можу розробити як.


Сподіваюся, це питання не надто специфічне для компсі.
tillsten

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

Btw, інші редакції чудові!
tillsten

Ви можете легко вирішити це за допомогою власного коду дуже ефективно. Не потрібно CVXOPT.
Рой

Відповіді:


11

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

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

Моя стара відповідь: це зробити складніше з CVXOPT:

Слідом за пропозицією Джеффа розподілити свою цільову функцію

Ах-б22=хТАТ-бТ,Ах-б=хТАТАх-бТАх-хТАб-бТб

Звичайно, усі терміни є скалярами, тому ви можете перенести третій і скинути останній (оскільки він не залежить від і, отже, не змінить, який дає мінімум, хоча вам потрібно буде додати його назад після вирішення, щоб отримати правильне значення своєї мети), щоб отримати Це (включаючи ваші обмеження) має форму квадратичної програми, як зазначено в тут документація CVXOPT , де також є приклад коду для вирішення такої проблеми.x x T A T A x - b T ( A + A T ) xхх

хТАТАх-бТ(А+АТ)х

4

Замість проблеми, яку ви вирішили, вирішіть

хвхАх-б22,с.т.iхi=1,хi0,i.

Ця проблема є диференційованою, опуклою, нелінійною задачею оптимізації, яку можна вирішити в CVXOPT, IPOPT або будь-якому іншому вирішенні опуклої оптимізації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.