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