Lineare Programmierung mit Matrixeinschränkungen


10

Ich habe ein Optimierungsproblem, das wie folgt aussieht

minJ,Bij|Jij|s.t.MJ+BY=X

Hier sind meine Variablen die Matrizen J und B , aber das gesamte Problem ist immer noch ein lineares Programm; Die restlichen Variablen sind fest.

Wenn ich versuche, dieses Programm in meine bevorzugten linearen Programmierwerkzeuge einzugeben, treten Probleme auf. Wenn ich dies nämlich in "Standard" -Linearprogrammform schreibe, werden die Parametermatrizen M und Y tonnenweise wiederholt (einmal für jede Spalte von X ).

Gibt es einen Algorithmus und / oder ein Paket, die Optimierungen des obigen Formulars verarbeiten können? Im Moment geht mir der Speicher aus, weil M und Y so oft kopiert werden müssen!


Ist B eine Parametermatrix oder meinst du Y ? Welche Formen haben die verschiedenen Matrizen?
Geoffrey Irving

[Hi Geoffrey!] J und B sind Variablen, der Rest sind Parameter. B hat relativ wenige Spalten, aber alle verbleibenden Abmessungen sind ziemlich groß (nichts ist quadratisch).
Justin Solomon

[Hallo!] Sie sollten den Beitrag bearbeiten, um nicht zweimal zu sagen, dass B ein Parameter ist.
Geoffrey Irving

1
Interessanterweise, aber wahrscheinlich nutzlos, ist die Version dieses Problems mit anstelle vonkann mit ein paar SVDs gelöst werden. | J i j |Jij2|Jij|
Geoffrey Irving

1
@ Geoffrey, das ist kein Zufall :-)
Justin Solomon

Antworten:


12

Überblick

Vielleicht möchten Sie eine Variante der ADMM- Methode ( Alternating Directions Method of Multipliers) ausprobieren, die bei Problemen vom Typ Lasso überraschend schnell konvergiert . Die Strategie besteht darin, das Problem mit einem erweiterten Lagrange zu formulieren und dann einen Gradientenanstieg auf das duale Problem durchzuführen. Besonders schön ist es für diese besondere regularisiert Problem , weil das nicht glatte Teil jeder Iteration des Verfahrens eine exakte Lösung hat , kann man einfach Element für Element zu bewerten, während der glatte Teil ein lineares System beinhaltet die Lösung.l 1l1l1

In diesem Beitrag haben wir

  • eine allgemeine ADMM-Formulierung für eine Verallgemeinerung Ihres Problems ableiten,
  • Leiten Sie die Teilprobleme für jede ADMM-Iteration ab und spezialisieren Sie sie auf Ihre Situation
  • Untersuchen Sie das resultierende lineare System, das bei jeder Iteration gelöst werden muss, und entwickeln Sie einen schnellen Löser (oder Vorkonditionierer), der auf der Vorberechnung der Eigenwertzerlegungen (oder von Annäherungen mit niedrigem Rang) für und basiert .Y Y T.MTMYYT
  • fassen Sie mit einigen abschließenden Bemerkungen zusammen

Die meisten der großen Ideen hier werden in dem folgenden hervorragenden Übersichtsartikel behandelt:

Boyd, Stephen et al. "Verteilte Optimierung und statistisches Lernen über die Wechselrichtungsmethode von Multiplikatoren." Grundlagen und Trends® im maschinellen Lernen 3.1 (2011): 1-122. http://www.stanford.edu/~boyd/papers/pdf/admm_distr_stats.pdf

Bevor ich auf Details eingehe, möchte ich darauf hinweisen, dass dies eine Methode / Algorithmus-Antwort ist, keine praktische Antwort auf vorhandenen Code. Wenn Sie diese Methode verwenden möchten, müssen Sie Ihre eigene Implementierung rollen.

ADMM-Formulierung

Angenommen, Sie möchten im Allgemeinen

minxi|xi|s.t.Ax=b.

Das Problem im ursprünglichen Beitrag fällt nach entsprechender Vektorisierung in diese Kategorie. (Dies ist nur im Prinzip - wir werden sehen, dass die Vektorisierung in der Praxis nicht durchgeführt werden muss)

