Muszę rozwiązać
Myślę , że to kwadratowy problem, który powinien być rozwiązany za pomocą CVXOPT , ale nie potrafię zrozumieć, jak to zrobić.
Muszę rozwiązać
Myślę , że to kwadratowy problem, który powinien być rozwiązany za pomocą CVXOPT , ale nie potrafię zrozumieć, jak to zrobić.
Odpowiedzi:
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
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.
Zamiast problemu, który rozwiązałeś, rozwiąż
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.