KLASYCZNE ZAGADNIENIE TRANSPORTOWE (KZT). Przez klasyczne zagadnienie transportowe rozumiemy problem znajdowania najtańszego programu przewozowego jednorodnego dobra pomiędzy punktami nadania (m liczba nadawców) i punktami odbioru (n liczba odbiorców). Zmienne decyzyjne: x ij, i=1,,m j=1,,n - ilość towaru dostarczana przez i-tego dostawcę j-temu odbiorcy. Oznaczenia: a=[a i ], i=1,,m wektor podaży, b=[b j ], j=1,,n wektor popytu,
C=[c ij ], macierz jednostkowych kosztów transportu, r ij przepustowość trasy (i,j); 0 tylko dla tras, dla których rzeczywiście przepustowość jest ograniczona. Ogólnie, w klasycznym zadaniu transportowym 0 =1,, ; =1,,, tzn. przepustowości tras są nieograniczone. Zamiast minimalizacji jedynie całkowitych kosztów transportu można w funkcji kryterium uwzględnić łącznie koszty produkcji i transportu, odległości lub całkowity czas transportu.
Łączna podaż dostawców powinna być nie mniejsza niż łączny popyt odbiorców. m i= 1 n a i b j = 1 j Jeżeli powyższy warunek spełniony jest jako równość, mamy do czynienia z zamkniętym zagadnieniem transportowym, jeżeli jako nierówność ostra otwartym zagadnieniem transportowym. Każde otwarte ZT można przekształcić w zamknięte poprzez rozszerzenie listy punktów odbioru o dodatkowy n+1 punkt, którego zapotrzebowanie jest równe różnicy pomiędzy sumą podaży a sumą popytu. Dalej będziemy rozważać wyłącznie zamknięte ZT.
D1 Punkty Nadania- PODAŻ a 1 =1200 32 35 30 40 Punkty Odbioru- POPYT b 1 =1000 O1 O2 D2 a 2 =1000 37 40 42 b 2 =500 25 O3 D3 35 a 3 = 800 28 15 20 b 3 =750 O4 b 4 =750
Przykład: Firma dostarcza farmaceutyk produkowany w trzech fabrykach do czterech centrów dystrybucyjnych. Celem jest opracowanie planu przewozów, który charakteryzowałby się możliwie najmniejszym całkowitym kosztem transportu. Założenia: Jednostkowe koszty transportu są znane i stałe, przewozy odbywają się w tym samym czasie, rozważane są tylko trasy z fabryk do centrów dystrybucyjnych, łączny popyt jest równy łącznej podaży towaru Zmienne decyzyjne: x ij ilość towaru przewieziona z fabryki i do centrum j; i=1,2,3 j=1,2,3,4. Mamy do rozwiązania zamknięte zadanie transportowe: łączny popyt jest równy łącznej podaży produktów.
Min K(x)= 35X 11 +30X 12 +40X 13 + 32X 14 +37X 21 +40X 22 +42X 23 +25X 24 + 40X 31 +15X 32 +20X 33 +38X 34 Ograniczenia podażowe: X 11 + X 12 + X 13 + X 14 = 1200 X 21 + X 22 + X 23 + X 24 = 1000 X 31 + X 32 + X 33 + X 34 = 800 Ograniczenia popytowe: X 11 + X 21 + X 31 = 1000 X 12 + X 22 + X 32 = 500 X 13 + X 23 + X 33 = 750 X 14 + X 24 + X 34 = 750 Xij >= 0 i=1,,3 j=1,,4
KLASYCZNE ZAGADNIENIE TRANSPORTOWE (KZT) min Model decyzyjny: K (x) = c x 1 1 ij (1) i (2) (3) (4) n m n = j = x ij = ai i = 12,,..., m j= 1 m x ij = bj j = 12,,..., n i= 1 x ij 0 i = 12,,..., m j = 12,,..., n (WARUNKI BRZEGOWE) ij (łączny koszt transportu) (WARUNKI DLA DOSTAWCÓW) (WARUNKI DLA ODBIORCÓW) Model KZT jest liniowym modelem decyzyjnym. Może być rozwiązywany metodami rozwiązywania zadań PL. Użycie metody simpleks jest poprawne, ale nieefektywne.
Twierdzenie 1 Jeżeli a i (i=1,2,...,m) oraz b j (j=1,2,...,n) są liczbami nieujemnymi to zagadnienie transportowe (1)-(4) ma zawsze rozwiązanie. Twierdzenie 2 Jeżeli a i (i=1,2,...,m) oraz b j (j=1,2,...,n) są liczbami całkowitymi, to każde dopuszczalne rozwiązanie bazowe zagadnienia transportowego przyjmuje również wartości całkowite. Twierdzenie 3 W układzie równań (2)-(3) zawsze jedno równanie, dowolnie wybrane spośród m+n równań, jest liniową kombinacją pozostałych m+n-1 równań. Wniosek 1: Wymiar bazy w zagadnieniu transportowym wynosi m+n-1. Wniosek 2: W rozwiązaniu dualnym, sprzężonym z dowolnym dopuszczalnym rozwiązaniem bazowym zadania PL (1)-(4), przynajmniej jedna ze składowych jest zawsze równa zero. Wniosek 3: niezdegenerowane rozwiązanie bazowe zagadnienia (1)-(4) posiada m+n-1 niezerowych składowych. Wniosek 4: jednoznaczny optymalny program przewozowy wykorzysta nie więcej niż m+n-1 spośród ogólnej liczby m*n tras przewozowych.
STORM moduł TRANSPORTATION
STORM WPROWADZANIE DANYCH
Algorytm: Rozwiązanie wstępne metodą kąta północno-zachodniego (North-West Corner)
Powyższy ekran przedstawia macierz przewozów X o wymiarach 3x4 (trzech dostawców row 1 do row 3 oraz 4 odbiorców column 1 do column 3), wektor podaży (kolumna supply) oraz wektor popytu (wiersz demand). Liczby na czarnym polu w macierzy X to wielkości przewozów proponowane przez rozwiązanie wstępne uzyskane metodą kąta pn.-zach. Metoda ta rozpoczyna alokację towarów na trasy rozpoczynając od trasy (1,1), przydzielając zawsze maksymalną dopuszczalną ilość towaru. Następnie dokonuje się wyboru trasy w kierunku południowym bądź wschodnim, w zależności od ilości towarów pozostałych w odpowiadającym punkcie dostaw bądź ilości niezaspokojonego popytu w odpowiadającym punkcie odbioru. Czasem, w przypadku wyczerpania zarówno podaży jak i popytu, wybierana jest trasa w kierunku pd.-wsch. mamy wówczas do czynienia z tzw. degeneracją rozwiązania. Degeneracja rozwiązania oznacza, ze liczba tras, na których pojawią się przewozy towarów będzie mniejsza niż m+n-1. W przypadku degeneracji należy przyjąć, że na wybranej trasie, na wschód albo na południe, pojawi się przewóz, ale będzie on, oczywiście, równy zero.
Trasy, na których pojawiają się przewozy to tzw. trasy bazowe. Wielkości przewozów na trasach bazowych to wartości zmiennych bazowych. Ilość zmiennych bazowych MUSI być równa m+n-1. Następny etap algorytmu polega na sprawdzeniu, czy uzyskane rozwiązanie jest optymalne, tzw. odpowiada mu minimalna możliwa wartość łącznych kosztów transportu. Sprawdzenie polega na: wyznaczeniu wartości elementów dwóch ciągów liczbowych: {u i } i=1,,m, {v j } j=1,,n. Wartości te znajdujemy jako rozwiązanie układu równań: dla tras bazowych (których jest m+n-1) spełnione są warunki = +. Ponieważ liczba nieznanych wartości wynosi m+n, a mamy m+n-1 równań odpowiadających zmiennym bazowym układ nie ma jednoznacznego rozwiązania. Możemy uzyskać rozwiązanie warunkowe przyjmuje się (umowa), że =0 i przy tym warunku znajduje się pozostałe wartości elementów obu ciągów.
Dla tras niebazowych wyznacza się wartości wskaźników optymalności według wzoru: = +. Program STORM podaje wartości elementów ciągu {u i } i=1,,m w ostatniej kolumnie tablicy ponad wartościami podaży w punktach dostaw oraz wartości elementów ciągu {v j } j=1,,n w ostatnim wierszu tablicy ponad wartościami popytu w punktach odbioru. Dla tras niebazowych, w komórkach tablicy pokazane są: w lewym górnym rogu wartość kosztu jednostkowego, w prawym dolnym rogu - wartość wskaźnika optymalności. Rozwiązanie jest optymalne, jeżeli wszystkie wskaźniki optymalności są 0. Dla tras bazowych, z definicji, są one równe zero. Jeżeli dla wszystkich tras niebazowych wartości wskaźników są > 0 oznacza to, że wskazane rozwiązanie jest OPTYMALNE i JEDNOZNACZNE. Jeżeli dla wszystkich tras niebazowych wartości wskaźników są 0 oraz dla trasy niebazowej pojawi się zerowa wartość wskaźnika optymalności, oznacza to, że uzyskane rozwiązanie jest OPTYMALNE i NIEJEDNOZNACZNE (istnieje inne rozwiązanie bazowe, któremu odpowiada ta sama wartość funkcji kryterium minimalnych kosztów transportu).
Jeżeli przynajmniej jeden ze wskaźników optymalności jest UJEMNY, oznacza to, że rozwiązanie nie jest optymalne można znaleźć rozwiązanie bazowe, któremu odpowiadają mniejsze koszty transportu. Wartość ujemnego wskaźnika optymalności pokazuje, jak zmieni się funkcja kosztów, jeżeli dokonamy takiej zmiany alokacji towarów na trasach, że na wybranej trasie niebazowej pojawi się jednostka towaru. Na przykład, wartość wskaźnika optymalności dla trasy (2,4) wynosi -35. Oznacza to, że gdyby tak zmienić rozwiązanie (zachowując spełnione warunki podażowe i popytowe), że na trasie (2,4) pojawi się jednostka towaru (trasa stanie się bazowa i wartość nowej zmiennej bazowej x 2,4 będzie równa 1, to łączne koszty związane z nowym rozwiązaniem będą niższe o 35 zł. Analizując wartości UJEMNYCH wskaźników optymalności, dokonujemy wyboru trasy NIEBAZOWEJ, na którą najbardziej opłaca się dokonać alokacji (odpowiada jej największy co do modułu ujemny wskaźnik optymalności). Trasę tę program STORM oznacza znakiem +.
W następnym kroku projektujemy odpowiednie zmiany na trasach bazowych, tak aby nie zakłócić bilansu podaży i popytu. Wybrane trasy bazowe zaznaczone są w tablicy znakami - i +. Dokonujemy przesunięcia towarów wzdłuż wskazanej ścieżki zgodnie z projektem. Największa ilość towarów, które możemy przesunąć wzdłuż ścieżki (dająca największy możliwy spadek wartości funkcji kryterium), jest równa minimum z ilości występujących na trasach oznaczonych znakiem - (aby nie uzyskać niedopuszczalnej ujemnej wartości). Zmianę wartości funkcji kryterium można przewidzieć mnożąc wartość wskaźnika optymalności przez wyznaczoną ilość przesuwanych towarów. Po uzyskaniu nowego rozwiązania bazowego należy sprawdzić jego optymalność, wyznaczając nowe wartośći elementów ciągów {u i } i=1,,m, {v j } j=1,,n oraz wskaźników optymalności i, ewentualnie, dokonać dalszych poprawek rozwiązania. Rozwiązanie bazowe, uzyskane w pierwszej iteracji algorytmu transportowego (bazowa stała się trasa (2,4) natomiast usunięta została trasa (2,3); wzdłuż zaznaczonej ścieżki przesunięto 700 jednostek towaru), pokazuje następna tablica programu STORM.
Rozwiązanie uzyskane w pierwszej iteracji nie jest optymalne. W drugiej iteracji do bazy wprowadzona zostanie trasa (3,2). I tak dalej az do uzyskania rozwiązania optymalnego. Rozwiązanie optymalne jest jednoznaczne dla tras niebazowych wszystkie wskaźniki optymalności są większe od zera. Interpretacja wartości wskaźnika optymalności dla trasy niebazowej, np. wskaźnika dla trasy (3,4) równego 30, jest następująca: gdyby zastosować w praktyce rozwiązanie bazowe nieoptymalne, w którym na trasie (3,4) pojawiłaby się jednostka towaru, to koszty takiego rozwiązania będą wyższe o 30 zł w porównaniu z rozwiązaniem optymalnym
Rozwiązanie poprawione
Rozwiązanie optymalne
KLASYCZNY ALGORYTM TRANSPORTOWY (KAT) Krok [1] - ustal początkowy program przewozowy. Rozwiązaniem początkowym może być dowolny DOPUSZCZALNY BAZOWY program przewozowy. Popularnymi metodami generowania takich rozwiązań są: metoda kąta północno-zachodniego (NW corner) oraz metoda minimalnego kosztu w macierzy C. Krok [2] - sprawdź czy aktualny program przewozowy jest optymalny Kryterium optymalności. Aktualne rozwiązanie uznamy za optymalne, jeżeli dla wszystkich tras NIEBAZOWYCH spełniony będzie warunek: = + 0. Krok [3] - wyznacz trasę dającą największą obniżkę kosztów Kryterium wejścia. Spośród tras niebazowych, dla których wskaźnik optymalności jest ujemny wybieramy trasę dającą największą jednostkową obniżkę kosztów. Niech będzie to trasa {k, l} taka, że:
= min #$ %& { } =1,, =1,, Krok [4] - zbuduj cykl korygujący przewozy Cykl korygujący przewozy budujemy w tabeli (macierzy) rozwiązań. Budowa cyklu korygującego składa się z trzech działań. 1. Postaw znak "+" na polu {k, l} wytypowanym w kroku [3] i traktuj dalej to pole jako pole bazowe 2. Wykreślaj sekwencyjnie wiersze i kolumny, które zawierają po jednym nieskreślonym polu bazowym. Po skończonej ilości skreśleń pozostaną zawsze co najmniej dwa nieskreślone wiersze i dwie nieskreślone kolumny. 3. Przypisz znak "+" lub "-" wszystkim polom bazowym leżącym w nieskreślonych wierszach i kolumnach. Przypisywanie znaków musi być prowadzone tak, aby w każdym wierszu i kolumnie gdzie się pojawił się znak "+" lub "-" istniał znak przeciwny do niego. Wygodnie jest zacząć zawsze od pola {k, l}, gdzie wcześniej postawiono już znak +. Krok [5] - ustal maksymalny przewóz δ na trasie ustalonej w [3]. Kryterium wyjścia. Ustalamy przewóz na trasie {k, l} wytypowanej w kroku [3] oraz trasę, którą usuniemy z listy tras bazowych.
Oznaczmy: G + - zbiór tras bazowych oznaczonych w cyklu znakiem "+ G _ - zbiór tras bazowych oznaczonych w cyklu znakiem "-" Bazę (ściślej: listę zmiennych bazowych) opuści zmienna bazowa należąca do zbioru G _, która ma najmniejszą wartość. Niech będzie to zmienna związana z trasą {r, s}: )= *+ = min, #$. / { } Krok [6] - skoryguj program przewozowy wzdłuż cyklu. Przejście do sąsiedniego rozwiązania bazowego: Nowy (poprawiony) program przewozowy X wyznacza się następująco: Idź do kroku [2]. =1 ) dla 5,6 G_ +) dla 5,6 G 9 dla 5,6 5G 9 G < 6
Obliczenia KAT wygodnie jest prowadzić w tabelkach: Przewozy O1 O2 O3 O4 PODAŻ D1 1200 D2 1000 D3 800 POPYT 1000 500 750 750 3000 Ocena rozwiązania bazowego: Przewozy O1 O2 O3 O4 u i D1 0 D2 D3 v j
Otwarte zagadnienie transportowe (podaż przewyższa popyt) sprowadza się do zamkniętego zagadnienia poprzez dodanie dodatkowego punktu odbioru, którego popyt określony jest jako nadwyżka łącznej podaży nad łącznym popytem. Specjalne problemy: Blokowanie tras, Ograniczona przepustowość tras, Zagadnienie transportowe z punktami przeładunkowymi, Minimalizacja pustych przebiegów i inne.
ZAGADNIENIE PRZYDZIAŁU 1. m pracowników zostaje przydzielonych do m zadań. 2. Koszt jednostkowy c ij oznacza koszt wykonania zadania j przez i-tego pracownika 3. Zmienne takiego zadania są zmiennymi zero-jedynkowymi.
ALGORYTM WĘGIERSKI Dénes König Jenö (lub Eugene) Egervary (1931) On combinatorial properties of matrices (w jęz. węgierskim) Harold W. Kuhn (1955) The Hungarian Method for the Assignment Problem
Dane: Macierz kosztów C = [cij]. Krok 1. Przekształcenie macierzy kosztów C = [c ij ] tak, aby w każdym jej wierszu i w każdej kolumnie występowało przynajmniej jedno zero. W tym celu od każdego wiersza macierzy odejmuje się jego najmniejszy element i następnie (jeżeli trzeba) od każdej kolumny odejmuje się jej najmniejszy element. Krok 2. Skreślenie w przekształconej macierzy wierszy i kolumn zawierających zera możliwie najmniejszą liczbą linii (poziomych i pionowych). Jeżeli najmniejsza liczba linii niezbędnych do pokrycia wszystkich zer jest równa wymiarowi macierzy, czyli N, to można przejść do kroku 3. i wyznaczyć rozwiązanie optymalne. W przeciwnym przypadku należy przejść do kroku 4.
Krok 3. Ustalenie rozwiązania optymalnego, polegające na takiej konstrukcji macierzy X=[x ij ], aby jedynki znalazły się tylko na tych miejscach, na których w przekształconej macierzy kosztów występują zera (w każdym wierszu i każdej kolumnie może występować tylko jedna jedynka). Krok 4. Jeżeli liczba skreśleń jest mniejsza od rozmiaru macierzy N, w bieżącej macierzy kosztów należy znaleźć najmniejszy nieskreślony element i ten element: odjąć od elementów nieskreślonych, dodać do elementów podwójnie skreślonych. Elementy skreślone jedną linią zostawiamy bez zmian. Wrócić do kroku 2.
PRZYKŁAD Problem polega na podjęciu decyzji, do którego miejsca kontroli jakości i składowania mają być dostarczane produkty (małe urządzenia elektryczne) z 5 linii montażowych. Produkty z każdej z linii montażowych są kontrolowane tylko na jednym stanowisku kontroli. Dane dotyczą czasu dostarczania produktów w minutach. Minimalizowana funkcja kryterium łączny czas.
Linia montażowa S 1=1 1 Miejsce kontroli jakości A D 1=1 S 2 =1 2 B D 2 =1 S 3 =1 3 C D 3 =1 S 4=1 4 D D 4=1 S 5 =1 5 E D 5 =1
Model programowania liniowego dla zagadnienia przydziału Min 10X 11 + 4X 12 + + 20X 54 + 19X 55 S.T. X 11 + X 12 + X 13 + X 14 + X 15 = 1 X 21 + X 22 + + X 25 = 1 X 51 + X 52 + X 53 + X 54 + X 55 = 1 X 11 + X 21 + X 31 + X 41 + X 51 =1 X 12 + X 22 + X 32 + X 42 + X 52 =1 X 15 + X 25 + X 35 + X 45 + X 55 =1 Wszystkie zmienne są nieujemne, binarne Warunki dla linii montażowych Warunki dla miejsc kontroli jakosci
Inne problemy przydziału: Przydział produkcji wyrobów do poszczególnych miejsc pracy, aby zminimalizować czas lub koszty bądź zmaksymalizować efekty; zmienne to czas pracy i-tego miejsca przy wykonywaniu j-tego wyrobu; dane: wydajność i-tego miejsca przy wykonywaniu j-tego wyrobu, założona wielkość produkcji każdego z wyrobów, dopuszczalny czas pracy każdego z miejsc pracy, Przydział produkcji wyrobów do poszczególnych miejsc pracy, aby zminimalizować czas lub koszty bądź zmaksymalizować efekty; zmienne to czas pracy i-tego miejsca przy wykonywaniu j-tego wyrobu; dane: czas pracy i-tego miejsca przy wykonywaniu j-tego wyrobu, założona wielkość produkcji każdego z wyrobów, dopuszczalny czas pracy każdego z miejsc pracy.