Sie könnten stattdessen das entsprechende Problem lösen: mit Lagrange L(x,z,λ,γ)=

minx,zi|xi|+α2||xz||2+β2||Azb||2s.t.Az=b&x=z,
L(x,z,λ,γ)=i|xi|+α2||xz||2+β2||Azb||2+λT(Azb)+γT(xz)=i|xi|+α2||xz+1αγ||2+β2||Azb+1βλ||2+α2||1αγ||2+β2||1βλ||2.

Die von Multiplikatoren löst das duale Problem über den Gradientenanstieg auf den dualen Variablen, außer mit ungenaue alternierende Projektionen auf die dualen Teilprobleme. Das heißt, man macht die Iteration x k + 1

maxλ,γminx,zL(x,z,λ,γ),
xk+1=argminxL(x,zk,λk,γk)zk+1=argminzL(xk+1,z,λk,γk)γk+1=γk+α(xk+1zk+1)λk+1=λk+β(Azk+1b).

Unter bestimmten milden Bedingungen für die Parameter und (erläutert in dem oben verlinkten Boyd & Parikh-Artikel) konvergiert die ADMM-Methode zur wahren Lösung. Die Konvergenzrate ist linear, da es sich im Kern um eine Gradientenaufstiegsmethode handelt. Oft kann es beschleunigt werden, um superlinear zu sein, indem 1) die Parameter und basierend auf der Heuristik geändert werden oder 2) die Nesterov-Beschleunigung verwendet wird. Hinweise zum Ändern der Strafparameter finden Sie im Boyd-Umfragepapier. Informationen zur Verwendung der Nesterov-Beschleunigung mit ADMM finden Sie im folgenden Dokument:β α βαβαβ

Goldstein, Tom, Brendan O'Donoghue und Simon Setzer. "Schnelle Methoden zur Optimierung der Richtungsänderung." CAM-Bericht (2012): 12-35. ftp://ftp.math.ucla.edu/pub/camreport/cam12-35.pdf

Doch selbst wenn die Gesamtkonvergenzrate ist nur linear, für Probleme des Verfahren beobachtet wurde , sehr schnell die sparsity Muster zu finden, und dann konvergieren langsamer auf den exakten Werten. Da es am schwierigsten ist, das Sparsity-Muster zu finden, ist dies sehr zufällig! Die genauen Gründe dafür scheinen ein Bereich der aktuellen Forschung zu sein. Jeder sieht, dass das Sparsity-Muster schnell konvergiert, aber niemand scheint genau zu wissen, warum es passiert. Vor einiger Zeit habe ich Boyd und Parikh per E-Mail danach gefragt, und Parikh dachte, dies könnte durch die Interpretation der Methode in einem Kontrollsystemkontext erklärt werden. Eine weitere heuristische Erklärung des Phänomens findet sich im Anhang des folgenden Papiers:l1

Goldstein, Tom und Stanley Osher. "Die Split-Bregman-Methode für L1-regulierte Probleme." SIAM Journal on Imaging Sciences 2.2 (2009): 323 & ndash; 343. ftp://ftp.math.ucla.edu/pub/camreport/cam08-29.pdf

Natürlich liegt die Schwierigkeit jetzt darin, die und Update-Teilprobleme für Ihre spezifische Situation zu lösen . Da der Lagrange in quadratisch ist , erfordert das Teilproblem der Aktualisierung lediglich die Lösung eines linearen Systems. Das Teilproblem scheint schwieriger zu sein, da es nicht differenzierbar ist, aber es stellt sich heraus, dass es eine genaue Formel für die Lösung gibt, die Element für Element angewendet werden kann! Wir diskutieren diese Teilprobleme nun detaillierter und spezifizieren sie für das Problem im ursprünglichen Beitrag.z z z xxzzzx

Setup für das Teilproblem update (lineares System)z

Für das Update haben wir a r g m i n z L ( x k , z , λ k , γ k ) = a r g m i n z αz

argminzL(xk,z,λk,γk)=argminzα2||xz+1αγ||2+β2||Azb+1βλ||2.

Spezialisiert auf Ihr Problem wird dies:

argminZJ,ZBα2||Jk+1ZJ+1αΓJ||Fro2+α2||Bk+1ZB+1αΓB||Fro2+β2||MZJ+ZBYX+1αΛ||Fro2,

