Narzędzia wspomagania decyzji logistycznych

Transkrypt

Narzędzia wspomagania decyzji logistycznych
Narzędzia wspomagania decyzji logistycznych
Dr Adam Kucharski
Spis treści
1 Optymalizacja liniowa
1.1 Programowanie liniowe . . . . . . . . . . .
1.2 Metoda graficzna . . . . . . . . . . . . . .
1.3 Algorytm simplex . . . . . . . . . . . . . .
1.4 Wyceny dualne . . . . . . . . . . . . . . .
1.5 Zadanie transportowe . . . . . . . . . . .
1.6 Wybrane modyfikacje klasycznego zadania
1.7 Minimalizacja pustych przebiegów . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
transportowego
. . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
3
6
11
12
18
19
2 Zagadnienie optymalnego przydziału
21
3 Programowanie sieciowe
3.1 Najkrótsza droga w sieci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Maksymalny przepływ w sieci . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
23
27
Narzędzia wspomagani dec. logist.
1
Opracował: dr Adam Kucharski
Optymalizacja liniowa
1.1
Programowanie liniowe
Problem decyzyjny istnieje wtedy kiedy zachodzą następujące okoliczności:
1. Pojawia się decydent (osoba lub grupa osób), który musi rozwiązać problem;
2. Decydent chce osiągnąć pewien cel;
3. Istnieją co najmniej dwa sposoby na osiągnięcie zakładanego celu;
4. Istnieje otoczenie, które wpływa na sposób rozwiązania problemu lub jego wynik.
Proces podejmowania decyzji może zostać wsparty przez odpowiednio skonstruowane modele
matematyczne zwane też modelami decyzyjnymi. Normalna jest tutaj sytuacja, w której należy
dokonać wyboru pomiędzy wieloma możliwymi decyzjami, zwanymi decyzjami dopuszczalnymi. Dają one decydentowi szansę na spełnienie ograniczeń jakie często narzuca na przykład
otoczenie. Przydatny staje się zestaw narzędzi pozwalający podjąć najlepszą z decyzji.
Ostatnie zdanie oznacza, że decydent posługuje się pewnym kryterium, które pozwala mu odróżnić lepsze decyzje od gorszych. Na zbiorze decyzji dopuszczalnych określana jest tzw. funkcja
kryterium (funkcja celu), dla której poszukuje się wartości największej lub najmniejszej. Zmienne
zawierające w sobie konkretne decyzje nazywać będziemy zmiennymi decyzyjnymi.
Programowanie liniowe (PL) zalicza się do znacznie szerszej grupy metod programowania
matematycznego. Metody na nim bazujące są bardzo popularne ze względu na swoją prostotę
oraz dlatego, że spora część innych modeli decyzyjnych da się przekształcić do postaci zadania
PL. Charakteryzuje się ono tym, że zarówno funkcja celu oraz zbiór decyzji dopuszczalnych
opisany przy pomocy równań i nierówności mają postać liniową. Ogólna postać takiego zadania
jest następująca:
f (x) = c1 x1 + c2 x2 + . . . + cn xn → max / min

a11 x1




..


.

ak1 x1


..


.



