Methoden: Mixed integer Programming

Definition

Sobald ein Opti­mie­rungs­pro­blem Neben­be­din­gun­gen betref­fend die Ganz­zah­lig­keit von Varia­blen auf­weist, spricht man von einem Inte­ger pro­gram. Die Ganz­zah­lig­keits­for­de­rung an eine Varia­ble \(x_1\) wird geschrie­ben als \(x_1 \in \mathbb{Z}\) wobei \(\mathbb{Z}\) die Men­ge aller gan­zen Zah­len ist. 

Sind wei­ter­hin noch ande­re Neben­be­din­gun­gen invol­viert, so spricht man von einem Mixed inte­ger Pro­gram (MIP). Je nach Form der Ziel­funk­ti­on \(f\) und der zuläs­si­gen Men­ge \(D\) im Optimierungsproblem

$$ \begin{align} \min_x ~~~& f(x) \\ \text{s.t.}
~~~&x \in D \\ ~~~& x_1, …, x_m\in \mathbb{Z} \end{align}$$

von MILP, MIQP, MISDP, usw. Die klas­si­schen Opti­mie­rungs­pro­ble­me kön­nen mit For­de­run­gen nach Ganz­zah­lig­keit ange­rei­chert wer­den, um sie expres­si­ver zu machen.

Beispiel 1

Sei­en \(x_1, x_2 \) die Men­gen zwei­er Pro­duk­te mit Her­stel­lungs­kos­ten von respek­ti­ve \(c_1\) und \(c_2\). Die Bedin­gun­gen, dass Ihre Sum­me den Bedarf von 2 decken soll und \(x_1, x_2\) nur in dis­kre­ten Men­gen pro­du­zier­bar sind, las­sen sich über­set­zen in das Optimierungsproblem

$$ \begin{align} \min_x ~~~& c_1x_1+c_2x_2 \\ \text{s.t.}
~~~&x_1 \ge 0 ~~~ x_2 \ge 0 \\  ~~~& x_1+x_2=2\\~~~& x_1, x_2\in \mathbb{Z} \end{align}$$

in der Opti­mie­rungs­va­ria­blen \(x\). Die­se Varia­ti­on des arche­ty­pi­schen Pro­duk­ti­ons­plan­bei­spie­les ist nahe­zu tri­vi­al: Die zuläs­si­ge Men­ge besteht aus den drei Ele­men­ten \([0,2], [1,1], [2,0]\) und lässt sich leicht hin­sicht­lich ihres maxi­mums unter­su­chen. In dem Fall hat die Inklu­si­on der Ganz­zah­lig­keit das Opti­mie­rungs­pro­blem ein­fa­cher gemacht. Doch das ist bei wei­tem nicht immer so.

Beispiel 2

Ein wei­te­res Bei­spiel zeigt, dass Ganz­zah­lig­keit eine uner­war­tet fle­xi­ble Neben­be­din­gung ist. Sei die Situa­ti­on wie in Bei­spiel 1;  aller­dings ohne die Bedin­gun­gen \(x_1\in \mathbb{Z}, x_2\in \mathbb{Z}\). Statt­des­sen soll min­des­tens eine der ver­trag­li­chen Bedin­gun­gen \(x_1 \le 1.5\) oder \(x_2\ge 1.5\) gewähr­leis­tet sein. Dies lässt sich for­mu­lie­ren als MILP

$$ \begin{align} \min_x ~~~& c_1x_1+c_2x_2 \\ \text{s.t.}
~~~&x_1 \ge 0 ~~~ x_2 \ge 0 \\  ~~~& x_1+x_2=2\\~~~& x_1 ‑M_1y_1 \le 1.5 ~~~~~~~~~~~~~~ M_1 \text{ Ober­gren­ze für } x_1 \\ ~~~& ‑x_2 ‑M_2y_2 \le ‑1.5 ~~~~~~ M_2 \text{ Ober­gren­ze für } ‑x_2 \\ ~~~& y_1+y_2=1 ~~~~ y_1,y_2\in \{0,1\}  \end{align}$$

in den Opti­mie­rungs­va­ria­blen \(x\) und \(y\). Dabei ist \(y=[y_1,y_2]\) ent­we­der \([0,1]\) oder \([1,0]\) und indi­ziert, wel­che der bei­den ver­trag­li­chen Neben­be­din­gun­gen gewähr­leis­tet sein soll.

Abbil­dung 1: Geo­me­tri­sche Inter­pre­ta­ti­on eines LP’s bei dem Neben­be­din­gun­gen optio­nal aber logisch gekop­pelt sind. Muss eine von zwei Neben­be­din­gun­gen erfüllt sein, so ist die Lösung des LP das Mini­mum zwei­er LP.

Anwendungen

Die For­de­rung nach Ganz­zah­lig­keit ist ein uner­war­tet fle­xi­bles Kri­te­ri­um. Wie im obi­gen Bei­spiel gezeigt, kön­nen mit ihrer Hil­fe logisch gekop­pel­te Neben­be­din­gun­gen for­mu­liert wer­den [1, p. 6]. Mit den logi­schen Ato­men UND sowie ODER und deren Kom­bi­na­tio­nen kön­nen gan­ze Ent­schei­dungs­bäu­me in Opti­mie­rungs­pro­ble­me ein­ge­bet­tet wer­den. Ganz­zah­li­ge Opti­mie­rung stellt daher auch eine Grund­la­ge der For­mu­lie­rung von Lösbarkeitsproblemen.