Dabei bezeichnet die Frobenius- Norm (elementweise ). Dies ist ein quadratisches Minimierungsproblem, bei dem die Optimalitätsbedingungen erster Ordnung gefunden werden können, indem partielle Ableitungen des Objektivs in Bezug auf und und auf Null gesetzt werden. Dies ist l 2 Z J Z B 0||||Frol2ZJZB

0=α2(Jk+1ZJ+1αΓJ)+β2MT(MZJ+ZBYX+1βΛ),0=α2(Bk+1ZB+1αΓB)+β2(MZJ+ZBYX+1βΛ)YT.

Wie in den Kommentaren des Originalplakats Justin Solomon erwähnt, ist dieses System für symmetrisch, sodass der konjugierte Gradient eine ideale Methode ist. In einem späteren Abschnitt wird dieses System und seine Lösung / Vorkonditionierung ausführlicher beschrieben.ZJ,ZB

Lösen des Update-Teilproblems (analytische Schwellenwertlösung)x

Nun wenden wir uns dem Teilproblem zu: x

argminxL(x,zk,λk,γk)=argminxi|xi|+α2||xzk+1αγk||2

Das erste, was zu sehen ist, ist, dass die Summe Element für Element aufgeteilt werden kann,

i|xi|+α2||xzk+1αγk||2=i|xi|+α2i(xizik+1αγik)2,

So können wir das Optimierungsproblem Element für Element parallel lösen und

xik+1=argminxi|xi|+α2(xizik+1αγik)2.

Die allgemeine Form dieser Gleichung lautet

mins|s|+α2(st)2.

Die Absolutwertfunktion versucht, den optimalen Punkt in Richtung zu ziehen , während der quadratische Term versucht, den optimalen Punkt in Richtung zu ziehen . Die wahre Lösung liegt daher irgendwo auf dem Segment zwischen den beiden, wobei zunehmendes dazu neigt, den optimalen Punkt in Richtung zu ziehen , und abnehmendes den optimalen Punkt in Richtung zieht .s=0s=t[0,t)αtα0

Dies ist eine konvexe Funktion, die jedoch bei Null nicht differenzierbar ist. Die Bedingung für einen Minimierungspunkt ist, dass das Subderivat des Objektivs an diesem Punkt Null enthält. Der quadratische Term hat die Ableitung , und die Absolutwertfunktion hat die Ableitung für , die festgelegte Subderivation als Intervall wenn , und die Ableitung für . Somit erhalten wir das Subderivativ für die Gesamtzielfunktion α(st)1s<0[1,1]s=01s>0

