Metoda Simpleks Jak wiadomo, problem PL z dowolną liczbą zmiennych można rozwiązać wyznaczając wszystkie wierzchołkowe punkty wielościanu wypukłego, a następnie porównując wartości funkcji celu w tych punktach wierzchołkowych. Jednak w związku z wielością punktów wierzchołkowych metoda przeszukania wszystkich punktów w celu znalezienia punktu optymalnego jest nieefektywna obliczeniowo. Istota metody Simpleks sprowadza się do tego, że jeżeli znany jest jakikolwiek wierzchołkowy punkt i wartość funkcji celu w tym punkcie, to wszystkie punkty wierzchołkowe, w których funkcja celu przyjmuje wartości mniejsze, są odrzucane.
Kolejny krok iteracji polega na tym, że przechodzimy do następnego wierzchołka, znajdującego się na jednej krawędzi z odnalezionym już punktem, w którym funkcja celu osiąga lepszą wartość. Ogólna idea metody polega więc na odwiedzaniu kolejnych punktów wierzchołkowych w taki sposób, aby w każdym kroku poprawić wartość funkcji celu. Metoda zatrzymuje się gdy dalsza poprawa nie jest już możliwa. Można w ten sposób utworzyć ciąg rozwiązań dopuszczalnych bazowych zbieżny do rozwiązania optymalnego (o ile istnieje). Punktem wyjścia do metody Simpleks jest postać standardowa problemu PL. Autorem metody jest George Bernard Dantzig (1914 2005), który opracował ją w końcu lat 40-tych XX wieku. Nazwa metody pochodzi od simpleksu, figury wypukłej będącej uogólnieniem trójkąta na wiele wymiarów.
Metoda korzysta z tablic przekształceń simpleksowych. Każdej iteracji odpowiada jedna tablica, a danej tablicy odpowiada bieżące rozwiązanie dopuszczalne bazowe. Tablica przekształceń simpleksowych: c 1 c l c m c k c n Baza c B b x 1 x l x m x k x n x i B c i b i a 11 a 1l a 1m a 1k a 1n x l B c l b l a l1 a ll a lm a lk a ln x m cb m b m a m1 a ml a mm a mk a mn z z 1 c 1 z l c l z m c m z k c k z n c n wiersz wskaźnikowy
ALGORYTM SIMPLEKS 1. Sprawdzić, czy istnieje takie j, że z j c j < 0. Jeśli NIE, to bieżące rozwiązanie dopuszczalne bazowe jest optymalne i STOP. W przeciwnym wypadku przejść do punktu 2. 2. (Kryterium wejścia) Wybrać k takie, że: z k c k = min {z j c j }, j:(z j c j )<0 wektor a k wchodzi do kolejnej bazy. 3. (Kryterium wyjścia) Wybrać l takie, że: b l j = 1,, n = min a { b i }, i = 1,, m lk i:a ik >0 a ik wektor a l będzie wychodził z bazy. Jeśli a ik > 0 nie istnieje, tzn. i {1,,m} a ik 0, to problem ma rozwiązanie optymalne nieskończone i STOP.
4. Wyrazić wektory niebazowe jako kombinacje liniowe wektorów nowej bazy, stosując metodę eliminacji współczynników Gaussa-Jordana: a lj = a lj a lk, b l = b l a lk a ij b i j = 1,, n = a ij a lj a ik a lk, i l, j = 1,, n = b i b l a ik a lk, i l
Obliczyć: m z j c j : z j = c i B a ij, i=1 m j = 1,, n i wrócić do punktu 1. z = c i B b i i=1
Jak znaleźć początkowe rozwiązanie dopuszczalne bazowe? Przedstawmy macierz ograniczeń A w postaci: A = [B, P], gdzie: B[m x m] baza zbioru kolumn macierzy A, P[(n m) x m] zbiór pozostałych kolumn. Z definicji rozwiązania bazowego wynika, że x B = B 1 b. Jeżeli przyjąć, że B = I, gdzie I macierz jednostkowa stopnia m, to B 1 = I i stąd: x B = b. Wniosek Jeśli w macierzy A uda się wyróżnić podmacierz jednostkową stopnia m, to rozwiązanie dopuszczalne bazowe początkowe jest po prostu równe wektorowi stałych b w układzie ograniczeń Ax = b.
Jak zapewnić istnienie podmacierzy jednostkowej stopnia m w zbiorze kolumn macierzy A? 1. wykorzystać wektory jednostkowe oryginalnie istniejące w macierzy A (jeśli takie występują) 2. wykorzystać wektory jednostkowe odpowiadające zmiennym osłabiającym wprowadzonym ze współczynnikiem +1 (ograniczenie typu ) 3. wprowadzić zmienne sztuczne (metoda sztucznej bazy). Dla rozwiązania początkowego x 0 = b wartość z w tablicy m simpleksów (z = i=1 c B i b i ) jest początkową wartością funkcji celu odpowiadającą początkowemu rozwiązaniu dopuszczalnemu bazowemu x 0, a więc startowemu punktowi wierzchołkowemu w przestrzeni R n o współrzędnych [ x 0 0 ].
Przykład Rozwiązać problem PL: Postać standardowa: min z = 5x 1 2x 2 p. o. 2x 1 + x 2 3 x 1 + 4x 2 6 x 1, x 2 0 max z = 5x 1 + 2x 2 p. o. 2x 1 x 2 3 x 1 + 4x 2 6 x 1, x 2 0
max z = 5x 1 + 2x 2 p. o. 2x 1 x 2 + s 1 = 3 x 1 + 4x 2 + s 2 = 6 x 1, x 2, s 1, s 2 0 A = [ 2 1 1 0 1 4 0 1 ] fragment macierzy A (zaznaczony): [ 1 0 ] jest macierzą 0 1 jednostkową stopnia m = 2 utworzoną z wektorów a 3 i a 4. b = [ 3 6 ] c T = [5 2 0 0]
Tworzymy tablicę simpleks: Baza c B 5 2 0 0 b x 1 x 2 s 1 s 2 s 1 0 3 2-1 1 0 s 2 0 6 1 4 0 1 0-5 -2 0 0 k. zielony wektor c, niebieski wektor b, czerwony macierz A wektory bazowe zawsze tworzą macierz jednostkową dla wektorów bazowych wartość w wierszu wskaźnikowym zawsze wynosi zero na przecięciu wektora wchodzącego i wychodzącego znajduje się tzw. element centralny
Tablica 2: Baza c B 5 2 0 0 b x 1 x 2 s 1 s 2 x 1 5 3/2 1-1/2 1/2 0 s 2 0 9/2 0 9/2-1/2 1 15/2 0-9/2 5/2 0 < 0
Tablica 3: x 1 b 1 : x 1 s 1 : Baza c B b 5 2 0 0 x 1 x 2 s 1 s 2 x 1 5 2 1 0 4/9 1/9 x 2 2 1 0 1-1/9 2/9 12 0 0 2 1 3 2 1 2 ( 9 2 ( 1 2 ) 9 2 = 2 1 2 ) ( 1 2 ) 9 2 0 STOP = 1 2 1 4 2 9 = 8 18 = 4 9
x 1 s 2 : 0 1 ( 1 2 ) 9 2 wiersz wskaźnikowy: = 1 9 s 1 : 5 4 9 + (2 ( 1 20 )) 0 = 9 9 2 9 = 18 9 = 2 Wyniki odczytujemy z wektora b: x 1 = 2 x 2 = 1 s 1 = s 2 = 0 z = 12 z = 12