Optimal design: Ablaufplanung

Definition

Beim Design von Ablauf­plä­nen (= Sche­du­ling) wird das Ziel ver­folgt, eine Men­ge von unter­i­n­an­der abhän­gi­gen Ver­wen­dun­gen so zu timen, dass der zur Durch­füh­rung aller Auf­ga­ben auf­zu­brin­gen­de Gesamt­auf­wand mini­miert wird.

Bei den Ver­wen­dun­gen kann es sich um indus­tri­el­le Pro­duk­ti­ons­pro­zes­se, Per­so­nal­ein­sät­ze, oder simp­le Raum­be­le­gun­gen han­deln. Illus­tra­tio­nen und Qua­li­täts­kri­te­ri­en für Ablauf­plä­ne sind schon seit dem frü­hen 20.ten Jahr­hun­dert bekannt und die zu die­ser Zeit ent­stan­de­nen Gantt ‑Dia­gram­me wer­den noch immer ver­wen­det. Mit ihnen kön­nen bereits exis­tie­ren­de Ablauf­plä­ne in Form von Bal­ken­dia­gram­men visua­li­siert wer­den, sodass die Kom­mu­ni­ka­ti­on der Plan­in­hal­te und ein even­tu­el­les Trou­ble­shoo­ting ver­ein­facht werden.

Der Ent­wurf von Ablauf­plä­nen geschieht ent­we­der manu­ell nach heu­ris­ti­schen Regeln oder via opti­mie­rungs­al­go­rith­mus. Das nach­fol­gen­de Bei­spiel illus­triert bei­de Vorgehen.

Beispiel: Problemstellung

Eine Maschi­ne habe 4 Jobs \(J_1, …, J_4\) aus­zu­füh­ren. Die­se Jobs ver­brau­chen Res­sour­cen­men­gen \(r_1, …, r_4\) und benö­ti­gen Pro­zes­sie­rungs­zei­ten \(p_1, …, p_4\)

\(p_1\)\(p_2\)\(p_3\)\(p_4\)in Tagen\(r_1\)\(r_2\)\(r_3\)\(r_4\)in Ton­nen
5610121111

Die Kos­ten für die Lage­rung der Res­sour­cen sei direkt pro­por­tio­nal zu gela­ger­ter Res­sour­cen­men­ge und Lager­zeit und soll mini­miert wer­den. Das Pro­blem ist klein und ein­fach zu ana­ly­sie­ren und lösen. Dazu wer­den alle poten­ti­ell mög­li­chen Gantt-Dia­gram­me geplottet.

Abbil­dung 1: Skiz­ze des Pro­duk­ti­ons­pla­nungs­pro­b­le­mes, bei dem 4 Jobs in einer Rei­hen­fol­ge durch­ge­führt wer­den sol­len, die die Lager­hal­tungs­kos­ten für die Res­sour­cen mini­miert (a). Es gibt 4!=4*3*2*1=24 ver­schie­de­ne Abfol­gen, gemäss denen die Jobs ohne Ver­zö­ge­rung aus­ge­führt wer­den kön­nen. Die Lager­hal­tungs­kos­ten \(K\) sind eben­falls auf­ge­lis­tet (b).

Beispiel: Kostenoptimierung

Die Kos­ten \(K\) errech­nen sich als Sum­me von zu lagern­den Res­sour­cen und Lager­dau­ern nach der Gleichung

$$\begin{align} K & = r_1(\text{Lagerungsdauer Res­sour­cen Job1})+ r_2(\text{Lagerungsdauer Res­sour­cen Job2})+… \\ & =\sum_{j=1}^4 r_jC_j \end{align}$$

wobei \(C_j\) der Kom­plet­tie­rungs­zeit­punkt von Job \(j\) ist. Nach Ver­gleich aller Vari­an­ten ergibt sich der bes­te Ablauf­plan als

$$\text{Job}_1 \rightarrow \text{Job}_2 \rightarrow \text{Job}_3 \rightarrow \text{Job}_4 \text{ mit } K=r_1 5+r_2 11+ r_3 21+r_4 33=70. $$

Es lässt sich sogar im All­ge­mei­nen zei­gen [1, p. 131], dass für das obi­ge Sys­tem eine Anord­nung nach auf­stei­gen­den pro­zes­sie­rungs­dau­ern opti­mal ist. Sind die Res­sour­cen­men­gen \(r_1, …, r_n\) nicht alle gleich, so gilt die WSPT rule (weigh­ted shor­test pro­ces­sing time first): die auf­stei­gen­de Anord­nung gemäss der Quo­ti­en­ten \(r_jp_j^{-1}\) ist der opti­ma­le Ablauf und löst das Optimierungsproblem

$$\min_{\text{Ablaufplan}} \sum_{j=1}^n r_jC_j.$$

Verallgemeinerungen