s(|s|+α2(st)2)={1+α(st)s>0[1,1]+αt,s=0,1+α(st),s<0.

Daraus sehen wir, dass das Subderivat des Ziels bei genau dann enthält, wenn , in diesem Fall ist der Minimierer. Wenn andererseits nicht der Minimierer ist, können wir die einwertige Ableitung gleich Null setzen und nach dem Minimierer auflösen. dies tun, erhalten Sie s=00|t|1αs=0s=0

argmins|s|+α2(st)2={t1α,t>1α,0,|t|1α,t+1α,t<1α

Spezialisieren Sie dieses Ergebnis erneut auf das eigentliche Problem, das wir in der ursprünglichen Frage zu lösen versuchen, wobei ergibt, Das Update für ist einfach t=Zijk1αΓijk

Jijk+1={Zijk1αΓijk1α,Zijk1αΓijk>1α,0,|Zijk1αΓijk|1α,Zijk1αΓijk+1α,Zijk1αΓijk<1α.
B
Bk+1=ZB1αΓB,

wie vom Originalplakat Justin Solomon in den Kommentaren vermerkt. Insgesamt erfordert das Update für nur das Durchlaufen der Einträge Ihrer Matrizen und das Auswerten der obigen Formeln für jeden Eintrag.J,B

Schur-Komplement für das SystemZJ,ZB

Der teuerste Schritt der Iteration ist das Lösen des Systems:

0=α2(Jk+1ZJ+1αΓJ)+β2MT(MZJ+ZBYX+1βΛ),0=α2(Bk+1ZB+1αΓB)+β2(MZJ+ZBYX+1βΛ)YT.

Zu diesem Zweck lohnt es sich, einen guten Löser / Vorkonditionierer für dieses System zu konstruieren. In diesem Abschnitt vektorisieren wir , bilden ein Schur-Komplement , führen einige Krnoecker-Produktmanipulationen durch und enthüllen dann. Das resultierende Schur-Komplementsystem ist eine leicht modifizierte Sylvester-Gleichung .

Im Folgenden sind folgende Identitäten zu Vektorisierung und Kronecker-Produkten absolut entscheidend:

  • vec(ABC)=(CTA)vec(B),
  • (AB)(CD)=ACBD ,
  • (AB)1=A1B1 , und
  • (AB)T=ATBT .

Diese Identitäten gelten immer dann, wenn die Matrixgrößen und die Invertierbarkeit so sind, dass jede Seite der Gleichung ein gültiger Ausdruck ist.

Die vektorisierte Form des Systems ist

(αI+β[IMTM(YM)TYMYYTI])[vec(ZJ)vec(ZB)]=[vec(αJ+βMTX+ΓJMTΛ)vec(αB+βXYT+ΓBΛYT)],

oder

[I(αI+βMTM)β(YM)TβYM(αI+βYYT)I][vec(ZJ)vec(ZB)]=[vec(F)vec(G)],

wobei und die komprimierte Notation für die rechte Seite sind. Jetzt führen wir eine Block-Gauß-Eliminierung / Schur-Ergänzung durch, um den unteren linken Block der Matrix zu eliminieren, wobei die Kronecker-Produkte kondensiert werden. Dies ist FG

[I(αI+βMTM)β(YM)T0(αI+βYYT)Iβ2YYTM(αI+βMTM)1MT][vec(ZJ)vec(ZB)]=[vec(F)vec(G)βYM(αI+βMTM)1vec(F)].

Die beiden Gleichungen, die wir nacheinander lösen müssen, sind:

  1. ZB(αI+βYYT)(βM(αI+βMTM)1MT)ZB(βYYT)=GβM(αI+βMTM)1FYT
  2. (αI+βMTM)ZJ=FβMTZBY.

Lösung des Schur-Komplementsystems, wenn quadratisch sind, hoher RangY,M

In diesem Abschnitt lösen wir das Schur-Komplementsystem für (Gleichung 1. oben), indem wir vorberechnete vollständige SVDs der Matrizen und eine modifizierte Version des Bartels-Stewart-Algorithmus für den Sylvester anwenden Gleichung. Der Algorithmus wurde gegenüber der Standardversion leicht modifiziert, um das zusätzliche im zweiten Term zu berücksichtigen , was ihn nicht ganz zur Sylvester-Gleichung macht. Sobald über die erste Gleichung gefunden wurde, kann leicht aus der zweiten Gleichung gefunden werden. Die zweite Gleichung ist trivial mit einer beliebigen Methode zu lösen.ZBYYT,MMT,MTMβYYTZBZJ

Diese Methode erfordert Vorabkosten für die Vorberechnung von zwei vollständigen SVDs vor dem Start des ADMM-Prozesses, kann jedoch schnell in den tatsächlichen ADMM-Iterationen angewendet werden. Da sich die Methode mit vollständigen SVDs der Beschränkungsmatrizen befasst, ist es angemessen, wenn sie nahe am Quadrat liegen und einen hohen Rang haben. Eine kompliziertere Methode unter Verwendung von SVDs mit niedrigem Rang ist ebenfalls möglich, wird jedoch in einem späteren Abschnitt vorgestellt.

Das Verfahren entwickelt sich wie folgt. Lassen bezeichnet vorberechneten volle Singulärwertzerlegungen und kondensiert die rechte Seite zu sein . Dann wird die erste Gleichung: Multiplizieren durch die orthogonalen Faktoren, um links und rechts und ein neues temporäres Unbekanntes , wird dies weiter

QDQT=YYT,WΣWT=MMT,VTVT=MTM
H
ZBQ(αI+D)QTWβΣ(αI+Σ)1ΣWTZBQDQT=H.
A=WTZBQ
A(αI+D)βΣ(αI+Σ)1ΣAD=WHQT.

Jetzt können wir finden, indem wir das diagonale System lösen : A

((αI+D)I+DβΣ(αI+Σ)1Σ)vec(A)=vec(WHQT).

Nachdem wir gefunden haben , berechnen wir , und wenn wir , lösen wir die zweite Gleichung für , was trivial ist, da wir bereits die Eigenwertzerlegung für .AZB=WAQTZBZJMTM

Die Vorabkosten berechnen zwei symmetrische positive definitive Eigenwertzerlegungen von und , und dann wird die Kosten pro Iteration für eine vollständige Lösung von einer Handvoll Matrix-Matrix-Multiplikationen dominiert, die in der gleichen Größenordnung von liegen Größe wie 1 CG-Subiteration. Wenn die Vorab-Eigenwertzerlegungen zu kostspielig sind, können sie ungenau berechnet werden, indem beispielsweise die Lanczos-Iteration vorzeitig beendet und die größten Eigenvektoren beibehalten werden . Dann kann die Methode eher als guter Vorkonditionierer für CG als als direkter Löser verwendet werden.MTMYYT

Lösungsverfahren, wenn sehr rechteckig sind oder eine Annäherung mit niedrigem Rang habenM,Y

Jetzt wenden wir uns der Lösung oder Vorkonditionierung von wenn entweder a) die Eingabematrizen sehr rechteckig sind - was bedeutet, dass sie viel mehr Zeilen als Spalten haben oder umgekehrt - oder b) sie eine Annäherung mit niedrigem Rang haben. Die folgende Ableitung beinhaltet die umfassende Verwendung der Woodbury-Formel, des Schur-Komplements und anderer ähnlicher Manipulationen.ZJ,ZBM,Y

Wir beginnen mit unserem Schur-Komplementsystem

(αI+βYYT)Iβ2YYTM(αI+βMTM)1MT.

Einige Manipulationen transformieren dieses System in eine symmetrischere Form

(αI+βIMMT+βYYTI)vec(ZB)=(I(I+βαMMT))vec(H).

Jetzt bringen wir die Annäherungen mit niedrigem Rang ein. Sei entweder die reduzierte SVD oder die Annäherung von und niedrigem Rang ( ist ein Platzhalter und ist es nicht gebraucht). Wenn wir diese in unser System einsetzen, erhalten wir die folgende Matrixinverse, die wir anwenden möchten

QD1/2Q2T=YWΣ1/2VT=M
YMQ2
(αI+βIWΣWT+βYYTI)1.

Da es sich bei der zu invertierenden Matrix um eine Aktualisierung der Identität mit niedrigem Rang handelt, besteht die logische Strategie darin, die Woodbury-Formel

(A+UCUT)1=A1A1U(C1+UTA1U)1UTA1.

Es ist jedoch einige Sorgfalt erforderlich, da die niedrigrangigen Teile und nicht orthogonal sind. Um die Woodbury-Formel anzuwenden, sammeln wir beide Updates mit niedrigem Rang in einem einzigen großen Update. So salben und die Woodbury-Formel anwenden, ergibt, IWYI

(1αI+β[IWQI][IΣDY][IΣTQTI])1=αIβα2[IWQI][I(Σ1+βαI)βαQWTβαQTW(D1+βαI)Y]1[IΣTQTI].

Die Kernumkehrung kann durch die blockweise 2x2-Umkehrformel berechnet werden

[ABBTC]1=[(ABC1BT)1A1B(CBTA1B)1C1BT(ABC1BT)1(CBTA1B)1].

Dieser Beitrag ist bereits lang genug, sodass ich die langen Details der Berechnung ersparen werde. Das Endergebnis ist jedoch, dass das Einfügen der erforderlichen Submatrizen in die blockweise Inverse und das Multiplizieren aller Elemente die folgende explizite Form für die gesamte Inverse ergibt

(αI+βIMMT+βYYTI)1=1αIβα2(t11+s11+t12+s12+t21+s21+t22+s22),

wo

t11=αβIWl1WTs11=(QWl1)D11(QTl1WT)t12=αβQh1QTWl1WTs12=(Qh1Wl1)D22(h1QTWT)t21=t12s21=(Qh1W)D22(h1QTl1WT)t22=αβQh1QTIs22=(Qh1W)D22(h1QTWT)D11=αβ(hIIl1)1D22=αβ(Ilh1I)1l=αβΣ1+Ih=αβD1+I.

In dieser Form können wir die Umkehrung anwenden und durch 8 Multiplikationssandwiches für die linke und rechte Matrix finden. Die allgemeine Formel zum Anwenden der Summe der Kronecker-Produkte lautet ZB

((A1B1)+(A2B2)+)vec(C)=vec(B1TCA1+B2TCA2+).

Beachten Sie, dass alle expliziten Inversen, mit denen wir endeten, diagonal sind, sodass nichts "gelöst" werden muss.

Code des linearen Lösers

Ich habe die beiden oben genannten Löser in Matlab implementiert . Die scheinen gut zu funktionieren. Der Solver-Code ist hier.zJ,ZB

https://github.com/NickAlger/MeshADMM/blob/master/zkronsolve.m

Hier finden Sie ein Testskript zur Überprüfung der Funktionsweise der Löser. Es zeigt auch anhand eines Beispiels, wie der Solver-Code aufgerufen wird.

https://github.com/NickAlger/MeshADMM/blob/master/test_zkronsolve.m

Abschließende Bemerkungen

ADMM-Methoden eignen sich gut für solche Probleme, aber Sie müssten Ihre eigene Implementierung rollen. Die Gesamtstruktur der Methode ist ziemlich einfach, so dass die Implementierung in so etwas wie MATLAB nicht allzu schwierig ist.

Das in diesem Beitrag fehlende Teil, das angegeben werden müsste, um die Methode für Ihr Problem vollständig zu definieren, ist eine Auswahl von Strafparametern . Glücklicherweise ist die Methode im Allgemeinen ziemlich robust, solange die Parameterwerte nicht verrückt sind. Das Boyd and Parikh-Papier enthält einen Abschnitt über die Strafparameter sowie die darin enthaltenen Referenzen, aber ich würde nur mit den Parametern experimentieren, bis Sie angemessene Konvergenzraten erhalten.α,β

Die vorgestellten sind sehr effektiv, wenn die Beschränkungsmatrizen entweder a) dicht, quadratisch und hochrangig sind oder b) eine gute Näherung für niedrigen Rang haben. Ein weiterer nützlicher Solver , die ein Thema der zukünftigen Arbeit sein könnte , wäre ein Löser für folgenden Fall optimiert werden - die Beschränkungsmatrix spärlich und squareish und hohen Rang ist, aber es gibt einen guten Vorkonditionierer für . Dies wäre der Fall, wenn beispielsweise ein diskretisierter Laplace ist.ZJ,ZBMαI+MMTM


