Przykład rozwiązania zagadnienia programowania liniowego przy użyciu metody simplex
Rozpatrzmy następujące zadanie programowania liniowego: W przedsiębiorstwie Kubuś Puchatek wytwarza się m.in. dwa rodzaje maskotek: Kłapouchy i Prosiaczek. Do uszycia maskotek potrzebne są m.in. guziki, które przedsiębiorstwo posiada w ilościach ograniczonych. Na uszycie jednego Kłapouchego zużywane są dwa guziki niebieskie i jeden czerwony, natomiast do uszycia Prosiaczka potrzeba jednego guzika niebieskiego i aż trzech czerwonych. Wiedząc, że zysk ze sprzedaży jednego Kłapouchego wynosi 3 zł, a ze sprzedaży Prosiaczka 2 zł, oraz że przedsiębiorstwo KP posiada na stanie 160 guzików niebieskich i 100 guzików czerwonych wyznacz wielkość produkcji Kłapouchych i Prosiaczków, która maksymalizuje zysk przedsiębiorstwa.
Rozwiązanie zaczniemy od sformułowania zagadnienia w postaci standardowej Niech: x1 – oznacza ilość sztuk wytworzonych maskotek Kłapouchy x2 – oznacza ilość sztuk wytworzonych maskotek Prosiaczek Wtedy układ warunków ograniczających jest postaci Natomiast funkcja kryterium dana jest wzorem
Następnie sformułujemy zagadnienie w postaci kanonicznej Niech: s1 – oznacza pierwszą zmienną swobodną s2 – oznacza drugą zmienną swobodną Sprowadzamy zagadnienie do postaci kanonicznej i mamy Natomiast funkcja kryterium dana jest wzorem
Pierwsza tablica simpleks cj 3 2 Zmienne bazowe cb x1 x2 s1 s2 s1 2 1 1 160 s2 1 3 1 100 W pierwszej kolejności uzupełniamy wiersz zmiennych decyzyjnych oraz wektor cen funkcji kryterium. Następnie uzupełniamy macierz parametrów warunków ograniczających zagadnienia w postaci kanonicznej, oraz prawe strony ograniczeń strukturalnych. Do pierwszej bazy wchodzą zmienne swobodne.
Pierwsza tablica simpleks cj 3 2 Zmienne bazowe cb x1 x2 s1 s2 Rozwiązanie s1 2 1 1 160 s2 1 3 1 100 zj cj – zj 3 2 Wartości wiersza zj dla poszczególnych kolumn oblicza się jako sumę iloczynów współczynników odpowiadających poszczególnym zmiennym i współczynników funkcji celu dla zmiennych bazowych. Wyraz w ostatniej kolumnie w wierszu zj jest wartością funkcji kryterium dla bazy z aktualnej iteracji. Ostatni wiersz tablicy simpleksowej cj – zj zwany jest kryterium simpleks. Jego elementy odpowiadające poszczególnym zmiennym (kolumnom) informują, o ile zmieni się aktualna w danej iteracji wartość funkcji celu, jeżeli jedną jednostkę tej zmiennej wprowadzimy do nowej (kolejnej) bazy. Można łatwo zauważyć, że rozwiązanie bazowe nie będzie rozwiązaniem optymalnym, dopóki w wierszu tym będą występować wartości dodatnie.
Pierwsza tablica simpleks cj 3 2 Zmienne bazowe Kryterium wyjścia cb x1 x2 s1 s2 Rozwiązanie s1 2 1 1 160 80 s2 1 3 1 100 100 zj cj – zj 3 2 W tej tablicy największe kryterium simpleks odpowiada zmiennej x1, zatem ta zmienna wejdzie do kolejnej bazy. O tym, która zmienna opuści bazę, decydują wartości kolumny Kryterium wyjścia obliczane jako iloraz wartości elementów kolumny Rozwiązanie przez elementy kolumny zmiennej wchodzącej w danej iteracji do bazy, czyli zmiennej x1. Najmniejsza wartość kolumny Kryterium wyjścia wskazuje na zmienną, którą należy usunąć z bazy. W tej tablicy bazę opuści zmienna s1.
Druga tablica simpleks cj 3 2 Zmienne bazowe Kryterium wyjścia cb x1 x2 s1 s2 Rozwiązanie 3 x1 1 0,5 0,5 80 160 s2 2,5 -0,5 1 20 8 zj 3 1,5 1,5 240 cj – zj 0,5 -1,5 Tak jak w wypadku pierwszej tablicy, uzupełnianie drugiej tablicy simpleks zaczynamy od wiersza zmiennych decyzyjnych oraz wektora cen funkcji kryterium. Do Zmiennych bazowych weszła zmienna x1 w miejsce zmiennej s1. W wierszu, w którym wstawiliśmy nową zmienną bazową dzielimy wszystkie wyrazy z poprzedniej tablicy simpleks przez wyraz stojący na skrzyżowaniu wiersza i kolumny nowej zmiennej bazowej. W tej iteracji do bazy wstawiliśmy zmienną x1, zatem podzielimy wyrazy pierwszego wiersza przez 2. Pozostałe wiersze przekształcamy w taki sposób, że dodajemy do nich taką wielokrotność przekształconego przed chwilą wiersza, aby w kolumnie odpowiadającej nowo wstawionej zmiennej bazowej znajdowały się zera. Pozostałe elementy tablicy uzupełniamy analogicznie jak w poprzednim kroku. Widzimy zatem, że bazę opuści zmienna s2, a w jej miejsce wejdzie zmienna x2.
Druga tablica simpleks cj 3 2 Zmienne bazowe Kryterium wyjścia cb x1 x2 s1 s2 Rozwiązanie 3 x1 1 0,5 0,5 80 160 s2 2,5 -0,5 1 20 8 zj 3 1,5 1,5 240 cj – zj 0,5 -1,5 Po pierwszej iteracji można stwierdzić, że: Produkując 80 sztuk maskotek Kłapouchy oraz 0 sztuk maskotek Prosiaczek osiągniemy zysk w wysokości 240 zł. Wynik ten można poprawić wprowadzając do bazy zmienną x2.
Trzecia tablica simpleks cj 3 2 Zmienne bazowe cb x1 x2 s1 s2 Rozwiązanie 3 x1 1 0,6 -0,2 76 2 x2 1 -0,2 0,4 8 zj 3 2 1,4 0,2 244 cj – zj -1,4 -0,2 Do Zmiennych bazowych weszła zmienna x2 w miejsce zmiennej s2. W wierszu, w którym wstawiliśmy nową zmienną bazową dzielimy wszystkie wyrazy z poprzedniej tablicy simpleks przez wyraz stojący na skrzyżowaniu wiersza i kolumny nowej zmiennej bazowej. W tej iteracji do bazy wstawiliśmy zmienną x2, zatem podzielimy wyrazy przez 2,5. Pozostałe wiersze przekształcamy analogicznie jak w poprzedniej iteracji. Pozostałe elementy tablicy uzupełniamy analogicznie jak w poprzednim kroku. Zauważmy, że w wierszu cj – zj wystąpiły same niedodatnie liczby. Oznacza to, że rozwiązania nie da się już poprawić, zatem jest ono rozwiązaniem optymalnym.
Trzecia tablica simpleks ` cj 3 2 Zmienne bazowe cb x1 x2 s1 s2 Rozwiązanie 3 x1 1 0,6 -0,2 76 2 x2 1 -0,2 0,4 8 zj 3 2 1,4 0,2 244 cj – zj -1,4 -0,2 Rozwiązanie odczytujemy z ostatniej kolumny. Tak więc, aby osiągnąć maksymalny zysk ze sprzedaży należy wyprodukować 76 sztuk maskotek Kłapouchy oraz 8 sztuk maskotek Prosiaczek. Zysk wyniesie wtedy 244 zł. Z kolei z wiersza cj – zj z kolumn odpowiadających zmiennym swobodnym odczytujemy rozwiązanie zagadnienia dualnego. Ceny cienie interpretujemy w następujący sposób: Zwiększenie zasobu guzików niebieskich o 1 sztukę od wartości początkowej równej 160 sztuk, zwiększy wartość zysku o 1,40 PLN, przy niezmienionej ilości guzików czerwonych, równej 100 sztuk. Maksymalna cena, jaką warto zapłacić za dodatkowy guzik niebieski wynosi 1,40 zł, ceteris paribus.
Koniec