Sind meh­re­re unter­schied­li­che Res­sour­cen, ver­ar­bei­ten­de Maschi­nen, und Neben­be­din­gun­gen vor­han­den oder soll ein ande­res Qua­li­täts­kri­te­ri­um opti­miert wer­den, dann exis­tie­ren mit hoher Wahr­schein­lich­keit kei­ne nach ein­fa­chen Regeln manu­ell kon­stru­ier­ba­ren opti­ma­len Ablauf­plä­ne mehr.

Statt­des­sen muss auf Opti­mie­rungs­al­go­rith­men zurück­ge­grif­fen wer­den. Oft han­delt es sich um gemischt-ganz­zah­li­ge Opti­mie­rungs­pro­ble­me, die aus rechen­tech­ni­scher Sicht schwie­rig zu lösen sind. Ein Lager­hal­tungs­kos­ten mini­mie­ren­der Ablauf­plan für \(n\) Jobs auf \(m\) Maschi­nen kann for­mu­liert wer­den als das Opti­mie­rungs­pro­blem [1, p. 134]

$$\begin{align} \min ~~~& \sum_{i=1}^m \sum_{j=1}^n \sum_{k=1}^nR_{ijk} p_{ij} x_{ikj} && \\ \text{s.t.} ~~~& \sum_{i=1}^m \sum_{k=1}^n x_{ikj}=1 &&j=1, …, n  \\ & \sum_{j=1}^m x_{ikj} \le 1 && i=1, …,m ~ k=1, …, n \\ & x_{ikj}\in \{0,1\} && i=1, …, m ~ k=1, …, n ~ j=1, …, n \end{align}$$

Dabei ist \(p_{ij}\) die Pro­zess­dau­er von Job \(j\) auf Maschi­ne \(i\) und \(x_{ikj}\) eine binä­re Indi­ka­tor­va­ria­ble anzei­gend ob Job \(j\) auf Maschi­ne \(i\) an \(k\)-letzter Stel­le aus­ge­führt wird. Die Neben­be­din­gun­gen garan­tie­ren, dass jeder Job genau ein­mal ver­ge­ben wird. Der Term \(R_{ijk}\) reprä­sen­tiert die Res­sour­cen­men­gen, die zum \(k\)-letzten Zeit­punkt für die Ver­ar­bei­tung auf Maschi­ne \(i\) gela­gert wer­den. Es sind dies die Res­sour­cen­men­gen spä­te­rer Pro­jek­te auf Maschi­ne \(i\) , wel­che über die Zeit­dau­er \(p_{ij}\) gela­gert wer­den müs­sen. Daher gilt:

$$R_{ijk} = \begin{cases} kr ~~~~~~~~~~~\text{ falls } r_1=r_2= … = r_n =:r \\ \sum_{l\le k} x_{ikj}r_j \text{ sonst }\end{cases} $$

Für den Fall unglei­chen Res­sour­cen­ver­brau­ches ist das Opti­mie­rungs­pro­blem nicht­li­ne­ar in den Indi­ka­tor­va­ria­blen \(x_{ikj}\) und kann nur appro­xi­ma­tiv gelöst wer­den z.B. über Rela­xa­tio­nen basie­rend auf semi­de­fi­ni­ter Pro­gram­mie­rung [2].

Beispiel: m Maschinen, n Jobs

ver­wen­den jedoch alle Jobs die glei­chen Res­sour­cen­men­gen, dann ist mit  \(R_{ijk}=kr\) als momen­ta­ne Lager­men­ge auf Maschi­ne \(i\) das Opti­mie­rungs­pro­blem for­mu­lier­bar als linea­re pro­gramm mit  der Zielfunktion

$$ \sum_{i=1}^m\sum_{j=1}^n \sum_{k=1}^nrkp_{ij}x_{ikj}$$

und den­sel­ben Neben­be­din­gun­gen wie oben. Die­ses Pro­blem kann gelöst wer­den z.B. mit dem Sol­ver GLPK [3] für gemischt-ganz­zah­li­ge linea­re Pro­gram­mie­rung.  Wie das nach­fol­gen­de Bei­spiel zeigt, sind die opti­ma­len Resul­ta­te nicht durch intui­ti­ves raten einer Job­ab­fol­ge oder Tabel­lie­rung aller poten­ti­el­len Lösun­gen zu errei­chen. Es sol­len Res­sour­cen­la­ger­kos­ten für 12 Jobs auf 3 Maschi­nen mini­miert wer­den. Die Pro­zess­dau­ern \(p_{ij}\) sind wie folgt

Maschi­ne\ Job123456789101112
111/2211/21/4321/8121
21/2211/21/4321/81211
3211/21/4321/812111/2

Das ent­spre­chen­de linea­re Pro­gramm ist

$$\begin{align} \min ~~~ & q^T \operatorname{vec} (x) \\ \text{s.t.} ~~~ & x^TA=\vec{1} \\ & xG \le \vec{1} \\ & x_{ikj}\in \{0,1\} \end{align} $$