Implementieren Sie dies jetzt! Um dies zu überprüfen, sollte die Matrixlösung für und symmetrisch / positiv definitiv sein, da sie aus den kleinsten Quadraten stammt, oder? Dies scheint empirisch wahr zu sein :-). Ist CG eine bessere Option als GMRES? ZBZJ
Justin Solomon

Auch denke ich, dass das Update für B falsch ist? Ich arbeite das genauer durch, aber erinnere mich, dass B nicht in meiner Energiefunktion erscheint (kein Term), daher bin ich mir nicht sicher, ob es nur Werte in annehmen sollte Denke ich falsch darüber nach? Vielen Dank! |B|±(11/α).
Justin Solomon

1
[errr eher, ]B=ZBΓB/α
Justin Solomon

3
Tolle! Nachdem ich meine eigenen Formeln für und (wahrscheinlich in der Nähe von dem, was Sie gepostet haben, aber etwas hat nicht funktioniert), übertrifft dies die IRLS-Methode bei weitem. Vielen Dank! B.JB
Justin Solomon

1
Großartige Neuigkeiten. Es ist so schön zu sehen, wann Beiträge hier zu echten Ergebnissen führen.
Michael Grant

5

Sie möchten wahrscheinlich eine matrixfreie Methode für die lineare Programmierung verwenden. Ich kenne keine Methode, die speziell auf lineare Programmierung ausgerichtet ist, aber es gibt matrixfreie Innenpunktmethoden für quadratische Programme und für allgemeine nichtlineare Programme. Der quadratische Programmfall entspricht genau Ihrem Problem, bei dem die quadratischen Formkoeffizienten alle Nullen sind. (Sie können auch Methoden, die exakte lineare Lösungen verwenden, an die Struktur Ihres Problems anpassen, aber diese Art der maßgeschneiderten Implementierung lohnt sich möglicherweise nicht und ist weniger praktisch als die Verwendung einer matrixfreien Methode.)

