Theorie: Numerik und solver

Definition

Die Nume­rik beschöf­tigt sich mit der algo­rith­mi­schen rech­ner­ge­stütz­ten Lösung kon­kre­ter Pro­ble­me der ange­wand­ten Mathe­ma­tik. Die in der Nume­rik ent­wor­fe­nen Algo­rith­men füh­ren aus­ge­hend von stan­dar­di­sier­ten Pro­blem­for­mu­lie­run­gen in end­lich vie­len Schrit­ten zu einer appro­xi­ma­ti­ven Lösung.

Die Imple­men­ta­ti­on eines Algo­rith­mus zur Lösung von Opti­mie­rungs­pro­ble­men in Form von aus­führ­ba­rem Pro­gramm­code wird sol­ver genannt.

Unstrukturierte Ansätze
0‑ter Ordnung

Lösungs­al­go­rith­men für Pro­ble­me der Form \(\min_x f(x) : x \in D\) sol­len dem­nach eine Fol­ge \(x_1, …, x_m \in D\) von Punk­ten gene­rie­ren, sodass \(f(x_m) — f(x^*) \le \epsilon\) wobei \(x^*\) das wah­re Opti­mum und \(\epsilon\) eine klei­ne posi­ti­ve Zahl ist, wel­che die Min­dest­ge­nau­ig­keit der appro­xi­ma­ti­ven Lösung \(x_m\) vorschreibt.

Der Lösungs­al­go­rith­mus benö­tigt dazu Zugriff auf die Ziel­funk­ti­on \(f\) und die Neben­be­din­gun­gen \(D\). Im all­ge­meins­ten Fall sind kei­ne glo­ba­len struk­tu­rel­len Infor­ma­tio­nen bekannt und es kön­nen ledig­lich kon­kre­te Funk­ti­ons­wer­te \(f(x_1), …, f(x_m)\) bereit­ge­stellt wer­den. Mit die­sen spär­li­chen Infor­ma­tio­nen benö­tigt man für eine appro­xi­ma­ti­ve Lösung \(x_m\) mit \(f(x_m)-f(x^*)\le \epsilon\) min­des­tens [1, p. 11]

$$m \ge \left(\frac{L}{2 \epsilon} ‑1 \right)^n $$

Opti­mie­rungs­schrit­te wobei \(n\) die Anzahl an dimen­sio­nen der Opti­mie­rungs­va­ria­ble \(x\) und \(L\) eine obe­re Schran­ke für die Ablei­tung von \(f\) ist. Die Glei­chung zeigt, dass die Auf­fin­dung des opti­ma­len \(x^*\) durch sys­te­ma­ti­sches Aus­pro­bie­ren ver­schie­de­ner \(x\) ein hoff­nungs­lo­ses Unter­fan­gen ist: Schon für ein \(x\) mit 10 Kom­po­nen­ten bräuch­te eine han­dels­üb­li­cher Com­pu­ter meh­re­re Mil­lio­nen Jah­re und jede wei­te­re Dimen­si­on ver­hun­dert­facht die­se Zeit­dau­er [1, p. 12].

Unstrukturierte Ansätze
1‑ter und 2‑ter Ordnung

Sind neben dem Funk­ti­ons­wert \(f\) an den Stel­len \(x_1, x_2, …\) auch der Vek­tor \(\nabla f\) ers­ter Ablei­tun­gen (=Gra­di­ent) und die Matrix \(\Delta f\) zwei­ter Ablei­tun­gen (Hes­se Matrix) ver­füg­bar, so ver­rin­gert sich die Anzahl benö­tig­ter Opti­mie­rungs­schrit­te erheb­lich. Gra­di­en­ten­ba­sier­te Verfahren

$$ x_{k+1} = x_k — \alpha \nabla f(x_k)~~~~~~k=0, 1, … ~~~~~\alpha >0 \text{ Schrittweite}$$

oder das New­ton Verfahren

$$ x_{k+1}= x_k — \Delta f^{-1}\nabla f ~~~~~~k=0, 1, …$$

haben typi­scher­wei­se linea­re respek­ti­ve qua­dra­ti­sche Kon­ver­genz­ra­ten [1, p. 37]. Das bedeu­tet, dass bei jedem Opti­mie­rungs­schritt die Anzahl kor­rek­ter Dezi­mal­stel­len von \(x_k\) um eine kon­stan­ten Betrag anwächst respek­ti­ve sich ver­dop­pelt. Das mit rei­nen Funk­ti­ons­wer­ten \(f(x_1), f(x_2), … \) nur im Rah­men von Jahr­mil­lio­nen lös­ba­re Pro­blem ist mit dem New­ton Ver­fah­ren inner­halt weni­ger Mil­li­se­kun­den gelöst.