wobei \(q\in \mathbb{R}^{mn^2}, A=[1, …, 1]^T \in \mathbb{R}^{mn}, G=[1, …, 1]^T \in \mathbb{R}^n\). Es ist \(\operatorname{vec}\) der Vek­to­ri­sie­rungs­ope­ra­tor, der Matri­zen zue Vek­to­ren ummo­del­liert. Die Matri­zen und Vek­to­ren sind defi­niert als

$$\begin{align} q & = \operatorname{vec}(Q) ~~~~(Q)_{ikj}=kp_{ij} \\ x & = \begin{bmatrix} x_{111} & \cdots & x_{11n} \\ \vdots & \ddots & \vdots \\ x_{311} & \cdots & x_{31n}\\ x_{121} & \cdots & x_{12n} \\ \vdots & \ddots & \vdots\\ x_{3n1} & \cdots & x_{3nn} \end{bmatrix} \in \mathbb{R}^{mn \times n}\end{align}$$

Beispiel: Lösung

Das Resul­tat (GLPK, 60 ms) ist gege­ben durch die fol­gen­de Matrix und das zuge­hö­ri­ge Gantt-Diagramm.

Abbil­dung 2: Die Matrix \(x\) von Indi­ka­tor­va­ria­blen (a) und der zuger­hö­ri­ge Ablauf­plan (b).

Die Ziel­funk­ti­on nimmt einen Wert an von 9.25. Man ver­glei­che die mit dem zufäl­lig und will­kür­lich gewähl­ten Ablaufplan

Die damit asso­zi­ier­ten Kos­ten betragen 

$$\begin{align} K  =& p_{11}(4)+ p_{12}(3)+p_{13}(2)+p_{14}(1)\\ & +p_{25}(4)+p_{26}(3)+p_{27}(2)+p_{28}(1) \\ & + p_{39}(4)+p_{310}(3)+p_{311}(2)+p_{312}(1) \\& = 4(1+1/4+2)+3(1/2+3+1)+2(2+2+1)+1(1+1/8+1/2) \\ & = 38.125 \end{align} $$

Die­se Kos­ten sind mehr als 4 mal so hoch wie die der opti­ma­len Lösung.

Praktisches

Mit 12 Jobs wäre eine nai­ve Vor­ge­hens­wei­se zur Über­prü­fung aller Job­an­ord­nun­gen bereits schwie­rig. Schon bei nur einer der Maschi­nen wären \(12!\approx 500 000 000 \) Anord­nun­gen expli­zit auf­zu­lis­ten und hin­sicht­lich ihrer Beschrän­kun­gen und ihres Res­sour­cen­ver­brauchs zu eva­lu­ie­ren. Bei drei Maschi­nen sind es mehr als \(10^16\), was die Gren­zen nor­ma­ler Office­com­pu­ter bereits sprengt.

Es exis­tie­ren diver­se ande­re Neben­be­din­gun­gen und Ziel­funk­tio­nen. Typisch sind [1, pp. 14–20]

  • Maschi­nen­set­ups: Ein­zel­ma­schi­ne, iden­ti­sche Maschi­nen, Maschi­nen mit unter­schied­li­cher Arbeits­ge­schwin­dig­keit, Unab­hän­gi­ge Maschi­nen, Flow Job, Job Shop, …
  • Neben­be­din­gun­gen: Unter­brech­bar­keit von Jobs, Abfol­ge­be­din­gun­gen, Setup­zei­ten, War­te­zei­ten, Dead­lines, Job­grup­pen, Maschi­nen­ein­schrän­kun­gen, Stapelprozessierung, .…
  • Ziel­funk­tio­nen: Sum­me der Kom­plet­tie­rungs­zei­ten, Pro­zes­sie­rungs­en­de Ein­hal­tung Dead­lines, Verspätungssumme, …
Für vie­le der obi­gen Kom­bi­na­tio­nen ist es nicht ein­fach, sie als gemischt-gaz­z­ah­li­ges Pro­gramm zu for­mu­lie­ren und zu lösen. Dafür kön­nen mit der mathe­ma­ti­schen Ablauf­pla­nung Pro­ble­me bear­bei­tet wer­den, die der hän­di­schen Pla­nung aus Kom­ple­xi­täts­grün­den nicht zugäng­lich sind.

Code & Quellen

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

[1] Pine­do, Micha­el L. (2016). Sche­du­ling: Theo­ry, Algo­rith­ms, and Sys­tems. Ber­lin, Hei­del­berg: Springer.

[2] Ban­sal, N., Sri­ni­va­san, A., & Svens­son, O. (2016). Lift-and-round to impro­ve weigh­ted com­ple­ti­on time on unre­la­ted machi­nes. Pro­cee­dings of the for­ty-eighth annu­al ACM sym­po­si­um on Theo­ry of Com­pu­ting. Asso­cia­ti­on for Com­pu­ting Machi­nery, New York, NY, USA, 156–167.

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