am1 x1
+
+
+
a12 x2
..
.
ak2 x2
..
.
+ ... +
+ ... +
+ ... +
a1n xn
..
.
6
..
.
b1
..
.
akn xn
..
.
=
..
.
bk
..
.
funkcja celu
ograniczenia
+
+ ... +
+ am2 x2 + . . . + amn xn > bm
x1 > 0, x2 > 0, . . . , xn > 0
warunki brzegowe
Zmienne xj (j = 1, 2, . . . , n) są to właśnie zmienne decyzyjne. Dla uproszczenia zakładać
będziemy, że wszystkie prawe strony ograniczeń są nieujemne (czyli bj > 0 dla j = 1, 2, . . . , m).
Wypadkowa ograniczeń i warunków brzegowych tworzy zbiór rozwiązań dopuszczalnych.
Poszukiwanie rozwiązania wiąże się z następującymi twierdzeniami:
Twierdzenie 1.1 Zbiór rozwiązań dopuszczalnych zadania PL zbiorem domkniętym, wypukłym,
o skończonej liczbie wierzchołków.
Twierdzenie 1.2 Funkcja liniowa f (x) określona na domkniętym zbiorze wypukłym X, o skończonej liczbie wierzchołków osiąga swoją wartość największą (najmniejszą) w wierzchołku tego
zbioru. Jeżeli wartość taką osiąga w więcej niż jednym wierzchołku, to osiąga ją również w każdym punkcie będącym wypukłą kombinacją takich wierzchołków.
2 z 30
Narzędzia wspomagani dec. logist.
1.2
Opracował: dr Adam Kucharski
Metoda graficzna
Jeżeli problem da się opisać przy pomocy tylko dwóch zmiennych decyzyjnych (x1 , x2 ) wówczas
da się go rozwiązać graficznie. Metoda graficzna ma właściwie walory wyłącznie dydaktyczne,
ponieważ dobrze ilustruje sposób poszukiwania rozwiązania optymalnego na zbiorze rozwiązań
dopuszczalnych. Zbiór ten wyznacza się w prostokątnym układzie współrzędnych (ograniczonym
do pierwszej ćwiartki ze względu na warunki brzegowe) wyznaczając część wspólną nierówności i
równań tworzących ograniczenia zadania. W przypadku kiedy ograniczenia podane są wyłącznie
jako nierówności, zbiór rozwiązań dopuszczalnych jest wielobokiem wypukłym.
Poszukiwanie optymalnego rozwiązania można przeprowadzić na dwa sposoby:
1. Wyznaczyć współrzędne wszystkich wierzchołków zbioru i podstawić je do funkcji celu;
2. Wyznaczyć rozwiązanie w oparciu o gradient funkcji celu.
Pierwsze z podejść przestaje być wygodne gdy liczba wierzchołków zbioru rozwiązań dopuszczalnych jest duża. Dlatego omówiony zostanie drugi sposób.
Gradientem funkcji celu jest wektor zawierający pochodne f (x) względem zmiennych decyzyjnych. Tworzą go więc współczynniki funkcji celu. Gradient pokazuje kierunek najszybszego
wzrostu wartości f (x) niezależny od wartości zmiennych decyzyjnych. Jeżeli współrzędne gradientu są zbyt małe lub zbyt duże, aby wygodnie umieścić go na rysunku, można pomnożyć
gradient przez odpowiednio dobraną stałą.
Gradient nanosi się na wykres, zaczepiając go w początku układu współrzędnych. Następnie
wykreśla się prostą prostopadłą do gradientu (tzw. warstwicę) tak, aby przechodziła przez zbiór
X. Poszukując wartości największej f (x) przesuwamy warstwicę równolegle w kierunku jaki pokazuje gradient (czyli oddalając się od początku układu współrzędnych) tak długo dopóki nie
dotrzemy do ostatniego punktu (wierzchołka) przed opuszczenie zbioru X. Jest to właśnie punkt
optymalny. Poszukując wartości najmniejszej postępuje się podobnie, z tą różnicą, że warstwicę
przesuwamy w kierunku przeciwnym.
Przykład zastosowania metody graficznej1
Mały zakład wytwarza dwa produkty A i B, których ceny zbytu wynoszą odpowiednio 3
zł/szt. oraz 4 zł/szt. Należy opracować dzienny plan produkcji zakładu tak, aby wartość produkcji liczona w cenach zbytu była możliwie największa. Produkcja jest limitowana głównie
przez dwa czynniki: dostępny czas pracy maszyn i surowiec podstawowy. Dzienny limit czasu
pracy maszyn wynosi 500 minut. Umowy z producentem surowca podstawowego wskazują, że
każdego dnia zakład będzie miał do dyspozycji 350 kg tego surowca (bezpieczny poziom). Zakład jest zainteresowany takim programem dziennej produkcji, przy którym osiągał będzie zysk
minimum 600 zł. Sztuka wyrobu A wymaga 1 minuty czasu pracy maszyn, natomiast sztuka
wyrobu B – 2 minut. Na wyprodukowanie sztuki wyrobu A zużywa się 1 kg surowca specjalnego.
Również sztuka wyrobu B wymaga 1 kg tego surowca. Jednostkowy zysk ze sztuki wyrobu A
wynosi 2 zł/szt., a ze sztuki wyrobu B – 1 zł/szt.
Model decyzyjny prezentuje się następująco:
Zmienne decyzyjne:
x1 – dzienna produkcja wyrobu A [szt.]
x2 – dzienna produkcja wyrobu B [szt.]
1
Przykład pochodzi z: D. Miszczyńska, M. Miszczyński „Wybrane metody badań operacyjnych”, Wyższa
Szkoła Ekonomiczno-Humanistyczna w Skierniewicach, Skierniewice 2002.
3 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
Funkcja celu (wartość produkcji w cenach zbytu):
w(x1 , x2 ) = w(x) = 3x1 + 4x2 → max
[zł]
Ograniczenia:
maszyny:
x1 + 2x2 6 500
[minuta]
surowiec:
x1 + x2 6 350
[kg]
min. zysk:
2x1 + x2 > 600
[zł]
Warunki brzegowe:
x1 > 0, x2 > 0
[szt.]
Rysunek 1 prezentuje zbiór rozwiązań dopuszczalnych.
x2
600 zysk
500
400
surowiec
300
200
100
maszyny
100
200
300
400
500
600
x1
Rysunek 1: Zbiór rozwiązań dopuszczalnych dla przykładu
Na rysunku 1 zaznaczamy gradient funkcji, którym jest następujący wektor:
3
∇f (x) =
4
Ponieważ nie byłby on zbyt widoczny przy obecnej skali wykresu, jego składowe zostaną pomnożone przez 50. Na rysunku 2 znajduje się ilustracja poszukiwania optymalnego rozwiązania.
Poszukujemy największej wartości funkcji celu, warstwica przesuwana jest zgodnie ze zwrotem
gradientu. Ostatni punkt, w którym przecina zbiór rozwiązań dopuszczalnych znajduje się w
punkcie (250, 100).
Otrzymujemy więc następujące rozwiązanie: należy wyprodukować 250 sztuk wyrobu A i 100
sztuk wyrobu B, zapewni to zysk maksymalny w wysokości: 3*250+4*100=1050 zł.
Powyższe rozwiązanie stanowi konkretny wierzchołek zbioru X. Dlatego nazywamy je pojedynczym, skończonym rozwiązaniem optymalnym. Oprócz niego mogą istnieć inne rodzaje
rozwiązań, które zilustrują następne rysunki.
4 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
x2
600
500
G(300,400)
400
300
rozwiązanie optymalne
200
100
100
200
300
400
500
600
x1
Rysunek 2: Gradient i rozwiązanie przykładu
Zadanie sprzeczne:
Zadanie jest sprzeczne, kiedy nie uda się wyznaczyć części wspólnej ograniczeń, czyli zbioru
rozwiązań dopuszczalnych.
x2
x1
Rysunek 3: Zadanie sprzeczne
Brak skończonego rozwiązania optymalnego:
W sytuacji zaprezentowanej na powyższym rysunku nie jest możliwe znalezienie wartości
największej funkcji celu2 . Zbiór rozwiązań dopuszczalnych nie jest bowiem w żaden sposób
ograniczony w jego górnej części i nie będzie możliwe znalezienie punktu, w którym warstwica
przechodzi przez tez zbiór po raz ostatni.
Więcej niż jedno skończone rozwiązanie optymalne:
W ostatniej z omawianych sytuacji warstwica (dla przypadku maksymalizacji funkcji celu)
pokrywa się z całym bokiem wieloboku utworzonego z ograniczeń zadania. Wartość funkcji celu
w różnych punktach A i B oraz na odcinku między nimi będzie taka sama.
2
Choć wyznaczenie wartości najmniejszej jest oczywiście możliwe.
5 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
x2
G
x1
Rysunek 4: Brak skończonego rozwiązania optymalnego
x2
G
x1
Rysunek 5: Więcej niż jedno skończone rozwiązanie optymalne
1.3
Algorytm simplex
W sytuacji, kiedy liczba zmiennych decyzyjnych jest większa niż 2 lub duża liczba ograniczeń
utrudnia dokładne wyznaczenie zbioru rozwiązań dopuszczalnych, do poszukiwania optymalnej
wartości funkcji celu używa się algorytmu simplex.
Polega on na przebiegającym w określony sposób przeglądaniu rozwiązań bazowych (wierzchołków zbioru X) w celu znalezienia punktu, w którym funkcja celu osiąga wartość największą
lub najmniejszą. Warto tu zwrócić uwagę na to, że metoda nie potrzebuje sprawdzać wszystkich rozwiązań wierzchołkowych. Algorytm wędruje od bieżącego do sąsiedniego wierzchołka, w
którym wartość funkcji celu jest nie gorsza niż w poprzednim rozwiązaniu. Poniżej znalazł się
schemat postępowania w tej metodzie:
Przykład zastosowania algorytmu simplex
Firma produkuje trzy wyroby: A, B i C, które wymagają obróbki na dwóch maszynach M1
i M2. Limity czasu pracy maszyn wynoszą odpowiednio: M1 – 200 godzin, M2 – 150 godzin.
Czas pracy M1 potrzebny do wytworzenia jednej sztuki wyrobu A wynosi 2 minuty, wyrobu B
– 2 minuty, wyrobu C – 3 minuty. Odpowiednio dla maszyny M2 mamy: A – 2 minuty, B i C po
1 minucie. Ceny zbytu za 1 sztukę wyrobu wynoszą: A – 4 zł, B – 3 zł, C – 5 zł. Należy ustalić
6 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
(1) Wybierz początkową bazę układu równań
(2) Wyznacz rozwiązanie bazowe
(6) Dokonaj wymiany
wektorów w bazie
(5) Wybierz wektor
opuszczający bazę
(3) Czy aktualne rozwiązanie jest optymalne?
Tak
Nie
(4) Wybierz wektor
wchodzący do bazy
Stop
Rysunek 6: Schemat postępowania w algorytmie simplex
plan produkcji, który zapewni maksymalny utarg ze sprzedaży wyrobów, przy założeniu, że cała
produkcja zostanie sprzedana.
Model decyzyjny:
x1 – wielkość produkcji wyrobu A [szt.]
x2 – wielkość produkcji wyrobu B [szt.]
x3 – wielkość produkcji wyrobu C [szt.]
Z = 4x1 + 3x2 + 5x3 → max
M1:
2x1 + 2x2 + 3x3 6 12000
[min.]
M2:
2x1 + x2 + x3 6 9000
[min.]
x1 > 0, x2 > 0, x3 > 0
[szt.]
Choć powyższy model jest poprawny pod względem formalnym, to algorytm simplex wymaga, aby układ nierówności tworzących ograniczenia sprowadzić do postaci równań. Robi się to
wg następujących reguł:
• jeżeli k -te ograniczenie jest typu „6” wówczas wprowadzamy do niego dodatnią zmienną
swobodną sk ;
7 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
• jeżeli k -te ograniczenie jest typu „>” wówczas wprowadzamy do niego ujemną zmienną
swobodną sk oraz dodatnią zmienną sztuczną tk ;
• jeżeli k -te ograniczenie jest typu „=” wówczas wprowadzamy do niego dodatnią zmienną
sztuczną tk .
Zmienne swobodne stoją w funkcji celu z parametrem 0. Zmienne sztuczne w funkcji celu
stoją z parametrem −M (gdy funkcja jest maksymalizowana) lub +M (gdy funkcja celu jest minimalizowana), gdzie M jest pewną, bardzo dużą liczbą dodatnią. Model, w którym ograniczenia
z nierówności zamieniono na równania nazywamy postacią kanoniczną. W naszym przykładzie
wygląda ona następująco:
Z = 4x1 + 3x2 + 5x3 + 0s1 + 0s2 → max
2x1 + 2x2 + 3x3 + s1 = 12000
2x1 + x2 + x3 + s2 = 9000
x1 > 0, x2 > 0, x3 > 0, s1 > 0, s2 > 0
Postępowanie w metodzie simplex przeprowadza się w specjalnych tablicach. Pierwszą z nich
tworzymy na podstawie postaci kanonicznej modelu. Kolejne powstają wskutek stosownych przekształceń. Dokonamy teraz przedstawienia całości obliczeń, które zostaną następnie omówione.
Nr
iteracji
4
x1
3
x2
5
x3
0
s1
0
s2
Wartości
zmiennych
bazowych
Ilorazy
wyjścia
1
0
s1
0
s2
∆j = cj − zj
2
2
4
2
1
3
3
1
5
1
0
0
0
1
0
12000
9000
0
4000*
9000
2/
2
5
x3
0
s2
∆j = cj − zj
1
0
0
1/
3
1
− /
3
3
4000
5000
20000
6000
3750*
−4 /
0
1
0
1
0
0
1/
2
−1 /
−1 /2
3/
4
−1 /2
1500
3750
22500
3
cB
Zmienne
bazowe
xB
5
x3
4
x1
∆j = cj − zj
4/
2/
0
1
0
3
2/
3
2/
3
3
3
1
− /
1/
2
1/
4
3
−1 /2
4
−3 /2
(1) Wybór początkowej bazy
Początkową bazą stają się wektory stojące przy zmiennych swobodnych i/lub sztucznych.
Tworzą one macierz jednostkową, której wymiar równy jest liczbie ograniczeń. Tak więc w naszym przykładzie bazę początkową tworzą wektory parametrów stojących przy zmiennych s1 i
s2 w iteracji 1:
1 0
pocz
B
=
0 1
Taką samą postać ma w tej chwili, kluczowa w późniejszych rozważaniach, macierz B −1 .
(2) Wyznaczenie rozwiązania bazowego
Rozwiązanie w pierwszej tablicy simpleksowej tworzą po prostu przepisane prawe strony
ograniczeń. W kolejnych rozwiązaniach jest ono związane z aktualną bazą. Wartość funkcji
8 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
celu tworzy się w oparciu o aktualny wektor cB oraz wektor wartości rozwiązań bazowych.
Prześledźmy proces jej obliczania na podstawie iteracji nr 2:
4000
= 5 ∗ 4000 + 0 ∗ 5000 = 20000
f (xB ) = (cB )T xB = 5 0
5000
(3) Ocena optymalności aktualnego rozwiązania
Sprawdzenia optymalności rozwiązania dokonuje się w oparciu o tzw. wskaźniki optymalności.
Oblicza się je dla wszystkich zmiennych znajdujących się w tablicy simpleksowej, przy czym dla
zmiennych bazowych zawsze równają się one zero. Formuła ich wyznaczania jest następująca:
∆j = cj − zj = cj −
m
X
cB
i pij
i=1
gdzie:
cj – współczynnik w funkcji celu przy j -tej zmiennej, dla której obliczamy wskaźnik optymalności;
cB
i – współczynnik w funkcji celu przy i-tej zmiennej bazowej; pij – odpowiednia kolumna centralnej części tablicy simpleksowej.
Wskaźnik optymalności dla zmiennej x1 w pierwszej iteracji obliczono więc następująco:
∆1 = 4 − (0 ∗ 2 + 0 ∗ 2) = 4
zaś dla zmiennej x3 w drugiej iteracji (gdzie była zmienną bazową):
∆3 = 5 − (5 ∗ 1 + 0 ∗ 0) = 0
Wartość ∆j dla zmiennej niebazowej można traktować jako różnicę między jednostkowym
efektem a jednostkowym nakładem potrzebnym, aby dana zmienna miała zostać zmienną bazową. Na tej podstawie zbudowano kryterium optymalności bieżącego rozwiązania. Rozwiązanie
uznajemy za optymalne gdy:
(
∀
j=1,2,...,n ∆j 6 0, gdy f (x) → max
∀
∆ > 0, gdy f (x) → min
j=1,2,...,n
j
Innymi słowy, rozwiązanie (dla przypadku maksymalizacji funkcji celu) uznajemy za optymalne kiedy wszystkie wskaźniki optymalności są niedodatnie lub nieujemne (dla przypadku
minimalizacji funkcji celu). Jak nietrudno zauważyć, trzecia iteracja jest ostatnią, ponieważ
wszystkie wskaźniki optymalności przyjęły wartości mniejsze lub równe zero
(4) Wybór wektora wchodzącego do bazy
Jeżeli aktualne rozwiązanie bazowe nie spełnia warunku optymalności, konieczna staje się wymiana wektorów bazowych. Najpierw wybierany jest wektor (towarzyszący odpowiedniej zmiennej), który znajdzie się w przyszłej bazie. Jako kryterium służą ponownie wskaźniki optymalności
i ponownie występuje rozdział spowodowany kierunkiem optymalizacji. Do bazy wprowadzamy
k -ty wektor taki, że:
(
min (∆ ), gdy f (x) → max
∆k = ∆j>0
j
max
∆ =
(∆ ), gdy f (x) → min
k
∆j<0
j
Tak więc, jeśli funkcja celu jest maksymalizowana, wybieramy zmienną, dla której wskaźnik
optymalności okazał się najwyższy spośród tych, które przyjęły wartość dodatnią.
W iteracji 1 najwyższą wartość (czyli 5) posiadał wskaźnik optymalności dla zmiennej x3 .
Tym samym, odpowiadająca mu zmienna stanie się zmienną bazową.
9 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
(5) Wybór wektora opuszczającego bazę
Ponieważ bazę tworzy więcej niż jedna zmienna, należy zdecydować, która z nich nie znajdzie
się w nowej bazie. Dla wektora wybranego w poprzednim kroku obliczamy tzw. ilorazy wyjścia.
Należy tu zwrócić uwagę, że sposób ich wyliczania jest niezależny od kierunku kryterium. Z bazy
usuwamy l -ty wektor taki, że:
B
xB
xl
min
l
=
plk
plk > 0 plk
Zauważmy, że ilorazów wyjścia nie liczymy jeśli przyjdzie nam podzielić przez 0 lub ujemną
składową. W przykładzie, dla iteracji pierwszej ilorazy wyjścia dla s1 i s2 oraz kryterium wyjścia
są następujące:
12000 9000
= min(4000, 9000) = 4000
min
,
3
1
Tak więc usuwamy z bazy zmienną s1 wraz z towarzyszącym jej wektorem.
W przypadku uzyskania kilku identycznych minimalnych ilorazów wyjścia, najlepiej jest wybrać ten o największym dzielniku. Jeśli i to nie wystarczy, można wybrać pozycję o niższym i.
(6) Wymiana wektorów w bazie
Wymiany wektorów w bazie dokonuje się przy pomocy tzw. przekształceń elementarnych,
które nie znajdują się w obszarze zainteresowań niniejszych zajęć, dlatego nie zostaną tutaj
omówione.
Wymiana wektorów kończy jedną, pełną iterację w algorytmie simplex. Po zakończeniu postępowania można przejść do interpretacji wyników. Prezentowany przykład zakończył się po
trzech przebiegach, dając następujący wektor optymalnych wartości zmiennych:
 opt  

x1
3570
xopt  
 2   0 

 

opt
x = xopt
 = 1500
3
 , fmax = 22500
 opt  
0 
 s1 
0
sopt
2
Należy zatem wyprodukować 3750 sztuk wyrobu A i 1500 sztuk wyrobu C (nie należy produkować wyrobu B), co zapewni zysk maksymalny w wysokości 22500 zł. Limity czasu pracy
maszyn zostaną wykorzystane w całości.
W tym miejscu warto zwrócić uwagę na interpretację zmiennych swobodnych. Ich niezerowa
wartość w rozwiązaniu optymalnym świadczy o:
• niewykorzystaniu występującego limitu w przypadku gdy ograniczenie jest typu „6”;
• przekroczeniu zakładanego poziomu w przypadku gdy ograniczenie jest typu „>”.
Jedno, skończone rozwiązanie optymalne jest jednym z grupy potencjalnych wyników jakimi
może się skończyć postępowanie w algorytmie simplex. Wyróżnimy jeszcze następujące:
• zadanie jest sprzeczne, kiedy w rozwiązaniu optymalnym występuje zmienna sztuczna z
niezerową wartością;
• zadanie posiada więcej niż jedno skończone rozwiązanie optymalne, kiedy liczba wskaźników optymalności równych zero jest większa od liczby zmiennych bazowych;
• zadanie nie posiada skończonego rozwiązania optymalnego, kiedy nie jest możliwe wyznaczenie ilorazów wyjścia, gdyż wszystkie składowe wektora wchodzącego do bazy są
niedodatnie.
10 z 30
Narzędzia wspomagani dec. logist.
1.4
Opracował: dr Adam Kucharski
Wyceny dualne
Podanie optymalnych wartości zmiennych decyzyjnych i wartości funkcji celu nie wyczerpuje możliwości analizy wyników. Jedną z nich są tzw. wyceny (zmienne) dualne. Służą one do
określania reakcji optymalnej wartości funkcji celu na zmiany wyrazów wolnych ograniczeń, bez
konieczności ponownego rozwiązywania zadania.
Zadanie dualne jest ściśle powiązane z podstawowym zadaniem, zwanym odtąd prymalnym
(pierwotnym). Mówiąc prościej, powstaje ono z przekształcenia zadania pierwotnego. Do czekających nas analiz nie jest konieczna znajomość zasad budowy zadania dualnego. Wystarczy nam
wiedza, że liczba zmiennych dualnych (oznaczymy je jako yi ) jest równa liczbie ograniczeń, czyli
każdemu z ograniczeń odpowiada jedna zmienna dualna. Interesować nas też będzie konkretne
rozwiązanie zadania dualnego, które otrzymamy na podstawie rozwiązania zadania pierwotnego.
Twierdzenie 1.3 Dla danej pary zadanie prymalne-dualne prawdziwe jest tylko jedno z poniższych twierdzeń:
1. Jeżeli jedno z pary zadań posiada rozwiązanie optymalne, to posiada je również drugie z
nich, przy czym optymalne wartości funkcji celu są sobie równe.
2. Jeżeli jedno z pary zadań nie posiada skończonego rozwiązania optymalnego, to drugie z
nich jest sprzeczne3 .
Twierdzenie 1.4 Jeżeli istnieje skończone rozwiązanie optymalne zadania pierwotnego względem bazy B, to rozwiązanie optymalne zadania dualnego dane jest wzorem:
yopt = (cB )T B−1
Wykorzystując drugie twierdzenie wyznaczymy optymalne wartości zmiennych dualnych w
rozpatrywanym przykładzie. Najpierw jednak potrzebujemy wiedzy o tym jak wyznaczyć B −1 .
W tym celu przypomnijmy, że macierz B pocz , którą znamy z pierwszej tablicy simplex, powstawała jako macierz jednostkowa utworzona ze zmiennych s1 i s2 . W ostatniej tablicy simpleksowej
odszukujemy wektory towarzyszące zmiennym, które tworzyły B pocz . Stąd wiemy, że:
1
/2 −1 /2
−1
B =
3/
−1 /4
4
Obliczamy teraz wyceny dualne (wektor (cB )T = [5 4] również pochodzi z ostatniej tablicy
simpleksowej):
1
opt opt /2 −1 /2
= 1,5 0,5
y1
y2 = 5 4
1
3
− /4
/4
Ogólna interpretacja zmiennej dualnej mówi, że: jeżeli w i-tym ograniczeniu wyraz wolny bi
wzrośnie o jednostkę, to optymalna wartość funkcji celu wzrośnie (spadnie) o yiopt jednostek.
Zinterpretujmy wycenę dualną y1opt dla ograniczenia czasu pracy maszyny M1:
Jeżeli limit czasu pracy maszyny M1 wzrośnie o 1 minutę, to zysk optymalny wzrośnie o 1,5
zł.
Zwróćmy uwagę, że miano powyższej zmiennej dualnej jest następujące: [zł zysku/ minutę].
3
Twierdzenie odwrotne nie jest prawdziwe, ponieważ gdy jedno zadanie jest sprzeczne, drugie może być także
sprzeczne lub może nie posiadać skończonego rozwiązania optymalnego.
11 z 30
Narzędzia wspomagani dec. logist.
1.5
Opracował: dr Adam Kucharski
Zadanie transportowe
Jednym z możliwych typów problemów z jakimi mamy do czynienia w ramach programowania
liniowego jest problem jak najtańszego przewozu dobra pomiędzy punktami nadania (dostawcy)
a punktami odbioru (odbiorcy). Należy podkreślić, że dobro jest jednorodne, a więc nie ma
(znanego np. z metody simplex) podziału na poszczególne produkty. Wprowadźmy następujące
oznaczenia:
xij – ilość dobra przewożonego na trasie między i -tym nadawcą a j -tym odbiorcą;
ai – zasób dobra w i -tym punkcie nadania;
bj – zapotrzebowanie na dobro w j -tym punkcie odbioru;
cij – jednostkowy koszt przewozu na trasie między i -tym nadawcą a j -tym odbiorcą;
i = 1, . . . , m j = 1, . . . , n.
Łączną ilość dobra dostępną we wszystkich punktach nadania przywykło się określać mianem
podaży zaś łączną ilość dobra, na które jest zapotrzebowanie we wszystkich punktach odbioru
nazwiemy popytem. Klasyczne zadanie transportowe podlega następującym założeniom:
1. przewożone dobro jest jednorodne;
2. podaż jest nie mniejsza niż popyt;
3. przepustowości tras są nieograniczone.
Klasyczne zadanie transportowe może wystąpić w jednej z dwóch odmian:
1. zadanie zamknięte (zbilansowane), w których podaż jest równa popytowi;
2. zadania otwarte (niezbilansowane), w których podaż jest większa niż popyt4 .
Każde zadanie otwarte da się przekształcić do zadania zamkniętego poprzez wprowadzenie
dodatkowego, fikcyjnego odbiorcy (zwanego magazynem). Zapotrzebowanie tego odbiorcy jest
równe różnicy między podażą a popytem. Koszt przewiezienia do magazynu traktujemy jako
znikomo mały w porównaniu z kosztami przewozu między nadawcami a odbiorcami i dlatego
przyjmujemy, że jest równy zero.
W klasycznym algorytmie transportowym rozwiązuje się następujący problem optymalizacyjny: należy znaleźć taki plan przewozu dobra, aby łączny koszt transportu ze wszystkich punktów
nadania do wszystkich punktów odbioru był jak najmniejszy. Każdy nadawca wysłać ma całą
posiadaną masę dobra (w zadaniach otwartych część trafi do magazynu), zaś zapotrzebowanie
każdego z odbiorców ma zostać zaspokojone w całości.
Model decyzyjny (dla zadania zamkniętego) można zapisać następująco:
K(x) =
n X
m
X
cij xij → min
i=1 j=1
n
X
j=1
m
X
= ai ,
i = 1, . . . , m
= bj ,
j = 1, . . . , n
i=1
xij > 0
Twierdzenie 1.5 Jeżeli ai oraz bj są liczbami nieujemnymi to zadanie transportowe zawsze ma
rozwiązanie.
4
Zakładamy, że w gospodarce rynkowej podaż jest na tyle elastyczna, że natychmiast dostosowuje się do wzrostu
popytu.
12 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
Twierdzenie 1.6 Jeżeli ai oraz bj są liczbami całkowitymi to każde dopuszczalne rozwiązanie
bazowe zadania transportowego również przyjmuje wartości całkowite.
Z głębszych analiz zadania transportowego wypływa bardzo ważny wniosek: optymalny (jednoznaczny) program przewozowy wykorzystuje nie więcej niż m+n-1 spośród m × n tras przewozowych.
Przykładowe zadanie transportowe
Trzy gospodarstwa rolne (oznaczone przez D1, D2 i D3) dostarczają zboże do trzech punktów
skupu (oznaczonych O1, O2, O3) Agencji Rynku Rolnego, ponosząc przy tym koszty transportu.
Ilość zboża jakim dysponują gospodarstwa (w tonach), pojemność spichlerzy Agencji (w tonach)
a także jednostkowe koszty transportu (zł/t) podaje poniższa tabela. Należy opracować taki plan
przewiezienia zboża, aby łączny koszt przewozu był jak najmniejszy.
Gospod. 1
Gospod. 2
Gospod. 3
Zapotrzebowanie
odbiorców
Skup 1
Skup 2
Skup 3
5
3
3
40
8
6
4
60
6
5
3
60
Zasoby
u dostawców
60
10
90
160
W powyższym przykładzie mamy więc 3 punkty nadania i 3 punkty odbioru. Daje to 9
możliwych tras, którymi zboże może zostać przewiezione między poszczególnymi gospodarstwami
a punktami skupu. Tym niemniej do znalezienia rozwiązania wykorzystamy nie więcej niż 3+31=5 tras. Zwróćmy również uwagę, że podaż jest równa popytowi (wynosi 160 t) czyli mamy do
czynienia z zadaniem zamkniętym.
Wektor podaży a, popytu b oraz macierz kosztów jednostkowych C są następujące:
 


60
5
8
6
a = 10 , b = 40 60 60 , C = 3 6 5
90
3 4 3
Model decyzyjny tego zadania zaprezentowano poniżej:
5x11 +8x12 +6x13 +3x21 +6x22 +5x23 +3x31 +4x32 +3x33 → min
x11 +x12 +x13
= 60
x21
+x22 +x23
= 10
x31
+x32 +x33 = 90
x11
+x21
+x31
= 40
x12
+x22
+x32
= 60
x13
+x23
+x33 = 60
x11 > 0, x12 > 0, x13 > 0, x21 > 0, x22 > 0, x23 > 0, x31 > 0, x32 > 0, x33 > 0
Do rozwiązania powyższego zadania można użyć algorytmu simplex. Jednak duże rozmiary
modelu, które wzrosną jeszcze po sprowadzeniu do postaci kanonicznej5 . powodują, że nie jest to
podejście zbyt efektywne. Dlatego właśnie opracowano specjalny algorytm numeryczny służący
rozwiązywaniu takich zadań. Wprowadźmy oznaczenia:
ui – zmienna dualna dla i -tego dostawcy;
vj – zmienna dualna dla j -tego odbiorcy.
5
Z każdym z ograniczeń związana jest bowiem jedna zmienna sztuczna
13 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
Wskaźnik optymalności dla algorytmu transportowego jest równy:
∆ij = cij − (ui + vj )
Podobnie jak to miało miejsce w przypadku algorytmu simplex o minimalizowanej funkcji
celu, plan przewozowy uznajemy za optymalny, kiedy wskaźniki optymalności dla wszystkich
tras spełnią warunek: ∆ij > 0.
Aby jednak wyznaczyć wskaźniki optymalności, należy poznać wszystkie wartości ui oraz vj .
Wykorzystuje się w tym celu fakt, że dla zmiennych bazowych ∆ij są równe zero. W metodzie
transportowej zmiennymi bazowym są trasy, na których dokonuje się przewozu, których liczba
wynosi m + n − 1. Konstruuje się na tej podstawie układ równań, w którym ui oraz vj są
niewiadomymi. Ponieważ liczba niewiadomych jest o 1 większa od liczby równań, należy przyjąć
wartość zerową dla jednej z nich. Zazwyczaj przyjmuje się u1 = 0. Postępowanie w algorytmie
transportowym obrazuje następujący schemat: nie gorsza niż w poprzednim rozwiązaniu. Na
rysunku 7 znalazł się schemat postępowania w tej metodzie.
(1) Ustal początkowy
plan przewozu
(6) Skoryguj program
przewozowy
(5) Określ maksymalny
przewóz na trasie ustalonej w (3)
Tak
(2) Czy aktualny plan
przewozu jest optymalny?
Nie
(4) Utwórz cykl korygujący
(3) Wybierz trasę dającą największą obniżkę
kosztów
Stop
Rysunek 7: Schemat postępowania w algorytmie transportowym
Obliczenia przeprowadzać będziemy równolegle w dwóch tabelach. W jednej znajdzie się aktualny plan przewozowy, a w drugiej sprawdzenie jego optymalności.
(1) Ustalenie początkowego planu przewozowego
Każdy plan przewozowy, wliczając w to również plan początkowy, zawierać będzie nie więcej
niż 3+3-1=5 tras. W metodzie transportowej nie ma jednoznacznego (jak w algorytmie simplex)
sposobu określenia pierwszego rozwiązania. Spośród wielu dostępnych, skupimy się ma metodzie
kąta północno-zachodniego.
Jest to najprostsza z metod opierająca się wyłącznie na popycie i podaży u poszczególnych
odbiorców i dostawców. Jej nazwa wzięła się stąd, że pierwszy przewóz ustalany jest zawsze na
14 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
trasie od pierwszego dostawcy do pierwszego odbiorcy. Wprowadzamy tam mniejszą z dwóch
wartości a1 i b1 . W naszym przykładzie pierwszy krok w tej metodzie znalazł się w tabeli 1.
Tabela 1: Początek postępowania w metodzie kąta północno-zachodniego
O1 O2 O3 podaż
D1
40
60
D2
10
D3
90
popyt 40 60 60
160
Dostawca 1 (D1) przewiezie 40 t zboża do odbiorcy 1, przy czym zapotrzebowanie tego
odbiorcy zostaje zaspokojone w całości. Jednakże D1 pozostało do rozdysponowania jeszcze 20
t dobra. Dostanie je odbiorca O2, który potrzebuje 60 t (patrz tabela 2). Brakującą mu do 60 t
ilość dostarczą: D2 (10 t) i D3 (30 t). Postępując w ten sposób otrzymamy następującą tabelę 3.
Jak widać rozwieziona została cała dostępna ilość zboża (40+20+10+30+60=160t), przy czym
Tabela 2: Rozdysponowanie podaży dostawcy D1
O1 O2 O3 podaż
D1
40 20
60
D2
10
D3
90
popyt 40 60 60
160
Tabela 3: Pierwszy plan przewozowy,
O1 O2
D1
40 20
D2
10
D3
30
popyt 40 60
uzyskany metodą kąta płn-zach
O3 podaż
60
10
60
90
60
160
wykorzystano 5 tras. Łączny koszt przewozu wynosi:
40 ∗ 5 + 20 ∗ 8 + 10 ∗ 6 + 30 ∗ 4 + 60 ∗ 3 = 720zł
(2) Sprawdzenie optymalności rozwiązania
Rozwiązanie uznajemy za optymalne jeżeli wszystkie wskaźniki optymalności są nieujemne.
Przypomnijmy, że wskaźniki te dla zmiennych bazowych są równe zero. Budowa tabeli zawierającej owe wskaźniki (tzw. tabeli wskaźników) wygląda następująco:
• pole odpowiadające niezerowemu przewozowi zawiera jednostkowy koszt przewozu;
• pole odpowiadające trasie niebazowej zawiera dwie liczby: sumę ui i vj oraz wskaźnik
optymalności.
Rozpoczynamy od przepisania odpowiednich elementów macierzy C oraz przyjęcia, że u1 = 0:
Wartości ui oraz vj znajdujemy w następujący sposób: suma wartości obu zmiennych dualnych musi dać koszt cij znajdujący się już w tabeli dla tras stanowiących bieżące rozwiązanie.
Stąd v1 obliczymy jak poniżej:
v1 + u1 = 5 ⇒ v1 + 0 = 5 ⇒ v1 = 5
15 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
Tabela 4: Pierwszy krok tworzenia tabeli wskaźników
v1 v2 v3 wartości ui
u1
5
8
0
u2
6
u3
4
3
wartości vj
Podobnie wyznaczymy v2 :
v2 + u1 = 8 ⇒ v2 + 0 = 8 ⇒ v2 = 8
Zauważmy, że kolejność obliczania zmiennych dualnych nie jest dowolna, lecz wynika z wcześniej wyznaczonych wartości. Dlatego na przykład dopiero znając v2 możemy poznać u2 . Kompletna tabela wskaźników została zaprezentowana poniżej:
Tabela 5: Końcowa postać tabeli wskaźników
v1
v2
v3
wartości ui
u1
5
8 7
0
-1
u2
3
6 5
-2
0
0
u3
1
4
3
-4
2
wartości vj
5
8
7
Lewa górna część pola zawiera sumę zmiennych dualnych z odpowiedniego wiersza i kolumny,
prawa dolna – wskaźnik optymalności. Bieżącego planu przewozowego nie można uznać za optymalny ponieważ wszystkie wskaźniki nie są nieujemne. Konkretnie, dla trasy (1,3) otrzymaliśmy
wartość równą -1.
(3) Wybór trasy dającej największą obniżkę kosztów
Spośród tras niebazowych, wyłącznie tych posiadających ujemne wskaźniki optymalności,
wybieramy tę, dla której wskaźnik osiągnął najniższą wartość. W naszym przypadku jest tylko
jeden możliwy wybór – trasa (1,3).
(4) Cykl korygujący
W kolejnym kroku postępowania budujemy cykl korygujący. W polu wytypowanym w poprzednim kroku stawiamy znak „+” traktując je odtąd jako bazowe.
Następnie wykreślamy te wiersze i kolumny, które zawierają pojedyncze przewozy. Pamiętajmy, że trasa oznaczona plusem traktowana jest tak jakby przewożono tą trasą część dobra. Może
się poza tym zdarzyć, że po wykreśleniu danego wiersza (kolumny) kolejna kolumna (wiersz)
zawierać będzie pojedynczy przewóz. Wówczas należy ową kolumnę czy też wiersz również wykreślić.
W naszym przykładzie wykreślamy: kolumnę O1 i wiersz D2.
16 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
Tabela 6: Wybór trasy w
O1 O2
D1
40 20
D2
10
D3
30
popyt 40 60
cyklu korygującym
O3 podaż
+
60
10
60
90
60
160
Nieskreślonym przewozom przypisujemy znak „+” lub „–” tak, aby wszystkie dopisane w
ten sposób znaki znosiły się nawzajem. Otrzymamy:
Tabela 7: Wybór trasy w cyklu korygującym
O2
O3 podaż
D1
20 –
+
60
D3
popyt
30 +
60
60 –
60
90
160
(5) Określenie maksymalnego przewozu na trasie wybranej w kroku (3)
Wybrany przewóz ma być z jednej strony jak największy, z drugiej zaś nie można dopuścić
do pojawienia się w tabeli wartości ujemnych, gdyż naruszałoby to nałożone wcześniej warunki
brzegowe. Dlatego ograniczymy się tylko do tras oznaczonych minusem i wybierzemy najniższy
z dostępnych tam przewozów. W naszym przykładzie: k = min(20, 30) = 20. Łączny koszt
przewozu zmniejszy się o wartość:
k ∗ ∆13 = 20 ∗ (−1) = −20
i wyniesie: 720-20=700 zł
(6) Korekta planu przewozowego
Cykl korygujący przebiega wyłącznie przez pola oznaczone wcześniej plusem lub minusem.
Te pierwsze zostają powiększone o wartość k, zaś te drugie zmniejsza się o tę wielkość. Oto nowy
plan przewozowy o niższej wartości kosztu całkowitego oraz towarzysząca mu tabela wskaźników:
Tabela 8: Drugi plan przewozowy wraz z cyklem korygującym
O1
O2
O3
podaż
D1
40 –
20 +
60
D1
+
10 –
10
K =700
D3
50 + 40 –
90
popyt
40
60
60
160
Jak widać, powyższy plan przewozowy nie okazał się jeszcze optymalny (ujemna wartość
wskaźnika optymalności równa -1). Dlatego należy poprawić rozwiązanie, wprowadzając przewóz
na trasie (2,1). Zwróćmy uwagę, że w tabeli 8 nie można dokonać skreśleń wierszy i kolumn z
pojedynczymi przewozami. Nowy koszt przewozu zmniejszy się o 10*(-1)= -10.
Kolejna iteracja dała optymalny plan przewozowy, który można zapisać:


30 0 30
Xopt = 10 0 0 
0 60 30
17 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
Tabela 9: Tabela wskaźników dla 2 iteracji
v1
v2
v3
wartości ui
u1
5
7
6
0
1
u2
4
6
5
-1
-1
0
u3
2
4
3
-3
1
wartości vj
5
7
6
Tabela 10:
O1
D1
30
D1
10
D3
popyt 40
Optymalny plan przewozowy
O2 O3 podaż
30
60
10
Kmin = 690
60 30
90
60 60
160
Tabela 11: Tabela wskaźników dla ostatniej iteracji
v1
v2
v3
wartości ui
u1
5
7
6
0
1
u2
3
5
4
-2
1
1
u3
2
4
3
-3
1
wartości vj
5
7
6
UWAGA!
Jeżeli w tabeli wskaźników dla rozwiązania optymalnego, wystąpią wskaźniki optymalności równe zero dla zmiennych niebazowych, oznacza to, że istnieją jeszcze inne, alternatywne plany
przewozu o tej samej, minimalnej wartości łącznego kosztu.
1.6
Wybrane modyfikacje klasycznego zadania transportowego
Założenia występujące w klasycznym wariancie zadania transportowego mogą być uchylane.
Przedstawimy tutaj dwa przypadki:
1. Całkowitą blokadę trasy (tras);
2. Częściową blokadę trasy (tras).
Całkowita blokada trasy
Załóżmy, że na trasie z pierwszego gospodarstwa do pierwszego punktu skupu pojawiła się
blokada rolników niezadowolonych z cen skupu. Nie jest możliwe przewiezienie zboża na tej
trasie, ale zapotrzebowanie punktu skupu musi zostać spełnione, zaś gospodarstwo musi wysłać
swoje zboże.
Całkowita blokada na jednej lub większej ilości tras oznacza, że przewóz tam realizowany jest
całkowicie nieopłacalny. Należy o tym „poinformować” algorytm. Robi się to w ten sposób, że
18 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
na zablokowanej trasie wprowadza się bardzo wysoką (w porównaniu z pozostałymi, niezablokowanymi trasami) wartość jednostkowego kosztu przewozu6 . Wprowadzamy więc na interesującej
nas trasie koszt równy przykładowo 50 zł/t.


50 8 6
C =  3 6 5
3 4 3
Od tego miejsca zadanie rozwiązuje się tak jak klasyczne zadanie transportowe.
Częściowa blokada trasy
Załóżmy, że na trasie z trzeciego gospodarstwa do drugiego punktu skupu odbywa się remont
drogi. Z tego powodu można nią przewieźć co najwyżej 20 t zboża.
Powyższy warunek różni się od poprzedniego przypadku, ponieważ część dobra może zostać
daną trasą przewieziona po normalnie obowiązujących kosztach. Reszta musi zostać rozwieziona
innymi trasami.
Problem ten można rozwiązać dwojako:
1. rozszerzyć na czas rozwiązywania liczbę dostawców;
2. rozszerzyć na czas rozwiązywania liczbę odbiorców.
W pierwszym przypadku zmieniamy macierz kosztów C oraz wektor podaży a:
 


60
5 8 6
10
3 6 5



a=
20 , C = 3 4 3
70
3 50 3
W drugim zmieniamy macierz C i wektor popytu b:


5 8 8 6
b = 40 20 40 60 , C = 3 6 6 5
3 4 50 3
Dla tej części dobra, która nie zmieści się na częściowo zablokowanej trasie, wprowadzana
jest blokada całkowita. Należy jednak pamiętać, że wiersze 3 i 4 w pierwszym podejściu dotyczą
jednego dostawcy, zaś kolumny 2 i 3 w drugim podejściu dotyczą jednego odbiorcy. Zadanie
rozwiązuje się tak, jak wariant klasyczny. Dopiero podając odpowiedź scalamy uprzednio rozdzielone wiersze i kolumny, wracając do poprzednich rozmiarów zadania.
1.7
Minimalizacja pustych przebiegów
W zadaniu tego rodzaju chodzi o minimalizację drogi pokonywanej przez środki transportu bez
ładunku (tzw. pustych przebiegów). Środki te mają później posłużyć do rozwiezienia określonego
towaru. Założenia zadania są następujące:
1. Istnieje N punktów, między którymi odbywa się wymiana towarów.
2. Punkty te tworzą układ zamknięty.
3. Każdy z nich może być zarówno dostawcą jak i odbiorcą.
6
W literaturze można spotkać zalecenie, aby był on przynajmniej trzykrotnie wyższy niż najwyższy koszt
występujący w macierzy.
19 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
4. Towary przywozi się i wywozi tym samym środkiem transportu.
5. Znane są odległości między punktami.
6. Znany jest przewóz masy towarowej pomiędzy punktami (aij ) wyrażony liczbą pełnych
środków transportu (samochodów, wagonów itp.).
Oprócz powyższych założeń dla każdego punktu jesteśmy w stanie określić liczbę środków
transportu niezbędną do wywiezienia masy towarowej:
wi =
N
X
aij
j6=1
także liczbę środków transportu niezbędną do przywiezienia masy towarowej:
pi =
N
X
aij
j6=1
Zachodzi przy tym równość:
N
X
wi =
j6=1
N
X
pi
j6=1
Wywozy i przywozy dla pojedynczego punktu nie muszą być sobie równe. W zadaniu minimalizacji pustych przebiegów chodzi o to, aby zaopatrzyć w puste środki transportu te punkty,
dla których wywóz jest większy od przywozu. Środki te pochodzić mają z punktów, które nie
wykorzystują wszystkich docierających do nich środków transportu. W klasycznym rozumieniu tego zagadnienia minimalizuje się więc liczbę samochodokilmetrów7 związanych z pustymi
przejazdami zapewniając przy okazji niezbędną ilość pustych środków transportu.
Punkty, dla których zachodzi wi > pi potraktujemy jako odbiorców pustych środków transportu o popycie równym bi = wi − pi . Z kolei punkty gdzie wi < pi stają się dostawcami pustych
środków transportu o podaży ai = pi − wi . Punkty, dla których wi = pi eliminujemy z rozważań.
W ten sposób możemy utworzyć i rozwiązać klasyczne zadanie transportowe.
Przykład zadania minimalizacji pustych przebiegów8
Zminimalizować puste przebiegi samochodów o ładowności 50 t, przewożących drobnicę pomiędzy siedmioma miastami stanowiącymi układ zamknięty. Dzienne przywozy pi i wywozy wi
drobnicy do i z poszczególnych miast (w tonach) znalazły się w tablicy.
L
M
N
O
P
R
S
pi
7
8
L
0
M
20
0
N
50
40
0
O
100
20
100
0
P
150
30
150
40
0
R
200
50
200
30
80
0
500
1000
2000
1000
1000
300
S
100
20
100
150
70
60
0
0
Mogą to być równie dobrze wagonokilmetry lub inna podobna jednostka.
Przykład pochodzi z: Jędrzejczyk, Kukuła [2002], s. 117
20 z 30
wi
1000
2000
1000
100
200
1000
500
5800
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
W pierwszej kolejności należy określić, które miejscowości zostaną dostawcami, a które odbiorcami pustych samochodów. Obliczmy różnice pomiędzy przywozami a wywozami dla poszczególnych miast. Nie znamy z góry liczby samochodów przypadających na dane miasto. Dlatego najpierw dzielimy wielkości przywozów i wywozów przez ładowność pojedynczego pojazdu.
Następnie obliczamy pi − wi . Otrzymujemy:
L:
M:
N:
O:
P :
R:
S:
500 1000
−
= −10
50
50
1000 2000
−
= −20
50
50
2000 1000
−
= 20
50
50
1000 100
−
= 18
50
50
1000 200
−
= 16
50
50
300 1000
−
= −14
50
50
500
0
−
= −10
50
50
Dostawcami pustych samochodów zostaną miasta: N, O i P zaś odbiorcami: L, M, R i S. Na
tej podstawie tworzymy zadanie transportowe zamknięte z 3 dostawcami i 4 odbiorcami:
Dostawcy
N
O
P
bj
L
50
100
150
10
Odbiorcy
M
R
S
40 200 100
20 30 150
30 80
70
20 14
10
ai
20
18
16
54
Zmienne decyzyjne oznaczają liczbę pustych samochodów jaką dany dostawca ma przesłać
odpowiedniemu odbiorcy. Funkcja celu minimalizuje liczbę samochodokilometrów pustych przebiegów. Po rozwiązaniu zadania przy pomocy algorytmu transportowego otrzymujemy:


10 10 0 0
Xopt =  0 4 14 0  , Kmin = 2280
0 6 0 10
Odczytując rozwiązanie zauważamy, że np. z miasta N do miasta L należy przesłać 10 samochodów, podobnie jak do miasta M.
2
Zagadnienie optymalnego przydziału
Zagadnienie optymalnego przydziału jest dość podobne do zadania transportowego w sensie podobieństwa modelu decyzyjnego. Ogólnie w problemach tego rodzaju chodzi o przydział pewnych
zadań do miejsc ich realizacji. Założenia zadania optymalnego przydziału są następujące:
1. Dane jest n celów i m środków do ich realizacji (liczby celów i środków są sobie równe);
2. Każde skojarzenie i -tego celu oraz j -tego środka daje pewną korzyść cij ;
3. Każdy cel musi być zrealizowany, a każdy ze środków może być użyty tylko jeden raz;
21 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
4. Zmienna decyzyjna xij zdefiniowana jest następująco:
1, gdy i -ty cel jest realizowany przez j -ty środek;
xij =
0, w przeciwnym wypadku.
Należy znaleźć takie skojarzenia dla wszystkich celów i środków, aby zapewniały one jak
największą korzyść decydentowi. Model decyzyjny dla n=m wygląda następująco:
U (X) =
n X
m
X
cij xij → max(min)
(łączna korzyść)
i=1 j=1
n
X
i=1
m
X
xij = 1
i =1,2,...,n
(bilanse dla celów)
xij = 1
j =1,2,...,m
(bilanse dla środków)
j=1
xij ∈ {0, 1}
Liczba celów niekoniecznie musi równać się liczbie środków. W przypadku nadwyżki celów
wprowadzamy fikcyjne środki, które można interpretować np. jako zlecenie wykonania zadania firmie zewnętrznej. W sytuacji nadwyżki środków wprowadzamy fikcyjne cele, które można
rozumieć jako dodatkowe zadania do realizacji.
Zagadnienie optymalnego przydziału ma własną metodę rozwiązywania tzw. algorytm węgierski, ale po pewnych prostych przekształceniach da się je rozwiązać przy pomocy algorytmu
transportowego. Zilustrujemy to przykładem.
Przykład zadania optymalnego przydziału
W pewnym dziekanacie cztery sekretarki należy przydzielić do prowadzenia czterech różnych
prac biurowych. Na podstawie obserwacji oszacowano czas (w min.), jaki zajmuje im wykonywanie poszczególnych prac. Stosowne dane zawiera poniższa tabela. Zakładając, że każda z sekretarek będzie tylko jedną pracę, określić optymalny przydział z punktu widzenia minimalizacji
łącznego czasu wykonywania prac.
Sekretarki
1
2
3
4
1
40
50
42
36
Prace
2
3
50 25
40 36
50 30
45 36
4
35
40
40
45
Na podstawie danych z zadania tworzymy wektory podaży i popytu oraz macierz kosztów:
 


1
40 50 25 35
1


 , b = 1 1 1 1 , C = 50 40 36 40
a=
1
42 50 30 40
1
36 45 36 45
Zwróćmy uwagę na sposób wprowadzenia wektorów podaży (a) i popytu (b) nieobecnych w
treści zadania. Przyjmujemy, że ich składowe będą równać się 1. Następnie rozwiązujemy zadanie
wspomnianym już algorytmem transportowym. Jako rezultat uzyskujemy:


0 0 1 0
0 1 0 0

Xopt = 
0 0 0 1 , Kmin = 141
1 0 0 0
22 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
Macierz Xopt zawiera dokładnie jedną 1 w danym wierszu i kolumnie wskazującą przypisanie
środku do celu. Na przykład pracę 3 powinna wykonać sekretarka 1 zaś pracę 2 sekretarka 2.
Łączny, minimalny czas pracy wszystkich sekretarek wyniesie 141 minut.
3
Programowanie sieciowe
3.1
Najkrótsza droga w sieci
Zadanie tego rodzaju, jak sama nazwa sugeruje, służy do określania najkrótszej drogi łączącej węzeł początkowy ze wszystkimi pozostałymi węzłami w sieci. Stosowany tu algorytm jest
dwufazowy. Najpierw cechujemy (przypisujemy etykiety) wierzchołki. Rozróżnimy etykiety stałe
(oznaczymy je kwadratowymi nawiasami) i tymczasowe (okrągłe nawiasy), a każda z nich składa
się z dwóch wartości: najkrótszej drogi wiodącej do danego wierzchołka oraz numeru wierzchołka
będącego początkiem ostatniej krawędzi należącej do tej drogi. W iteracjach drugiej i następnych
dochodzić może do zmian etykiet tymczasowych, pod warunkiem znalezienia drogi krótszej niż
dotychczasowa. Jeżeli dla danego wierzchołka nie istnieje krótsza droga, przypisujemy mu stałą
etykietę.
Po ocechowaniu wszystkich wierzchołków stałymi etykietami następuje druga faza algorytmu,
w której na podstawie drugich składowych etykiet tworzymy najkrótsze drogi łączące wierzchołek początkowy ze wszystkimi pozostałymi wierzchołkami. Obie fazy mają następujący przebieg:
Faza 1 (cechowanie wierzchołków)
Iteracja 1
Cechujemy na stałe wierzchołek 1 przyporządkowując mu etykietę stałą (0,S ). Poszukujemy
krawędzi, które rozpoczynają się w tym wierzchołku. Wierzchołkom kończącym te krawędzie
przypisujemy etykiety tymczasowe.
Iteracja k (k 6 n)
Z ocechowanych tymczasowo wierzchołków wybieramy ten, którego pierwsza składowa jest
najmniejsza i cechujemy go na stałe. Jeśli nie możemy jednoznacznie wskazać wierzchołka, wybieramy ten o najniższym numerze. Znajdujemy krawędzie prowadzące od tego wierzchołka do
wierzchołków, które nie zostały jeszcze ocechowane na stałe. Sprawdzamy czy droga przechodząca przez rozpatrywany wierzchołek jest krótsza od aktualnie obowiązującej. Jeśli tak się stało,
zmieniamy etykietę tymczasową. W przeciwnym wypadku, etykieta nie ulega zmianie.
Faza 2 (identyfikacja najkrótszych dróg)
Wykorzystujemy w niej drugą składową etykiety. Zaczynając od wierzchołka numer 2, identyfikujemy krawędzie, które tworzą najkrótszą drogę. Identyfikujemy kolejne krawędzie poszukiwanej drogi tak długo, aż dojdziemy do początkowego wierzchołka.
Przykład poszukiwania najkrótszych dróg w sieci
Firma budowlana prowadzi 5 inwestycji. Pomiędzy centralą a poszczególnymi placami budów
przemieszcza ludzi, maszyny i materiały. Zależy więc jej na minimalizacji kosztów transportu.
Sieć dróg wraz z odległościami znalazła się na rysunku 8. Wierzchołek 1 to centrala firmy. Należy
znaleźć najkrótsze drogi prowadzące z siedziby firmy do wszystkich placów budowy9 . Wyjściową
sieć do przykładu znajdziemy na rysunku 8.
9
Przykład pochodzi z książki T. Trzaskalika „Wprowadzenie do badań operacyjnych z komputerem”
23 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
6
2
8
3
5
4
1
5
10
4
2
7
1
1
7
3
6
Rysunek 8: Sieć dróg łączących centralę z budowami
(8,1)
6
2
8
1
[0,S]
3
5
4
2
1
3
(2,1)
5
10
4
(4,1)
7
1
7
6
Rysunek 9: Najkrótsza droga w sieci, iteracja 1
Iteracja 1
Cechujemy na stałe wierzchołek 1, a którego wychodzą 3 krawędzie: 1-2, 1-3 i 1-4. Wierzchołki
2, 3 i 4 otrzymują następujące etykiety tymczasowe: (8,1), (2,1) i (4,1). Iterację tę ilustruje
rysunek 9.
Iteracja 2
Sprawdzając dotychczasowe etykiety tymczasowe stwierdzamy, że najmniejsza wartość pierwszej składowej dostępnych etykiet tymczasowych występuje dla wierzchołka 3. Oznacza to, że
będzie on ocechowany na stałe. Wychodzą z niego następujące krawędzie: 3-2, 3-4 i 3-6. Pierwsza z nich prowadzi do wierzchołka 2, który ma już etykietę tymczasową. Ponownie sprawdzamy
pierwszą składową etykiety. Droga wiodąca z wierzchołka 1 przez wierzchołek 3 (równa 2+5)
jest krótsza od dotychczasowej (równej 8). Bardziej opłaca się skorzystać z tej drogi. Dlatego
wierzchołek 2 otrzyma nową etykietę tymczasową: (7,3).
Droga wiodąca do wierzchołka 4 ma etykietę tymczasową (4,1). Wybór drogi przez wierzchołek 3 sprawi, że będzie ona krótsza (2 + 1 < 4) od tej, którą podawała lewa składowa etykiety.
Dlatego tutaj również zmienimy etykietę tymczasową na (3,3).
Wierzchołek 6 nie posiada etykiety. Droga do niego prowadzi w tej chwili z wierzchołka
1 przez wierzchołek 3 i jest równa 9. Etykieta tymczasowa wierzchołka 6 ma składowe (9,3).
Postępowanie w tej iteracji i nowy zbiór etykiet ilustruje rysunek 10. Iteracja 3
Wierzchołek 4 otrzyma etykietę stałą, ponieważ ma najmniejszą wartość pierwszej składowej
spośród dotychczasowych etykiet tymczasowych. Wychodzą z niego następujące krawędzie: 4-2,
4-5 i 4-6.
Krawędź 4-2 prowadzi do wierzchołka o tymczasowej etykiecie (7,3). Nowa droga, która
przechodzi przez wierzchołek 4 jest krótsza od obowiązującej do tej pory (3 + 3 < 7), a wiodącej
przez wierzchołek 3. Zmieniamy więc etykietę na (6,4).
24 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
(7,3)
6
2
8
1
[0,S]
5
3
4
1
2
5
10
4
(3,3)
7
1
7
3
[2,1]
6
(9,3)
Rysunek 10: Najkrótsza droga w sieci, iteracja 2
(6,4)
(13,4)
6
2
8
1
[0,S]
5
3
4
2
1
5
10
4
[3,3]
7
1
7
3
[2,1]
6
(4,4)
Rysunek 11: Najkrótsza droga w sieci, iteracja 3
Droga wiodąca do wierzchołka 6 okazuje się krótsza od uprzednio wyznaczonej drogi. Nowa
etykieta (zastępująca poprzednią) jest następująca: (4,4).
Wierzchołek 5 nie był dotąd cechowany. Prowadząca do niego droga wiodąca przez wierzchołek 4 ma długość 3+10=13, stąd etykieta tymczasowa ma postać (13,4). Całe postępowanie
w tej iteracji można prześledzić na rysunku 11.
Iteracja 4
Jako ocechowany na stałe wybieramy wierzchołek 6. Jedynie wierzchołek 5 nie ma stałej
etykiety i jest osiągalny z wierzchołka 6. Droga, która prowadzi do niego przez wierzchołek 5
jest krótsza od dotychczasowej (4 + 7 < 13). Nowa etykieta tymczasowa jest następująca: (11,5)
(patrz rysunek 12).
Iteracja 5
Jako następny, ocechowany na stałe będzie wierzchołek 2. Ma on najmniejszą lewą składową
etykiety spośród wciąż nieocechowanych na stałe wierzchołków (czyli 2 i 5). Sytuacja ta znalazła
się na rysunku 13.
Iteracja 6
Tylko wierzchołek 5 nie ma jeszcze stałej etykiety i jest osiągalny z wierzchołka 2. Jeżeli
sprawdzimy długość drogi wiodącej do wierzchołka 5 przez wierzchołek 2 to okazuje się, że nie
uda się uzyskać poprawy (6 + 6 > 11). Jego etykieta pozostaje bez zmian, a jako że jest to
ostatni nieocechowany na stałe wierzchołek, w następnej iteracji dokonamy jedynie zamiany
jego etykiety z tymczasowej na stałą (patrz rysunek 14).
25 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
(6,4)
(11,6)
6
2
8
1
[0,S]
3
5
4
1
2
5
10
4
[3,3]
7
1
7
3
[2,1]
6
[4,4]
Rysunek 12: Najkrótsza droga w sieci, iteracja 4
[6,4]
(11,6)
6
2
8
1
[0,S]
3
5
4
2
1
5
10
4
[3,3]
7
1
7
3
[2,1]
6
[4,4]
Rysunek 13: Najkrótsza droga w sieci, iteracja 5
[6,4]
[11,6]
6
2
8
1
[0,S]
5
3
4
1
2
4
[3,3]
7
1
7
3
[2,1]
5
10
6
[4,4]
Rysunek 14: Najkrótsza droga w sieci, iteracja 6
Po ocechowaniu na stałe wszystkich wierzchołków przechodzimy do drugiej fazy algorytmu.
Konstruujemy w niej drogi wiodące z wierzchołka początkowego do wszystkich wierzchołków
sieci. Wykorzystujemy w tym celu drugą składową etykiety. Na przykład dla wierzchołka 2 druga
składowa (czyli 4) wskazuje, że ostatni odcinek najkrótszej drogi zaczyna się w wierzchołku 4.
Z kolei najkrótsza droga do niego prowadzi z wierzchołka 3, do którego docieramy z wierzchołka
1. W tabeli 12 znalazły się wyznaczone w opisany sposób najkrótsze drogi w sieci dla naszego
przykładu.
26 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
Tabela 12: Zestawienie najkrótszych dróg w sieci
Wierzchołek
2
3
4
5
6
3.2
Najkrótsza droga
1-3-4-2
1-3
1-3-4
1-3-4-6-5
1-3-4-6
Odległość
6
2
3
4
11
Maksymalny przepływ w sieci
W zadaniu maksymalnego przepływu w sieci każdą krawędź grafu opisujemy dwoma parametrami wyrażającymi wielkości przepływu (przepustowość i przepustowość rezydualna) w obu
kierunkach (nie muszą one być jednakowe). Różne drogi mogą charakteryzować się różnymi
przepustowościami. Należy w tej sytuacji wyznaczyć maksymalny możliwy przepływ dla danej
sieci wraz z trasami, które go zapewnią oraz z uwzględnieniem przepustowości poszczególnych
tras. Wierzchołek początkowy nosi nazwę źródła zaś końcowy ujścia.
Równowaga przepływu dla wszystkich branych pod uwagę krawędzi musi zostać zapewniona, co należy rozumieć następująco: aktualnie wykorzystywany przepływ nie może przekroczyć
maksymalnej przepustowości krawędzi zaś dopuszczalne wykorzystanie krawędzi w określonym
kierunku powoduje zmniejszenie przepustowości w tym kierunku (o wykorzystaną wielkość) oraz
zwiększeniem przepustowości w kierunku przeciwnym (o tę samą wielkość).
Algorytm postępowania podczas poszukiwania najkrótszej drogi w sieci przebiega następująco:
1. Znajdujemy dowolną drogę ze źródła do ujścia, dla której przepustowości krawędzi są
większe od zera. Jeżeli nie jest to możliwe, przepływ maksymalny nie istnieje lub został
wyznaczony w kroku poprzednim.
2. Na wyznaczonej drodze znajdujemy krawędź o najmniejszej przepustowości w rozpatrywanym kierunku, którą oznaczymy jako p.
3. Zmniejszamy przepustowość krawędzi tworzących rozpatrywaną drogę o p i powiększamy
o tę wielkość odpowiednie przepustowości rezydualne. Następnie wracamy do kroku 1.
Przykład poszukiwania maksymalnego przepływu w sieci
Z powodu remontu wyłączono z użytku odcinek pewnej drogi10 . Zaproponowano w to miejsce
objazdy drogami o różnej nawierzchni i zróżnicowanych ograniczeniach prędkości. Wpływa to
na przepustowości odcinków wybranych dróg. Rozpatrywaną, alternatywną sieć transportową
przedstawiono na rysunku 15.
Iteracja 1
Konstruujemy pierwszą drogę ze źródła do ujścia. Mamy ich kilka do wyboru. Arbitralnie wybierzemy 1-2-6-7. Jest to możliwa droga, ponieważ w kierunku, w którym się posuwamy, wszystkie przepustowości są większe od zera. Wyznaczamy następnie minimalną wartość
przepustowości zgodną z kierunkiem przepływu. Jest nią wartość 2 występująca na trasie 6-7.
Korygujemy teraz przepustowości dla krawędzi wybranej trasy w ten sposób, że te zgodne z
kierunkiem przepływu zmniejszamy a przeciwne powiększamy o wybraną wielkość przepływu co
10
Przykład pochodzi z książki T. Trzaskalika „Wprowadzenie do badań operacyjnych z komputerem”
27 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
(3,0)
2
(5,0)
6
(2,2)
(6,0)
(1,2)
(0,1)
(4,0)
3
(2,0)
5
1
(3,0)
(0,1)
(2,0)
(7,0)
4
(4,0)
7
Rysunek 15: Wyjściowa sieć do przykładu maksymalizacji przepływu w sieci
ilustruje tabela 13. Graf po zmianie przepływów na wymienionych krawędziach znajduje się na
rysunku 16.
Iteracja 2
Wybieramy następną trasę pamiętając, że droga 6-7 ma przepustowość w kierunku ujścia
równą 0. Niech nowa trasa będzie następująca: 1-2-5-7. Minimalny przepływ na tej trasie wynosi
1. Ponownie zmieniamy przepływy na krawędziach wyróżnionej trasy co ilustruje tabela 14. Z
kolei sieć z nowymi przepływami znajduje się na rysunku 17.
Iteracja 3
Kolejną rozpatrywaną trasą będzie 1-3-5-7. Najmniejsza wartość przepływu dla niej wyniesie
2. W tabeli 15 znalazły się modyfikacje tego przepływu a na rysunku 18 sieć po zmianach.
Tabela 13: Zmiany przepustowości dla 1 iteracji
Krawędź Przepustowości Przepustowości
poprzednie
nowe
1-2
5
0
5-2=3 0+2=2
2-6
3
0
3-2=1 0+2=2
6-7
2
0
2-2=0 0+2=2
Tabela 14: Zmiany przepustowości dla 2 iteracji
Krawędź Przepustowości Przepustowości
poprzednie
nowe
1-2
3
2
3-1=2 2+1=3
2-5
1
2
1-1=0 2+1=3
5-7
3
0
3-1=2 0+1=1
Tabela 15: Zmiany przepustowości dla 3 iteracji
Krawędź Przepustowości Przepustowości
poprzednie
nowe
1-3
6
0
6-2=4 0+2=2
3-5
4
0
4-2=2 0+2=2
5-7
2
1
2-2=0 1+2=3
28 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
Tabela 16: Zmiany przepustowości dla 4 iteracji
Krawędź Przepustowości Przepustowości
poprzednie
nowe
1-4
7
0
7-4=3 0+4=4
4-7
4
0
4-4=0 0+4=4
Tabela 17: Maksymalny przepływ w sieci dla przykładu
Droga
Wielkość przepływu
1-2-6-7
2
1-2-5-7
1
1-3-5-7
2
1-4-7
4
Maksymalny przepływ
9
(1,2)
2
(3,2)
6
(2,2)
(6,0)
(1,2)
(0,1)
(4,0)
3
(0,2)
5
1
(3,0)
(0,1)
(2,0)
(7,0)
4
(4,0)
7
Rysunek 16: Przepływy w sieci po iteracji 1
Iteracja 4
Wybieramy drogę wiodącą przez następujące wierzchołki: 1-4-7. Minimalna wartość przepływu to 4. Stosowne obliczenia znalazły się w tabeli 16.
Analizując rysunek 19 stwierdzamy, że nie uda się już skonstruować trasy, która będzie
prowadzić od źródła do ujścia. Wcześniej lub później dotrzemy do wierzchołka, z którego nie
można ruszyć dalej. Będzie tak na przykład dla trasy 1-4-5 ponieważ z wierzchołka 5 przepływ
zablokowany jest zarówno do wierzchołka 6 jak i 7. Możemy więc przystąpić do wyznaczenia
maksymalnego przepływu w sieci do czego posłużą przepustowości czterech znalezionych dróg.
Odpowiednie dane znalazły sie w tabeli.
29 z 30
Narzędzia wspomagani dec. logist.
Opracował: dr Adam Kucharski
(1,2)
2
(2,3)
6
(2,2)
(0,3)
(0,1)
(4,0)
(6,0)
3
(0,2)
5
1
(2,1)
(0,1)
(2,0)
(7,0)
4
7
(4,0)
Rysunek 17: Przepływy w sieci po iteracji 2
(1,2)
2
(2,3)
6
(2,2)
(0,3)
(0,1)
(2,2)
(4,2)
3
(0,2)
5
1
(0,3)
(0,1)
(2,0)
(7,0)
4
7
(4,0)
Rysunek 18: Przepływy w sieci po iteracji 3
(1,2)
2
(2,3)
6
(2,2)
(4,2)
(0,3)
(0,1)
(2,2)
3
(0,2)
5
1
(0,3)
(0,1)
(2,0)
(3,4)
4
(0,4)
Rysunek 19: Przepływy w sieci po iteracji 4
30 z 30
7