Przejdź do treści
Sasni
Wróć

Badania operacyjne: Zagadnienia transportowe + Solver

Zaktualizowano:

Olśniło mnie kiedyś i rozwiązałem takie jedno przykładowe zadanie od A do Z. Postanowiłem wiec zamieścić je dla potomnych bo mi już nie będzie potrzebne. Sesja Zaliczona!!!


Trzy magazyny: M1,M2,M3M_1, M_2, M_3, zaopatrują w mąkę cztery piekarnie: P1,P2,P3,P4P_1, P_2, P_3, P_4. Jednostkowe koszty transportu (w zł za tonę), oferowane miesięczne wielkości dostaw AiA_i (w tonach) oraz miesięczne zapotrzebowanie piekarń BjB_j (w tonach) podano w tabeli poniżej.

Tabela 1

Magazyny / PiekarnieP1P2P3P4Podaż (Ai)
M15040502070
M24080703050
M36040708080
Popyt (Bj)40605050200

Należy opracować plan przewozu mąki z magazynów do piekarń, minimalizujący całkowite koszty transportu.

i=13Ai=j=14Bj=200t\displaystyle \sum\limits_{i=1}^{3} A_i = \sum\limits_{j=1}^{4} B_j = 200 t

Oznacza to, że mamy do czynienia z zagadnieniem transportowym zamkniętym (ZTZ).

Zmienne decyzyjne xijx_{ij} oznaczają ilość ton mąki, jaka powinna być dostarczona z ii-tego magazynu (i=1,2,3i=1,2,3) do jj-tej piekarni (j=1,2,3,4j=1,2,3,4); jest ich 3×4=123 \times 4 = 12. Ponieważ jest to zagadnienie transportowe zamknięte (zbilansowane), dostawcy sprzedadzą całą ilość oferowanego towaru, a zapotrzebowania piekarń zostaną w całości zaspokojone.


Ograniczenia dla dostawców

Suma wielkości dostaw mąki z magazynu MiM_i do wszystkich piekarń powinna być równa podaży magazynu:

x11+x12+x13+x14=j=14x1j=70x21+x22+x23+x24=j=14x2j=50x31+x32+x33+x34=j=14x3j=80\begin{array}{rcl} x_{11} + x_{12} + x_{13} + x_{14} = \displaystyle\sum_{j=1}^{4} x_{1j} &=& 70 \\[4pt] x_{21} + x_{22} + x_{23} + x_{24} = \displaystyle\sum_{j=1}^{4} x_{2j} &=& 50 \\[4pt] x_{31} + x_{32} + x_{33} + x_{34} = \displaystyle\sum_{j=1}^{4} x_{3j} &=& 80 \end{array}

Ograniczenia dla odbiorców

Suma dostaw mąki otrzymanych przez piekarnię PjP_j ze wszystkich trzech magazynów powinna być równa całkowitemu jej zapotrzebowaniu:

x11+x21+x31=i=13xi1=40x12+x22+x32=i=13xi2=60x13+x23+x33=i=13xi3=50x14+x24+x34=i=13xi4=50\begin{array}{rcl} x_{11} + x_{21} + x_{31} = \displaystyle\sum_{i=1}^{3} x_{i1} &=& 40 \\[4pt] x_{12} + x_{22} + x_{32} = \displaystyle\sum_{i=1}^{3} x_{i2} &=& 60 \\[4pt] x_{13} + x_{23} + x_{33} = \displaystyle\sum_{i=1}^{3} x_{i3} &=& 50 \\[4pt] x_{14} + x_{24} + x_{34} = \displaystyle\sum_{i=1}^{3} x_{i4} &=& 50 \end{array}

Dodatkowe warunki brzegowe (nieujemności)

xij0dla i=1,2,3oraz j=1,2,3,4x_{ij} \ge 0 \quad \text{dla } i=1,2,3 \quad \text{oraz } j=1,2,3,4

Minimalizacja łącznych kosztów transportu – Funkcja Celu