Abbil­dung 1: Nume­ri­sche Lösung der Pro­ble­me \(\min_x x^2:x \in [-1,1]\) und \( \min_{x,y} x^2+y^2: [x,y]\in [0,1]^2\) mit drei Ver­fah­ren. Die Anzahl an benö­tig­ten Opti­mie­rungs­schrit­ten sinkt mit der ver­füg­ba­ren Information.

Kegelformulierungen

Je mehr also über die zu mini­mie­ren­de Funk­ti­on \(f\) bekannt ist, des­to schnel­ler und zuver­läs­si­ger funk­tio­niert die Opti­mie­rung. Es hat sich gezeigt, dass Infor­ma­tio­nen am bes­ten in Form von Kegel­be­din­gun­gen for­mu­liert wer­den, sodass sämt­li­che Nicht­li­nea­ri­tä­ten in die Neben­be­din­gun­ge \(x \in \mathcal{C}\) ein­ge­bet­tet wer­den, wobei \(\mathcal{C}\) ein kon­ve­xer Kegel ist. Das Optimierungsproblem

\begin{align} \min_x & \langle x, c \rangle \\ \text{s.t.}& Ax = b \\ & x \in \mathcal{C} \end{align}

heisst Kegel­pro­gramm und es konn­te bewie­sen wer­den, dass jedes kon­ve­xe Opti­mie­rungs­pro­blem auf die obi­ge Wei­se geschrie­ben wer­den kann [2, p. 60].

Abbil­dung 2: 3 ver­schie­de­ne Kegel, die in der Opti­mie­rung häu­fig vor­kom­men. Der nicht­ne­ga­ti­ve Ort­hant, der Kegel zwei­ter Ord­nung und der Kegel posi­tiv semi­de­fi­ni­ter Matrizen.

Lösungsverfahren

Die Klas­se der Kegel­pro­gram­me ist dem­nach extrem expres­siv. Ein wei­te­rer Vor­teil besteht dar­in, dass vie­le Kegel­pro­gram­me (unter ande­rem LP, QP, QCQP, SOCP, SDP) effi­zi­ent gelöst wer­den können.

Dazu wer­den die Neben­be­din­gun­gen ersetzt durch log­arith­mi­sche Bar­rie­re­funk­tio­nen, wel­che am Rand der zuläs­si­gen Men­ge gegen \( \infty\) stre­ben und eine Fol­ge von gegen das ursprüng­li­che Pro­blem kon­ver­gie­ren­de Pro­ble­men ohne Neben­be­din­gun­gen wird gelöst. Die Anzahl von Rechen­schrit­ten in den resul­tie­ren­den Ver­fah­ren hängt poly­no­mi­al ab von der Dimen­si­on \(n\) des Pro­b­le­mes und nicht mehr expo­nen­ti­ell [2, pp. 288–297].

Um zer­ti­fi­zier­bar kor­rek­te Lösun­gen zu gene­rie­ren, wer­den ursprüng­li­ches und dua­les Pro­blem gleich­zei­tig gelöst, indem z.B. beim SDP das pri­mal-dua­le Paar von Optimierungsproblemen

\begin{align} P ~~~ \min_X & \langle C,X\rangle_F \hspace{5cm}D ~~~ &\max_{y,S} & \langle b,y\rangle \\ \text{s.t.}& \langle A_k^T,X\rangle_F ~~~ k=1, …, m_1 &\text{s.t.}& \sum_{k=1}^{m_1} y_kA_k+S=C \\ & X\succeq 0 &&S \succeq 0 \end{align}

gleich­zei­tig gelöst wird. Dabei ist \(\langle C,X\rangle_F= \sum_{k=1}^n\sum_{l=1}^n C_{kl}X_{kl}\). Die Mini­mie­rung des dua­li­ty gaps \(\langle C,X \rangle_F — \langle b,y\rangle=\langle X,S\rangle_F\) erfolgt dann mit Hil­fe der am Rand der posi­tiv semi­de­fi­ni­ten Kegels gegen \(\infty\) stre­ben­den log­arith­mi­schen Bar­rie­re­funk­ti­on $-(\log \det X + \log \det S)=-\log \det (XS)\) füh­rend auf das Opti­mie­rungs­pro­blem [3, p. 13]

\begin{align} \min_{X,y,S} ~~~&\langle X, S\rangle_F — \mu \log \det(XS) \\ \text{s.t.} ~~~ & \langle A_k^T, X\rangle_F = b_k ~~~~~ k=1, … , m_1 \\ & \sum_{k=1}^{m_1} y_k A_k + S =C ~~~~~~~~.\end{align}

Die­ses muss gelöst wer­den für eine abfal­len­de Fol­ge von Wer­ten für \(\mu\).

Algorithmus

Der kon­kre­te Algo­rith­mus voll­zieht star­tend bei zuläs­si­gen pri­ma­len und dua­len Varia­blen \(X^0,S^0, y^0\) die fol­gen­den Schrit­te bis zur Kon­ver­genz [3, p. 118].

