Lösen eines Problems der kleinsten Quadrate mit linearen Abhängigkeiten in Python


12

Ich muss lösen

MindestxEINx-b22,s.t.ichxich=1,xich0,ich.

Ich denke, es ist ein quadratisches Problem, mit dem es lösbar sein sollte CVXOPT sollte , aber ich kann nicht herausfinden, wie.


Ich hoffe, diese Frage ist für compsci nicht zu spezifisch.
Tillsten

Geoff Oxberry: Nur eine Kuriosität, aber warum haben Sie den linearen Teil herausgeschnitten? Ich denke, es ist ein ziemlich ohnmächtiger Teil der Problembeschreibung, die Lösung wäre für eine nichtlineare Optimierung der kleinsten Quadrate ganz anders.
Tillsten

Übrigens sind die anderen Änderungen großartig!
Tillsten

Sie können dies einfach durch Ihren eigenen Code auf sehr effiziente Weise lösen. CVXOPT ist nicht erforderlich.
Royi

Antworten:


11

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

EINx-b22=xTEINT-bT,EINx-b=xTEINTEINx-bTEINx-xTEINb-bTb

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.xx

xTEINTEINx-bT(EIN+EINT)x

4

Anstelle des Problems, das Sie gelöst haben, lösen Sie

MindestxEINx-b22,s.t.ichxich=1,xich0,ich.

Dieses Problem ist ein differenzierbares, konvexes, nichtlineares Optimierungsproblem, das mit CVXOPT, IPOPT oder einem anderen konvexen Optimierungslöser gelöst werden kann.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.