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


12

Muszę rozwiązać

minxAxb22,s.t.ixi=1,xi0,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

Axb22=xTATbT,Axb=xTATAxbTAxxTAbbTb

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

xTATAxbT(A+AT)x

4

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

minxAxb22,s.t.ixi=1,xi0,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.