Ich kenne kein kommerzielles Optimierungspaket, das matrixfreie Varianten von Innenpunktmethoden implementiert. IPOPT soll eine matrixfreie Innenpunktmethode für die nichtlineare Programmierung implementieren, aber ich konnte die API-Aufrufe, mit denen Sie sie verwenden können, nicht aufspüren.

Zusätzlich zu CVX könnten Sie wahrscheinlich GAMS oder AMPL verwenden, um die Matrix einmal einzugeben und Ihre Einschränkungen in der Modellierungssprache einzurichten, um diese Matrix zu verwenden. Die vom Solver-Backend für CVX, GAMS und AMPL verwendeten Methoden verwenden jedoch keine matrixfreien Solver. Alle benötigen die vollständige Koeffizientenmatrix für das lineare Programm in Standardform, die sehr groß sein wird (es wird ein Kronecker-Produkt von Matrizen sein). Was wahrscheinlich passieren wird, ist, dass Sie Ihr lineares Programm in der obigen Form mit der Modellierungssprache eingeben und dann die Modellierungssprache die Daten in eine Form übersetzt, die von Backend-Solvern verwendet werden kann. Dieses Formular erfordert riesige Matrizen, und ich vermute, dass Sie auf die gleichen Arten von Fehlern stoßen werden (es sei denn, Sie laufen auf einem Computer mit genügend Speicher).