K(xij)=50x11+40x12+50x13+20x14+40x21+80x22+70x23+30x24+60x31+40x32+70x33+80x34min\begin{array}{rcl} K(x_{ij}) &=& 50x_{11} + 40x_{12} + 50x_{13} + 20x_{14} \\ &+& 40x_{21} + 80x_{22} + 70x_{23} + 30x_{24} \\ &+& 60x_{31} + 40x_{32} + 70x_{33} + 80x_{34} \to \min \end{array}

albo prościej:

F(x)=i=13j=14cijxijminF(x) = \displaystyle \sum_{i=1}^{3}\sum_{j=1}^{4} c_{ij} x_{ij} \to \min

gdzie cijc_{ij} to jednostkowe koszty transportu z tabeli 1.

Dla tak sformułowanego modelu wyznaczamy początkowe rozwiązanie dopuszczalne – przykładowo za pomocą dwu wybranych metod.


Metoda kąta północno-zachodniego

Polega na tym, że wypełnienie macierzy przewozów [xij][x_{ij}] rozpoczyna się od klatki w lewym górnym rogu (stąd nazwa kąta północno-zachodniego). Wpisuje się do niej mniejszą z liczb (A1,B1)(A_1, B_1) odpowiadających tej klatce, a następnie przesuwa się w prawo lub w dół:

W rozpatrywanym przykładzie do klatki M1,P1M_1, P_1 wpisujemy 40 t40\text{ t} (x11=40x_{11} = 40) i przesuwamy się w prawo (ponieważ zapotrzebowanie piekarni P1P_1 zostało zaspokojone, a magazynowi M1M_1 zostało jeszcze 30 t30\text{ t}, które dostarczy do piekarni P2    x12=30P_2 \implies x_{12} = 30).

Obecnie przesuwamy się w dół – do magazynu M2M_2, który dostarczy brakujące 30 t30\text{ t} mąki do piekarni P2P_2 (x22=30x_{22} = 30) i pozostałe 20 t20\text{ t} mąki do piekarni P3P_3 (x23=20x_{23} = 20).

Przesuwamy się powtórnie w dół do magazynu M3M_3, który dostarczy brakujące 30 t30\text{ t} mąki do piekarni P3P_3 (x33=30x_{33} = 30) i pozostałe 50 t50\text{ t} mąki do piekarni P4P_4 (x34=50x_{34} = 50).

Uwaga: W tym przykładzie ani razu popyt i podaż nie wyczerpały się jednocześnie, więc degeneracja nie wystąpiła. Rozwiązanie bazowe ma 3+41=63 + 4 - 1 = 6 niezerowych przewozów — tyle, ile powinno.

Magazyny / PiekarnieP1P2P3P4Podaż (Ai)
M1403070
M2302050
M3305080
Popyt (Bj)40605050200

Rozwiązaniu temu odpowiadają następujące koszty transportu:

K1=40×50+30×40+30×80+20×70+30×70+50×80=2000+1200+2400+1400+2100+4000=13100 zł\begin{array}{rcl} K_1 &=& 40 \times 50 + 30 \times 40 + 30 \times 80 + 20 \times 70 + 30 \times 70 + 50 \times 80 \\ &=& 2000 + 1200 + 2400 + 1400 + 2100 + 4000 \\ &=& 13\,100 \text{ zł} \end{array}

Metoda minimalnego elementu macierzy (klatek zerowych)

Polega na rozmieszczaniu przewozów przede wszystkim po tych trasach, na których koszty są najmniejsze. Punktem wyjścia jest przekształcenie macierzy kosztów do takiej postaci, by w każdym wierszu i w każdej kolumnie występowało co najmniej jedno zero.

Można to uzyskać:

  1. Odejmując od elementów poszczególnych wierszy macierzy kosztów najmniejszy element znajdujący się w danym wierszu:
[504050204080703060407080]203040    [302030010504002003040]\begin{bmatrix} 50 & 40 & 50 & 20 \\ 40 & 80 & 70 & 30 \\ 60 & 40 & 70 & 80 \end{bmatrix} \begin{matrix} \xrightarrow{-20} \\ \xrightarrow{-30} \\ \xrightarrow{-40} \end{matrix} \implies \begin{bmatrix} 30 & 20 & 30 & 0 \\ 10 & 50 & 40 & 0 \\ 20 & 0 & 30 & 40 \end{bmatrix}
  1. A następnie od poszczególnych kolumn otrzymanej w ten sposób macierzy odejmując element najmniejszy znajdujący się w danej kolumnie:
302030010504002003040100300    [202000050100100040]\begin{array}{cccc} 30 & 20 & 30 & 0 \\ 10 & 50 & 40 & 0 \\ 20 & 0 & 30 & 40 \\ \hline \downarrow & \downarrow & \downarrow & \downarrow \\ -10 & -0 & -30 & -0 \end{array} \implies \begin{bmatrix} 20 & 20 & 0 & 0 \\ 0 & 50 & 10 & 0 \\ 10 & 0 & 0 & 40 \end{bmatrix}

Mając tak przekształconą macierz kosztów, staramy się rozmieścić przewozy na trasy, gdzie koszty są najniższe, czyli gdzie występują zera. Otrzymujemy w ten sposób początkowe rozwiązanie bazowe. Aby potwierdzić, że jest ono optymalne, należy przeprowadzić test optymalności — na przykład metodą potencjałów (MODI) lub stepping stone. W tym konkretnym zadaniu rozwiązanie okazało się optymalne, ale nie wynika to z samego faktu użycia klatek zerowych.

Rozdysponowanie przewozów najlepiej rozpocząć od tych kolumn (lub wierszy), w których występuje tylko jedno zero — nie mamy wtedy wyboru i unikamy błędów.

W przekształconej macierzy:

Teraz w kolumnie P3P_3 (popyt 5050) zera są w M1,P3M_1, P_3 i M3,P3M_3, P_3. M3M_3 ma już tylko 2020 podaży — wpisujemy tam x33=20x_{33} = 20, co wyczerpuje podaż M3M_3. Pozostały popyt P3P_3 wynosi 5020=3050 - 20 = 30 — pokrywa go M1M_1: x13=30x_{13} = 30. Podaż M1M_1 spada z 7070 do 4040.

W kolumnie P4P_4 (popyt 5050) zera są w M1,P4M_1, P_4 i M2,P4M_2, P_4. Zostało: M1M_1 ma 4040, M2M_2 ma 1010, popyt to 5050. Wpisujemy x14=40x_{14} = 40 i x24=10x_{24} = 10.

Wszystkie przewozy udało się rozmieścić w klatkach zerowych. W tym przykładzie rozwiązanie to okazuje się optymalne (co można potwierdzić metodą potencjałów lub Solverem).

Magazyny / PiekarnieP1P2P3P4Podaż
M1304070
M2401050
M3602080
Popyt40605050200

Związane są z nim następujące koszty transportu:

K2=30×50+40×20+40×40+10×30+60×40+20×70=1500+800+1600+300+2400+1400=8000 zł\begin{array}{rcl} K_2 &=& 30 \times 50 + 40 \times 20 + 40 \times 40 + 10 \times 30 + 60 \times 40 + 20 \times 70 \\ &=& 1500 + 800 + 1600 + 300 + 2400 + 1400 \\ &=& 8000 \text{ zł} \end{array}

W tym przykładzie metoda klatek zerowych prowadzi do znacznie lepszego rozwiązania początkowego (8000 zł vs 13 100 zł metodą kąta północno-zachodniego). W innych zadaniach przewaga jednej metody nad drugą zależy jednak od konkretnej macierzy kosztów.

Solver

Postępować według instrukcji. Analogicznie rozwiązuje się podobne zadania :)


Udostępnij wpis:

Poprzedni wpis
Kolejka.... górska
Następny wpis
Nie przyznaję się

Komentarze