Ich muss lösen
Ich denke, es ist ein quadratisches Problem, mit dem es lösbar sein sollte CVXOPT sollte , aber ich kann nicht herausfinden, wie.
Ich muss lösen
Ich denke, es ist ein quadratisches Problem, mit dem es lösbar sein sollte CVXOPT sollte , aber ich kann nicht herausfinden, wie.
Antworten:
Ich habe eine vollständige Antwort (unter dem Strich) geschrieben, bevor ich CVXPY entdeckte , das (wie CVX für MATLAB) all die harten Sachen für Sie erledigt und ein sehr kurzes Beispiel hat, das fast mit Ihrem hier identisch ist . Sie müssen nur die entsprechende Zeile durch ersetzen
p = program(minimize(norm2(A*x-b)),[equals(sum(x),1),geq(x,0)])
Meine alte Antwort, es mit CVXOPT schwieriger zu machen:
Wenn Sie dem Vorschlag von Geoff folgen, Ihre Zielfunktion zu quadrieren, erhalten Sie
Natürlich sind alle Terme Skalare, so dass Sie den dritten transponieren und den letzten löschen können (da dies nicht von abhängt und daher nicht ändert, welches Ihnen ein Minimum gibt, obwohl Sie es wieder hinzufügen müssen in nach dem Lösen, um den korrekten Wert Ihres Ziels zu erhalten), um Dies (einschließlich Ihrer Einschränkungen) hat die Form eines quadratischen Programms, wie in angegeben die CVXOPT-Dokumentation hier , in der es auch Beispielcode zur Lösung eines solchen Problems gibt.
Anstelle des Problems, das Sie gelöst haben, lösen Sie
Dieses Problem ist ein differenzierbares, konvexes, nichtlineares Optimierungsproblem, das mit CVXOPT, IPOPT oder einem anderen konvexen Optimierungslöser gelöst werden kann.