Sieht so aus, als hätte ich die richtigen Dinge ausprobiert! Ich habe anfangs mit CVX experimentiert und es ist fehlgeschlagen, also bin ich zu IPOPT gewechselt. Aber IPOPT hatte das gleiche Problem. Mir war nicht bewusst, dass es eine matrixfreie Option gibt, also werde ich sehen, ob ich es herausfinden kann.
Justin Solomon

Ich bin nicht sicher, ob GAMS / AMPL meinem Problem helfen wird. Ich bin froh, das Problem in irgendeiner Form zu codieren, die dem Löser hilft, das Richtige zu tun, aber wie Sie hinter den Kulissen sagen, wird die Aufnahme eines Kronecker-Produkts nicht funktionieren.
Justin Solomon

4

Können Sie sich die erwähnten SVDs leisten, die Geoffrey Irving erwähnt hat? Wenn Sie können, würde ich einen iterativ neu gewichteten Ansatz der kleinsten Quadrate (IRLS) in Betracht ziehen. Dieser Ansatz würde Probleme der Form lösen wobei eine Gewichtsmatrix ist.

minimizeijWijJij2subject toMJ+BY=X
W

Die Iterationen beginnen mit als All-One-Matrix; dies ergibt ein optimales . Die Iterationen werden mit wobei ist eine kleine Konstante, die die Division durch Null verhindert. Ich bin mir über die Konvergenzkriterien nicht ganz sicher, aber vielleicht kann Ihnen der oben angebotene Wikipedia-Link Hinweise geben. J ( 0 ) W ( k + 1 )W(0)J(0)ϵ

Wij(k+1)=|max{Jij(k),ϵ}|1
ϵ

Sie können auch eine geglättete Methode erster Ordnung in Betracht ziehen. TFOCS, das ich mitautorisiert habe, könnte dies mit seinem SCD-Solver (Smoothed Conic Dual) handhaben, aber es wird nicht so einfach zu bedienen sein.

Wenn Sie eine matrixfreie Innenpunktmethode ausprobieren möchten, lesen Sie die Arbeit von Jacek Gondzio.

EDIT: hmm, es kann sein, dass IRLS die SVD nicht zur Berechnung von Lösungen verwenden kann. Wenn ja, würde ich auf eine der anderen Möglichkeiten zurückgreifen.


