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.

tillsten
quelle
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
David Ketcheson
quelle
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.

Geoff Oxberry
quelle