\begin{align}  X_{k+1}&= X_k+\Delta X ~~~~~~ &&\Delta X= \mu_k S_K^{-1} ‑X_k — D\Delta S D \\ S_{k+1}&= S_K+\Delta && \Delta S=\sum_{k=1}^{m_1} \Delta y_k A_k \\ y_{k+1} &=y_k+\Delta y && \Delta y = Q^{-1} g\\  \mu_{k+1}&= \alpha \mu_k && 0<\alpha<1  \end{align}

Dabei sind \((Q)_{kl}=\langle D^T A_k^T, A_l D\rangle_F\), \( g= \mu \langle A_k^T, S_k^{-1}\rangle_f-b_k\) und \( D=S_k^{-1/2}(S_k^{1/2}XS_k^{1/2}(^{1/2}S_k^{-1/2}\). Wie aus den Glei­chun­gen ersicht­lich, müs­sen teils gros­se Matri­zen geformt und inver­tiert wer­den. Dies ist rechen­in­ten­siv aber von moder­nen Rech­nern auch für tau­sen­de Varia­blen pro­blem­los durch­führ­bar. Da LP, QP, … nur spe­zi­el­le Instan­zen von SDP sind, ist der hier vor­ge­stell­te Opti­mie­rungs­al­go­rith­mus recht reprä­sen­ta­tiv für das Vor­ge­hen bei ande­ren Pro­ble­men als nur der semi­de­fi­ni­ten Optimierung.

Solverliste

Neben eini­gen kom­mer­zi­el­len sol­vern gibt es auch öffent­lich und kon­sten­frei zugäng­li­che open source sol­ver. Aus Per­for­mance­grün­den sind sie oft in der Pro­gram­mier­spra­che C geschrie­ben. Beson­ders her­vor­he­ben möch­ten wir hier das Model­lie­rungs­frame­work CVXPY [4] für kon­ve­xe Opti­mie­rungs­pro­ble­me. Es ist zwar sel­ber kein sol­ver, bie­tet aber eine ein­heit­li­che Schnitt­stel­le zu einer Viel­zahl von sol­vern und eine auto­ma­ti­sier­te Gram­ma­tik zur For­mu­lie­rung kon­ve­xer Probleme.

Sol­ver­na­meLizenzFähig­kei­tenOrga­ni­sa­ti­on / Referenz
CVXOPTGNU GPLLP, QP, SOCP, SDPStan­ford CO Group
ECOSGNU GPL‑3.0SOCPEmbo­tech GmbH
GLPKGNU GPLLP, MILPMoscow Avia­ti­on Institute
MDP­tool­boxBSD‑3DPSte­ven Cordwell
OR toolsApa­che 2.0LP, MILPGoog­le
SCIPZIB Aca­de­mic LicenseLP, MILP, MINLP, CIPZuse Insti­tut Berlin
sci­pyBSDLP, Black­boxsci­py python package
SCSMITLP, SOCP, SDP, ECP, PCPStan­ford CO Group
CPlexkom­mer­zi­ellLP, QP, non­con­vex QP, SOCP, MIQP, MISOCPIBM
Guro­bikom­mer­zi­ellLP, MILP, QP, MIQP, QCP, MIQCPGuro­bi
Mosekkom­mer­zi­ellLP, QP, SOCP, SDP, MINLPMosek

LP = Line­ar Pro­gram, QP = Qua­dra­tic pro­gram, QCP = Qua­dra­ti­cal­ly cons­train­ted pro­gram, SOCP = Second order cone pro­gram,  SDP = Semi­de­fi­ni­te pro­gram, ECP =  Expo­nen­ti­al cone pro­gram, PCP = Power cone pro­gram, CIP = Cons­traint inte­ger pro­gram, DP = Dyna­mic pro­gramming, MI = Mixed inte­ger, NLP = Non­line­ar program

Quellen

[1] Nes­terov, Y. (2013). Intro­duc­to­ry Lec­tures on Con­vex Optimi­zation: A Basic Cour­se. Ber­lin Hei­del­berg: Sprin­ger Sci­ence & Busi­ness Media.

[2] Nes­terov, Y., & Nemi­rovs­kii, A. (1994). Inte­ri­or-point Poly­no­mi­al Algo­rith­ms in Con­vex Pro­gramming. Phil­adel­phia: SIAM.

[3] De Klerk, E. (2006). Aspects of Semi­de­fi­ni­te Pro­gramming: Inte­ri­or Point Algo­rith­ms and Sel­ec­ted Appli­ca­ti­ons. Ber­lin Hei­del­berg: Sprin­ger Sci­ence & Busi­ness Media.

[4] Dia­mond S., & Boyd S., (2016). CVXPY: A Python-embedded mode­ling lan­guage for con­vex optimi­zation. Jour­nal of Machi­ne Lear­ning Rese­arch, 17(83), 1–5.