Wei­ter­hin sind nicht­li­nea­re Ter­me in Opti­mie­rungs­pro­ble­men dar­stell­bar als linea­re Ter­me mit Ganz­zah­lig­keits­be­din­gun­gen [2, pp. 396–396].

Abbil­dung 2: Nicht­li­nea­re Funk­tio­nen kön­nen mini­miert wer­den, indem ihre linea­re Appro­xi­ma­tio­nen in ein MILP ein­ge­bet­tet wer­den. Die Anzahl der ste­ti­gen und ganz­zah­li­gen Varia­blen wächst dabei mit der Zahl der Stützstellen.

Es ist klar, dass ein For­ma­lis­mus zur Dar­stel­lung und Lösung von Pro­ble­men dis­kre­ter, logi­scher, und nicht­li­nea­rer Natur vie­le Anwen­dun­gen hat. Sie sind unter ande­rem zu fin­den bei opti­ma­len Steue­rungs­pro­ble­men mit dis­kre­ten Input­mög­lich­kei­ten wie etwa der Rege­lung von bestands­ab­hän­gi­gem Fische­rei­be­trieb, Super­markt­kühl­ket­ten, Flug­zeug­steue­rungs­in­puts, und Kol­li­si­ons­ver­mei­dung. Eben­so tre­ten sie auf bei opti­ma­len Design­pro­ble­men mit dis­kre­tem Cha­rak­ter wie Trans­port­netz­werk­de­sign, Fah­zeug­rou­ting, Güter­fluss­steue­rung, Fabrik­lay­out, räum­li­cher Anord­nung von Infra­struk­tur, Test­rei­hen­fol­ge und Expe­ri­ment­ende­sign, Spei­cher­platz­ma­nage­ment, und logi­schen Mach­bar­keits­pro­ble­men. Mehr Infor­ma­tio­nen sind hier zu finden.

Lösungsverfahren

Obwohl ganz­zah­li­ge Opti­mie­rungs­pro­ble­me im All­ge­mei­nen sehr schwie­rig sind, gibt es exak­te Lösungs­me­tho­den wie den branch-and-cut Algo­rith­mus, die in der Pra­xis hin­rei­chend leis­tungs­fä­hig erschei­nen. Die Lösungs­me­tho­den beru­hen auf der Kon­struk­ti­on einer Baum­struk­tur von appro­xi­ma­ti­ven LP’s mit einer zuneh­men­den Anzahl an linea­ren Neben­be­din­gun­gen, deren Kom­bi­na­ti­on die Ganz­zah­lig­keits­be­din­gun­gen erzwin­gen [2, pp. 396–413].

Die­se Baum­struk­tur kann effi­zi­ent durch­sucht wer­den mit­tels einer Kom­bi­na­ti­on aus Tie­fen­su­che und der Auf­ga­be der­je­ni­gen Baum­be­stand­tei­le, die nach­weis­lich zu schlech­te­ren Lösungs­vor­schlä­gen füh­ren als vor­gän­gig bereits eva­lu­ier­te. Bei­spiel für die Imple­men­ta­ti­on eines sol­chen Lösungs­al­go­rith­mus ist das GNU line­ar pro­gramming KIT mit der GLPK_MI Rou­ti­ne [3].

Praktisches

Ganz­zah­li­ge Opti­mie­rungs­pro­ble­me sind nicht immer in ange­mes­se­ner Zeit lös­bar. Sie gehö­ren zu den aus­drucks­fä­higks­ten aber auch schwers­ten Pro­ble­men, die der Mathe­ma­tik und Infor­ma­tik bekannt sind [4]. Von einem empi­ri­schen Stand­punkt aus gese­hen funk­tio­nie­ren sie jedoch häu­fig gut genug für prak­ti­sche Pro­ble­me, wel­che weni­ge Tau­send ganz­zah­li­ge Varia­blen nicht über­schrei­ten. Dies ist prmär eine Fra­ge der Problemstruktur.

Eini­ge Pro­blem­for­mu­lie­run­gen sind ein­fach zu inter­pre­tie­ren, da sie als Opti­mie­rungs­va­ria­blen ganz­zah­li­ge dis­kre­te Objek­te ent­hal­ten. Oft jedoch müs­sen nicht­li­nea­re Ter­me oder logi­sche Kon­struk­te in Neben­be­din­gun­gen über­setzt wer­den. Dies erfor­dert Zeit, Erfah­rung, und ist nicht immer möglich.

Code & Quellen

Bei­spiel­code: Methods_milp.py in unse­rem Tuto­ri­al­fol­der

[1] Appa, G. M., Pitsou­lis, L., & Wil­liams, H. P. (2006). Hand­book on Model­ling for Dis­crete Optimi­zation. Ber­lin, Hei­del­berg: Springer.

[2] Van­der­bei, Robert J. (2013). Line­ar Pro­gramming: Foun­da­ti­ons and Exten­si­ons. USA: Sprin­ger US.

[3] GNU Line­ar Pro­gramming Kit: https://www.gnu.org/software/glpk/

[4] Pad­berg, M. (2005). Clas­si­cal Cuts for Mixed-Inte­ger Pro­gramming and Branch-and-Cut. Annals of Ope­ra­ti­ons Rese­arch, 139, 321–352.