Rozwiązywanie problemu najmniejszych kwadratów z ograniczeniami liniowymi w Pythonie


12

Muszę rozwiązać

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

Myślę , że to kwadratowy problem, który powinien być rozwiązany za pomocą CVXOPT , ale nie potrafię zrozumieć, jak to zrobić.


Mam nadzieję, że to pytanie nie jest zbyt szczegółowe dla compsci.
— tillsten

Geoff Oxberry: Ciekawostka, ale dlaczego edytowałeś część liniową? Myślę, że jest to dość bezsilna część opisu problemu, rozwiązanie byłoby zupełnie inne w przypadku nieliniowej optymalizacji metodą najmniejszych kwadratów.
— tillsten

Przy okazji, inne zmiany są świetne!
— tillsten

Możesz to łatwo rozwiązać za pomocą własnego kodu w bardzo wydajny sposób. Nie ma potrzeby CVXOPT.
— Royi,

Odpowiedzi:


11

Napisałem pełną odpowiedź (poniżej linii) przed odkryciem CVXPY , który (podobnie jak CVX dla MATLAB) robi dla ciebie wszystkie trudne rzeczy i ma bardzo krótki przykład prawie identyczny z twoim tutaj . Trzeba tylko zastąpić odpowiednią linię

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

Moja stara odpowiedź: robić to trudniej z CVXOPT:

Podążając za sugestią Geoffa, aby wyrównać, daje się funkcja celu

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

Oczywiście wszystkie terminy są skalarne, więc możesz transponować trzeci i upuścić ostatni (ponieważ nie zależy to od a zatem nie zmieni się, co daje ci minimum, chociaż będziesz musiał go dodać z powrotem in po rozwiązaniu w celu uzyskania prawidłowej wartości celu), aby uzyskać To (wraz z ograniczeniami) ma postać programu kwadratowego, jak podano w dokumentacja CVXOPT tutaj , w której znajduje się również przykładowy kod do rozwiązania takiego problemu.xx

xTATAx−bT(A+AT)x

4

Zamiast problemu, który rozwiązałeś, rozwiąż

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

Ten problem jest rozróżnialnym, wypukłym, nieliniowym problemem optymalizacji, który można rozwiązać w CVXOPT, IPOPT lub dowolnym innym wypukłym rozwiązaniu optymalizacyjnym.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.