1
Ich bin mir nicht sicher, ob ich die SVD hier verwenden kann, aber IRLS ist trotzdem eine großartige Idee! Geschwindigkeit ist nicht so wichtig wie Erinnerung, und es ist mir peinlich, dass ich IRLS vor ein paar Monaten für eine verwandte Recherche verwendet habe, und es hat großartig funktioniert (ich habe mich selbst dafür getreten, dass ich das noch nie versucht habe!). Auch ohne die SVD für IRLS sollte dies mit einem linearen Löser wie CG möglich sein, der nicht das gesamte System benötigt. Tatsächlich kann CG wahrscheinlich mit ziemlich lockeren Einschränkungen gestoppt werden, bevor wie Sie vorschlagen. Ich habe auch einen ADMM-Ansatz untersucht, aber ich habe weniger Erfahrung damit. Wij
Justin Solomon

Ja, ADMM wäre auch großartig. Ich habe tatsächlich einen Abschnitt geschrieben, in dem vorgeschlagen wird, Y vollständig zu eliminieren, aber ich habe später gesehen, dass nicht quadratisch ist. M
Michael Grant

1
Implementierung der IRLS-Strategie - sie konvergiert, funktioniert aber numerisch nicht so gut, da das zu lösende lineare System dank einer Vielzahl von schlecht konditioniert ist . Verwenden von GMRES zur Lösung des Systems. Werde es als nächstes mit ADMM versuchen! w
Justin Solomon

2

Sie könnten versuchen, CVX zu verwenden , um es in genau der Form zu codieren, in der Sie es geschrieben haben (dh mit als Matrix anstelle eines Vektors). Es würde wahrscheinlich mit einem allgemeineren konvexen Löser anstelle eines LP-Lösers gelöst werden, aber wenn der konvexe Löser erfolgreich ist, wird es Ihnen wahrscheinlich nichts ausmachen.X

Eine andere Möglichkeit: Verwenden Sie einen Solver, mit dem Ihre Einschränkungsmatrizen als spärliche Matrizen gespeichert werden können. Dies erfordert immer noch viel mehr Speicher als Sie benötigen, aber weit weniger, als wenn Sie sie als dichte Matrizen gespeichert hätten. Wenn Sie in CVX kroneine spärliche Matrix verwenden, ist es trivial, dies zu versuchen.


Wenn Python aus irgendeinem Grund bequemer als MATLAB wäre, dann gibt es auch cvxpy, obwohl es nicht ganz so poliert ist wie cvx.
20.

Mein Verdacht ist, dass dieser Ansatz oberflächlich funktioniert und dann fehlschlägt, nachdem die CVX-Modellierungssprache die Eingabedaten in eine Form umgewandelt hat, die von ihren Backend-Solvern verwendet werden kann (die lineare Programme, quadratische Programme, Kegelprogramme zweiter Ordnung, semidefinite Programme und lösen) geometrische Programme). Ich erkläre in meiner Antwort, warum. Das Gurobi-Backend ist (unter anderem) ein erstklassiger LP-Löser. Daher ist die Verwendung von CVX mit diesem Algorithmus wahrscheinlich das Beste, was Sie in Bezug auf die Implementierung tun können, ohne CVX über eine kompilierte Sprach-API aufzurufen.
Geoff Oxberry

1
Wie Geoff sagt, hilft Ihnen hier keine Modellierungsebene. Auf der resultierenden LP werden die Daten für jeden generischen Standardlöser wiederholt. Um dies zu umgehen, müssen Sie einen Orakel-basierten Löser verwenden (entwickeln), dh einen Löser, der im Wesentlichen auf der Rückgabe des verbleibenden für einen bestimmten Wert von und / oder einigen basiert geeigneter Schnitt, und arbeiten Sie stattdessen mit dieser Beschreibung. J , Y.MJ+BYXJ,Y
Johan Löfberg

Ja, ich habe genau das Problem, das Geoff erwähnt. Tatsächlich habe ich CVX für meine erste Vermutung verwendet. Ich habe auch versucht, Gurobi direkt anzurufen, aber der einzige Weg, den ich mir vorstellen kann, besteht darin, dasselbe Problem beim Abrollen zu lösen.
Justin Solomon

1
Ich denke, Sie müssten Ihre eigenen rollen
Johan Löfberg
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.