Badania operacyjne - programowanie liniowe
Transkrypt
Badania operacyjne - programowanie liniowe
Justyna Kosakowska i Piotr Malicki Badania operacyjne - programowanie liniowe Materiały dydaktyczne dla studentów matematyki (specjalność: matematyka w ekonomii i finansach) Wydział Matematyki i Informatyki Uniwersytet Mikołaja Kopernika Toruń 2009 Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Podczas przygotowywania niniejszych notatek korzystaliśmy z następującej literatury: [1] M. S. Bazaraa, C. M. Shetty, ”Nonlinear Programming Theory and Algorithms”, New York 1979. [2] T. H. Cormen, Ch. E. Leiserson, R. L. Rivest, „Wprowadzenie do algorytmów”, WN-T, Warszawa 2001. [3] M. M. Sysło, „Algorytmy”, WSiP, Warszawa 1997. [4] M. M. Sysło, N. Deo, J. S. Kowalik, „Algorytmy optymalizacji dyskretnej”, PWN, Warszawa 1995. Literatura uzupełniająca: [1] N. Deo, „Teoria grafów i jej zastosowania w technice i informatyce”, PWN 1980. [2] R. Faure, J.-P. Boss, A. Le Garff, „Badania operacyjne”, PWN, Warszawa 1982. [3] S. I. Gass, „Programowanie liniowe”, PWN, Warszawa 1980. [4] B. Korzan, „Elementy teorii grafów i sieci (metody i zastosowania)”, WN-T, Warszawa 1978. [5] K. Manteuffel, E. Seiffart, „Wstęp do algebry liniowej i programowania liniowego”, PWN, Warszawa 1975. 3 SPIS TREŚCI Spis treści I Wykład 5 1 Wprowadzenie 1.1 Rys historyczny . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Oznaczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Tematyka wykładu . . . . . . . . . . . . . . . . . . . . . . . . 2 Metoda sympleksowa 2.1 Różne formy zagadnienia programowania liniowego 2.2 Punkty i wektory ekstremalne . . . . . . . . . . . . 2.3 Metoda sympleksowa . . . . . . . . . . . . . . . . . 2.3.1 Dualna metoda programowania liniowego . . 2.4 Elementy programowania całkowitoliczbowego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 6 9 9 10 20 31 34 3 Strategie zachłanne 43 3.1 Problem wyboru zajęć . . . . . . . . . . . . . . . . . . . . . . 43 3.2 Problem plecakowy . . . . . . . . . . . . . . . . . . . . . . . . 45 4 Programowanie dynamiczne 48 4.1 Problem plecakowy - programowanie dynamiczne . . . . . . . 48 5 Grafy - podstawowe definicje 52 5.1 Reprezentacje grafów . . . . . . . . . . . . . . . . . . . . . . . 56 5.1.1 Macierze sąsiedztwa . . . . . . . . . . . . . . . . . . . . 56 5.1.2 Listy sąsiedztwa . . . . . . . . . . . . . . . . . . . . . . 57 6 Minimalne drzewa rozpinające 58 6.1 Algorytm Kruskala . . . . . . . . . . . . . . . . . . . . . . . . 59 7 Problem najkrótszych dróg 63 7.1 Algorytm Dijkstry . . . . . . . . . . . . . . . . . . . . . . . . 64 7.2 Algorytm Bellmana-Forda . . . . . . . . . . . . . . . . . . . . 69 8 Maksymalny przepływ 71 8.1 Przekroje w sieciach . . . . . . . . . . . . . . . . . . . . . . . 73 8.2 Sieci residualne . . . . . . . . . . . . . . . . . . . . . . . . . . 74 SPIS TREŚCI 4 8.3 Algorytm Forda-Fulkersona . . . . . . . . . . . . . . . . . . . 75 8.4 Analiza czasu działania algorytmu Forda-Fulkersona . . . . . . 77 8.5 Sieci z wieloma źródłami i ujściami . . . . . . . . . . . . . . . 78 9 Zagadnienie transportowe 79 9.1 Rozwiązanie zagadnienia transportowego metodą maksymalnego przepływu . . . . . . . . . . . . . . . . . . . . 80 10 Skojarzenia w grafach dwudzielnych 89 II 95 Dodatek 11 Pesymistyczna złożoność czasowa algorytmów 95 11.1 Notacja O, Ω oraz Θ . . . . . . . . . . . . . . . . . . . . . . . 96 12 Przeszukiwanie grafu wszerz 97 12.1 Analiza czasu działania algorytmu BFS . . . . . . . . . . . . . 99 13 Zbiory wypukłe i ich własności 100 13.1 Topologiczne własności zbiorów wypukłych . . . . . . . . . . . 104 14 Problem dualności w programowaniu liniowym 114 14.1 Geometryczna interpretacja dualności programowania liniowego116 5 Część I Wykład Notatki te są istotnym rozszerzeniem skryptu „Badania operacyjne (Kurs letni)” przygotowanego w 2009 roku (projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego). Zdecydowaliśmy się włączyć wykład z „Kursu letniego” do niniejszego skryptu, aby był on spójny oraz aby studenci mieli cały materiał dostępny w jednym miejscu. Szczegółowo omówiliśmy nowe zagadnienia: • przepływ w sieciach, • zagadnienie transportowe, • skojarzenia w grafach dwudzielnych, Ponadto dodano nowe przykłady, które ilustrują algorytm sympleks. W części Dodatek umieściliśmy również treści pozwalające lepiej zrozumieć tematykę wykładu: problem złożoności czasowej algorytmów, przesukiwanie grafów wszerz, topologiczne własności zbiorów wypukłych oraz problem dualności w programowaniu liniowym. 1. Wprowadzenie 1.1. Rys historyczny W roku 1827 matematyk francuski J.B.J. Fourier opublikował metodę rozwiązywania układu nierówności liniowych. Publikacja ta jest zwykle uważana za początek programowania liniowego. W 1939 roku rosyjski matematyk L.V. Kantorovich sformułował problem przydziału środków jako problem programowania liniowego. Mniej więcej w tym samym okresie duński ekonomista T.C. Koopmans sformułował model programowania liniowego dla pewnych klasycznych zagadnień występujących w ekonomii. W czasie trwania II wojny światowej modele programowania liniowego były stosowane do rozwiązywania problemów związanych z planowaniem wojskowym. W roku 1947 matematyk 1. WPROWADZENIE 6 amerykański G.B. Dantzig odkrył metodę sympleks. Zbiegło się to z rozwojem komputeryzacji, a zatem z możliwością zastosowania metod programowania liniowego do rozwiązywania problemów występujących w rzeczywistości. W roku 1975 Kantorovich oraz Koopmans otrzymali za swoje prace nagrodę Nobla w dziedzinie nauk ekonomicznych. 1.2. Oznaczenia Będziemy używać następujących oznaczeń. |X| - moc skończonego zbioru X; N = {0, 1, 2, . . .} - zbiór liczb naturalnych; Z - pierścień liczb całkowitych; Q - ciało liczb wymiernych; R - ciało liczb rzeczywistych; dalej K ∈ {Z, Q, R} ≤ - naturalny porządek w Kn („po współrzędnych”); Mm×n (K) - zbiór m × n-macierzy o współczynnikach w K; xT - macierz lub wektor transponowany do x; e1 , . . . , en - baza standardowa przestrzeni K-liniowej K n ; 1.3. Tematyka wykładu Głównym celem wykładu jest omówienie algorytmów rozwiązujących pewne problemy, które można sformułować jako zagadnienia programowania liniowego. Będziemy rozważać problemy postaci: dla danego cT ∈ Rn , znaleźć minimum funkcji liniowej f (x) = cT x 1. WPROWADZENIE 7 na podzbiorze zbioru Rn ograniczonym pewnymi nierównościami oraz równaniami liniowymi. Czasami ciało R będziemy zastępować pierścieniem Z i będziemy wtedy mówić o programowaniu całkowitoliczbowym. Wiele praktycznych problemów występujących w ekonomii oraz badaniach operacyjnych może być sformułowanych w postaci zagadnienia programowania liniowego (m.in. zagadnienie transportowe, problem plecakowy). W trakcie wykładu omawiamy tego typu problemy. Notatki zawierają także część Dodatek, w której umieszczono fakty pozwalające lepiej zrozumieć treść wykładu. Przykład 1.1. Załóżmy, że pewna firma produkuje dwa rodzaje zapałek: grillowe (długie) i normalne (krótkie). Zysk z każdego pudła zapałek grillowych wynosi 300 EUR, a z każdego pudła zapałek normalnych wynosi 200 EUR. Firma posiada jedną maszynę robiącą długie lub krótkie zapałki. Maszyna ta może wyprodukować w jednym roku maksymalnie 900 000 pudeł zapałek długich lub krótkich. Do produkcji zapałek firma potrzebuje drewna oraz pudeł. Do otrzymania jednego pudła zapałek grillowych potrzeba 3 m3 drewna, natomiast do otrzymania jednego pudła zapałek normalnych potrzeba 1 m3 drewna. Firma posiada 1 800 000 m3 drewna na rok następny, ponadto nasza firma ma 700 000 pudeł na zapałki grillowe oraz 600 000 pudeł na zapałki normalne. Naszym celem jest zmaksymalizowanie zysków firmy w roku następnym, przy czym zakładamy, że firma może sprzedać wszystko co wyprodukuje. Zapiszmy powyższy problem za pomocą nierówności. Niech x1 oraz x2 oznaczają odpowiednio ilość pudeł (× 100 000) zapałek długich oraz ilość pudeł (× 100 000) zapałek krótkich wyprodukowanych w roku następnym. Zysk z jednego pudła zapałek długich wynosi 300 EUR (3×100 EUR), zatem zysk z x1 pudeł zapałek długich wynosi 3x1 (stu euro jednostek). Podobnie zysk z x2 pudeł zapałek krótkich wynosi 2x2 (stu euro jednostek). Przy formułowaniu naszego zagadnienia musimy wziąć pod uwagę następujące ograniczenia: • wydajność maszyny jest ograniczona przez 9 (× 100 000) pudeł na rok, czyli x1 + x2 ≤ 9; • ograniczenie związane z ilością drewna, to 3x1 + x2 ≤ 18; • ograniczenie związane z ilością dostępnych pudeł, to x1 ≤ 7, x2 ≤ 6; • ograniczenie związane z sensownością rozważań, to x1 ≥ 0, x2 ≥ 0. 1. WPROWADZENIE 8 Możemy teraz napisać model dla naszej firmy: max(3x1 + 2x2 ) przy warunkach: x1 + x2 ≤ 9, 3x1 + x2 ≤ 18, x1 ≤ 7, x2 ≤ 6, x1 , x2 ≥ 0. Jest to przykład modelu programowania liniowego (w skrócie PL-modelu). Funkcję 3x1 + 2x2 nazywamy funkcją celu. W dalszej części wypracujemy metody ogólne, pozwalające rozwiązywać podobne problemy. Powyższy problem rozwiążmy graficznie. Obszar wyznaczony przez punkty 0, v1 , v2 , v3 , v4 nazywamy dopuszczal x1 spełniające ograniczenia. Same zaś punkty nym, zawiera on punkty x2 0, v1 , v2 , v3 , v4 nazywamy wierzchołkami obszaru dopuszczalnego. Łatwo 6 4, 5 3 0 policzyć, że v1 = , v2 = , v3 = , v4 = . Zauważmy, że nierów0 4, 5 6 6 ność x1 ≤ 7 nie ma wpływu na obszar dopuszczalny. Szkicując funkcję celu 9 2. METODA SYMPLEKSOWA 4, 5 widzimy, że osiąga ona wartość maksymalną dla wierzchołka v2 = . 4, 5 Wartość funkcji celu w tym wierzchołku wynosi 22, 5, zatem maksymalny zysk dla firmy wynosi 22 500 EUR. 2. Metoda sympleksowa 2.1. Różne formy zagadnienia programowania liniowego Zadanie postaci: znaleźć minimum funkcji f (x) = cT x (2.1) na zbiorze ograniczonym warunkami: Ax = b, (2.2) x≥0 (2.3) będziemy nazywać zagadnieniem programowania liniowego w postaci standardowej. Podzbiór X ⊆ Rn zdefiniowany przez ograniczenia (2.2) oraz (2.3) nazywamy zbiorem dopuszczalnym. Każdy element x ∈ X zbioru dopuszczalnego nazywamy rozwiązaniem dopuszczalnym. Rozwiązanie dopuszczalne x, w którym funkcja f osiąga minimum nazywamy rozwiązaniem optymalnym. Można sobie wyobrazić praktyczne zagadnienia, które nie będą zapisane w postaci standardowej. Omówimy teraz wszystkie możliwe przypadki. 1. Chcemy znaleźć maksimum (zamiast minimum funkcji f ). W tym przypadku wystarczy wektor c zastąpić wektorem −c oraz otrzymaną minimalną wartość funkcji przemnożyć przez −1. 2. Nierówność ai1 x1 + ai2 x2 + . . . + ain xn ≤ bi (odp. ai1 x1 + ai2 x2 + . . . + ain xn ≥ bi ) można sprowadzić do równania ai1 x1 + ai2 x2 + . . . + ain xn + xn+1 = bi (odp. ai1 x1 + ai2 x2 + . . . + ain xn − xn+1 = bi ) poprzez wprowadzenie dodatkowej zmiennej xn+1 ≥ 0 (musimy wprowadzić tyle dodatkowych zmiennych, ile mamy nierówności!). 2. METODA SYMPLEKSOWA 10 3. Ograniczenia x ≥ 0 mogą mieć inną postać: (a) ograniczenie xj ≥ dj zamieniamy na ograniczenie x′j ≥ 0 wprowadzając nową zmienną x′j taką, że x′j = xj − dj ; (b) ograniczenie xj ≤ dj zamieniamy na ograniczenie x′j ≥ 0 wprowadzając nową zmienną x′j taką, że x′j = dj − xj ; (c) ograniczenie xj ∈ Rn zamieniamy na ograniczenia x′j , x′′j ≥ 0 wprowadzając nowe zmienne x′j , x′′j takie, że xj = x′j − x′′j (korzystamy tutaj z faktu, że każda liczba rzeczywista może być przedstawiona jako różnica liczb nieujemnych). W dalszej części wykładu będziemy zakładać, że mamy dane zagadnienie programowania liniowego w postaci standardowej. 2.2. Punkty ekstremalne i wektory kierunkowe ekstremalne Łatwo jest udowodnić (zadanie na ćwiczenia), że jeśli funkcja liniowa osiąga minimum (lub maksimum) na zbiorze wypukłym, to musi ona osiągać to ekstremum również w punktach ekstremalnych tego zbioru. Dlatego poniżej poniżej omówimy tematykę związaną z punktami ekstremalnymi. Głównie skupimy się na charakteryzacji punktów ekstremalnych zbiorów dopuszczalnych. Niech X ⊂ Rn będzie zbiorem wypukłym. Punkt x ∈ X nazywamy ekstremalnym, jeśli ∀x,y∈X ∀λ∈(0,1) p = (1 − λ)x + λy ⇒ x = y = p. Przykład 2.4. Oznaczmy przez E zbiór punktów ekstremalnych zbioru X. 9 1 1 0 x1 18 x 3 1 x1 1 2 pocho≥ , ≤ ∈ R ; (i) Dla zbioru X = 7 x2 0 1 0 x2 x2 1 6 0 0 6 4, 5 3 0 dzącego z Przykładu 1.1, E = , , , , . 0 0 4, 5 6 6 (ii) X = {(x1 , x2 ) ∈ R2 ; x21 + x22 ≤ 1}, E = {(x1 , x2 ) ∈ R2 ; x21 + x22 = 1}. 2. METODA SYMPLEKSOWA 11 Jeśli zbiór X jest domknięty i ograniczony, to dowolny punkt tego zbioru może być przedstawiony jako wypukła kombinacja punktów ekstremalnych. Wektor 0 6= v ∈ Rn nazywamy kierunkowym zbioru X, jeśli ∀x∈X ∀λ≥0 x + λv ∈ X. Dwa wektory kierunkowe v, w zbioru X nazywamy równymi, jeśli ∃λ>0 v = λw. Wektor kierunkowy v zbioru X nazywamy ekstremalnym, jeżeli ∀w1 ,w2 ∀λ1 ,λ2 >0 v = λ1 w1 + λ2 w2 ⇒ ∃λ>0 w1 = λw2 , gdzie w1 , w2 są wektorami kierunkowymi zbiory X. W dalszej części rozważać będziemy zbiory X postaci X = {x ∈ Rn ; Ax = b, x ≥ 0}, gdzie A oznacza macierz wymiaru m × n, b ∈ Rm . Zakładamy ponadto, że rz(A) = m. Niech A = [BN] (po ewentualnej permutacji kolumn), gdzie B jest m × m macierzą, N jest m × (n − m) macierzą, natomiast rz (B) = m. Wtedy Ax = b, x ≥ 0 ⇒ BxB + NxN = b, gdzie xB ≥ 0, xN ≥ 0. Niech A będzie jak wyżej. Wówczas przez C(A) oznaczamy zbiór takich macierzy nieosobliwych B wymiaru m × m, dla których istnieje macierz N wymiaru m × (n − m) taka, że [BN] da się uzyskać z macierzy A poprzez przestawienie kolumn. Uwaga 2.5. Dalej będziemy stosować następujące uproszczenia notacji. Zapis A = [BN] będzie oznaczać, że macierz A można uzyskać z macierzy [BN] przez pewną permutację σ kolumn. Wtedy x = [xB xN ] będzie znaczyć, że wektor x powstaje z wektora x = [xB xN ] przez tę samą permutację σ współrzędnych. Twierdzenie 2.6 (o charakteryzacji punktów ekstremalnych). Niech X = {x ∈ Rn ; Ax = b, x ≥ 0}, gdzie A ∈ Mm×n (R), b ∈ Rm , rz(A) = m. Punkt B −1 b x ∈ X jest punktem ekstremalnym wtedy i tylko wtedy, gdy x = = 0 xB dla pewnego B ∈ C(A) takiego, że B −1 b ≥ 0. xN 12 2. METODA SYMPLEKSOWA B −1 b Dowód. Weźmy B ∈ C(A) takie, że B b ≥ 0. Niech x = . Za0 −1 B b uważmy, że x ∈ X. Rzeczywiście dla A = [BN] mamy Ax = [BN] = 0 b + N0 = b, zarazem x ≥ 0. Załóżmy, że x = λx1 + (1 − λ)x2 dla x1 , x2 ∈ X oraz λ ∈ (0, 1). Niech xT1 = [xT11 , xT12 ], xT2 = [xT21 , xT22 ]. Wtedy −1 B b x11 x =λ + (1 − λ) 21 . 0 x12 x22 −1 Ponieważ x12 , x22 ≥ 0, λ ∈ (0, 1), λ, 1 − λ > 0, to mamy x12 = x22 = 0. Ponadto, b = Ax1 = Bx11 , a więc x11 = B −1 b. Podobnie x21 = B −1 b. Wobec równości x11 = x21 = B −1 b mamy x1 = x2 = x, zatem x jest punktem ekstremalnym w X. Niech teraz x ∈ Rn będzie punktem ekstremalnym. Załóżmy, że x = [x1 , x2 , . . . , xk , 0, 0, . . . , 0]T , gdzie xi > 0 dla i = 1, 2, . . . , k. Pokażemy, że kolumny a1 , a2 , . . . , ak są liniowo tak nie było, to istniałyby P niezależne. GdybyP liczby λ1 , λ2 , . . . , λk ∈ R, ki=1 λ2i 6= 0 takie, że ki=1 λi ai = 0. Niech λ = [λ1 , λ2 , . . . , λk , 0, 0, . . . , 0]T . Rozpatrzmy wektory x(1) = x + rλ, x(2) = x − rλ, gdzie r > 0, x(1) , x(2) ≥ 0. Zauważmy, że Ax(i) = k X j=1 aj (xj + (−1)i−1 rλj ) = k X j=1 aj xj + (−1)i−1 r k X aj λj = b. j=1 Zatem x(1) , x(2) ∈ X, a ponieważ r > 0, to x(1) 6= x(2) . Ponadto x = 12 x(1) + 1 (2) x , co przeczy temu, że x jest punktem ekstremalnym. Zatem kolumny 2 a1 , a2 , . . . , ak są liniowo niezależne. Czyli z n − k kolumn można wybrać m − k kolumn tak, aby razem z pierwszymi k kolumnami tworzyły m liniowo niezależnych wektorów. Załóżmy, że tymi kolumnami są ak+1 , ak+2, . . . , am . Wobec tego macierz A może być zapisana w postaci A = [BN], gdzie B = [a1 , a2 , . . . , am ] ∈ C(A), rz (B) = m. −1 Mamy b = Ax = BxB + NxN = BxB , a B b stąd xB = B −1 b, czyli x = . 0 Wniosek 2.7. Niech X = {x ∈ Rn ; Ax = b, x ≥ 0}, gdzie A ∈ Mm×n (R), b ∈ Rm , rz (A) = m. Zbiór X posiada skończenie wiele punktów ekstremalnych. Dowód. Wynika z twierdzenia 2.6 oraz faktu, że |C(A)| < ∞. 2. METODA SYMPLEKSOWA 13 Twierdzenie 2.8 (o istnieniu punktów ekstremalnych). Niech X = {x ∈ R ; Ax = b, x ≥ 0}, gdzie A ∈ Mm×n (R), b ∈ Rm , rz (A) = m. Jeśli X 6= ∅,to zbiór X posiada co najmniej jeden punkt ekstremalny. n Dowód. Ustalmy x ∈ X. Niech x = [x1 , x2 , . . . , xk , 0, 0, . . . , 0]T , gdzie xi > 0, i = 1, 2, . . . , k. Rozpatrzmy kolumny a1 , a2 , . . . , ak macierzy A. Gdy są one liniowo niezależne, to punkt x jest ekstremalny. Załóżmy, że aP 1 , a2 , . . . , ak są liniowo zależne, to znaczy istnieją liczby λ1 , λ2 , . . . , λk ∈ R, ki=1 λ2i 6= 0 P x oraz ki=1 λi ai = 0. Niech r = mini=1,2,...,k { λxii ; λi > 0} = λjj . Możemy założyć, że zbiór i ∈ {1, 2, . . . , k} takich, że λi > 0 jest niepusty. Niech x′ ∈ Rn , gdzie xi − rλi dla i = 1, 2, . . . , k ′ xi = 0 dla i = k + 1, k + 2, . . . , n 1. x′ ≥ 0, bo inaczej dla pewnego j ∈ {1, 2, . . . , k} mielibyśmy xj − rλj < x 0, a stąd r > λjj i otrzymujemy sprzeczność z minimalnością. P P P 2. Ax′ = b, rzeczywiście Ax′ = ki=1 (xi −rλi )ai = ki=1 xi ai −r ki=1 λi ai = Ax = b. Zatem x′ ∈ X. 3. x′i0 = 0 dla pewnego indeksu i0 ∈ {1, 2, . . . , k}. Wiemy, że istnieje x i0 ∈ {1, 2, . . . , k} taki, że r = λii0 . Zatem x′i0 = xi0 − rλi0 = 0. 0 Jeśli kolumny a1 , a2 , . . . , ak bez ai0 są liniowo niezależne, to punkt x′ jest ekstremalny. Lemat 2.9. Niech X = {x ∈ Rn ; Ax = b, x ≥ 0}, gdzie A ∈ Mm×n (R), b ∈ Rm , rz (A) = m. Wektor v ∈ Rn jest wektorem kierunkowym niepustego zbioru X wtedy i tylko wtedy, gdy Av = 0 i v ≥ 0, v 6= 0. Dowód. Niech v ∈ Rn będzie wektorem kierunkowym zbioru X. Weźmy x ∈ X, wtedy x+v ∈ X. Mamy Av = A(x+v−x) = A(x+v)−Ax = b−b = 0, bo v ≥ 0 jest wektorem kierunkowym. Załóżmy teraz, że Av = 0, v ≥ 0. Niech x ∈ X, λ > 0. Mamy A(x+ λv) = Ax + λAv = Ax = b. Ponieważ x ≥ 0, λ > 0, v ≥ 0, to x + λv ≥ 0 czyli x + λv ∈ X. Twierdzenie 2.10 (o charakteryzacji kierunków ekstremalnych). Niech X = {x ∈ Rn ; Ax = b, x ≥ 0}, gdzie A ∈ Mm×n (R), b ∈ Rm , rz (A) = m. Wektor v jest kierunkiem ekstremalnym zbioru X wtedy i tylko wtedy, gdy istnieją B ∈ C(A), kolumna aj macierzy A nie występująca w macierzy B oraz λ > 0 takie, że 14 2. METODA SYMPLEKSOWA (i) B −1 aj ≤ 0, (ii) v = λ((−B −1 aj )T , eTj )T , gdzie ej jest wektorem mającym n − m współrzędnych z których tylko j-ta współrzędna jest różna od zera i równa się jeden. Dowód. Niech v = λ((−B −1 aj )T , eTj )T i B −1 aj ≤ 0. Pokażemy, że v jest wektorem kierunkowym. Zauważmy, że v ≥ 0, v 6= 0 oraz −B −1 aj = λB(−B −1 aj ) + λNej = λ(−aj + aj ) = 0. Av = [BN]λ ej Zatem na mocy Lematu 2.9 wektor v jest kierunkowy. Niech v1 , v2 będą wektorami kierunkowymi oraz niech v = λ1 v1 + λ2 v2 , gdzie λ1 , λ2 > 0. Zauważmy, że n − m − 1 współrzędnych wektora v jest równe 0. Zatem odpowiednie współrzędne wektorów v1 i v2 są również zerowe T T i wektory te mogą być zapisane w postaci v1T = α1 [v11 , eTj ], v2T = α2 [v21 , eTj ], gdzie α1 , α2 > 0. Wiemy, że Av1 = Av2 = 0 zatem mamy T T T 0 = Av1 = [BN]α1 [v11 , eTj ]T = α1 (Bv11 + NeTj ) = α1 (Bv11 + aTj ), stąd v11 = −B −1 aj . Podobnie v21 = −B −1 aj , mamy więc v11 = v21 , a w konsekwencji v1 = λv2 , gdzie λ = αα12 . Ostatecznie otrzymujemy, że wektor v jest ekstremalny. Niech v będzie wektorem ekstremalnym, v = [v1 , v2 , . . . , vk , 0, . . . , 0, vj , 0, . . . , 0]T , vi > 0 dla i = 1, 2, . . . , k oraz i = j. Pokażemy, że kolumny a1 , a2 , . . . , ak macierzy A są liniowo P niezależne. Załóżmy, że tak nie jest tzn. P istnieją λ1 , λ2 , . . . , λk ∈ R takie, że ki=1 λ2i 6= 0, ki=1 λi ai = 0. Niech λ = [λ1 , λ2 , . . . , λk , 0, 0, . . . , 0]T . Rozpatrzmy wektory v (1) = v + rλ, v (2) v = v − rλ, gdzie r > 0, v (1) , v (2) ≥ 0, r = mini=1,2,...,k { λvii ; λi > 0} = λjj . Zauważmy, że Av (i) i−1 = A(v + (−1) i−1 rλ) = Av + (−1) i−1 rAλ = 0 + (−1) r k X ai λi = 0, i=1 Ponieważ r > 0, to v (1) 6= v (2) 6= v. Zatem v = 21 v (1) + 21 v (2) , co przeczy temu, że v jest wektorem ekstremalnym. Czyli kolumny a1 , a2 , . . . , ak są liniowo niezależne. Dodatkowo rz (A) = m, stąd k ≤ m więc możemy wybrać m − k wektorów ze zbioru {ai ; i = k + 1, k + 2, . . . , m, i 6= j}, które razem z kolumnami a1 , a2 , . . . , ak są liniowo niezależne. Oznaczmy B = [a1 , a2 , . . . , am ] 15 2. METODA SYMPLEKSOWA ∈ C(A). Zauważmy, że aj 6∈ B, bo a1 , a2 , . . . , ak , aj są liniowo zależne. Mamy 0 = Av = [BN]v = BvB + NvN = BvB + aj vj , a stąd vB = vj (−B −1 aj ), −B −1 aj . Ponieważ v ≥ 0, vj > 0 więc B −1 aj ≤ 0. czyli v = vj ej Wniosek 2.11. Niech X = {x ∈ Rn ; Ax = b, x ≥ 0}, gdzie A ∈ Mm×n (R), b ∈ Rm , rz (A) = m. Zbiór X posiada skończenie wiele kierunków ekstremalnych. Twierdzenie 2.12 (o reprezentacji). Niech X = {x ∈ Rn ; Ax = b, x ≥ 0}, gdzie A ∈ Mm×n (R), b ∈ Rm , rz (A) = m. Niech x1 , x2 , . . . , xk będą wszystkimi punktami ekstremalnymi zbioru X, natomiast v1 , v2 , . . . , vl wszystkimi wektorami ekstremalnymi zbioru X. Wówczas x ∈ X wtedy i tylko wtedy, gdy istnieją takie liczby λ1 , λ2 , . . . , λk ≥ 0, których suma jest równa jeden oraz takie liczby µ1 , µ2, . . . , µl ≥ 0, że x= k X λi xi + i=1 l X µi vi . i=1 Dowód. Niech n Y = {x ∈ R ; ∃λ1 ,λ2 ,...,λk ≥0,Pk i=1 λi =1 , ∃µ1 ,µ2 ,...,µl ≥0 x= k X i=1 λi xi + l X µi vi }. i=1 Pokażemy, że X = Y . Zauważmy, że Y 6= ∅, bo z twierdzenia 2.8 istnieje co najmniej jeden punkt ekstremalny. P P P (i) Y ⊂ X. Niech x ∈ Y , x = ki=1 λi xi + li=1 µi vi , λi , µj ≥ 0, ki=1 λi = Pk ′ 1, i = 1, 2, . . . , k, j = 1, 2, . . . , l. Mamy x′ = i=1 λi xi ∈ X. Niech xi = ′ ′ ′ ′ ′ xi−1 + µi vi , gdzie x0 = x . Wówczas ∀i xi ∈ X czyli x = xl ∈ X. (ii) X ⊂ Y . Zauważmy, że Y jest wypukły i domknięty. Załóżmy, że X \ Y 6= ∅ i niech z ∈ X \ Y , czyli z 6∈ Y . Na mocy Twierdzenia 13.18 istnieją wówczas: wektor p ∈ Rn i α > 0 takie, że pT z > α oraz (∗) pT ( k X i=1 λi xi + l X µi vi ) ≤ α, i=1 Pk dla dowolnych λi , µj takich, że i=1 λi = 1, λi , µj ≥ 0, i = 1, 2, . . . , k, j = 1, 2, . . . , l. Ponieważ µj można wybrać dowolnie duże, to nierówność (∗) 16 2. METODA SYMPLEKSOWA jest prawdziwa tylko wtedy, gdy pT vi ≤ 0 dla i = 1, 2, . . . , l. Kładąc µi = 0 dla wszystkich i, λi = 1 i λj = 0 dla j 6= i dostajemy z (∗), że pT xi ≤ α dla i = 1, 2, . . . , k. Ponieważ pT z > α, to pT z > pT xi dla dowolnego i. Z powyższych rozważań wynika, że istnieje niezerowy wektor p, dla którego zachodzą następujące nierówności: (∗∗) pT z > pT xi dla i = 1, 2, . . . , k, (∗ ∗ ∗) pT vi ≤ 0 dla i = 1, 2, . . . , l. Rozważmy punkt ekstremalny x określony następująco: pT x = max pT xi . 1≤i≤k B −1 b Ponieważ x jest punktem ekstremalnym, to z Twierdzenia 2.6 x = , 0 gdzie A = [BN] oraz B −1 b ≥ 0. Ponieważ z ∈ X, to Az = b oraz z ≥ 0. Zatem BzB + NzN = b i zB = B −1 (b − NzN ) = B −1 b − B −1 NzN . Niech T z T = [zBT , zN ]. Z (∗∗) mamy pT z − pT x > 0, ponadto niech pT = [pTB , pTN ]. Wówczas 0 < pT z − pT x = pTB zB + pTN zN − pTB xB − pTN xN = pTB (B −1 b − B −1 NzN )+ pTN − pTB B −1 b = pTB B −1 b − pTB B −1 NzN + pTN − pTB B −1 b = (pTN − pTB B −1 N)zN , bo zN ≥ 0, z ∈ X. Wobec tego istnieje indeks i0 > m taki, że zi0 > 0 oraz pi0 − pTB B −1 ai0 > 0. Pokażemy, że nierówność B −1 ai0 ≤ 0 nie jest prawdziwa. Załóżmy, że B −1 ai0 ≤ 0. Wówczas viT0 = ((−B −1 ai0 )T , eTi0 ), gdzie ei0 jest wektorem o n − m współrzędnych z jedynką (jako jedynym niezerowym elementem) na miejscu o indeksie i0 , jest ekstremalnym wektorem kierunkowym zbioru X na mocy Twierdzenia 2.10. Z (∗ ∗ ∗) wynika, że pT vi0 ≤ 0 czyli pi0 − pTB B −1 ai0 ≤ 0, co daje sprzeczność. Zatem B −1 ai0 6≤ 0. Zdefiniujmy wektor x następująco: −1 −B −1 ai0 B b , +λ x= ei0 0 gdzie λ = min1≤i≤m { ybii ; yij > 0} = ybrr > 0, b = B −1 b, yi0 = B −1 ai0 . j j Zauważmy, że x posiada nie więcej niż m dodatnich współrzędnych oraz xr = 0, xi0 = λ. Wektor x ∈ X, ponieważ mamy Ax = [BN]x = BB −1 b + λ(−BB −1 ai0 + Nei0 ) = BB −1 b = b. 2. METODA SYMPLEKSOWA 17 Zauważmy, że układ a1 , a2 , . . . , ar−1 , ar+1 , ar+2 , . . . , am , ai0 jest liniowo niezależny. Mamy yi0 = B −1 ai0 zatem ai0 = Byi0 . Wówczas ai0 = α1 a1 + α2 a2 + · · · + αm am oraz αr 6= 0. Zatem zbiór wektorów {a1 , a2 , . . . , am }\{ar }, ai0 jest liniowo niezależny. Niech B = [a1 , a2 , . . . , ar−1 , ar+1 , ar+2 , . . . , am , ai0 ]. Mamy B ∈ C(A), A = [B, N], b = Ax = [B, N]x = BxB + N xN = BxB . −1 −1 B b Stąd xB = B b ≥ 0. Zatem x = i z Twierdzenia 2.6 x jest punktem 0 ekstremalnym. Ponadto b − λyi0 T T T = pTB (b − λyi0 ) + pTN λei0 = pTB b − λpTB yi0 + λpi0 = p x = [pB , pN ] λei0 = pTB B −1 b + λ(pi0 − pTB B −1 ai0 ) = pTB x + λ(pi0 − pTB B −1 ai0 ). Ponieważ λ > 0 oraz pi0 −pTB B −1 ai0 > 0, to pT x > pT xi0 . Zatem skonstruowaliśmy punkt ekstremalny x, dla którego pT x > pT x, co daje sprzeczność, ponieważ pT x = max1≤i≤k pT xi . Wniosek 2.13 (o istnieniu kierunkowych wektorów ekstremalnych). Niech X = {x ∈ Rn ; Ax = b, x ≥ 0}, gdzie A ∈ Mm×n (R), b ∈ Rm , rz(A) = m. Wówczas X posiada kierunkowy wektor ekstremalny wtedy i tylko wtedy, gdy X jest nieograniczony. Dowód. Oczywiście jeśli zbiór X posiada kierunkowy wektor ekstremalny, to X jest nieograniczony. Pokażemy implikację przeciwną. W tym celu załóżmy, żePX nie posiada Pk kierunkowych wektorów ekstremalnych. Niech k x ∈ X, x = i=1 λi xi , i=1 λi = 1, λi ≥ 0 oraz niech x1 , x2 , . . . , xk będą punktami ekstremalnymi. Mamy k x k=k k X i=1 λi xi k≤ k X i=1 |λi | k xi k≤ max {k xi k}. 1≤i≤k Zatem X jest ograniczony. Otrzymana sprzeczność dowodzi, że zbiór X posiada kierunkowy wektor ekstremalny. 18 2. METODA SYMPLEKSOWA Twierdzenie 2.14. Niech X = {x ∈ Rn ; Ax = b, x ≥ 0}, gdzie A ∈ Mm×n (R), b ∈ Rm , rz (A) = m i niech x1 , x2 , . . . , xk będą wszystkimi punktami ekstremalnymi, zaś v1 , v2 , . . . , vl wszystkimi wektorami ekstremalnymi zbioru X, c ∈ Rn . Wówczas inf{cT x; x ∈ X} ∈ R ⇔ ∀j=1,2,...,l cT vj ≥ 0. Jeżeli ∀j=1,2,...,l cT vj ≥ 0, to ∃i∈{1,2,...,k} inf{cT x; x ∈ X} = cT xi . Dowód. Z Twierdzenia 2.12 wiemy, że dowolny P element x spełnia waP runki Ax = b, x ≥ 0 wtedy i tylko wtedy, gdy x = ki=1 λi xi + lj=1 µj vj , Pk λi = 1, i = 1, 2, . . . , k, j = 1, 2, . . . , l. Zatem cT x = λi , µj ≥ 0, i=1 P P P k l cT ( i=1 λi xi + j=1 µj vj ), gdzie λi , µj ≥ 0, ki=1 λi = 1, i = 1, 2, . . . , k, j = 1, 2, . . . , l. Jeśli dla pewnego j, cT vj < 0, to nasze wyrażenie jest nieograniczone, ponieważ µj możemy wybrać dowolnie duże. Zatem inf{cT x; x ∈ X} ∈ R wtedy i tylko wtedy, gdy cT vj ≥ 0 dla dowolnego j = 1, 2, . . . , l. Jeśli cT vj ≥ 0 dla dowolnego j = 1, 2, . . . , l, to w celu osiągnięcia najmniejszej wartości możemy przyjąć µj = 0 dla j = 1, 2, . . . , l. Zatem T inf{c ( k X λi xi + i=1 l X j=1 µj vj )} = inf{c T k X i=1 λi xi ; λi ≥ 0, k X λi = 1}. i=1 Niech λi0 = 1 oraz λi = 0 dla i 6=Pi0 , gdzie indeks i0 jest taki, że cT xi0 = min1≤i≤k {cT xi }. Wówczas cT xi0 ≤ ki=1 λi cT xi , co kończy dowód. Niech X = {x ∈ R; Ax = b, x ≥ 0}, gdzie A ∈ Mm×n (R), b ∈ Rm , rz (A) = m. Zajmiemy się szukaniem inf{cT x; x ∈ X}. Niech x będzie punktem ekstremalnym zbioru X. Z Twierdzenia 2.6 wiemy, że istnieje B ∈ C(A), −1 x B b B B −1 b ≥ 0 oraz A = [BN], x = . . Weźmy dowolny x ∈ X, x = xN 0 x Wówczas Ax = b tzn. [BN] B = b, skąd dostajemy BxB + NxN = b. xN −1 −1 Zatem xB = B b − B NxN . Policzmy cT x cT x = cTB xB + cTN xN = cT B −1 b − cTB B −1 NxN + cTN xN = cTB xB + cTN xN + −cTB B −1 NxN + cTN xN = cT x + (cTN − cTB B −1 N)xN . Przypadek 1: cTN − cTB B −1 N ≥ 0. Ponieważ x ≥ 0, to xN ≥ 0 i w konsekwencji cT x ≥ cT x. Zatem x jest szukanym punktem. 2. METODA SYMPLEKSOWA 19 Przypadek 2: cTN − cTB B −1 N 6≥ 0. W szczególności niech dla pewnego indeksu j będzie cTj − cTB B −1 aj < 0 (stąd cT x < cT x). Przypadek 2a: −B −1 aj Zakładamy, że B aj ≤ 0. Wówczas biorąc vj = , gdzie ej jest ej wektorem o n − m współrzędnych mającym jedynkę na miejscu j, a na pozostałych miejscach zero, otrzymujemy kierunkowy wektor ekstremalny. Wobec tego x = x + vj , x ∈ X. Z równości cT x = cT x + cT vj oraz cT x = cT x + (cTN − cTB B −1 N)xN dostajemy −1 cT vj = (cTN − cTB B −1 N)xN = cTj − cTB B −1 aj < 0, czyli problem nie posiada rozwiązania. Przypadek 2b: −B −1 aj i oznaczmy y = B −1 aj , Zakładamy, że B aj 6≤ 0. Weźmy vj = ej −1 b = B −1 b. Niech λ = min1≤i≤m { ybii ; yi > 0} = bi0 , yi0 x = x + λvj . Pokażemy, że −B −1 aj x ∈ X. Wiemy, że Ax = b, natomiast Avj = [BN]vj = [BN] = ej −aj + aj = 0, zatem Ax = b. Musimy jeszcze udowodnić, że x ≥ 0. Dla i = 1, 2, . . . , m mamy x = xi + λ(vj )i = (B −1 b)i + bi0 bi (−B −1 aj )i = bi − 0 yi . yi0 yi0 Rozważmy dwa przypadki: 1. jeśli yi ≤ 0, to oczywiście xi ≥ 0, b 2. jeśli yi > 0, to ybii ≥ yii0 , a stąd xi ≥ 0. 0 Dla i = m + 1, m + 2, . . . , n oraz i 6= j mamy xi = 0. Dla i = j mamy xi = λ > 0. Wektor x posiada niezerowe współrzędne co najwyżej na miejscach 1, 2, . . . , i0 − 1, i0 + 1, . . . , m, j. Pokażemy, że a1 , a2 , . . . , ai0 −1 , ai0 +1 , . . . , am , aj są liniowo niezależne. Wówczas x będzie punktem ekstremalnym. Załóżmy, 20 2. METODA SYMPLEKSOWA że P 0= i∈{1,...,m,j}\{i0 } X αi ai = 0, mamy i∈{1,...,m,j}\{i0 } = X αi ai = i∈{1,...,m}\{i0 } X αi ai + αj αi ai +αj By = i∈{1,...,m}\{i0 } m X i=1 i∈{1,...,m}\{i0 } X αi ai +αj aj = yi ai = m X (αi + αj yi )ai , i=1 gdzie αi0 = 0. Wtedy αi + αj yi = 0 oraz αj yi0 = 0. Zatem αj = 0, a stąd αi = 0. Niech B ′ = [a1 , a2 , . . . , ai0 −1 , ai0 +1 , . . . , am , aj ] oraz A = [B′ N ′ ]. Wówczas −B ′−1 b ′ ′ ′ ′−1 oraz Ax = b, stąd b = B xB + N xN = B xB , czyli xB = B b tzn. 0 B ′−1 b ≥ 0. Ponadto −1 aj T T T T T T −B = cT x+ c x = c (x + λvj ) = c x + c λvj = c x + λc ej +λ(cTj − cTB B −1 aj ) ≤ cT x. 2.3. Metoda sympleksowa Przypomnijmy, że chcemy zminimalizować cT x przy warunkach Ax = b, x ≥ 0. Algorytm sympleks Krok 1. Wziąć dowolny punkt ekstremalny x zbioru X o zmiennych bazowych xB . Krok 2. Wyliczyć α = cTB B −1 N − cTN . Jeżeli α ≤ 0, to zakończyć algorytm (punkt x jest szukanym punktem). W przeciwnym wypadku przejść do kroku 3. Krok 3. Wybrać maksymalną dodatnią współrzędną α. Niech tą współrzędną będzie αj , zatem αj = cTB B −1 aj − cTj . Jeśli yj = B −1 aj ≤ 0, to zakończyć algorytm (brak rozwiązania). W przeciwnym wypadku przejść do 2. METODA SYMPLEKSOWA 21 kroku 4. Krok 4. Skonstruować nowy punkt ekstremalny o zmiennych bazowych xB zgodnie z opisanym powyżej procesem. Przejść do kroku 2. Przykład 2.15. Znaleźć minimum funkcji f (x1 , x2 ) = 2x1 − 9x2 przy warunkach x1 + x2 ≤ 6, −x1 + 3x2 ≤ 3, x1 ≥ 0, x2 ≥ 0. Zmiana warunków funkcji f (x1 , x2 ) = 2x1 − 9x2 : x1 + x2 + x3 = 6, −x1 + 3x2 + x4 = 3, x1 ≥ 0, x2 ≥ 0, x3 ≥ 0, x4 ≥ 0, gdzie x3 , x4 są zmiennymi dopełniającymi. Mamy 1 1 1 0 6 A= , b= , c = [2, −9, 0, 0]T . −1 3 0 1 3 1 0 , Szukamy macierzy B, dla której B b ≥ 0. Weźmy B = [a3 , a4 ] = 0 1 wówczas B −1 = B i B −1 b = b ≥ 0. Liczymy cTB B −1 N − cTN : 1 0 1 1 T −1 T cB B N − cN = [0, 0] − [2, −9] = [−2, 9] 6≤ 0. 0 1 −1 3 1 0 1 1 1 −1 Obliczamy y2 = B a2 = = . Ponieważ 6≤ 0, to konstru0 1 3 3 3 ujemy nowy punkt ekstremalny. Mamy bi 6 3 λ = min = 1, ; y2i > 0 = min , i=3,4 i=3,4 y2i 1 3 0 0 0 0 e2 1 = 1 . + 1 , x = x + λv2 = v2 = −1 −1 5 6 −B a2 0 −3 3 −1 2. METODA SYMPLEKSOWA 22 1 1 0 13 −1 Teraz B = [a2 , a3 ] = , wówczas B = . Ponownie liczymy 3 0 1 − 31 cTB B −1 N − cTN : 1 0 0 31 T −1 T − [2, 0] = [1, −3] 6≤ 0. cB B N − cN = [−9, 0] 1 − 13 −1 1 1 1 1 0 1 − − 3 Obliczamy y1 = B −1 a1 = = 43 . Ponieważ 43 6≤ 0, to 1 − 31 −1 3 3 konstruujemy kolejny punkt ekstremalny. Mamy bi 5 15 λ = min ; y1i > 0 = min 4 = , i=2,3 y1i 4 3 15 0 1 4 1 15 1 9 3 4 x = x + λv1 = 5 + 4 − 4 = 0 . 3 0 0 0 3 − 14 1 1 −1 4 , wobec tego B = 1 1 . Teraz przyjmujemy B = [a1 , a2 ] = −1 3 4 4 Liczymy cTB B −1 N − cTN : 3 3 11 − 14 1 0 T −1 T 4 cB B N − cN = [2, −9] 1 1 − [0, 0] = [− , − ] < 0. 0 1 4 4 4 4 Zatem kończymy obliczenia i otrzymujemy wartość optymalną f (x1 , x2 ) = 2x1 − 9x2 = 2 15 − 9 49 = − 51 . 4 4 Lemat 2.16. Niech B, B ∈ Mm×m (R) będą macierzami nieosobliwymi różniącymi się jedną kolumną, tzn. B = [a1 , a2 , . . . , al−1 , al , al+1 , . . . , am ], B = [a1 , a2 , . . . , al−1 , ak , al+1 , . . . , am ] oraz niech B −1 ak = y = [y1 , y2, . . . , ym ]T . −1 Wówczas B = F B −1 , gdzie macierz F posiada jedynki na głównej przekątnej, l-tą kolumnę postaci fl = y1l [−y1 , −y2 , . . . , −yl−1 , 1, −yl+1 , . . . , −ym ]T , a na pozostałych miejscach zera. Dowód. B = B + (ak − al )eTl = B + (ak − Bel )eTl = B(I + B −1 (ak − Bel )eTl ) = B(I + (B −1 ak − el )eTl ) = B(I + (y − el )eTl ), zatem B −1 = (I + (y − Iel )eTl )−1 B −1 . 2. METODA SYMPLEKSOWA 23 Trzeba pokazać, że F = (I + (y − Iel )eTl )−1 . Zauważmy, że I + (y − Iel )eTl jest macierzą jednostkową z l-tą kolumną y. Ponadto det(I + (y − Iel )eTl ) = yl 6= 0. Przykład 2.17. Znaleźć maksimum funkcji f (x1 , x2 ) = x1 + 2x2 przy warunkach x1 + x2 ≤ 5, −x1 + x2 ≥ 0, 3x1 + 7x2 ≤ 27, x1 ≥ 0, x2 ≥ 0. Przeformułowanie i zmiana warunków funkcji: znaleźć minimum funkcji f (x1 , x2 ) = −x1 − 2x2 przy warunkach x1 + x2 + x3 = 5, x1 − x2 + x4 = 0, 3x1 + 7x2 + x5 = 27, x1 ≥ 0, x2 ≥ 0, x3 ≥ 0, x4 ≥ 0, x5 ≥ 0, gdzie x3 , x4 , x5 są 1 A= 1 3 zmiennymi dopełniającymi. Mamy 1 1 0 0 5 −1 0 1 0 , b = 0 , c = [−1, −2, 0, 0, 0]T . 7 0 0 1 27 −1 Szukamy macierzy B, dla której B b ≥ 0. Weźmy B = [a3 , a4 , a5 ] = 1 0 0 0 1 0, wówczas B −1 = B i B −1 b = b ≥ 0, xT = [0, 0, 5, 0, 27]. Liczymy 0 0 1 T −1 cB B N − cTN : 1 0 0 1 1 cTB B −1 N − cTN = [0, 0, 0] 0 1 0 1 −1 − [−1, −2] = [1, 2] 6≤ 0. 0 0 1 3 7 2. METODA SYMPLEKSOWA 24 1 0 0 1 1 1 Obliczamy y2 = B −1 a2 = 0 1 0 −1 = −1. Ponieważ −1 6≤ 0, 0 0 1 7 7 7 to konstruujemy nowy punkt ekstremalny. Mamy 27 bi 5 27 = , ; y2i > 0 = min , λ = min i=3,4,5 y2i 1 7 7 0 0 0 27 0 27 1 78 e2 . , x = x + λv2 = v2 = 7 5 + 7 −1 = 27 −B −1 a2 1 0 7 −7 0 27 1 1 0 Teraz zamiast B = [a2 , a3 , a4 ] = −1 0 1, możemy rozważać łatwiejszą 7 0 0 1 0 1 −1 do dalszych obliczeń macierz B = [a3 , a4 , a2 ] = 0 1 −1. Mamy B = 7 0 0 8 1 1 5 1 0 −7 1 0 −7 7 −1 F B −1 = F = 0 1 17 , B b = 0 1 17 0 = 27 7 , l = 3, yl = 7. 1 1 27 0 0 7 0 0 7 27 7 Przykład 2.18. Przedstawimy rozwiązanie zagadnienia z Przykładu 1.1 wykorzystując tablice sympleksowe. Nasz PL-model ma następującą postać. Znaleźć maksimum funkcji f (x1 , x2 ) = 3x1 + 2x2 przy warunkach x1 + x2 + x3 = 9, 3x1 + x2 + x4 = 18, 3x1 + x5 = 7, 3x2 + x6 = 6, x1 ≥ 0, x2 ≥ 0, x3 ≥ 0, x4 ≥ 0, x5 ≥ 0, x6 ≥ 0, gdzie x3 , x4 , x5 , x6 1 3 A= 1 0 są zmiennymi dopełniającymi. Mamy 9 1 1 0 0 0 1 0 1 0 0 18 , c = [3, 2, 0, 0, 0, 0]T . , b = 7 0 0 0 1 0 6 1 0 0 0 1 2. METODA SYMPLEKSOWA 25 Tablica sympleksowa dla powyższego zagadnienia wygląda następująco: 3 1 3 1 0 2 1 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 9 18 7 6 Początkowym rozwiązaniem dopuszczalnym jest x1 = 0, x2 = 0, x3 = 9, 1 0 0 0 0 1 0 0 x4 = 18, x5 = 7, x6 = 6. Ponadto B = [a3 , a4 , a5 , a6 ] = 0 0 1 0, 0 0 0 1 1 1 3 1 N = [a1 , a2 ] = 1 0. Największym dodatnim współczynnikiem funkcji ce0 1 lu jest 3, zatem x1 wchodzi do nowych zmiennych bazowych. Aby sprawdzić, która ze zmiennych opuszcza zbiór zmiennych bazowych liczymy odpowiednie minimum: min{ 91 , 18 , 7 } = 18 = 6. Zatem x4 opuszcza zbiór zmiennych 3 1 3 bazowych. Mamy teraz B = [a1 , a3 , a5 , a6 ] oraz N = [a2 , a4 ]. 3 1 3 1 0 2 1 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 9 18 7 6 Stosując eliminację Gaussa oraz dokonując odpowiednich uproszczeń otrzymujemy następującą tablicę sympleksową: 0 1 0 23 1 13 0 − 13 0 1 0 1 0 0 0 −1 − 13 1 3 − 13 0 0 0 0 1 0 0 0 0 0 1 −18 3 6 1 6 Jedynym dodatnim współczynnikiem funkcji celu jest teraz 2, czyli x2 wchodzi do zbioru nowych zmiennych bazowych. Liczymy odpowiednie minimum: min{ 92 , 18 , 6 } = 29 . Zatem zmienna x3 opuszcza zbiór zmiennych bazowych. 1 1 Mamy teraz B = [a1 , a2 , a5 , a6 ] oraz N = [a3 , a4 ]. 2. METODA SYMPLEKSOWA 0 1 0 23 1 13 0 − 13 0 1 0 1 0 0 0 −1 − 13 1 3 − 13 0 0 0 0 1 0 0 0 0 0 1 26 −18 3 6 1 6 Stosując eliminację Gaussa oraz dokonując odpowiednich uproszczeń otrzymujemy następującą tablicę sympleksową: 0 0 1 0 0 0 1 0 0 0 −1 12 1 21 − 12 − 12 − 12 −1 12 1 2 1 2 1 2 − 12 0 0 0 1 0 0 0 0 0 1 −22 21 4 12 4 12 2 12 1 12 Ponieważ nie ma już dodatnich współczynników funkcji celu otrzymujemy wartość optymalną f (x1 , x2 ) = 3x1 + 2x2 = 3(4 12 ) + 2(4 21 ) = 22 12 . Problem znalezienia pierwszego punktu ekstremalnego Przypomnijmy, że szukamy min cT x, przy założeniach Ax = b, x ≥ 0, rz (A) = m, b ∈ Rm . W podanym wcześniej algorytmie sympleks w kroku pierwszym zakładamy istnienie punktu ekstremalnego. Z Twierdzenia 2.6 wynika, że znalezienie początkowego punktu ekstremalnego związane jest z rozbiciem macierzy A na macierze B oraz N tak, aby B −1 b ≥ 0. W Przykładach 2.15 i 2.17 mieliśmy na początku B = I, b ≥ 0. Dwuetapowy sposób znajdowania pierwszego punktu ekstremalnego (bazowego) Zakładamy, że b ≥ 0. Jeśli bi < 0, to mnożymy odpowiednie równanie przez x -1. Rozpatrzmy pomocnicze zagadnienie minimalizacji. Mamy [AI] =bi y szukamy następującego minimum (∗) min m X i=1 yi , 2. METODA SYMPLEKSOWA 27 gdzie Ax + Iy = b, x ≥ 0, y ≥ 0. Do rozwiązania zagadnienia (∗) stosujemy metodę sympleks, ponieważ ma ono początkowe rozwiązanie dopuszczalne. 0 , x = 0, y = b. Jeśli znajdziemy Zaczynamy następująco B = I, B −1 b = b P optymalne rozwiązanie bazowe dla (∗), takie że m i=1 yi = 0, to otrzymamy także bazę dającą rozwiązanie xB (czyli Ax = b). Jeśli (∗) posiada dodatnie minimum, to nie ma rozwiązania dopuszczalnego dla Ax = b, x ≥ 0. Mamy Etap I - znalezienie rozwiązania dopuszczalnego dla Ax = b, x ≥ 0 lub stwierdzenie, że nie istnieje takie rozwiązanie. Etap II - użycie rozwiązania z etapu pierwszego do rozwiązania następującego zagadnienia: znaleźć minimum cT x przy warunkach Ax ≤ b, x ≥ 0. Przykład 2.19. Niech dany będzie następujący układ równań: 2x1 + x2 + 2x3 = 4, 3x1 + 3x2 + x3 = 3, x1 ≥ 0, x2 ≥ 0, x3 ≥ 0. Mamy 4 2 1 2 . , b= A= 3 3 3 1 Rozważmy pomocnicze zagadnienie minimalizacji. Znaleźć minimum funkcji f (y1, y2 ) = y1 + y2 przy warunkach 2x1 + x2 + 2x3 + y1 = 4, 3x1 + 3x2 + x3 + y2 = 3, x1 ≥ 0, x2 ≥ 0, x3 ≥ 0, y1 ≥ 0, y2 ≥ 0. Mamy x1 x2 x 2 1 2 1 0 x3 = 4 = b, c = [0, 0, 0, 1, 1]T . [AI] = 3 y 3 3 1 0 1 y1 y2 2. METODA SYMPLEKSOWA 28 1 0 Ponadto B = , wówczas B −1 = B i B −1 b = b ≥ 0. Liczymy cTB B −1 N − 0 1 cTN : 1 0 2 1 2 − [0, 0, 0] = [5, 4, 3] 6≤ 0. − = [1, 1] 0 1 3 3 1 2 2 Obliczamy y1 = . Ponieważ 6≤ 0, to konstruujemy nowy punkt eks3 3 tremalny. Mamy 4 3 λ = min = 1, , 2 3 1 1 0 0 0 0 + 1 0 = 0 . 0 x= −2 2 4 0 −3 3 2 1 0 31 Teraz B = , wówczas B −1 = oraz 3 0 1 − 23 4 5 0 31 1 2 0 T −1 T cB B N − cN = [0, 1] − [0, 0, 1] = [−1, , − ] 6≤ 0. 1 − 32 3 1 1 3 3 0 31 1 1 Obliczamy y2 = 6≤ 0, zatem konstruujemy kolejny = 2 −1 1 −3 3 punkt ekstremalny. Mamy 0 −1 1 0 0 0 λ = 1, x = 0 + 1 1 = 1 . 1 3 2 0 0 0 2 1 0 1 −1 Teraz B = , wobec tego B = oraz 1 0 1 −2 2 1 0 0 1 T −1 T − [0, 0, 1] = [−4, −5, −3] < 0. cB B N − cN = [0, 1] 1 −2 3 3 1 cTB B −1 N cTN 2. METODA SYMPLEKSOWA 29 Zatem kończymy obliczenia i otrzymujemy wartość optymalną f (y1 , y2) = y1 + y2 = 3 + 0 = 3. Ponieważ otrzymaliśmy dodatnie minimum, to nie ma rozwiązania dopuszczalnego dla Ax = b, x ≥ 0. Przykład 2.20. Znaleźć minimum funkcji f (x1 , x2 , x3 ) = 2x1 + x2 − 2x3 przy warunkach x1 + 2x2 + x3 = 7, 2x1 + 3x2 + x3 = 12, x1 ≥ 0, x2 ≥ 0, x3 ≥ 0. Mamy 1 2 1 7 A= , b= . 2 3 1 12 Rozważmy pomocnicze zagadnienie minimalizacji. Znaleźć minimum funkcji f (y1, y2 ) = y1 + y2 przy warunkach x1 + 2x2 + x3 + y1 = 7, 2x1 + 3x2 + x3 + y2 = 12, x1 ≥ 0, x2 ≥ 0, x3 ≥ 0, y1 ≥ 0, y2 ≥ 0. Mamy x1 x2 1 2 1 1 0 x x3 = 7 = b, c = [0, 0, 0, 1, 1]T . = [AI] 12 2 3 1 0 1 y y1 y2 1 0 Ponadto B = , wówczas B −1 = B i B −1 b = b ≥ 0. Liczymy cTB B −1 N − 0 1 cTN : 1 0 1 2 1 T −1 T − [0, 0, 0] = [3, 5, 2] 6≤ 0. cB B N − cN = [1, 1] 0 1 2 3 1 2 2 Obliczamy y2 = . Ponieważ 6≤ 0, to konstruujemy nowy punkt eks3 3 tremalny. Mamy 7 12 7 λ = min = , , 2 3 2 2. METODA SYMPLEKSOWA 30 0 0 0 1 7 0 7 2 x= 0 + 2 0 = 0 . −2 0 7 3 −3 12 2 1 2 0 0 , wówczas B −1 = 23 Teraz B = oraz 3 1 −2 1 1 1 1 5 0 1 1 1 T −1 T cB B N − cN = [0, 1] 2 3 − [0, 0, 1] = [ , − , − ] 6≤ 0. −2 1 2 1 0 2 2 2 1 1 0 1 = 21 6≤ 0, zatem konstruujemy kolejny punkt Obliczamy y1 = 23 −2 1 2 2 ekstremalny. Mamy 0 1 3 7 − 1 2 2 2 + 3 0 = 0 . 0 λ = 3, x = 0 0 0 3 − 12 0 2 −3 2 1 2 oraz , wobec tego B −1 = Teraz B = 2 −1 2 3 1 1 0 −3 2 T −1 T − [0, 1, 1] = [0, −1, −1] < 0. cB B N − cN = [0, 0] 2 −1 1 0 1 Otrzymujemy wartość optymalną f (y1 , y2) = y1 + y2 = 0 + 0 = 0. Zatem mamy rozwiązanie dopuszczalne dla Ax = b, x ≥ 0. Powróćmy do rozwiązania zagadnienia początkowego. Wykorzystując powyższe obliczenia mamy 1 −3 2 T −1 T − [−2] = [1] 6≤ 0. cB B N − cN = [2, 1] 2 −1 1 −3 2 1 −1 Obliczamy y3 = = 6≤ 0, zatem konstruujemy kolejny 2 −1 1 1 punkt ekstremalny. Mamy 3 1 5 λ = 2, x = 2 + 2 −1 = 0 . 0 1 2 2. METODA SYMPLEKSOWA 31 1 1 −1 1 −1 Teraz B = , wobec tego B = oraz 2 1 2 −1 2 −1 1 T −1 T − [1] = [−1] < 0. cB B N − cN = [2, −2] 2 −1 3 Zatem kończymy obliczenia i otrzymujemy wartość optymalną f (x1 , x2 , x3 ) = 2x1 + x2 − 2x3 = 10 − 4 = 6. Zbieżność i złożoność czasowa Metoda sympleks opiera się na fakcie, że optymalna wartość programu liniowego, jeśli istnieje, jest zawsze osiągnięta w rozwiązaniu bazowym. Niezdegenerowanym bazowym rozwiązaniem dopuszczalnym nazywamy bazowe rozwiązanie dopuszczalne, w którym wszystkie zmienne bazowe są dodatnie (xB > 0). Przy założeniu, że wszystkie bazowe rozwiązania dopuszczalne są niezdegenerowane, metoda sympleks znajduje rozwiązanie optymalne w skończonej liczbie iteracji, ponieważ liczba możliwych baz jest skończona i żadna z nich nie powtarza się. W przypadku degeneracji możemy spotkać ciąg iteracji, generujący taki ciąg baz Bi , Bi+1 , . . . , Bj , że wszystkie odpowiadają temu samemu bazowemu rozwiązaniu dopuszczalnemu i tej samej wartości funkcji celu. Może się również zdarzyć, że Bi = Bj i metoda sympleks wejdzie w cykl nieskończony. Dodajmy również, że istnieją przykłady pokazujące, iż złożoność czasowa metody sympleks nie jest ograniczona wielomianowo. Dolne ograniczenie czasu działania tej metody jest wykładnicze. 2.3.1. Dualna metoda programowania liniowego Szukamy max y T b przy założeniach y T A ≤ cT , y ∈ Rm (nie zakłada się, że y ≥ 0). Zauważmy, że y T b = y T Ax ≤ cT x, x ≥ 0. Załóżmy, że y T b = cT x, Ax = b, T A y ≤ c dla pewnych x oraz x. Wtedy (ćwiczenia) y, x są rozwiązaniami 2. METODA SYMPLEKSOWA 32 optymalnymi dla odpowiednich zagadnień (x dla szukania minimum cT x przy warunkach Ax = b, x ≥ 0, a y dla szukania maksimum y T b przy warunkach y T A ≤ cT ). Zagadnienie min cT x, Ax = b, x ≥ 0, będziemy nazywać prymalnym. Znane jest nastepujące twierdzenie. Twierdzenie 2.21. Jeśli jedno z zadań programowania liniowego (prymalne lub dualne) posiada skończone rozwiązanie, to takie rozwiązanie posiada drugie z tych zadań. Ponadto wartości funkcji celu obu powyższych zagadnień są takie same. Załóżmy, że xB = B −1 b jest rozwiązaniem (dopuszczalnym i optymalnym) dla zagadnienia prymalnego (min cT x, Ax = b, x ≥ 0). Niech y T = cTB B −1 . Wiemy, że cTN − cTB B −1 N ≥ 0 stąd cTB B −1 N ≤ cTN . Okazuje się, że wektor y T = cTB B −1 jest rozwiązaniem optymalnym zagadnienia dualnego. Mamy y T A = y T [BN] = [cTB B −1 B, cTB B −1 N] ≤ [cTB , cTN ] = cT jak również równość funkcji celu y T b = cTB B −1 b = cTB xB = cTB xB + cTN xN = x T T = [cB , cN ] B = cT x. xN Zatem jeśli zagadnienie prymalne posiada rozwiązanie optymalne xB = B −1 b, to zagadnienie dualne ma rozwiązanie optymalne y T = cTB B −1 , które można bez trudności policzyć, ponieważ macierz odwrotna do bazy jest znana. Związek pomiędzy rozwiązaniami optymalnymi x oraz y podaje następujące twierdzenie. Twierdzenie 2.22 (o różnicach dopełniających). Jeżeli x, y są odpowiednio punktami ekstremalnymi dla zagadnienia prymalnego i dualnego, to są one rozwiązaniami optymalnymi wtedy i tylko wtedy, gdy dla każdego i spełnione są warunki (i) jeśli xi > 0, to y T ai = ci (ii) jeśli y T ai < ci , to xi = 0, gdzie ai oznacza i-tą kolumnę macierzy A. Z powyższego twierdzenia bezpośrednio wynika następujący fakt. 2. METODA SYMPLEKSOWA 33 Wniosek 2.23. Jeżeli x, y są odpowiednio rozwiązaniami optymalnymi dla zagadnienia prymalnego i dualnego, to (cT − y T A)x = 0. Algorytm dualny sympleks Dane jest rozwiązanie bazowe xB = B −1 b takie, że wektor y T = cTB B −1 spełnia nierówność cTN − y T N ≥ 0. Krok 1. Jeśli xB ≥ 0, to xB jest rozwiązaniem optymalnym i obliczenia są zakończone. W przeciwnym razie wybrać ujemną składową xB , niech tą składową będzie składowa o numerze l (zmienna xl zostaje usunięta ze zbioru zmiennych bazowych, a l-ta kolumna w macierzy A zostaje usunięta z bazy B). Krok 2. Obliczyć bl aj = ulj dla j = m+1, m+2, . . . , n, gdzie bl jest l-tym wierszem macierzy B −1 , aj j-tą kolumną macierzy A. Jeśli wszystkie ulj ≥ 0, to zagadnienie dualne nie ma skończonego rozwiązania. W przeciwnym razie dla wszystkich j = m + 1, m + 2, . . . , n takich, że ulj < 0 obliczyć zj = y T aj = cTB B −1 aj oraz wyznaczyć ε = min{ zj − cj ; ulj < 0}. ulj k Niech ε = zku−c (k-ta kolumna macierzy A zastępuje w bazie l-tą kolumnę lk macierzy A). Krok 3. Obliczyć nowy wektor y T w następujący sposób: y T = y T − εbl . Krok 4. Uaktualnić odwrotną macierz bazową B −1 oraz obliczyć nowe rozwiązanie xB = B −1 b. Krok 5. Wrócić do kroku pierwszego. 34 2. METODA SYMPLEKSOWA Uwaga 2.24. Nową zmienną y można obliczyć tak jak w kroku 3 lub wykorzystując zależność y T = cTB B −1 po tym, gdy macierz B −1 została uaktualniona. Wartość dualnej funkcji celu y T b jest zwiększana w każdej kolejnej iteracji. Procedura dualna sympleks zostaje zakończona po skończonej liczbie kroków, gdy xB ≥ 0. 2.4. Elementy programowania całkowitoliczbowego Rozważmy zagadnienie optymalizacji z kawałkami liniowym ograniczeniem lub funkcją celu jednej zmiennej przedstawione na poniższym rysunku f(y) y1 y2 yn-2 y3 yn-1 yn y Dowolna wartość y leżąca pomiędzy y1 oraz yn może być przedstawiona w postaci wypukłej kombinacji zmiennych yi oraz yi+1 w następujący sposób: y = λi yi + λi+1 yi+1 , gdzie λi + λi+1 = 1, λi , λi+1 ≥ 0. Podobnie f (y) = λi f (yi) + λi+1 f (yi+1). Za pomocą zmiennych całkowitoliczbowych możemy wyrazić f (y) w całym przedziale [y1 , yn ] w następujący sposób: f (y) = n X λi f (yi ), i=1 gdzie n X i=1 λi yi = y, n X λi = 1, λi ≥ 0, i = 1, 2, . . . , n, λ1 ≤ x1 , λi ≤ xi−1 + xi , i=1 i = 2, 3, . . . , n−1, λn ≤ xn−1 , n−1 X i=1 xi = 1, xi = 0 lub xi = 1, i = 1, 2, . . . , n−1. 35 2. METODA SYMPLEKSOWA Tylko jedna zmienna xi może przyjąć wartość równą 1, a stąd tylko λi oraz λi+1 mogą być niezerowe, czyli λi + λi+1 = 1. Mamy zatem do czynienia ze zmiennymi zero-jedynkowymi x1 , x2 , . . . , xn−1 , które określają przedział zawierający y oraz ze zmiennymi ciągłymi λ1 , λ2 , . . . , λn , które dokładnie określają wartość y. Powyższa technika może być użyta do przybliżania funkcji nieliniowych funkcjami kawałkami liniowymi i do przekształcania zagadnień z nieliniowymi funkcjami celu do zagadnień całkowitoliczbowych programowania liniowego. W przypadku ogólnym nie można rozwiązywać zagadnień całkowitoliczbowych za pomocą metody sympleks i należy posługiwać się specjalnymi technikami obliczeniowymi. Poniżej przedstawimy jedną z nich, a mianowicie metodę dualną Gomory’ego. Metoda ta jest bezpośrednim rozwinięciem dualnej metody sympleks. Różnica polega na tym, że w metodzie całkowitoliczbowej wiersz zawierający element główny jest generowany w każdej iteracji i wartość tego elementu wynosi -1. Zapewnia to całkowitoliczbowość dualnej metody sympleksowej. Algorytm redukuje obszar dopuszczalności do takiego, aby jego wierzchołek optymalny był całkowitoliczbowy. Leksykograficzna postać dualnej metody sympleks Rozważmy następującą dualną tablicę sympleksową Zmienna x0 x1 .. . xl .. . Stała −xm+1 p00 p0,m+1 p10 p1,m+1 .. .. . . pl0 pl,m+1 .. .. . . −xm+2 p0,m+2 p1,m+2 .. . . . . −xk . . . p0k . . . p1k .. . . . . −xn . . . p0n . . . p1n .. . pl,m+2 .. . ... plk .. . ... pln .. . xm xm+1 xm+2 .. . pm0 0 0 .. . pm,m+1 −1 0 .. . pm,m+2 0 −1 .. . ... ... ... .. . pmk 0 0 .. . ... ... ... pmn 0 0 .. . xk .. . 0 .. . 0 .. . 0 .. . ... −1 .. . 0 .. . xn 0 0 0 ... 0 ... .. . ... −1 2. METODA SYMPLEKSOWA 36 gdzie xl jest zmienną opuszczającą bazę, −xk zmienną wchodzącą do bazy, natomiast plk jest elementem głównym. Powyższa tablica odpowiada zagadnieniu całkowitoliczbowemu w postaci: (∗) znaleźć minimum x0 , przy warunkach X xi = pi0 + pij (−xj ), xi ≥ 0, xi ∈ Z, i = 1, 2, . . . , n, j∈J natomiast J jest zbiorem wskaźników niebazowych zmiennych. W powyższej tablicy wygodnie jest założyć, że pierwsze m zmiennych jest bazowych. Zapiszmy nasze zagadnienie w postaci wektorowej, mamy: znaleźć minimum x0 , przy warunkach X x = p0 + pj (−xj ), xi ≥ 0, xi ∈ Z, i = 1, 2, . . . , n. j∈J Wektor v 6= 0 nazywamy leksykograficznie dodatnim (ujemnym), jeśli pierwsza jego niezerowa składowa jest dodatnia (ujemna). Gdy wektor v jest leksykograficznie dodatni (ujemny), to piszemy v >l 0 (v <l 0). Wektor v jest leksykograficznie większy (mniejszy) od wektora w, jeżeli v − w >l 0 (v − w <l 0). Ciąg wektorów vt , t = 1, 2, . . . nazywamy leksykograficznie malejącym (rosnącym), jeśli vt −vt+1 >l 0 (vt −vt+1 <l 0). Zatem w leksykograficznym algorytmie dualnym zagadnienie (∗) przedstawiamy w sposób następujący: znaleźć leksykograficzne minimum x, przy warunkach X x = p0 + pj (−xj ), x ≥ 0. j∈J Zmienną xl opuszczającą bazę wyznacza się tak samo jak w zwykłej metodzie dualnej tzn. pl0 = min{pi0 ; pi0 < 0, 1 ≤ i ≤ m}. Zmienną x wchodzącą do bazy znajdujemy za pomocą testu 1 1 pk = lex max{ ; plj < 0, m + 1 ≤ j ≤ n}, plk plj 2. METODA SYMPLEKSOWA 37 gdzie lex max oznacza maksimum leksykograficzne. Przekształcenie elementarne względem plk przekształca powyższą tablicę w nową tablicę z kolumnami (∗∗) pj = pj − plj 1 pk , dla j 6= k, pk = − pk . plk plk Jeżeli początkowa tablica jest dualnie dopuszczalna w sensie leksykograficznym (tzn. wektory pj , j = m+ 1, m+ 2, . . . , n są leksykograficznie ujemne), to wzory (∗∗) gwarantują, że nowe wektory kolumnowe pj są również leksykograficznie ujemne. Uwaga 2.25. Można pokazać, że rozwiązanie bazowe p0 jest ściśle rosnące (w sensie leksykograficznym) w każdej iteracji oraz że żadna baza nie powtórzy się. Zarys metody dualnej Gomory’ego. Metoda Gomory’ego rozpoczyna działanie od tablicy całkowitoliczbowej i leksykograficznie dualnie dopuszczalnego rozwiązania, to znaczy wektory pj , j = m + 1, m + 2, . . . , n są leksykograficznie ujemne dla zagadnienia minimalizacji oraz dodatnie dla zagadnienia maksymalizacji. Algorytm jest następujący: Krok 1. Wybrać wiersz o numerze r, w którym pr0 < 0, r 6= 0. Jest to wiersz generujący tzw. cięcie. Jeżeli wiersza takiego nie ma, to bieżące rozwiązanie jest optymalne. Krok 2. Znaleźć kolumnę pk z elementem głównym, która jest największa w sensie leksykograficznym wśród kolumn, dla których prj < 0. Jeśli takiej kolumny nie ma, to brak jest dopuszczalnego rozwiązania całkowitoliczbowego. Krok 3. Utworzyć nierówność (tzw. odcinającą) z wiersza r-tego, który nie jest spełniony przez bieżące rozwiązanie prymalne. Nowy wiersz jest dołączony na dole tablicy i jest to wiersz z elementem głównym równym -1. Krok 4. Wykonać jedno przekształcenie elementarne dualnej metody sympleks. 2. METODA SYMPLEKSOWA 38 Krok 5. Usunąć dodany wiersz, który jest teraz trywialny (x = −(−x)) i wrócić do kroku 1. Sposób otrzymania nierówności odcinającej Przypuśćmy, że wybrano wiersz o numerze r w tablicy dualnej, jako generujący cięcie (przez cięcie rozumiemy dodatkowe ograniczenie posiadające tę własność, że odcina część zbioru rozwiązań dopuszczalnych nie gubiąc przy tym żadnego rozwiązania całkowitoliczbowego) X xr = pr0 + prj (−xj ). j∈J Niech λ będzie liczbą dodatnią. Każda liczba p spełnia równość hpi (i) p = λ + R, λ gdzie przez [z] oznaczamy część całkowitą liczby z oraz 0 ≤ R < λ. Po zastosowaniu (i) do wiersza generującego, otrzymujemy hp i X hp i X 1 rj r0 + (−xj )+ (−xr )) = R0 +λx. (ii) Rj xj +Rr xr = R0 +λ( λ λ λ j∈J j∈J Dla dowolnego nieujemnego rozwiązania spełniającego (ii) wartość hp i X hp i 1 rj r0 + (−xj ) + (−xr ) (iii) x = λ λ λ j∈J musi być całkowita, ponieważ wszystkie współczynniki w (iii) są całkowite. Ponadto x ≥ 0, bo 0 ≤ R0 < λ i jeśli x jest ujemną liczbą całkowitą, to R0 + λx < 0. Jednak ostatnia nierówność nie jest możliwa, ponieważ lewa strona w (ii) jest nieujemna. Zatem x ≥ 0. Gdy wybierzemy λ ≥ 1, wówczas nierówność x ≥ 0 uprości się do postaci hp i X hp i r0 rj (iv) + (−xj ) ≥ 0. λ λ j∈J 2. METODA SYMPLEKSOWA 39 p Niech πrj = λrj , wówczas całkowitoliczbowe cięcie Gomory’ego określone jest następująco: X πrj (−xj ) ≥ 0. (v) x = πr0 + j∈J Ograniczenie (v) jest wierszem głównym, a x jest nową nieujemną zmienną dodatkową. Wyznaczymy teraz wartość λ. Wyznaczanie wartości λ. Krok 1. Znaleźć kolumnę główną k tak, aby pk = lex max{pj ; j ∈ J}, gdzie J = {j; prj < 0, j 6= 0}, a r-ty wiersz generuje cięcie. Krok 2. Wyznaczyć największą liczbę całkowitą ej , taką że − 1 pj ≥l −pk , j ∈ J, j 6= k. ej Ponadto niech ek = 1. p Krok 3. Przyjąć λ = max{λj = − erjj ; j ∈ J}. Uwaga 2.26. (i) Wyprowadzając zależność (iv) założyliśmy, że λ ≥ 1. Nierówność ta jest spełniona, ponieważ λ ≥ λk = −prk ≥ 1. Jeśli λ = 1, to wiersz generujący jest wierszem zawierającym element główny i nie ma nowego ograniczenia. (ii) Zgodnie z wyprowadzeniem, λ nie musi być całkowite. Wybierając taką wartość λ, otrzymamy jako element główny −1 oraz wiersz główny, który daje największy leksykograficznie wzrost kolumny p0 . Całkowitoliczbowy algorytm dualny Gomory’ego. Zakładamy, że kolumny pj , j = m + 1, m + 2, . . . , n są leksykograficznie dualnie dopuszczalne. Krok 1. Jeśli p0 ≥ 0, to rozwiązanie prymalne jest dopuszczalne i optymalne, a obliczenia się kończą. W przeciwnym razie wybrać taki wiersz generujący cięcie, że pr0 < 0. 2. METODA SYMPLEKSOWA 40 Krok 2. Znaleźć taką kolumnę główną pk , m + 1 ≤ k ≤ n, aby była ona leksykograficznie największa wśród kolumn, dla których prj < 0. Jeżeli wszystkie prj ≥ 0, to wówczas nie istnieje dopuszczalne rozwiązanie całkowitoliczbowe. W przypadku przeciwnym przejść do kroku 3. Krok 3. Dla każdego j ∈ J, j 6= k znaleźć największą liczbę całkowitą ej taką, że − e1j pj ≥ −pk . Następnie podstawić ek = 1 oraz obliczyć λ = max{− prj ; j ∈ J }. ej Krok 4. Do tablicy dualnej dołączyć ograniczenie X x = πr0 + πrj (−xj ) ≥ 0. j∈J Krok 5. Wybrać jedno dualne przekształcenie elementarne używając πrk = −1 jako elementu głównego. Krok 6. Usunąć dodane ograniczenie, które stało się trywialne i wrócić do kroku 1. Uwaga 2.27. W kroku 1 powyższego algorytmu do wyznaczenia wiersza generującego cięcie można wybrać najmniejsze pi0 < 0. Przykład 2.28. Znaleźć minimum funkcji f (x1 , x2 ) = x0 = 3x1 + 5x2 przy warunkach x3 = −5 + x1 + 4x2 ≥ 0, x4 = −7 + 3x1 + 2x2 ≥ 0, x1 , x2 , x3 , x4 ≥ 0, x1 , x2 , x3 , x4 ∈ Z. Dualna tablica sympleksowa dla powyższego zagadnienia wygląda następująco: Zmienna x0 x3 x4 Stała −x1 0 −3 −5 −1 −7 −3 −x2 −5 −4 −2 2. METODA SYMPLEKSOWA 41 Trywialne ograniczenia z pojedyńczym elementem równym -1 zostały pominięte. Niech wierszem generującym będzie wiersz, który zawiera x4 , a kolumną główną kolumna pierwsza (k = 1). Wartości ej są następujące e1 = 1, e2 = 1. Zatem 3 2 prj λ = max{− ; j ∈ J} = max{ , } = 3. ej 1 1 Liczymy dodatkowe ograniczenie −3 −2 −7 + (−x1 ) + (−x2 ) ≥ 0, x5 = 3 3 3 x5 = −3 + x1 + x2 ≥ 0. Nasza tablica ma następującą postać: Zmienna x0 x3 x4 x5 Stała −x1 0 −3 −5 −1 −7 −3 −3 −1 −x2 −5 −4 −2 −1 Wymieniamy teraz zmienną x1 na zmienną x5 , czyli jest to przekształcenie elementarne z elementem głównym p51 = −1. Mamy x0 = 9 + 3x5 + 2x2 , x1 = 3 + x5 − x2 , x3 = −2 + x5 + 3x2 , x4 = 2 + 3x5 − x2 . Nowa tablica wygląda zatem następująco: Zmienna x0 x1 x3 x4 Stała −x5 9 −3 3 −1 −2 −1 2 −3 −x2 −2 1 −3 1 Po usunięciu dodanego ograniczenia mamy: Zmienna x0 x3 x4 Stała −x1 9 −3 −2 −1 2 −3 −x2 −2 −3 1 2. METODA SYMPLEKSOWA 42 Zauważmy, że p0 < 0 zatem należy prowadzić obliczenia dalej. Zgodnie z uwagą 2.27 wierszem generującym jest teraz wiersz, który zawiera x3 , a kolumną główną kolumna druga (k = 2). Wartości ej są następujące e1 = 1, e2 = 1. Zatem 1 3 λ = max{ , } = 3. 1 1 Liczymy dodatkowe ograniczenie −1 −3 −2 + (−x1 ) + (−x2 ) ≥ 0, x5 = 3 3 3 x5 = −1 + x1 + x2 ≥ 0. Nasza tablica ma następującą postać: Zmienna x0 x3 x4 x5 Stała −x1 9 −3 −2 −1 2 −3 −1 −1 −x2 −2 −3 1 −1 Wymieniamy teraz zmienną x2 na zmienną x5 , czyli jest to przekształcenie elementarne z elementem głównym p52 = −1. Mamy x0 = 11 + x1 + 2x5 , x2 = 1 − x1 + x5 , x3 = 1 − 2x1 + 3x5 , x4 = 1 + 4x1 − x5 . Nowa tablica wygląda zatem następująco: Zmienna x0 x2 x3 x4 Stała −x1 11 −1 1 1 1 2 1 −4 −x5 −2 −1 −3 1 Po usunięciu dodanego ograniczenia mamy: Zmienna x0 x3 x4 Stała −x1 11 −1 1 2 1 −4 −x2 −2 −3 1 Ponieważ p0 > 0, to rozwiązanie prymalne jest dopuszczalne i optymalne, co pozwala zakończyć wykonywanie algorytmu. Ostatecznie mamy 3x1 + 5x2 = 11, a stąd rozwiązaniem optymalnym jest x1 = 2, x2 = 1, x3 = 1 oraz x4 = 1. 3. STRATEGIE ZACHŁANNE 43 3. Strategie zachłanne Strategia zachłanna (ang. greedy) jest to metoda rozwiązywania pewnych problemów optymalizacyjnych. Polega ona na tym, że na każdym etapie rozwiązywania problemu wybiera opcję lokalnie optymalną. Strategia taka może, ale NIE MUSI prowadzić do optymalnego globalnego rozwiązania. Istnieje wiele problemów, w których strategia zachłanna daje rozwiązanie optymalne. Strategię zachłanną możemy stosować także wtedy, gdy nie daje ona gwarancji uzyskania optymalnego rozwiązania. Np. wtedy, gdy jesteśmy zainteresowani szybkim, przybliżonym, ale nie koniecznie optymalnym rozwiązaniem. 3.1. Problem wyboru zajęć Mamy dany zbiór S = {1, . . . , n} złożony z n zajęć, którym trzeba przydzielić salę wykładową. W sali mogą odbywać się w danej chwili co najwyżej jedne zajęcia. Każde zajęcia i mają swój czas rozpoczęcia si oraz czas zakończenia fi . Rozsądnie jest założyć, że si < fi . Ponadto zakładamy, że zajęcia i zajmują przedział czasowy [si , fi ). Mówimy, że zajęcia i oraz j są zgodne, jeśli [si , fi ) ∩ [sj , fj ) = ∅. Problem wyboru zajęć polega na wyborze maksymalnego podzbioru A ⊆ S parami zgodnych zajęć. Problem wyboru zajęć - rozwiązanie Postępujemy w nastepujący sposób. Najpierw wybieramy zajęcia a1 , które mają najwcześniejszy czas zakończenia. Jeżeli mamy już wybrane zajęcia a1 , . . ., ak , to jako zajęcia ak+1 wybieramy ze zbioru S \ {a1 , . . . , ak } te, które są zgodne ze wszystkimi a1 , . . . , ak oraz mają najwcześniejszy czas zakończenia. Procedurę tę kontynuujemy aż do wyczerpania zajęć ze zbioru S. Otrzymany zbiór A = {a1 , . . . , am } jest poszukiwanym maksymalnym zbiorem parami zgodnych zajęć. 3. STRATEGIE ZACHŁANNE 44 Zauważmy, że na każdym etapie wybierając zajęcia o najwcześniejszym czasie zakończenia pozostawiamy najwięcej wolnego czasu do wykorzystania. W tym sensie jest to strategia zachłanna. Jeżeli zajęcia są posortowane niemalejąco względem czasów zakończenia (tzn. f1 ≤ . . . ≤ fn ), to czas działania powyższej procedury wynosi O(n) (a nawet Θ(n)). W przypadku, gdy zajęcia nie są posortowane w ten sposób, to do czasu działania trzeba dodać czas potrzebny na sortowanie. Problem wyboru zajęć - przykład Mamy dane: salę wolną w czasie 1 − 10 oraz zajęcia z1 , . . . , z10 wraz z czasami rozpoczęcia oraz zakończenia podanymi w poniższej tabeli (w postaci si − fi ). z1 1−4 z2 2−4 z3 3−5 z4 2−7 z5 4−8 z6 z7 6 − 9 8 − 10 Zgodnie z naszą metodą wybieramy najpierw zajęcia z1 , następnie – z5 i ostatecznie – z7 . Zbiór A = {z1 , z5 , z7 } jest maksymalnym podzbiorem parami zgodnych zajęć. Twierdzenie 3.1. Niech S = {1, . . . , n} będzie zbiorem zajęć. Opisana powyżej strategia zachłanna prowadzi do wyboru maksymalnego podzbioru A zbioru S składającego się z parami zgodnych zajęć. Dowód. Niech S = {1, . . . , n} będzie zbiorem zajęć. Ponadto załóżmy, że f1 ≤ f2 ≤ . . . ≤ fn . Zatem zajęcia 1 kończą się najwcześniej. Wykażemy, że istnieje podzbiór A o żądanych własnościach oraz taki, że 1 ∈ A. Niech B będzie pewnym maksymalnym podzbiorem zbioru S składającym się z parami zgodnych zajęć. Przypuśćmy, że zajęciami o minimalnym numerze należącym bo zbioru B są k. Jeżeli k = 1, to przyjmujemy A = B. Jeżeli k > 1, to przyjmujemy A = (B \ {k}) ∪ {1}. Ponieważ f1 ≤ fk , więc zbiór A jest zbiorem parami zgodnych zajęć. Ponieważ B był maksymalny, więc A też jest maksymalny. Możemy więc założyć, że zajęcia 1 należą do maksymalnego podzbioru A parami zgodnych zajęć. 3. STRATEGIE ZACHŁANNE 45 Ponadto zauważmy, że jeśli A jest maksymalnym podzbiorem w S, to A = A \ {1} jest maksymalnym podzbiorem parami zgodnych zajęć zbioru S ′ = {i ∈ S ; si ≥ f1 }. Istotnie, jeśli istniałby większy podzbiór A′′ parami zgodnych zajęć w S ′ , to A′′ ∪ {1} byłby większym od A podzbiorem parami zgodnych zajęć w S. Przeczy to naszym założeniom. Zredukowaliśmy problem do mniejszego problemu wyboru zajęć w S ′ . Dowód kończymy indukcyjnie. ′ Problem wyboru zajęć poddaje się strategii zachłannej (tzn. zastosowanie strategii zachłannej prowadzi do rozwiązania problemu). Poniżej przeanalizujemy problem plecakowy, którego dyskretna wersja nie poddaje się strategii zachłannej. 3.2. Problem plecakowy Zagadnienie optymalizacji zwane „problemem plecakowym” swą nazwę wzięło z analogii do sytuacji praktycznej podobnej do problemu pakowania plecaka. Zadanie polega na zapakowaniu maksymalnie cennego zbioru przedmiotów nie przekraczając ładowności (nośności lub pojemności) bagażu. Ogólny problem plecakowy Mamy danych n rzeczy P1 , . . . , Pn . Zakładamy, że każda z rzeczy dana jest w nieograniczonej liczbie. Dla każdego i = 1, . . . , n, rzecz Pi ma rozmiar 0 < wi ∈ Z oraz wartość 0 < ci ∈ Z. Mamy ponadto daną pojemność plecaka (samochodu, wagonu itp.) 0 < W ∈ Z. Należy znaleźć nieujemne liczby całkowite q1 , . . . , qn takie, że 1. w = q1 w1 + . . . + qn wn ≤ W (tzn. nie została przekroczona pojemność plecaka), 2. wartość spakowanych rzeczy c = q1 c1 + . . . + qn cn jest maksymalna. Wartości q1 , . . . , qn ∈ N, które spełniają warunek 1 nazywamy rozwiązaniem dopuszczalnym problemu plecakowego. Rozwiązanie dopuszczalne, które spełnia warunek 2 nazywamy rozwiązaniem optymalnym problemu plecakowego. Jeżeli założymy, że szukamy wartości q1 , . . . , qn ∈ {0, 1}, to powyższy problem nazywamy decyzyjnym problemem plecakowym. 3. STRATEGIE ZACHŁANNE 46 Problem plecakowy - strategie zachłanne Poniżej opiszemy trzy różne metody zachłanne, które znajdują dopuszczalne rozwiązania problemu plecakowego. Skupmy się na ogólnym problemie plecakowym. (I) W pierwszej kolejności wybieramy najcenniejsze rzeczy. Bez straty ogólności możemy założyć, że przedmioty mamy ponumerowane w ten sposób, że c1 ≥ c2 ≥ . . . ≥ cn . Za q1 przyjmujemy maksymalną liczbę naturalną taką, że q1 w1 ≤ W . Za q2 przyjmujemy maksymalną liczbę naturalną taką, że q1 w1 + q2 w2 ≤ W . Ogólnie, jeśli mamy już wybrane liczby q1 , . . . , qi , to za qi+1 przyjmujemy maksymalną liczbę naturalną taką, że q1 w1 + . . . + qi wi + qi+1 wi+i ≤ W . (II) W pierwszej kolejności wybieramy rzeczy o najmniejszym rozmiarze. Bez straty ogólności możemy założyć, że przedmioty mamy ponumerowane w ten sposób, że w1 ≤ w2 ≤ . . . ≤ wn . Dalej postępujemy tak jak w przypadku (I). (III) W pierwszej kolejności wybieramy najcenniejsze rzeczy w stosunku do rozmiaru. Bez straty ogólności możemy założyć, że przedmioty mamy ponumerowane w ten sposób, że c1 c2 cn ≥ ≥ ... ≥ . w1 w2 wn Dalej postępujemy tak jak w przypadku (I). Zauważmy, że powyższe trzy metody (po drobnych modyfikacjach) możemy również zastosować do znajdowania rozwiązań dopuszczalnych w decyzyjnym problemie plecakowym. Czas działania powyższych procedur wynosi O(n). Ponadto trzeba jeszcze uwzględnić czas potrzebny na sortowanie rzeczy (np. O(n log(n))). Problem plecakowy - przykład Przeanalizujmy na poniższym przykładzie działanie powyższych metod rozwiązywania problemu plecakowego. 47 3. STRATEGIE ZACHŁANNE ci wi ci /wi P1 6 6 1 P2 4 2 2 P3 P4 P5 P6 5 7 10 2 3 2 3 1 5/3 7/2 10/3 2 W 23 Metoda (I) • wybieramy rzecz P5 ponieważ jest najcenniejsza (c5 = 10); • wybieramy jej aż 7 sztuk ponieważ 7w5 = 7 ∗ 3 = 21 < W = 23 oraz 7 jest maksymalną liczbą całkowitą o tej własności; • w plecaku pozostało nam miejsce na rzecz o wadze 2 = 23 − 21; • Wybieramy rzecz P4 , która ma wartość 7. Wartość rzeczy umieszczonych w plecaku wynosi 7 ∗ 10 + 7 = 77. Metoda (II) Wybieramy 23 sztuki rzeczy P6 , ponieważ ma ona najmniejszy rozmiar. Zapełniliśmy plecak. Wartość rzeczy umieszczonych w plecaku wynosi 23 ∗ 2 = 46. Metoda (III) • pakujemy plecak w nierosnącej kolejności ilorazów ci ; wi • wybieramy 11 sztuk rzeczy P4 ; • wybieramy 1 sztukę P6 . Wartość plecaka wynosi 11 ∗ 7 + 1 ∗ 2 = 79. Zauważmy, że żadna z tych metod nie dała nam rozwiązania optymalnego. Rozwiązanie optymalne otrzymujemy wybierając 10 sztuk rzeczy P4 oraz 1 sztukę rzeczy P5 . Wartość plecaka wynosi 10 ∗ 7 + 1 ∗ 10 = 80. Metody zachłanne nie wyznaczają optymalnego rozwiązania ogólnego problemu plecakowego. Na ćwiczeniach wykażemy, że metody te nie wyznaczają optymalnego rozwiązania decyzyjnego problemu plecakowego. Optymalne rozwiązanie ogólnego oraz decyzyjnego problemu plecakowego można znaleźć przy pomocy metody programowania dynamicznego. 4. PROGRAMOWANIE DYNAMICZNE 48 4. Programowanie dynamiczne Programowanie dynamiczne jest to metoda rozwiązywania problemów, która 1. dany problem P dzieli na mniejsze P1 , . . . , Pn ; 2. rozwiązuje problemy P1 , . . . , Pn (albo metodą programowania dynamicznego, albo innymi metodami) i zapamiętuje ich rozwiązania (najczęściej w pewnej tablicy); 3. wykorzystując rozwiązania problemów P1 , . . . , Pn podaje rozwiązanie problemu P. Poniżej przedstawimy rozwiązanie problemu plecakowego stosując metodę programowania dynamicznego. Metoda ta daje wynik w czasie O(n · W ). 4.1. Problem plecakowy - programowanie dynamiczne Mamy dany problem plecakowy P: • przedmioty: P1 , . . . , Pn ; • ich wartości: c1 , . . . , cn ∈ Z; • rozmiary przedmiotów: w1 , . . . , wn ∈ Z; • rozmiar plecaka: W ∈ Z. Jeżeli q1 , . . . , qn jest optymalnym rozwiązaniem problemu plecakowego, to liczbę p = q1 c1 + . . . + qn cn będziemy nazywać wartością optymalnie wypełnionego plecaka. Aby zastosować metodę programowania dynamicznego należy podzielić nasz problem na mniejsze. Dla wszystkich i = 1, . . . , n oraz j = 1, . . . , W definiujemy problem plecakowy Pi,j : • przedmioty: P1 , . . . , Pi ; • ich wartości: c1 , . . . , ci ∈ Z; 4. PROGRAMOWANIE DYNAMICZNE 49 • rozmiary przedmiotów: w1 , . . . , wi ∈ Z; • rozmiar plecaka: j ∈ Z. Niech Pi,j oznacza wartość optymalnie wypełnionego plecaka w problemie Pi,j . Zauważmy, że Pn,W = P oraz Pn,W = p. Stąd wynika, że jeśli znajdziemy wszystkie wartości Pi,j , to będziemy znali wartość p. Wyznaczanie wartości Pi,j Będziemy wyznaczać Pi,j korzystając z Pk,l dla k ≤ i oraz l ≤ i. Przy okazji będziemy również definiować wartości Qi,j . Liczby Qi,j umożliwią nam później uzyskanie informacji o optymalnym rozwiązaniu problemu plecakowego. Stosujemy następującą metodę • dla wszystkich k = 1, . . . , n oraz l = 1, . . . , W przyjmujemy Pk,0 = 0, Qk,0 = 0, P0,l = 0 oraz Q0,l = 0; • dla kolejnych i = 1, . . . , n wykonujemy: – dla kolejnych j = 1, . . . , W wykonujemy: (∗) jeśli j ≥ wi oraz Pi−1,j < Pi,j−wi + ci , to przyjmujemy Pi,j = Pi,j−wi + ci oraz Qi,j = i; w przeciwnym wypadku przyjmujemy Pi,j = Pi−1,j oraz Qi,j = Qi−1,j . Zauważmy że prawdziwość warunku j ≥ wi w (∗) oznacza, że aktualnie rozważany rozmiar plecaka jest wystarczający, aby umieścić tam rzecz Pi . Natomiast prawdziwość warunku Pi−1,j < Pi,j−wi + ci oznacza, że umieszczenie rzeczy Pi zwiększy wartość plecaka. Jeśli oba warunki są spełnione, to umieszczamy w plecaku rzecz Pi (odpowiada za to przypisanie Pi,j = Pi,j−wi + ci oraz Qi,j = i). W przeciwnym przypadku nie umieszczamy (na tym etapie) rzeczy Pi w plecaku, gdyż albo ona się tam nie zmieści, albo jej umieszczenie nie zwiększy wartości plecaka. Liczby Qi,j kontrolują przedmioty, które wkładamy do plecaka. Zwykle wartości Pi,j , Qi,j będziemy zapisywali w postaci n×W macierzach P = (Pi,j ) oraz Q = (Qi,j ). Przykład Rozważmy ten sam przykład, który analizowaliśmy w trakcie omawiania metod zachłannych. Zmniejszymy tylko rozmiar plecaka do W = 18. 4. PROGRAMOWANIE DYNAMICZNE ci wi P1 6 6 P2 4 2 P3 5 3 P4 7 2 P5 10 3 P6 2 1 50 W 18 Tworzymy tablice P oraz Q. P 1 2 3 4 5 6 1 0 2 3 4 0 0 0 Q 1 2 3 4 5 6 1 2 0 0 3 4 0 0 5 6 0 6 7 8 9 6 6 6 5 6 7 0 1 1 8 9 1 1 10 11 12 13 6 6 12 12 14 15 16 17 18 12 12 12 12 18 10 11 12 13 14 1 1 1 1 1 15 16 17 18 1 1 1 1 W pierwszych pięciu kolumnach macierzy P oraz Q mamy zera, ponieważ przedmiot P1 nie mieści się w plecaku o pojemności j = 1, 2, 3, 4, 5. W plecaku o pojemności j = 6, . . . , 11 mieści się jedna rzecz P1 , dlatego w odpowiednich kolumnach macierzy P mamy wartość c1 = 6. W kolumnach macierzy Q stoi 1 (numer przedmiotu, który został ostatnio umieszczony w plecaku). W plecaku o pojemności j = 12, . . . , 17 mieszczą się dwa przedmioty P1 , więc w odpowiednich kolumnach mamy 2 · c1 = 12. W ostatniej kolumnie macierzy P mamy 3 · c1 = 18, ponieważ w plecaku o pojemności 18 mieszczą się trzy sztuki P1 . 51 4. PROGRAMOWANIE DYNAMICZNE Teraz będziemy wypełniać drugi wiersz macierzy P oraz Q. P 1 2 3 4 5 6 1 0 0 2 3 4 0 0 0 4 4 8 Q 1 2 3 4 5 6 1 2 0 0 0 2 3 4 0 0 2 2 5 6 7 0 6 6 8 12 5 6 7 0 1 1 2 2 8 9 6 6 8 9 1 1 10 11 12 13 14 6 6 12 12 12 10 11 12 13 14 1 1 1 1 1 15 16 17 18 12 12 12 18 15 16 17 18 1 1 1 1 Pierwsze pięć kolumn drugiego wiersza macierzy P oraz Q wypełniamy podobnie jak pierwszy wiersz, ponieważ rzecz P1 nie mieści się w plecaku o pojemności j = 1, . . . , 5. Omówimy teraz dokładnie metodę wypełnienia pól P2,6 oraz Q2,6 . W naszej sytuacji i = 2 oraz j = 6. Warunek w2 < 6 jest oczywiście spełniony. Sprawdzamy teraz warunek Pi−1,j < Pi,j−wi + ci , czyli P1,6 < P2,4 + 4. Warunek ten jest oczywiście prawdziwy (elementy P1,6 oraz P2,4 oznaczyliśmy kolorem zielonym, a element P2,6 kolorem czerwonym). Zgodnie z naszą metodą postępowania musimy przyjąć P2,6 = P2,4 + 4 = 8+4 = 12 oraz Q2,6 = i = 2. Oznacza to, że z plecaka o pojemności 6 usunięto przedmiot P1 oraz umieszczono tam trzy przedmioty P2 . Mamy Q2,6 = 2 ponieważ ostatnią rzeczą włożoną do plecaka jest przedmiot o numerze 2. 52 5. GRAFY - PODSTAWOWE DEFINICJE Poniżej mamy uzupełnione macierze P oraz Q. P 1 2 3 4 5 6 1 0 0 0 0 0 2 2 3 4 5 0 0 0 0 4 4 8 8 4 5 8 9 7 7 14 14 7 10 14 17 7 10 14 17 6 6 12 12 21 21 21 Q 1 2 3 4 5 6 1 0 0 0 0 0 6 2 0 2 2 4 4 4 7 1 2 3 4 5 5 3 0 2 3 4 5 5 4 0 2 2 4 4 4 5 0 2 3 4 5 5 6 1 2 2 4 4 4 7 6 12 13 21 24 24 8 1 2 2 4 4 4 8 6 16 16 28 28 28 9 1 2 3 4 5 5 9 6 16 17 28 31 31 10 6 20 20 35 35 35 11 6 20 21 35 38 38 12 12 24 24 42 42 42 10 11 12 13 14 1 1 1 1 1 2 2 2 2 2 2 3 2 3 2 4 4 4 4 4 4 5 4 5 4 4 5 4 5 4 13 12 24 25 42 45 45 14 12 28 28 49 49 49 15 12 28 29 49 52 52 16 12 32 32 56 56 56 15 16 17 18 1 1 1 1 2 2 2 2 3 2 3 2 4 4 4 4 5 4 5 4 5 4 5 4 Wartością optymalnie zapełnionego plecaka jest P6,18 = 63. Pokażemy jak wykorzystując dane zapisane w tablicy Q podać optymalne rozwiązanie problemu plecakowego. Ostatnią rzeczą włożoną do plecaka jest ta o numerze Q6,18 = 4, czyli przedmiot P4 . Ponieważ w4 = 2, więc do wypełnienia pozostaje plecak o pojemności 18 − w2 = 16. Odczytujemy element Q6,16 = 4. Zatem przedostatnim elementem umieszczonym w plecaku jest P4 . Dalej postępujemy analogicznie. Ostatecznie musimy do plecaka włożyć 9 sztuk przedmiotu P4 . Mamy p = 9 · c4 = 9 · 7 = 63. 5. Grafy - podstawowe definicje Definicja 5.1. Grafem (prostym) nazywamy parę G = (V (G), E(G)) = (V, E), gdzie V = V (G) jest zbiorem skończonym, którego elementy nazywamy wierzchołkami oraz E = E(G) jest zbiorem nieuporządkowanych par {u, v} dla pewnych u, v ∈ V takich, że u 6= v. Pary te nazywamy krawędziami. Będziemy stosować wymiennie następujące oznaczenia krawędzi: {u, v} = uv = vu = u v. Jeżeli uv ∈ E(G), to wierzchołki u, v nazywamy sąsiednimi, natomiast krawędź uv nazywamy sąsiednią (incydentną) z wierzchołkami u oraz v. 17 12 32 33 56 59 59 18 18 36 36 63 63 63 5. GRAFY - PODSTAWOWE DEFINICJE 53 Stopniem wierzchołka v (ozn. deg(v)) nazywamy liczbę incydentnych z nim krawędzi. Przykład 5.2. Rozważmy następujący graf G: v@ @@ @@ @@ @ w ~~ ~~ ~ ~ ~~ u x? ??? ?? ?? y Mamy: • V = {x, y, u, v, w}; • E = {uv, uw, ux, xy}; • deg(v) = deg(w) = deg(y) = 1, deg(x) = 2, deg(u) = 3; • np. wierzchołki u, v są sąsiednie; wierzchołki u oraz y nie są sąsiednie. Definicja 5.3. Dowolny ciąg wierzchołków d = (x1 , . . . , xn ), gdzie (dla każdego i = 1, . . . , n − 1) wierzchołki xi oraz xi+1 są sąsiednie, nazywamy drogą (lub ścieżką). Wierzchołki x1 oraz xn nazywamy odpowiednio początkiem oraz końcem drogi d. Mówimy, że wierzchołek v jest osiągalny z wierzchołka u, jeśli istnieje droga o początku w u i końcu w v. Długością drogi d (ozn. ℓ(d)) nazywamy liczbę występujących w niej krawędzi. Cyklem nazywamy drogę d = (x1 , . . . , xn ) taką, że x1 = xn . Drogę d = (x1 , . . . , xn ) nazywamy prostą, jeśli wierzchołki x1 , . . . , xn są parami różne. Cykl d = (x1 , . . . , xn−1 , x1 ) nazywamy prostym, jeśli wierzchołki x1 , . . . , xn−1 są parami różne. Podgrafem grafu G = (V, E) nazywamy dowolny graf G′ = (V ′ , E ′ ) taki, że V ′ ⊆ V oraz E ′ ⊆ E. Graf G nazywamy spójnym, jeśli dla każdej pary wierzchołków u, v ∈ V (G) istnieje droga d = (x1 , . . . , xn ) taka, że x1 = u oraz xn = v. Składową spójności grafu G nazywamy każdy maksymalny spójny podgraf grafu G. Podgrafem grafu G = (V, E) generowanym przez zbiór V ′ ⊆ V nazywamy podgraf G′ = (V ′ , E ′ ) grafu G taki, że uv ∈ E ′ ⇐⇒ u, v ∈ V ′ oraz uv ∈ E. 5. GRAFY - PODSTAWOWE DEFINICJE 54 Uwaga 5.4. Na zbiorze wierzchołków V grafu G definiujemy relację dwuargumentową ∼ w następujący sposób. Niech v, u ∈ V wtedy określamy v ∼ u ⇐⇒ wierzchołki u, v są połączone drogą w G Można łatwo uzasadnić, że ∼ jest relacją równoważności. Niech V1 , . . . , Vm będą wszystkimi klasami abstrakcji relacji ∼. Zauważmy, że podgrafy G1 , . . ., Gm grafu G generowane odpowiednio przez V1 , . . . , Vm są wszystkimi spójnymi składowymi grafu G. Drzewem nazywamy spójny graf, który nie zawiera cyklu prostego. Przykłady 5.5. Graf z Przykładu 5.2 jest drzewem. Poniższy graf G nie jest drzewem, gdyż zawiera on cykl prosty (u, x, y, u). v@ @@ @@ @@ @ w ~~ ~~ ~ ~ ~~ u x? ??? ?? ?? y Powyższy graf jest spójny. Przykładem drogi prostej jest (v, u, x, y); ma ona długość 3. Natomiast droga (v, u, x, y, u, w) (długości 5) nie jest prosta, gdyż wierzchołek u występuje w niej dwukrotnie. Poniższy graf v@ @@ @@ @@ @ w ~ ~~ ~~ ~ ~~ u x? ??? ?? ?? t z y nie jest spójny. Ma on dwie składowe spójności wyznaczone przez zbiory wierzchołków {z, t} oraz {u, v, w, x, y}. Poniżej podamy twierdzenie, które podaje kryteria pozwalające decydować, czy podany graf jest drzewem. Twierdzenie 5.6. Niech G = (V, E) będzie grafem. Następujące warunki są równoważne. 5. GRAFY - PODSTAWOWE DEFINICJE 55 1. G jest drzewem; 2. każde dwa wierzchołki u, v ∈ V są połączone ze sobą dokładnie jedną ścieżką prostą; 3. G jest spójny, lecz jeśli usuniemy jedną krawędź z E, to powstały graf nie będzie spójny; 4. G jest spójny oraz |E| = |V | − 1; 5. G nie zawiera cyklu prostego oraz |E| = |V | − 1; 6. G nie zawiera cyklu prostego, lecz jeśli dodamy jedną krawędź do E, to powstały graf będzie zawierał cykl prosty. Dowód. Dowód tego twierdzenia można znaleźć w książce T. H. Cormen, Ch. E. Leiserson, R. L. Rivest, „Wprowadzenie do algorytmów”, WN-T, Warszawa 2001. Powyższe grafy będziemy czasami nazywać nieskierowanymi. Ważną rolę w badaniach operacyjnych odgrywają również grafy skierowane. Definicja 5.7. Grafem skierowanym (digrafem) nazywamy parę G = (V (G), E(G)) = (V, E), gdzie V = V (G) jest zbiorem skończonym, którego elementy nazywamy wierzchołkami oraz E = E(G) jest zbiorem uporządkowanych par [u, v] dla pewnych u, v ∈ V . Pary te nazywamy krawędziami. Będziemy stosować wymiennie następujące oznaczenia krawędzi: [u, v] = uv = u / v. Pojęcie drogi oraz cyklu definiujemy podobnie jak dla grafów nieskierowanych. W praktycznych zastosowaniach grafów często występują grafy ważone (skierowane lub nie). Definicja 5.8. Niech G = (V, E) będzie grafem (skierowanym lub nie). Funkcją wagową nazywamy dowolną funkcję ω : E → R. 5. GRAFY - PODSTAWOWE DEFINICJE 56 Parę (G, ω), gdzie G = (V, E) jest grafem oraz ω : E → R jest funkcją wagową nazywamy grafem ważonym. Jeżeli uv ∈ E, to wagę ω(uv) krawędzi uv będziemy zapisywać następująco u ω(uv) v lub u ω(uv) / v w przypadku grafów skierowanych. Jeżeli (G, ω) jest grafem ważonym oraz d = (x1 , . . . , xn ) jest drogą w G, to wagą drogi d nazywamy liczbę ω(d) = ω(x1 x2 ) + ω(x2 x3 ) + . . . + ω(xn−1 xn ). 5.1. Reprezentacje grafów Aby pracować z grafami (np. przy pomocy komputera) trzeba je zapisać w wygodnej postaci. Poniżej przedstawimy dwa sposoby reprezentowania grafów. 5.1.1. Macierze sąsiedztwa Niech G = (V, E) będzie grafem (skierowanym lub nie). Załóżmy, że V = {1, . . . , n}. Macierzą sąsiedztwa grafu G nazywamy n×n-macierz M(G) = (mij ) taką, że 1, gdy ij ∈ E mij = 0, gdy ij 6∈ E. Przykłady 5.9. Rozważmy graf nieskierowany G: 1 == == == = 4 2 5 == == == = 3 5. GRAFY - PODSTAWOWE DEFINICJE 57 Wtedy M(G) = 0 1 0 0 0 1 0 1 1 1 0 1 0 0 1 0 1 0 0 0 0 1 1 0 0 Rozważmy graf skierowany H: 1 == == == = 4 @2 . 5 @ === == == /3 Wtedy M(H) = 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 . 5.1.2. Listy sąsiedztwa Niech G = (V, E) będzie grafem (skierowanym lub nie) oraz niech v ∈ V . Listą sąsiedztwa wierzchołka v nazywamy listę L[v] = [x1 , . . . , xm ] wszystkich parami różnych wierzchołków takich, że vxi ∈ E. Przykłady 5.10. Rozważmy graf G z Przykładu 5.9. Wtedy L[1] = [2], L[2] = [1, 3, 5, 4], L[3] = [2, 5], L[4] = [2], L[5] = [3, 2]. 6. MINIMALNE DRZEWA ROZPINAJĄCE 58 Natomiast dla grafu H z Przykładu 5.9 mamy L[1] = [2], L[2] = [3, 5], L[3] = [], L[4] = [2], L[5] = [3]. 6. Minimalne drzewa rozpinające Definicja 6.1. Niech (G, ω) będzie spójnym nieskierowanym grafem ważonym. Drzewem rozpinającym grafu G nazywamy graf T = (V (T ), E(T )) spełniający warunki • V (G) = V (T ); • E(T ) ⊆ E(G); • T jest drzewem; Minimalnym drzewem rozpinającym P grafu G nazywamy drzewo rozpinające T grafu G, którego waga ω(T ) = a∈E(T ) ω(a) jest minimalna. Przykłady zastosowań minimalnych drzew rozpinających zostaną omówione na ćwiczeniach. Przykład 6.2. Rozważmy następujący graf ważony 1 • •@ @@ ~ === 3 ~~ @@1 = ~ == @@ ~ ~ = ~ ==2 == • •@ 1 2 == @@ ~~ == @@ ~ == ~~~3 1 @@ ~ • 1 • 6. MINIMALNE DRZEWA ROZPINAJĄCE 59 Poniżej przerywaną linią zaznaczyliśmy krawędzie, które wchodzą w skład minimalnego drzewa rozpinającego powyższego grafu. ~ 3 ~~ ~ ~ ~~ •@ @ @ 1 @ • =_ _ _1_ _ _ • @ == @1 == @ = @ == 2 = == 2 • 1 == ~ ~ == ~ == ~~~3 ~ •_ _ _ _ _ _• 1 Minimalne drzewo rozpinające powyższego grafu wygląda tak: 1 • •@ @@ @@ 1 @@ •@ @@ @@1 @@ 1 • 1 • • Uwaga 6.3. Minimalne drzewo rozpinające grafu NIE musi być wyznaczone jednoznacznie. 6.1. Algorytm Kruskala Niech dany będzie graf spójny nieskierowany G = (V, E) z funkcją wagową ω : E → R. Poniżej podamy jedną z metod wyznaczania minimalnego drzewa rozpinającego grafu ważonego (G, ω) (algorytm Kruskala). Algorytm Kruskala jest przykładem metody zachłannej, ponieważ w każdym kroku dodaje on do konstruowanego drzewa krawędź o minimalnej wadze. Kruskal(G, ω) • kładziemy E = ∅; • niech α1 , . . . , αm będą wszystkimi krawędziami grafu G posortowanymi niemalejąco względem wag (tzn. ω(α1 ) ≤ ω(α2 ) ≤ . . . ≤ ω(αm )); v ; jeśli wierzchołki u, v leżą w różnych • rozważmy krawędź α1 : u spójnych składowych grafu (V, E), to przyjmujemy E := E ∪ {α1 }; 6. MINIMALNE DRZEWA ROZPINAJĄCE 60 • dalej postępujemy analogicznie, tzn. jeśli rozważyliśmy już krawędzie v ; jeśli wierzchołki u, α1 , . . . , αi , to badamy krawędź αi+1 : u v leżą w różnych spójnych składowych grafu (V, E), to przyjmujemy E := E ∪ {αi+1 }; • po przebadaniu wszystkich krawędzi α1 , . . . , αm kończymy procedurę; jako wynik przyjmujemy T = (V, E). Czas działania algorytmu Kruskala zależy od sposobu implementacji struktury zbiorów rozłącznych. Można algorytm zaimplementować tak aby jego czas działania wynosił O(|E| log(|E|)). Twierdzenie 6.4. Niech (G, ω) będzie spójnym nieskierowanym grafem ważonym. Jeżeli wykonamy procedurę Kruskal(G, ω), to po jej zakończeniu graf T = (V, E) będzie minimalnym drzewem rozpinającym grafu (G, ω). Dowód. Niech G = (V, E) będzie spójnym nieskierowanym grafem z funkcją wagową ω : E → R oraz niech E = {α1 , . . . , αm } będą ponumerowane w ten sposób, że ω(α1 ) ≤ ω(α2 ) ≤ . . . ≤ ω(αm ). Niech T = (V, E) będzie grafem skonstruowanym przez algorytm Kruskal(G, ω). Zauważmy, że T nie zawiera cykli. Wynika, to z faktu, że w każdym kroku algorytmu dodawane są tylko krawędzie, które łączą różne spójne składowe grafu. Zatem nigdy nie powstanie nam cykl. Zauważmy, że T jest grafem spójnym. Przypuśćmy, że T nie jest grafem spójnym. Istnieją więc przynajmniej dwie różne spójne składowe grafu T . Ponieważ G jest grafem spójnym, więc istnieje krawędź α ∈ E(G), która łączy te dwie składowe. Krawędź α musiałaby być dodana w trakcie algorytmu do grafu T . Wynika stąd, że T jest spójny. Zatem T jest drzewem, ponieważ jest spójny oraz nie zawiera cykli. Załóżmy, że E = {αi1 , . . . , αis }. Niech T ′ = (V, E ′ ) będzie minimalnym drzewem rozpinającym grafu G. Z Twierdzenia 5.6 wynika, że |E| = |E ′ |. Niech E ′ = {αj1 , . . . , αjs }. Ponadto załóżmy, że spośród wszystkich minimalnych drzew rozpinających grafu G drzewo T ′ zostało wybrane tak aby αi1 = αj1 , . . . , αik = αjk dla możliwie największego k. Wynika stąd, że αik+1 6∈ E ′ . Istotnie, jeśli αik+1 ∈ E ′ , to z naszych założeń wynika, że ik+1 > jk+1 oraz ω(αjk+1 ) ≤ ω(αik+1 ). Więc krawędź αjk+1 byłaby w algorytmie Kruskala rozważana przed krawędzią αik+1 i byłaby ona w drzewie T . Zatem αik+1 6∈ E ′ . Jeżeli dodamy krawędź αik+1 do drzewa T ′ , to otrzymamy dokładnie jeden cykl prosty (patrz Twierdzenie 5.6). Weźmy krawędź α należącą do tego cyklu 61 6. MINIMALNE DRZEWA ROZPINAJĄCE taką, że α 6= αik+1 oraz α 6∈ E (taka krawędź istnieje, gdyż w przeciwnym wypadku wszystkie krawędzie z tego cyklu należałyby do E, więc T nie byłoby drzewem). Zatem α 6∈ {αi1 , . . . , αik , αik+1 }. Gdyby ω(α) > ω(αik+1 ), to graf T ′′ = (V, (E ′ \ {α}) ∪ {αik+1 }) byłby drzewem rozpinającym grafu G takim, że ω(T ′′) < ω(T ′ ) co przeczy temu, że T ′ jest minimalnym drzewem rozpinającym grafu G. Stąd wynika, że ω(α) ≤ ω(αik+1 ). Gdyby ω(α) < ω(αik+1 ), to algorytm Kruskala wybrałby krawędź α przed krawędzią αik+1 . Zatem w E mielibyśmy krawędź α zamiast αik+1 . Zauważmy, że wymiana krawędzi α na αik+1 nie generuje nam cyklu, gdyż α oraz αik+1 leżą na jednym cyklu w grafie T ′ z dodaną krawędzią αik+1 . Ostatecznie ω(α) = ω(αik+1 ). Zatem T ′′ = (V, (E ′ \ {α}) ∪ {αik+1 }) jest również minimalnym drzewem rozpinającym grafu G zawierającym krawędzie {α1 , . . . , αk , αk+1}, co przeczy wyborowi indeksu k oraz drzewa T ′ . Ostatecznie pokazaliśmy, że T = T ′ jest minimalnym drzewem rozpinającym grafu G. Przykład 6.5. Rozważmy następujący graf ważony x1 ppp 2 ppp p ppp ppp NNN NNN NNN 1 NNNN x2 6 5 x3 x5 1 3 7 2 x4 x7 NN 2 5 NNN NN4N NNN NN x8 5 pp p p pp ppp2 p p pp x6 Poniżej przedstawimy poszczególne etapy tworzenia minimalnego drzewa rozpinającego przy pomocy algorytmu Kruskala. Zaczynamy od grafu, który ma te same wierzchołki co graf wyjściowy oraz nie ma żadnej krawędzi. x2 x5 x7 x1 x8 x3 x4 x6 Będziemy dodawać krawędzie zaczynając od tych z minimalnymi wagami. 6. MINIMALNE DRZEWA ROZPINAJĄCE x2 x1 OOO OOO OOO OOO 1 O OOO OOO OOO OOO 1 O x7 x8 x3 x2 x1 x5 62 x3 x4 x6 x5 x7 1 x8 x4 x6 x5 o x2 ooo o o o ooo ooo OOO 1 OOO OOO OOO 1 O x7 2 x1 x3 x4 x2 x5 ooo o o oo ooo ooo 2 OOO 1 OOO OOO OOO 1 O x8 x6 x7 2 x1 x3 x4 x8 x6 x2 x5 x7 ooo o o oo ooo ooo 2 OOO 1 2 OOO OOO OOO 1 O 2 x1 x3 x4 x8 x6 x2 x5 x7 ooo o o oo ooo o o o x 2 OOO o 8 1 2 OOO ooo o OOO o OOO ooo2 1 O ooo o x x x 2 x1 3 4 6 Zauważmy, że teraz krawędzią o minimalnej wadze jest krawędź x3 x4 . Nie możemy jej jednak dodać ponieważ łączy ona wierzchołki z tej samej spójnej 7. PROBLEM NAJKRÓTSZYCH DRÓG 63 składowej. Dodajemy więc krawędź x7 x8 . ppp x2 x7 NN x5 2 ppp x1 p ppp p p p NNN NNN NNN 1 NNNN 2 1 x3 2 x4 x6 NNN NN4N NNN NN x8 ppp p p pp ppp 2 p p p Do powyższego grafu nie można już dodać żadnej krawędzi. Graf ten jest więc minimalnym drzewem rozpinającym wyjściowego grafu. 7. Problem najkrótszych dróg Niech dany będzie skierowany graf ważony (G, ω) oraz wierzchołek a ∈ V (G). Naszym zadaniem będzie, dla każdego wierzchołka b ∈ V (G), znaleźć drogę d = (x1 , . . . , xn ) taką, że x1 = a, xn = b oraz waga ω(d) drogi d jest minimalna. Jasne jest, że taka droga (jeśli istnieje) nie musi być wyznaczona jednoznacznie. Powyższy problem będziemy nazywać problemem najkrótszych dróg z jednym źródłem (NDJZ). Uwaga 7.1. Zauważmy, że nie dla wszystkich grafów ważonych istnieje droga o minimalnej wadze. Rozważmy następujący graf ważony 3 a x 9 b. −6 Mamy wtedy np. ω((a, b, a)) = −3, ω((a, b, a, b, a, b, a)) = −9. Łatwo zauważyć, że istnieje droga o wadze mniejszej od dowolnie małej liczby rzeczywistej. Nie istnieje więc droga o minimalnej wadze. Powyższy problem możemy rozwiązać na dwa następujące sposoby. 1. Możemy założyć, że funkcja wagowa ω : E(G) → R jest nieujemna, tzn. ω(α) ≥ 0 dla dowolnej krawędzi α ∈ E(G). Zauważmy, że przy tym założeniu istnieją drogi o minimalnej wadze. 7. PROBLEM NAJKRÓTSZYCH DRÓG 64 2. Możemy założyć, że w grafie żaden cykl o ujemnej wadze (tzn. taki cykl d, że ω(d) < 0) nie jest osiągalny z wierzchołka a (tzn. nie istnieje droga (x1 , . . . , xn ) taka, że x1 = a oraz xn jest wierzchołkiem, który leży na cyklu o ujemnej wadze). W tej sytuacji również istnieją drogi z a do b o ujemnej wadze. Uwaga 7.2. Zauważmy, że problem (NDJZ) może (po pewnych modyfikacjach) służyć do rozwiązania następujących problemów. • Problem najkrótszych dróg z jednym ujściem. Dla danego wierzchołka b ∈ V (G) oraz wszystkich wierzchołków a ∈ V (G) znaleźć drogi (x1 , . . . , xn ) o minimalnej wadze takie, że x1 = a oraz xn = b. Tutaj wystarczy odwrócić kierunek strzałek w grafie oraz rozwiązać problem (NDJZ). • Problem najkrótszych dróg między parą wierzchołków. Dla danych wierzchołków a, b ∈ V (G) znaleźć drogę (x1 , . . . , xn ) o minimalnej wadze taką, że x1 = a oraz xn = b. • Problem najkrótszych dróg między wszystkimi parami wierzchołków. Dla wszystkich par wierzchołków a, b ∈ V (G) znaleźć drogi (x1 , . . . , xn ) o minimalnej wadze takie, że x1 = a oraz xn = b. Najprostszą metodą znajdowania najkrótszych dróg w grafie może wydawać się rozważenie wszystkich możliwych dróg oraz wybranie tej najkrótszej. Niestety metoda ta przeważnie jest zbyt czasochłonna. Jeżeli rozważamy duże grafy (np. grafy reprezentujące sieć połączeń drogowych albo kolejowych), to wszystkich możliwych dróg jest tak dużo, że nawet najszybsze komputery będą miały problemy z rozważeniem (w rozsądnym czasie) wszystkich możliwości. Potrzebne są zatem szybsze metody znajdowania najkrótszych dróg. Poniżej opiszemy dwie z nich. 7.1. Algorytm Dijkstry Niech (G, ω) będzie skierowanym grafem ważonym oraz niech s ∈ V (G) będzie ustalonym wierzchołkiem. Załóżmy ponadto, że funkcja wagowa ω jest nieujemna (tzn. ω(α) ≥ 0 dla każdej krawędzi α ∈ E(G)). Przy powyższych założeniach algorytm Dijkstry rozwiązuje problem (NDJZ), gdzie 7. PROBLEM NAJKRÓTSZYCH DRÓG 65 źródłem jest wierzchołek s. Oczywiście algorytm wyznaczy najkrótsze drogi tylko do wierzchołków osiągalnych z wierzchołka s. Algorytm Dijkstry stosuje strategię zachłanną. Będziemy wykorzystywać dwie tablice rozmiaru |V (G)|, które będą indeksowane wierzchołkami grafu G. Pierwsza z nich δ = [δ(v)]v∈V (G) będzie służyła do przechowywania informacji o długości aktualnie rozważanych dróg. Bardziej precyzyjnie: δ[v] będzie długością aktualnie rozważanej drogi o początku w s oraz końcu w wierzchołku v. Po zakończeniu działania algorytmu δ[v] będzie długością najkrótszej drogi o początku w wierzchołku s oraz końcu w wierzchołku v. Druga tablica π = [π(v)]v∈V (G) będzie służyła do przechowywania poprzedników wierzchołków w rozważanych drogach. Po zakończeniu algorytmu przy pomocy tablicy π będziemy mogli skonstruować najkrótsze drogi z s do wierzchołków v. Dijkstry(G, ω, s) • kładziemy Q = V (G); • dla każdego wierzchołka v ∈ V (G) kładziemy δ[v] = ∞ oraz π[v] = ⊘; • kładziemy δ[s] = 0; • tak długo jak Q 6= ∅ wykonujemy następujące operacje: – wybieramy wierzchołek u ∈ Q taki, że δ[u] jest minimalne; następnie usuwamy wierzchołek u ze zbioru Q (tzn. Q := Q \ {u}); – dla każdego wierzchołka v z listy sąsiedztwa L[u] wierzchołka u wykonujemy: (∗) jeżeli δ[v] > δ[u] + ω(uv), to kładziemy δ[v] := δ[u] + ω(uv) oraz π[v] := u. Czas działania algorytmu Dijkstry zależy od implementacji kolejki priorytetowej potrzebnej do zaimplementowania tej procedury. Jeśli zaimplementujemy kolejkę w postaci tablicy, to otrzymamy czas O(|V |2 ). Implementując kolejkę za pomocą tzw. kopca Fibonacciego, to możemy otrzymać czas O(|V | log(|V |) + |E|). Twierdzenie 7.3. Jeżeli wykonamy algorytm Dijkstry(G, ω, s) dla grafu skierowanego G z nieujemną funkcją wagową ω oraz wierzchołkiem źródłowym s, to po zakończeniu działania algorytmu wartość δ[v] jest długością najkrótszej drogi z s do v (dla każdego v ∈ V (G)). 66 7. PROBLEM NAJKRÓTSZYCH DRÓG Dowód. Dowód tego twierdzenia można znaleźć w książce T. H. Cormen, Ch. E. Leiserson, R. L. Rivest, „Wprowadzenie do algorytmów”, WN-T, Warszawa 2001. Przeanalizujmy poniższy przykład, który ilustruje działanie algorytmu Dijkstry oraz dokładnie wyjaśnia rolę tablic δ, π. Przykład 7.4. Rozważmy następujący graf ważony: b @ 10 11 28 /c a= O == == == == = 22 31 == == == d 26 / eO 30 17 14 20 12 15 /io k O ^== == == == == 31 23 == == == 9 @ fO >> >> >> >> 15 >> 19 >> >> >> 26 /g /h / j= = 18 == == == 32 == == == == /l Zastosujemy do tego grafu algorytm Dijkstry. Zakładamy, że źródłem jest wierzchołek s = a. Mamy Q = {a, b, c, d, e, f, g, h, i, j, k, l}. Tablice δ oraz π wyglądają następująco: δ: a b 0 ∞ c d e f ∞ ∞ ∞ ∞ g h i j ∞ ∞ ∞ ∞ π: a b c d e f g ⊘ ⊘ ⊘ ⊘ ⊘ ⊘ ⊘ k l ∞ ∞ h i j k l ⊘ ⊘ ⊘ ⊘ ⊘ Usuwamy wierzchołek a ze zbioru Q, więc Q = {b, c, d, e, f, g, h, i, j, k, l}. Rozważamy listę sąsiedztwa wierzchołka a: L[a] = [b, c, d]. Dla każdego wierzchołka z tej listy sąsiedztwa wykonujemy (∗) z algorytmu Dijkstry. Mamy 67 7. PROBLEM NAJKRÓTSZYCH DRÓG zatem: δ: a b c 0 10 28 π: a b ⊘ a c a d e f g 31 ∞ ∞ ∞ d e a ⊘ h i j k ∞ ∞ ∞ ∞ l ∞ f g h i j k l ⊘ ⊘ ⊘ ⊘ ⊘ ⊘ ⊘ Ze zbioru Q usuwamy wierzchołek v, który ma minimalną wartość δ[v]. Jest to wierzchołek b. Zatem Q = {c, d, e, f, g, h, i, j, k, l}. Rozważamy listę sąsiedztwa wierzchołka b: L[b] = [e, c]. Dla każdego wierzchołka z tej listy sąsiedztwa wykonujemy (∗) z algorytmu Dijkstry. Mamy zatem: δ: a b c 0 10 21 π: a b ⊘ a c b d e f g h 31 36 ∞ ∞ ∞ d a e b i j k l ∞ ∞ ∞ ∞ f g h i j k l ⊘ ⊘ ⊘ ⊘ ⊘ ⊘ ⊘ Następnym rozważanym wierzchołkiem jest c. Wtedy Q = {d, e, f, g, h, i, j, k, l}, L[c] = [f ] oraz δ: a b c 0 10 21 π: a b ⊘ a c b d e f g h 31 36 35 ∞ ∞ d a e b f g h i j c ⊘ ⊘ ⊘ ⊘ i j k l ∞ ∞ ∞ ∞ k l ⊘ ⊘ Teraz rozważamy wierzchołek d. Mamy Q = {e, f, g, h, i, j, k, l}, L[d] = 7. PROBLEM NAJKRÓTSZYCH DRÓG 68 [c, f, g] oraz δ: a b c 0 10 21 π: a b ⊘ a c b d e f g h 31 36 35 43 ∞ d a e b f g h c d ⊘ i j k l ∞ ∞ ∞ ∞ i j k l ⊘ ⊘ ⊘ ⊘ Kolejny wierzchołek to f . Mamy Q = {e, g, h, i, j, k, l}, L[f ] = [h] oraz δ: a b c 0 10 21 π: a b ⊘ a c b d e f g h i 31 36 35 43 50 ∞ d a e b f g h c d f j k l ∞ ∞ ∞ i j k l ⊘ ⊘ ⊘ ⊘ Teraz musimy rozważyć wierzchołek e. Mamy Q = {g, h, i, j, k, l}, L[e] = [i] oraz δ: a b c 0 10 21 π: a b ⊘ a c b d e f g h i 31 36 35 43 50 66 d a e b f g h c d f i e j k l ∞ ∞ ∞ j k l ⊘ ⊘ ⊘ Po rozważeniu wierzchołka g tablice δ oraz π nie ulegną zmianie. Mamy teraz Q = {h, i, j, k, l}. Kolejny wierzchołek to h. Mamy Q = {i, j, k, l}, L[h] = [i, l] oraz δ: a b c 0 10 21 π: a b ⊘ a c b d e f g h i 31 36 35 43 50 59 d a e b f g h c d f i h j k l ∞ ∞ 68 j k l ⊘ ⊘ h Zauważmy, że rozważając kolejne wierzchołki nie zmienimy tablic δ oraz Q. Kończymy wykonywanie algorytmu. W tablicy δ mamy zapisane długości najkrótszych ścieżek do poszczególnych wierzchołków. Zauważmy, że wierzchołki j, k nie są osiągalne z wierzchołka a, zatem długości odpowiednich dróg są równe ∞. Korzystając z tablicy π odczytamy najkrótszą drogę z wierzchołka a do wierzchołka l. Drogę tę będziemy konstruować „od końca”. Mamy d[l] = h, 7. PROBLEM NAJKRÓTSZYCH DRÓG 69 więc do wierzchołka l „przyszliśmy” z wierzchołka h. Natomiast d[h] = f , więc do wierzchołka h „przyszliśmy” z wierzchołka f . Postępujemy tak dalej. Wierzchołki poszukiwanej drogi zaznaczyliśmy w poniższej tabeli kolorem niebieskim. π: a b ⊘ a c b d a e b f g h c d f i h j k l ⊘ ⊘ h Poszukiwaną drogą jest więc (a, b, c, f, h, l). Podobnie konstruujemy pozostałe drogi. 7.2. Algorytm Bellmana-Forda W tym rozdziale opiszemy algorytm, który rozwiązuje problem (NDJZ) w ogólniejszym przypadku niż algorytm Dijkstry. Niech (G, ω) będzie grafem skierowanym z funkcją wagową ω : E(G) → R oraz wierzchołek s ∈ V (G). Funkcja wagowa może przyjmować wartości ujemne. Jeżeli w grafie istnieje cykl o ujemnej wadze, to algorytm zwróci wartość ”false”; w przeciwnym wypadku algorytm zwróci wartość ”true” oraz najkrótsze drogi wraz z wagami (zapisane w tablicach δ oraz π podobnie jak w algorytmie Dijkstry). W przeciwieństwie do algorytmu Dijkstry, działanie algorytmu Bellmana-Forda nie jest intuicyjne (nie jest to algorytm zachłanny). Bellman-Ford(G, ω, s) • dla każdego wierzchołka v ∈ V (G) kładziemy δ[v] = ∞ oraz π[v] = ⊘; • kładziemy δ[s] = 0; • |V (G)| − 1 razy wykonujemy następujące operacje: – dla każdej krawędzi uv ∈ E(G) wykonujemy: (∗) jeżeli δ[v] > δ[u] + ω(uv), to kładziemy δ[v] := δ[u] + ω(uv) oraz π[v] := u; • dla każdej krawędzi uv ∈ E(G) wykonujemy: – jeżeli δ[v] > δ[u] + ω(uv), to kończymy algorytm z wynikiem: ”false”; 7. PROBLEM NAJKRÓTSZYCH DRÓG 70 • kończymy algorytm z wynikiem: ”true”. Algorytm Bellmana-Forda działa w czasie O(|V | · |E|). Twierdzenie 7.5. Niech (G, ω) będzie grafem skierowanym z funkcją wagową ω : E(G) → R oraz źródłem s ∈ V (G). Jeżeli w G istnieje cykl o ujemnej wadze osiągalny ze źródła s, to algorytm Bellman-Ford(G, ω, s) zwraca wartość ”false”; w przeciwnym wypadku algorytm ten zwraca wartość ”true” oraz wartość δ[v] jest długością najkrótszej drogi z s do v (dla każdego v ∈ V (G)). Dowód. Dowód tego twierdzenia można znaleźć w książce T. H. Cormen, Ch. E. Leiserson, R. L. Rivest, „Wprowadzenie do algorytmów”, WN-T, Warszawa 2001. Przykłady 7.6. Rozważmy następujący graf ważony: 3 a x 9 b, −6 gdzie źródłem jest wierzchołek s = a. Mamy δ[a] = 0, δ[b] = ∞, π[a] = ⊘, π[b] = ⊘ oraz |V (G)| − 1 = 1. Zatem dla dwóch krawędzi ab oraz ba musimy wykonać (∗). Sprawdzamy, czy δ[b] > δ[a] + ω(ab). Warunek ten jest prawdziwy, więc przyjmujemy δ[b] := 0 + (−6) = −6 oraz π[b] = a. Teraz sprawdzamy, czy 0 = δ[a] > δ[b] + ω(ba) = −6 + 3 = −3. Warunek ten jest prawdziwy, więc przyjmujemy δ[a] := (−6) + 3 = −3 oraz π[a] = b. Przechodzimy do następnego kroku algorytmu. Sprawdzamy, czy −6 = δ[b] > δ[a] + ω(ab) = −3 + (−6) = −9. Warunek ten jest prawdziwy, więc kończymy algorytm z wynikiem ”false”. Oznacza to, że w grafie istnieje cykl o ujemnej wadze osiągalny ze źródła. Rozważmy teraz następujący graf ważony: 6 a x 9 b, −3 gdzie źródłem jest wierzchołek s = a. Mamy δ[a] = 0, δ[b] = ∞, π[a] = ⊘, π[b] = ⊘ oraz |V (G)| − 1 = 1. Zatem dla dwóch krawędzi ab oraz ba musimy wykonać (∗). Sprawdzamy, czy δ[b] > δ[a] + ω(ab). Warunek ten jest 8. MAKSYMALNY PRZEPŁYW 71 prawdziwy, więc przyjmujemy δ[b] := 0 + (−3) = −3 oraz π[b] = a. Teraz sprawdzamy, czy 0 = δ[a] > δ[b] + ω(ba) = −3 + 6 = 3. Warunek ten jest fałszywy. Przechodzimy do następnego kroku algorytmu. Sprawdzamy, czy −3 = δ[b] > δ[a]+ω(ab) = 0+(−3) = −3. Warunek ten jest fałszywy. Sprawdzamy, czy 3 = δ[a] > δ[b]+ω(ba) = 0+6 = 6. Warunek ten jest fałszywy. Kończymy, więc algorytm z wynikiem ”true”. Tablice δ oraz π odczytujemy w ten sam sposób jak w algorytmie Dijkstry. 8. Maksymalny przepływ Problem maksymalnego przepływu w sieci pojawia się, gdy chcemy „przetransportować” jakiś towar (materiał) z jednego miejsca do drugiego. Mamy dane pewne drogi, po których możemy towar przemieszczać. Drogi te mają zadaną przepustowość (tzn. informację o tym jaką maksymalną ilość towaru możemy przetransportować daną drogą). Słowo „towar” rozumiemy tutaj bardzo szeroko. Przy pomocy przepływu w sieci możemy badać np. ile samochodów w ciągu godziny może maksymalnie przejechać z punktu A do punktu B, ile maksymalnie osób w ciągu godziny może przemieścić się metrem z punktu A do punktu B, itp. Definicja 8.1. Siecią przepływową (siecią) nazywamy graf skierowany G = (V, E), w którym każda krawędź (u, v) ∈ E ma przyporządkowany nieujemną przepustowość c(u, v) ≥ 0. Jeśli (u, v) 6∈ E, to przyjmujemy c(u, v) = 0. W sieci wyróżniamy dwa wierzchołki: źródło s oraz ujście t. Będziemy zakładać, że każdy wierzchołek v ∈ V leży na pewnej drodze ze źródła do ujścia. Przepustowość c wyznacza nam funkcję c : V × V → R. Jeśli będziemy mieli daną sieć G = (V, E) ze źródłem s, ujściem t oraz funkcją przepustowości c, to w skrócie będziemy pisać G = (V, E, s, t, c). Definicja 8.2. Niech G = (V, E, s, t, c) będzie siecią. Przepływem w sieci G nazywamy każdą funkcję f :V ×V →R spełniającą następujące warunki: 8. MAKSYMALNY PRZEPŁYW 72 1. dla wszystkich u, v ∈ V mamy f (u, v) ≤ c(u, v) (warunek przepustowości); 2. dla wszystkich u, v ∈ V mamy f (u, v) = −f (v, u) (warunek skośnej symetrii); P 3. dla wszystkich u ∈ V \ {s, t} mamy v∈V f (u, v) = 0 (warunek zachowania przepływu). Wartością przepływu f nazywamy liczbę X |f | = f (s, v). v∈V Problem maksymalnego przepływu: dla danej sieci G = (V, E, s, t, c) znaleźć przepływ f o maksymalnej wartości |f |. Uwaga 8.3. 1. Zauważmy, że warunek przepustowości w definicji przepływu intuicyjnie oznacza, że daną drogą nie możemy przetransportować więcej towaru niż wynosi przepustowość tej drogi. Warunek zachowania przepływu intuicyjnie oznacza, że z ustalonego punktu wyjeżdża tyle towaru ile do niego wjechało. Wartość przepływu natomiast mówi nam ile towaru wysyłamy ze źródła. Chcemy zatem znaleźć przepływ, który maksymalizuje ilość towaru wysłaną ze źródła. 2. Problem maksymalnego przepływu można sformułować jako zagadnienie programowania liniowego. Niech dana będzie sieć G = (V, E, s, t, c). Dla każdej krawędzi (i, j) ∈ E szukamy takiej wartości f (i, j) ∈ R, że spełnione są warunki: • dla wszystkich (i, j) ∈ E zachodzi 0 ≤ f (i, j) ≤ c(i, j); • dla wszystkich wierzchołków j 6= s, t zachodzi X X f (i, j) − f (j, l) = 0 i l (warunek zachowania przepływu); P • wartość i f (s, i) jest maksymalna; Poniżej opiszemy dokładnie algorytm Forda-Fulkersona znajdowania maksymalnego przepływu w sieciach. Jest to algorytm iteracyjny. Startuje on od przepływu f = 0, a nastepnie zwiększa ten przepływ wzdłuż tzw. ścieżek powiększających. Aby dokładnie omówić ten algorytm najpierw musimy zrozumieć problem sieci residualnych oraz przekrojów w sieciach. 8. MAKSYMALNY PRZEPŁYW 73 8.1. Przekroje w sieciach Niech G = (V, E, s, t, c) będzie siecią. Przekrojem w sieci G nazywamy parę (S, T ) taką, że S ⊆ V , T = V \ S oraz s ∈ S, t ∈ T . Jeśli f jest przepływem w G, to definiujemy XX f (S, T ) = f (u, v). u∈S v∈T Lemat 8.4. Niech f będzie przepływem, a (S, T ) - przekrojem w sieci G = (V, E, s, t, c). Wtedy f (S, T ) = |f |. Dowód. Wprost z definicji f (S, T ) oraz przekroju (S, T ) wynika, że f (S, T ) = f (S, V ) − f (S, S). Łatwo udowodnić, że f (S, S) = 0 (ćwiczenia). Mamy zatem f (S, T ) = f (S, V ) = f (s, V ) + f (S \ {s}, V ). Z warunku zachowania przepływu można wywnioskować, że f (S\{s}, V ) = 0. Ostatecznie f (S, T ) = f (s, V ) = |f |. Wniosek 8.5. Niech f będzie dowolnym przepływem, a (S, T ) - dowolnym przekrojem w sieci G = (V, E, s, t, c). Wówczas |f | ≤ c(S, T ). Dowód. Z Lematu 8.4 oraz z warunku przepustowości mamy: XX XX f (u, v) ≤ c(u, v) = c(S, T ). |f | = f (S, T ) = u∈S v∈T u∈S v∈T 8. MAKSYMALNY PRZEPŁYW 74 8.2. Sieci residualne Definicja 8.6. Niech dana będzie sieć G = (V, E, s, t, c) oraz przepływ f . Dla u, v ∈ V definiujemy cf (u, v) = c(u, v) − f (u, v). Funkcję cf : V × V → R nazywamy przepustowością residualną. Niech Ef = {(u, v) ∈ V × V ; cf (u, v) > 0}. Sieć Gf = (V, Ef , s, t, cf ) nazywamy siecią residualną dla sieci G indukowaną przez przepływ f . Niech G = (V, E, s, t, c) będzie siecią oraz f niech będzie przepływem w G. Ścieżką powiększającą nazywamy każdą drogę z s do t w sieci residualnej G. Lemat 8.7. Niech G = (V, E, s, t, c) będzie siecią oraz niech f będzie przepływem w G. Ponadto niech f ′ będzie przepływem w sieci residualnej Gf . Wtedy funkcja f + f ′ jest przepływem w G o wartości |f + f ′ | = |f | + |f ′ |. Dowód. Dowód nie jest trudny i pozostawiamy go na ćwiczenia. Pierwsza część dowodu sprowadza się do sprawdzenia warunków występujących w definicji przepływu. Natomiast druga część polega na sprawdzeniu równości |f + f ′ | = |f | + |f ′ |. Definicja 8.8. Niech G = (V, E, s, t, c) będzie siecią, f - przepływem w G oraz niech p będzie ścieżką powiększającą (tzn. dowolną ścieżką z s do t w Gf ). Przepustowością residualną ścieżki p nazywamy liczbę cf (p) = min{cf (u, v) ; (u, v) ∈ p}, gdzie (u, v) ∈ p oznacza, że krawędź (u, v) leży na ścieżce p. Lemat 8.9. Niech G = (V, E, s, t, c) będzie siecią, f - przepływem w G oraz niech p będzie ścieżką powiększającą. Definiujemy funkcję fp : V ×V → R następująco jeśli (u, v) ∈ p, cf (p), −cf (p), jeśli (v, u) ∈ p, fp (u, v) = 0, w pozostałych przypadkach. Funkcja fp jest przepływem w sieci Gf o wartości |fp | = cf (p) > 0. Rolę ścieżek powiększających w problemie znajdowania maksymalnego przepływu w sieciach ilustruje następujący fakt. 8. MAKSYMALNY PRZEPŁYW 75 Twierdzenie 8.10. Niech f będzie przepływem w sieci G = (V, E, s, t, c). Następujące warunki są równoważne. 1. Przepływ f jest maksymalnym przepływem w sieci G. 2. Sieć residulana Gf nie zawiera ścieżek powiększających. 3. Dla pewnego przekroju (S, T ) w G zachodzi |f | = c(S, T ). Dowód. Pokażemy, że z warunku 1 wynika warunek 2. Załóżmy, że f jest maksymalnym przepływem w sieci G oraz Gf zawiera ścieżkę powiększającą p. Z lematów 8.7 oraz 8.9 wynika, że funkcja f ′ = f +fp jest przepływem w G o wartości |f ′ | = |f |+|fp | > |f |. Zatem f nie jest maksymalnym przepływem. Kończy to dowód pierwszej implikacji. Teraz udowodnimy, że z warunku 2 wynika 3. Załóżmy, że w Gf nie istnieje ścieżka z s do t. Definiujemy przekrój (S, T ) w G następująco: S = {v ∈ V ; istnieje ścieżka z s do t w G} oraz T = V \S. Zauważmy, że s ∈ S oraz t ∈ T . Dla każdej pary wierzchołków u ∈ S oraz v ∈ T mamy f (u, v) = c(u, v), gdyż w przeciwnym wypadku (u, v) ∈ Ef oraz v ∈ S. Zatem z Lematu 8.4 otrzymujemy, że |f | = f (S, T ) = c(S, T ). Udowodnimy, że z warunku 3 wynika warunek 1. Z Wniosku 8.4 wynika, że dla dowolnego przekroju (S, T ) zachodzi |f | ≤ c(S, T ). Stąd oraz z 3 wnioskujemy, że f jest maksymalnym przepływem w G. 8.3. Algorytm Forda-Fulkersona Fakty przedstawione w poprzednich rozdziałach pozwalają na skonstruowanie następującego algorytmu Forda-Fulkersona (F-F), który dla danej sieci G = (V, E, s, t, c) konstruuje maksymalny przepływ f w G. F-F(G, s, t, c) • dla każdej każdej krawędzi (u, v) ∈ E wykonaj f (u, v) := 0 oraz f (v, u) := 0; • dopóki istnieje ścieżka powiększająca p w Gf wykonuj: 8. MAKSYMALNY PRZEPŁYW 76 – podstaw cf (p) := min{cf (u, v) ; (u, v) ∈ p}; – dla każdej krawędzi (u, v) ∈ p wykonuj: ∗ f (u, v) := f (u, v) + cf (p); ∗ f (v, u) := −f (u, v); Twierdzenie 8.11. Jeśli w sieci G = (V, E, s, t, c) przepustowość c przyjmuje wartości całkowitoliczbowe, to (niezależnie od wybranej metody znajdowania ścieżki powiększającej) maksymalny przepływ obliczany metodą FordaFulkersona jest całkowitoliczbowy. Dowód. Zadanie na ćwiczenia. Przykład 8.12. Rozważmy następującą sieć 0\3 G: /•M • MMM qq8 A MMM0\6 0\5 qqqq MMM qq q q MMM 0\4 qqq & s MMM 8t q q MMM0\2 0\3 qqqq MMM MMM qqq M& 0\2 qqq q / • • f (u,v)\c(u,v) / v . Zgodnie przy czym dla danej krawędzi (u, v) zapisujemy u z algorytmen F-F na początku f = 0. Zatem Gf = G. Wybierzmy ścieżkę powiększającą p, tzn. ścieżkę z s do t w Gf . Ścieżkę tę oznaczymy przerywanymi liniami. Gf : s 3 /•L 8• r r A LLLL r r LL6L 5 r rrr LLL r r LL rrr & 4 LL r8 t r L L2 3 r LL rr r L& r • _ _ _2_ _ _/ • Zauważmy, że cf (p) = 2. Zmieniamy odpowiednio przepływ i mamy: G: 0\3 /•M 8• A q MMM q q MMM0\6 0\5 qqq q MMM q q q MMM q q 0\4 & s qMMM q8 t q q MMM2\2 2\3 qqq MMM qqq MMM q q q M& 2\2 / q • • 8. MAKSYMALNY PRZEPŁYW oraz Gf : s 77 3 8 • _ _ _ _ _ _/ A • L L r r L L6 5 r r LL r L& rr 4 8t r rr r r 1 rr rrr r r r • • Teraz cf (p) = 3 i mamy: 3\3 G: /•M • A MMM qq8 q q MMM3\6 3\5 qq q MMM q q q MMM q q 0\4 & s qMMM qq8 t q MMM2\2 q 2\3 qq MMM qqq MMM q q M& q 2\2 /•q • oraz Gf : s 8• rr r r 3 rr rrr r r rr •L A LLLL LL3L LLL LL & 4 r8 t r r 1 rr rrr r r rrr • • W grafie Gf nie ma już ścieżki powiększającej. Zatem przepływ f jest maksymalny. Zauważmy, że |f | = 2 + 3 = 5. 8.4. Analiza czasu działania algorytmu Forda-Fulkersona Zauważmy, że czas działania algorytmu Forda-Fulkersona zależy od sposobu wybierania ścieżki powiększającej. Okazuje się, że jeśli do szukania ścieżki powiększającej użyjemy przeszukiwania wszerz (patrz Dodatek rozdział 12), to algorytm Forda-Fulkersona działa w czasie wielomianowym. Algorytm Forda-Fulkersona zaimplementowany w ten sposób nazywamy algorytmem Edmondsa-Karpa. Twierdzenie 8.13. Czas działania algorytmu Edmondsa-Karpa wynosi O(|V | · |E|2). 8. MAKSYMALNY PRZEPŁYW 78 Dowód. Dowód tego twierdzenia można znaleźć w książce T. H. Cormen, Ch. E. Leiserson, R. L. Rivest, „Wprowadzenie do algorytmów”, WN-T, Warszawa 2001. 8.5. Sieci z wieloma źródłami i ujściami W praktycznych zastosowaniach może się okazać, że chcemy towar transportować np. z kilku fabryk do kilku magazynów. Wtedy zamiast sieci z jednym źródłem i z jednym ujściem mamy sieć ze źródłami s1 . . . . , sn oraz ujściami t1 , . . . , tm . Definicja 8.14. Siecią z wieloma źródłami i ujściami nazywamy graf skierowany G = (V, E), w którym każda krawędź (u, v) ∈ E ma przyporządkowany nieujemną przepustowość c(u, v) ≥ 0. Jeśli (u, v) 6∈ E, to przyjmujemy c(u, v) = 0. W sieci wyróżniamy wierzchołki: źródła s1 . . . . , sn oraz ujścia t1 . . . . , tm . Będziemy zakładać, że każdy wierzchołek v ∈ V leży na pewnej drodze ze źródła do ujścia. Przepustowość c wyznacza nam funkcję c : V × V → R. Definicja 8.15. Niech G = (V, E, s1 . . . . , sn , t1 . . . . , tm , c) będzie taką siecią. Przepływem w sieci G nazywamy każdą funkcję f :V ×V →R spełniającą następujące warunki: 1. dla wszystkich u, v ∈ V mamy f (u, v) ≤ c(u, v) (warunek przepustowości); 2. dla wszystkich u, v ∈ V mamy f (u, v) = −f (v, u) (warunek skośnej symetrii); P 3. dla wszystkich u ∈ V \ {s1 . . . . , sn , t1 , . . . , tm } mamy v∈V f (u, v) = 0 (warunek zachowania przepływu). Wartością przepływu f nazywamy liczbę n X X |f | = f (si , v). i=1 v∈V Problem maksymalnego przepływu: dla danej sieci G znaleźć przepływ f o maksymalnej wartości |f |. 9. ZAGADNIENIE TRANSPORTOWE 79 9. Zagadnienie transportowe Przypuśćmy, że pewien towar jest produkowany w fabrykach: f1 , . . . , fm . Znamy maksymalne moce produkcyjne tych fabryk: a1 , . . . , am . Chcemy wyprodukowany towar przetansportować do magazynów (hurtowni): h1 , . . . , hm , które mają minimalne zapotrzebowania: b1 , . . . , bn . Znamy również koszt transportu cij z fabryki fi do hurtowni fj , dla wszystkich i, j. Naszym zadaniem jest zminimalizowanie kosztów transportu. Rozważmy nastepujące zagadnienie transportowe: znaleźć minimum f (x) = m X n X (9.1) cij xij i=1 j=1 na zbiorze ograniczonym warunkami n X xij ≤ ai , dla i = 1, 2, . . . , m, (9.2) xij ≥ bj , dla j = 1, 2, . . . , n, (9.3) j=1 m X i=1 xij ≥ 0, dla i = 1, 2, . . . , m; j = 1, 2, . . . , n, (9.4) gdzie ai , bj , cij ∈ N. Zauważmy, że n X j=1 n X m m X n m X X X bj ≤ ( xij ) = ( xij ) ≤ ai . j=1 i=1 i=1 j=1 i=1 Zatem warunkiem koniecznym na to aby zagadnienie transportowe posiadało rozwiązanie dopuszczalne jest n X j=1 bj ≤ m X ai . i=1 Załóżmy, że spełniony jest powyższy warunek. Można wtedy pokazać, że zadanie transportowe posiada rozwiązanie dopuszczalne (ćwiczenia) oraz każPm de rozwiązanie optymalne y spełnia warunek i=1 yij = bj , dla j = 1, . . . , n, (ćwiczenia). 9. ZAGADNIENIE TRANSPORTOWE 80 Bez straty ogólności możemy założyć, że (9.2) oraz (9.3) są równościami, gdyż możemy dodać fikcyjny wierzchołek odbioru n + 1 z odbiorem bn+1 = m X ai − i=1 n X bj j=1 i kosztami ci,n+1 = 0, dla i = 1, . . . , n. 9.1. Rozwiązanie zagadnienia transportowego metodą maksymalnego przepływu Zauważmy, że warunek (9.2) zagadnienia transportowego możemy zapisać w następujący sposób: − n X xij ≥ −ai , dla i = 1, 2, . . . , m. j=1 Wtedy zagadnienie transportowe przyjmuje postać: znaleźć minimum f (x) = cT x na zbiorze ograniczonym warunkami Ax ≥ d, xij ≥ 0, dla i = 1, 2, . . . , m; j = 1, 2, . . . , n, gdzie d = (a1 , . . . , am , b1 , . . . , bn )T , x = (x1,1 , x1,2 , . . . , xi,n , x2,1 , . . . , x2,n , . . . , xm,1 , . . . , xm,n )T , c = (c1,1 , c1,2 , . . . , ci,n , c2,1 , . . . , c2,n , . . . , cm,1 , . . . , cm,n )T oraz A jest odpowiednią (m + n) × mn-macierzą. Łatwo zauważyć, że odpowiednie zagadnienie dualne przyjmuje postać: znaleźć maksimum m n X X − ui ai + vj bj (9.5) i=1 j=1 9. ZAGADNIENIE TRANSPORTOWE 81 na zbiorze ograniczonym warunkami: −ui + vj ≤ cij , (9.6) ui ≥ 0 , vj ≥ 0, dla i = 1, 2, . . . , m; j = 1, 2, . . . , n. (9.7) Niech xi,j oraz ui , v j będą rozwiązaniami optymalnymi odpowiednio zagadnienia prymalnego oraz dualnego. Z wniosku 2.23 wynika, że (cij − (−ui + v j ))xij = 0. (9.8) Jeśli znajdziemy rozwiązania dopuszczalne xi,j oraz ui , v j odpowiednio zagadnienia prymalnego oraz dualnego, które spełniają warunek (9.8), to z twierdzenia 2.22 będzie wynikać, że są to rozwiązania optymalne tych zagadnień. Zatem nasz problem redukuje się do znalezienia rozwiązań dopuszczalnych spełniających warunek (9.8). Zauważmy, że bardzo łatwo jest znaleźć rozwiązanie dopuszczalne problemu dualnego (9.5)-(9.7). Wystarczy przyjąć ui = 0, dla i = 1, . . . , m, oraz vj = min{cij ; i = 1, . . . , m}, dla j = 1, . . . , n. Niech ui , vi będzie pewnym rozwiązaniem dopuszczalnym zagadnienia dualnego. Rozważmy pomocniczy problem: znaleźć maksimum m X n X xij (9.9) i=1 j=1 na zbiorze ograniczonym warunkami n X xij ≤ ai , dla i = 1, 2, . . . , m, (9.10) xij ≤ bj , dla j = 1, 2, . . . , n, (9.11) = 0, gdy − ui + vi < cij , ≥ 0, gdy − ui + vi = cij . (9.12) j=1 m X i=1 xij Zauważmy, że jest to zagadnienie maksymalnego przepływu w sieci G = (V, E, s, t, c), gdzie V = {s, s1 , . . . , sm , t1 , . . . , tn , t}, E = {(s, si ) ; i = 1, . . . , m}∪{(tj , t) ; j = 1, . . . , n}∪{(si , tj ) ; gdy −ui +vi = cij }, 9. ZAGADNIENIE TRANSPORTOWE 82 c(s, si) = ai , dla i = 1, . . . , m, c(tj , t) = bj , dla j = 1, . . . , n, c(α) = ∞, dla pozostałych krawędzi. Niech xij będzie rozwiązaniem optymalnym problemu (9.9)-(9.12). Wtedy oczywiście spełniona jest równość (9.8). Może się jednak okazać, że xij nie spełnia warunku (9.3). Nie jest więc rozwiązaniem dopuszczalnym problemu (9.9)-(9.12). W tej sytuacji będziemy modyfikować rozwiązanie ui, vj zagadnienia dualnego oraz problem (9.9)-(9.12). Poniżej opiszemy algorytm transportowy Forda-Fulkersona (T-F-F), który rozwiązuje problem (9.1)-(9.4). Niech a = (a1 , . . . , am ), b = (b1 , . . . , bn ), c = (cij ). T-F-F(m, n, a, b, c) 1. podstaw ui := 0, dla każdego i = 1, . . . , m; 2. podstaw vj := min{cij ; i = 1, . . . , m}, dla każdego j = 1, . . . , n; 3. podstaw xij := 0, dla wszystkich i = 1, . . . , m oraz j = 1, . . . , n; P P 4. dopóki warunki nj=1 xij ≤ ai oraz m i=1 xij ≥ bi nie są spełnione dla wszystkich i, j wykonuj: (a) skonstruuj sieć G = (V, E, s, t, c) (zauważmy, że x = (xij ) jest przepływem w tej sieci) (b) dopóki istnieje ścieżka powiększająca p w Gx wykonuj: • podstaw cx (p) := min{cx (i, j) ; (i, j) ∈ p}; • dla każdej krawędzi (u, v) ∈ p wykonuj: – xij := xij + cx (p); – xji := −xij ; P • jeśli m i=1 xij ≥ bi zachodzi dla wszystkich i, to zakończ algorytm (wynik: x = (xij )); (c) w Gx nie ma ścieżki powiększającej; niech I = {i ∈ {1, . . . , m} ; (s, i) ∈ Ex } ; I = {1, . . . , m} \ I; J = {j ∈ {1, . . . , n} ; (j, t) ∈ Ex } ; J = {1, . . . , n} \ J ; (d) podstaw d := min{cij + ui − vj ; i ∈ I , j ∈ J} (e) podstaw ui := ui + d, dla i ∈ I; 9. ZAGADNIENIE TRANSPORTOWE 83 (f) podstaw vj := vj + d, dla i ∈ J; Zauważmy, że powyższy algorytm zakończyPsię. Istotnie, w trakcie wykonywania algorytmu dla każdego i zachodzi nj=1 xij ≤ ai , gdyż jest zachowywany warunek przepustowości oraz przepływu. W każdym Pn Pmzachowania przebiegu pętli 4 zwiększa się wartość i=1 j=1 xij , która jest ograniczona Pm z góry przez i=1 ai . Stąd pętla 4 jest skończona. P W pewnej iteracji musi zostać spełniony również warunek m i=1 xij ≥ bi , dla wszystkich i (w przeciwnym wypadku pętla 4 byłaby nieskończona). Przykład 9.13. Rozważmy następujący problem transportowy: 30 3 7 3 4 15 10 c = 5 7 2 6 , a = 30 , b = 15 . 8 13 9 3 55 45 Zauważmy, że m = 3 oraz n = 4. Zastosujemy do powyższych danych algorytm T-F-F. Kładziemy u1 = u2 = u3 = 0, v1 = 3, v2 = 7, v3 = 2, v4 = 3 oraz wszystkie xij = 0. Oczywiście warunki (9.2) oraz (9.3) nie są spełnione. Konstruujemy odpowiednią sieć: h4 t hhhh 1 22 22 h 22 hhhh h h h h 22 hVhhh 22 VVVV VVVV 0\∞ 22 VVVV 220\30 VVVV VVVV 22 VVV* 22 4 t h M 2 h 2 MMM hh h h h h MMM 22 0\∞hhh h h M h h M 22 0\10 MMM 2 hhhh h h M& h hVh VVVV qq8 F t VVVV 0\∞ 0\15 qqqq VVVV VVVV qqq VVVV q q q VVV* q t3 0\45 VVVV VVVV VVV0\∞ VVVV VVVV VVVV V* 0\∞hhhhhh s1 A 0\15 0\30 / s2 s; ;; ;; ;; ;; ;; 0\55 ;; ;; ;; ; s3 t4 9. ZAGADNIENIE TRANSPORTOWE 84 Zastosujemy algorytm F-F, aby znaleźć maksymalny przepływ w tej sieci. Ścieżką powiększającą jest np. (s, s1 , t1 , t). Zwiększamy przepływ wzdłuż tej ścieżki i otrzymujemy: h4 t hhhh 1 22 22 h 22 hhhh h h h h 22 hVhhh 22 VVVV VVVV 0\∞ 22 VVVV 2215\30 VVVV VVVV 22 VVV* 22 4t 22 hhhh 2 MMMM h h h h M 0\∞hhh MMM 22 h h h M 2 hh 0\10 MMM 2 hhhh M& hVhhh 8Ft VVVV q q VVVV 0\∞ 0\15 qqqq VVVV VVVV qqq VVVV VVV* qqqq t3 0\45 VVVV VVVV VVV0\∞ VVVV VVVV VVVV V* t 15\∞hhhhhh 15\15 s1 A 0\30 / s2 ;; ;; ;; ;; ;; 0\55 ;; ;; ;; ; s; s3 4 Przerywane strzałki oznaczają krawędzie, które nie występują w odpowiedniej sieci residualnej. Warunek (9.3) nie jest spełniony, więc wyznaczamy 9. ZAGADNIENIE TRANSPORTOWE następną ścieżkę powiększającą (s, s2 , t2 , t) i powiększamy przepływ: h4 t hhhh 1 22 22 hh 22 hhhh h h h 22 hVhhh 22 VVVV VVVV 0\∞ 22 VVVV 2215\30 VVVV VVVV 22 VVV* 22 4 t hhh 2 M M 2 h h h M M 22 10\∞hhhhh h M M 222 hhhh 10\10 hhhh h M& h h hV VVVV q8 F t q VVVV 0\∞ 0\15 qqqq VVVV VVVV qqq VVVV VVV* qqqq t3 0\45 VVVV VVVV VVV0\∞ VVVV VVVV VVVV V* t 15\∞hhhhhh 15\15 s1 A 10\30 / s2 ;; ;; ;; ;; ;; 0\55 ;; ;; ;; ; s; s3 4 Kolejną ścieżką powiększającą jest (s, s2 , t3 , t). Mamy: h4 t hhhh 1 22 22 h 22 hhhh h h h h 22 hVhhh 22 VVVV VVVV 0\∞ 22 VVVV 2215\30 VVVV VVVV 22 VVV* 22 4t 22 hhhh 2 M M h h h h M 10\∞hhh 2 M h h h M M 222 hh h h 10\10 h M& hhhh VhVVV 8t q VVVV q F VVV15\∞ 15\15 q VVVV VVVV q q VVVV q V* q t3 0\45 VVVV VVVV VVV0\∞ VVVV VVVV VVVV V* t 15\∞hhhhhh 15\15 s1 A 25\30 / s2 ;; ;; ;; ;; ;; 0\55 ;; ;; ;; ; s; s3 4 85 9. ZAGADNIENIE TRANSPORTOWE 86 Rozważmy ostatnią ścieżkę powiększającą (s, s3 , t4 , t): h4 t hhhh 1 22 22 hh 22 hhhh h h h 22 hVhhh 22 VVVV VVVV 0\∞ 22 VVVV 2215\30 VVVV VVVV 22 VVV* 22 4 t hhh 2 M M 2 h h h M M 22 10\∞hhhhh h M M 222 hhhh 10\10 hhhh h M& h h VhVVV 8t q VVVV q F VVV15\∞ 15\15 q VVVV VVVV q q VVVV q V* q t3 45\45 VVVV VVVV VVV45\∞ VVVV VVVV VVVV V* t 15\∞hhhhhh 15\15 s1 A 25\30 / s2 ;; ;; ;; ;; ;; 45\55 ;; ;; ;; ; s; s3 4 Zauważmy, że nie ma już żadnej ścieżki powiększającej. Będziemy zatem zmodyfikować u oraz v. Mamy I = {2, 3}, J = {1}. Widzimy, że warunek (9.3) nie jest spełnione dla j = 1. Musimy dodać pewne krawędzie z wierzchołków s2 , s3 do wierzchołka t4 i zwiększyć przepływ. Mamy d = min{cij +ui −vj ; i ∈ I, j ∈ J} = min{c2,1 −v1 , c3,1 −v1 } = min{2, 3} = 2 oraz uT = [2, 0, 0] , v T = [5, 7, 2, 3]. 9. ZAGADNIENIE TRANSPORTOWE 87 Tworzymy nową sieć h4 t hhhh{{= 1 22 22 {{ hh 22 hhhh {{ h h { h 22 { hhh h { { 22 { As1 { { 22 0\∞ { 2215\30 {{ { { 22 { 15\15 22 {{ 4 { t { hhh 2 M M 2 h { h h M M 22 10\∞hhhhh {{ { h M M 222 {{ hhhhhhhh 10\10 { { hh 25\30 M& / s2 VhVh s; 8t V VVVV ;; q qF VVVV15\∞ 15\15 q ;; VVVV VVVV ;; q q VVVV q ;; V* q ;; t3 45\55 ;; ;; ;; 45\45 ; s3 VVVV VVVV VVV45\∞ VVVV VVVV VVVV V* 15\∞hhhhhh t4 Mamy nową ścieżkę powiększającą (s, s2 , t1 , t). Powiększamy przepływ wzdłuż tej ścieżki: h4 t hhhh{{= 1 22 22 { h {{ 22 hhhh h { h h 22 {{ hhhh h { { 22 { As1 {{ 22 5\∞ { { 2220\30 { {{ 22 { 15\15 22 {{ 4 { t h M 2 h 2 hh {{ M h h h { M M 22 10\∞hhhh { { h h M M 222 {{ hhhh 10\10 {h{hhhhhh 30\30 M& s ;_ _ _ _ _ _/ s2 VVVVV 8t q ;; VVVV 15\∞ q F 15\15 q V ;; VVVV q VVVV ;; VVVV qq ;; V q V * ;; t3 45\55 ;; ;; ;; 45\45 ; s3 VVVV VVVV VVV45\∞ VVVV VVVV VVVV V* 15\∞hhhhhh t4 9. ZAGADNIENIE TRANSPORTOWE 88 W powyższej sieci nie istnieje już ścieżka powiększająca. Warunek (9.3) nie jest spełniony dla j = 1. Musimy ponownie zmodyfikować wektory u oraz v. Zauważmy, że I = {3}, J = {1} oraz d = c3,1 + u3 − v1 = 8 − 5 = 3. Mamy więc uT = [5, 3, 0] , v T = [8, 7, 2, 3] oraz h4 t hhhh{{= D 1 22 22 { {{ hhhh 22 h h { h { hh 22 hhhh {{ { s 22 { A 1 { 22 5\∞ {{{ 2220\30 { { { 22 { 15\15 22 {{ { t 2 M { 2 { M M M 22 {{ 0\∞ { M M 222 {{ 10\10 { { 30\30 M& s ;_ _ _ _ _ _/ s2 8Ft q ;; 15\15 q q ;; q ;; qq ;; q ;; t3 45\55 ;; ;; ;; 45\45 ; s3 VVVV VVVV VVV45\∞ VVVV VVVV VVVV V* t 15\∞hhhhhh 4 Powstała nowa ścieżka powiększająca (s, s4 , t1 , t), wzdłuż której możemy po- 10. SKOJARZENIA W GRAFACH DWUDZIELNYCH 89 większyć przepływ: h4 t hhhh{{= D 1 2 2 {{ hh 2 hhhh {{ h h { h { 2 hhh h { 2 {{ As1 { { 2 30\30 5\∞ { { 2 {{ { 2 { { 15\15 2 {{ t2 M { { MM 2 { MM 2 {{ 10\∞ { { M M2 10\10 {{ 30\30 & _ _ _ _ _ _ / s2 s; q8 F t q ; 15\15 q ; q q ; q q ; t3 55\55 ; ; ; 45\45 ; s3 VVVV VVVV VVV45\∞ VVVV VVVV VVVV V* 15\∞hhhhhh t4 Zauważmy, że warunki (9.2) oraz (9.3) są spełnione. Zatem kończymy algorytm. Rozwiązaniem wyjściowego zagadnienia transportowego jest 15 0 0 0 x = 5 10 15 0 . 10 0 0 45 10. Skojarzenia w grafach dwudzielnych Poniżej opiszemy problem, który również można rozwiązać przy pomocy maksymalnego przepływu w sieciach. Jest to problem znajdowania maksymalnego skojarzenia w grafach dwudzielnych. Wyobraźmy sobie, że mamy do dyspozycji pewną liczbę maszyn (odp. ludzi), które mogą wykonywać pewne zadania (w danej chwili tylko jedno zadanie). Problem polega na przydzieleniu pracy w ten sposób, żeby w danym momencie było wykonywanych możliwie najwięcej zadań. 10. SKOJARZENIA W GRAFACH DWUDZIELNYCH 90 Definicja 10.1. Niech G = (V, E) będzie grafem nieskierowanym. Skojarzeniem w G nazywamy podzbiór M ⊆ E taki, że dla dowolnej pary krawędzi {u1 , v1 } = 6 {u2, v2 } należących do M mamy {u1, v1 } ∩ {u2, v2 } = ∅. Maksymalnym skojarzeniem nazywamy skojarzenie o maksymalnej mocy. Definicja 10.2. Graf nieskierowany G = (V, E) nazywamy dwudzielnym, jeśli V = V1 ∪V2 dla pewnych rozłącznych podzbiorów V1 , V2 ⊆ V , oraz żadna krawędź nie łączy wierzchołków z tego samego zbioru Vi , dla i = 1, 2. Opiszemy metodę znajdowania maksymalnego skojarzenia w grafie dwudzielnym. Z danym grafem dwudzielnym G = (V, E), gdzie V = V1 ∪ V2 , stowarzyszamy sieć przepływową G′ = (V ′ , E ′ , s, t, c) w następujący sposób. Niech • V ′ = V ∪ {s, t}, gdzie s, t 6∈ V ; • E ′ = {(s, u) ; u ∈ V1 }∪{(u, v) ∈ E ; u ∈ V1 , v ∈ V2 }∪{(v, t) ; v ∈ V2 }; • c(u, v) = 1, dla wszystkich (u, v) ∈ E ′ . Twierdzenie 10.3. Niech G = (V, E) będzie grafem dwudzielnym oraz niech G′ = (V ′ , E ′ , s, t, c) będzie odpowiadającą mu siecią przepływową. Jeśli M jest skojarzeniem w G, to istnieje przepływ całkowitoliczbowy f w G′ taki, że |M| = |f |. Odwrotnie, jeśli f jest przepływem całkowitoliczbowym w G′ , to istnieje skojarzenie M w G takie, że |M| = |f |. Dowód. Niech M będzie skojarzeniem w grafie dwudzielnym G. Definiujemy funkcję f : E ′ → R następująco. Jeśli (u, v) ∈ M, to przyjmujemy f (s, u) = f (u, v) = f (v, s) = 1 , f (u, s) = f (v, u) = f (s, v) = −1; jeśli (u, v) 6∈ M, to kładziemy f (u, v) = 0. Udowodnimy, że f jest przepływem w sieci G′ . Zauważmy, że f powstaje z przepływu zerowego poprzez zwiększanie go wzdłuż ścieżek powiększających (s, u, v, t), dla (u, v) ∈ M. Na podstawie lematu 8.7, f jest przepływem w G′ o wartości |f | = |M|. Udowodnimy teraz odwrotną implikację. Niech f będzie przepływem całkowitoliczbowym w sieci G′ . Definiujemy zbiór M = {(u, v) ∈ E ; f (u, v) > 0}. 10. SKOJARZENIA W GRAFACH DWUDZIELNYCH 91 Pokażemy, że M jest skojarzeniem w grafie dwudzielnym G (gdzie V = V1 ∪ V2 ). Z definicji przepływu w sieci G′ można wywnioskować, że f (u, v) ≥ 0 dla wszystkich (u, v) ∈ E ′ . Jeżeli u ∈ V1 , to jedyną krawędzią o końcu w u jest (s, u). Ponieważ c(s, u) = 1 oraz f jest przepływem całkowitoliczbowym, więc f (s, u) ∈ {0, 1}. Stąd oraz z warunku zachowania przepływu wynika, że istnieje co najwyżej jeden wierzchołek v ∈ V2 taki, że f (u, v) > 0 (gdyż f jest całkowitoliczbowy oraz dla każdej krawędzi (u, v) mamy f (u, v) ≥ 0). Pokazaliśmy, że dla każdego wierzchołka u ∈ V1 istnieje co najwyżej jeden wierzchołek v ∈ V2 taki, że (u, v) ∈ M. Analogicznie można udowodnić, że dla każdego wierzchołka v ∈ V2 istnieje co najwyżej jeden wierzchołek u ∈ V1 taki, że (u, v) ∈ M. Stąd już łatwo wywnioskować, że M jest skojarzeniem w G oraz |M| = f (V1 , V2 ). Udowodnimy, że |M| = |f |. Zauważmy, że (V1 ∪ {s}, V2 ∪ {t}) jest przekrojem w sieci G′ . Ponadto w G′ nie ma żadnej krawędzi z s do V2 ∪ {t} ani żadnej krawędzi z V1 ∪ {s} do t. Zatem na podstawie lematu 8.4 mamy |M| = f (V1 , V2 ) = f (V1 ∪ {s}, V2 ∪ {t}) = |f |. Wniosek 10.4. Moc maksymalnego skojarzenia w grafie dwudzielnym G jest równa wartości maksymalnego przepływu f w sieci G′ stowarzyszonej z G. Dowód. Zadanie na ćwiczenia. Niech dany będzie graf dwudzielny G, gdzie (V = V1 ∪ V2 ). Z powyższych rozważań wynika, że aby znaleźć maksymalne skojarzenie M w G należy: 1. skonstruować odpowiednią sieć przepływową G′ ; 2. znaleźć maksymalny całkowity przepływ f w sieci G′ ; Ponieważ przepustowość c przyjmuje wartości całkowitoliczbowe, więc z twierdzenia 8.11 wynika, że algorytm Forda-Fulkersona maksymalny przepływ całkowitoliczbowy. 3. określić M = {(u, v) ∈ E ; f (u, v) > 0}. 10. SKOJARZENIA W GRAFACH DWUDZIELNYCH 92 Przykład 10.5. Rozważmy następujący graf dwudzielny • NNN • G: • • NNN NNN NNN N& 8/ • q qq q q qq qqq q q q MMM MMM MMM MMM M& p8 • ppp p p p ppp ppp Wyznaczymy maksymalne skojarzenie w G. Odpowiadająca mu sieć przepływowa, to G′ : @• 0\1 8• qqqq q q qqqqq0\1 q /• s <q << 0\1 << << <<0\1 << << << << • NNN NNN0\1 NNN NNN N& 8/ • MMM q 0\1 qqq MMM0\1 q q MMM q q q 0\1 MMM q q M& qq MMM q8 t q q MMM0\1 0\1 qqq MMM MMM qqq M& qqqq • pp8 0\1 pppp p ppp ppp Obliczymy maksymalny przepływ w G′ metodą Fulkersona-Forda. Będziemy 10. SKOJARZENIA W GRAFACH DWUDZIELNYCH stosować te same oznaczenia jak w przykładzie 8.12. Mamy G′f : •NN A N N1 NN N& 1 9• 9/ • L r 1 LL rr r rrrr r L1 rrr rrr r LL r 1 rrr 1 r r r L% rr r /•L s; 9t r L 1 r L ;; r LLL r r 1 ;; L1LL rrr ;; LLL rr r ;; 1 L% rr ;; 8• p ;; p p 1 ppp ;; ;; ppp pppp • oraz cf (p) = 1. Zatem G′ : • @ 1\1 8• qqqq q q qqq qqqq 0\1 /• s< << 0\1 << << <<0\1 << << << << • NNN NNN1\1 NNN NNN N& /8 • q 0\1 qq q q qqq q q 0\1 qqq MMM MMM0\1 MMM MMM M& • pp8 0\1 pppp p ppp ppp MMM MMM1\1 MMM MMM M& qq8 t 0\1 qqqq q qqq qqq oraz • G′f : r9 • rr r r r rrr1 r r rr /• s; ; 1 ; ; ;1 ; ; ; ; • / r9 • r r rrr rrr1 r rrr LLL r9 t r LLL r 1 1 LLL rr LLL L% r r 8• pp 1 p pp pp 1 93 10. SKOJARZENIA W GRAFACH DWUDZIELNYCH 94 przy czym cf (p) = 1. Następnie G′ : • @ 1\1 8• qqqq q q qqq qqqq 0\1 /• s< << 0\1 << << <<1\1 << << << << • NNN NNN1\1 NNN NNN N& /8 • M MMM q 0\1 qqq MMM1\1 q q MMM qq q q MMM 0\1 qqq & MMM q8 t q q MMM0\1 1\1 qqq MMM qqq MMM q M& qqq • pp8 1\1 pppp p ppp ppp oraz • G′f : s /• r9 • 1 rr9 r r r r rr rrr rr1r r r r 1 r rrr rrr / • Lr LLL 1 LLL1 LL LLL L% t • • Ponieważ w sieci residualnej nie ma już ścieżek powiększających, więc obliczony przepływ jest maksymalny. Aby uzyskać maksymalne skojarzenie, wybieramy te krawędzie grafu G, dla których przepływ jest dodatni. Poniżej 95 maksymalne skojarzenie w G oznaczyliśmy podwójnymi krawędziami: • NNN G: NNN NNN NNN N "* /8 • • qqq q q qq qqq q q q • MMM MMM MMM MMM M& 4< • p ppp p p ppp ppp • Część II Dodatek 11. Pesymistyczna złożoność czasowa algorytmów Przedstawimy tutaj intuicje związane z problemem pesymistycznej złożoności czasowej algorytmów. Złożoność obliczeniowa algorytmów zależy od rozmiaru wprowadzonych danych. Rozmiar danych jest pojęciem intuicyjnym i zależy od rodzaju rozważanego problemu. Zwykle jest to liczba naturalna lub ciąg liczb naturalnych, od których zależy szybkość działania algorytmu. I tak np. • w algorytmach sortowania rozmiarem danych jest liczba n, jeśli sortujemy ciąg złożony z n elementów; • w algorytmach grafowych zwykle rozmiar danych jest parą liczb (|V |, |E|), gdzie G = (V, E) jest rozważanym grafem grafem; • w problemie plecakowym rozmiarem danych jest para: (liczba rzeczy, rozmiar plecaka); 11. PESYMISTYCZNA ZŁOŻONOŚĆ CZASOWA ALGORYTMÓW 96 Niech W będzie zbiorem rozmiaru danych dla ustalonego algorytmu oraz dla w ∈ W , niech Dw oznacza zbiór danych wejściowych algorytmu, które mają rozmiar w. Chcemy policzyć tzw. pesymistyczną złożoność czasową algorytmu, czyli funkcję (częściową) T : W 99K N taką, że T (w) = sup{t(x) ; x ∈ Dw }, gdzie t(x) jest liczbą operacji potrzebnych do wykonania algorytmu dla danych rozmiaru w. Dla skomplikowanych algorytmów trudno jest dokładnie obliczyć funkcję T . W praktyce nie zlicza się wszystkich operacji, które wykonuje algorytm. Liczy się tylko te operacje, które są istotne dla szybkości działania algorytmu (np. w większości algorytmów sortowania zlicza się liczbę porównań sortowanych elementów). To ograniczenie często nie wystarcza i nadal trudno jest wyznaczyć funkcję T . Zatem podaje się zwykle rząd funkcji T . Reasumując, pojawiająca się informacja: algorytm ma złożoność obliczeniową O(n) oznacza, że funkcja T jest co najwyżej rzędu f (n) = n (oraz W = N). 11.1. Notacja O, Ω oraz Θ Definicja 11.1. Niech f, g : N → R. Mówimy, że 1. funkcja f jest co najwyżej rzędu funkcji g (ozn. f = O(g)), jeśli istnieją stałe c ∈ R, c > 0, oraz n0 ∈ N takie, że |f (n)| ≤ c · |g(n)| dla wszystkich n ≥ n0 . 2. funkcja f jest co najmniej rzędu funkcji g (ozn. f = Ω(g)), jeśli istnieją stałe c ∈ R, c > 0, oraz n0 ∈ N takie, że |f (n)| ≥ c · |g(n)| dla wszystkich n ≥ n0 . 12. PRZESZUKIWANIE GRAFU WSZERZ 97 3. funkcja f jest dokładnie rzędu funkcji g (ozn. f = Θ(g)), jeśli istnieją stałe c1 , c2 ∈ R, c1 > 0, c2 > 0, oraz n0 ∈ N takie, że c1 · |g(n)| ≤ |f (n)| ≤ c2 · |g(n)| dla wszystkich n ≥ n0 . Lemat 11.2. f = Θ(g) wtedy i tylko wtedy, gdy f = O(g) oraz f = Ω(g). Dowód. Zadanie na ćwiczenia. Lemat 11.3. Niech Γ ∈ {O, Ω, Θ} oraz niech f, g, h, r : N → R. 1. Jeśli f = Γ(g) oraz g = Γ(h), to f = Γ(h). 2. Jeśli f = Γ(g) oraz h = Γ(r), to f · h = Γ(g · r). 3. Jeśli f jest zadana przez wielomian stopnia d, to f = Θ(nd ). Dowód. Zadanie na ćwiczenia. 12. Przeszukiwanie grafu wszerz Niech G = (V, E) będzie grafem (skierowanym lub nieskierowanym) oraz niech s ∈ V będzie wyróżnionym wierzchołkiem (zwanym źródłem). Poniżej przedstawimy algorytm (tzw. przeszukiwanie grafu wszerz lub BFS), który może wyć wykorzystany do znajdowania najkrótszych dróg (w sensie liczby krawędzi) między wierzchołkami w grafie. W algorytmie wykorzystywana jest kolejka (obiekt FIFO). Jest to struktura danych, która przechowuje ciąg elementów a1 , . . . , an . Niech Q = [a1 , . . . , an ] będzie kolejką. Na Q możemy wykonywać następujące operacje. 1. Operacja DeQueue(Q) usuwa z Q oraz zwraca jako wynik element a1 (po jej wykonaniu mamy Q = [a2 , . . . , an ]). 2. Operacja EnQueue(Q, x) dodaje do Q element x (po jej wykonaniu mamy Q = [a1 , . . . , an , x]). 3. Operacja Head(Q) zwraca jako wynik element a1 (po jej wykonaniu mamy Q = [a1 , . . . , an ]). 12. PRZESZUKIWANIE GRAFU WSZERZ 98 Zanim opiszemy algorytm BFS, przedstawimy kilka uwag. • W algorytmie BFS każdy wierzchołek grafu ma przypisany kolor biały, szary lub czarny. Kolor biały mają wierzchołki, które jeszcze nie były rozważane w algorytmie; kolor szary mają wierzchołki, których lista sąsiedztwa jest właśnie przetwarzana; kolor czarny mają wierzchołki, których lista sąsiedztwa została już rozważona. • Graf jest reprezentowany przez listy sąsiedztwa. • Kolor danego wierzchołka v pamiętany jest w zmiennej color[v]. • Dla każdego v ∈ V , π[v] jest poprzednikiem wierzchołka v w najkrótszej drodze (w sensie liczby krawędzi) z s do v. Tablicę π odczytuje się analogicznie jak w algorytmie Dijkstry oraz Bellmana-Forda. • Dla każdego v ∈ V , δ[v] jest długością najkrótszej drogi (w sensie liczby krawędzi) z s do v. • W algorytmie BFS w kolejce Q przechowywane są szare wierzchołki. 12. PRZESZUKIWANIE GRAFU WSZERZ 99 BFS(G, s) • dla każdego wierzchołka u ∈ V \ {s} wykonaj: – podstaw color[u] := biały; – podstaw δ[u] := ∞; – podstaw π[u] := ⊘; • podstaw color[s] := szary; • podstaw δ[s] := 0; • podstaw π[s] := ⊘; • podstaw Q := [s]; • dopóki Q 6= ∅ wykonuj: – podstaw u := Head(Q); – dla każdego wierzchołka v z listy sąsiedztwa L[u] wykonaj: ∗ jeżeli color[u] = biały, to wykonaj · podstaw color[v] := szary; · podstaw δ[v] := δ[u] + 1; · podstaw π[v] := u; · EnQueue(Q, v) – DeQueue(Q); – podstaw color[u] := czarny; 12.1. Analiza czasu działania algorytmu BFS Zauważmy, że każdy wierzchołek jest wstawiany oraz usuwany z kolejki Q co najwyżej raz. Ponadto lista sąsiedztwa każdego wierzchołka jest przeglądana co najwyżej raz. Suma długości wszystkich list sąsiedztwa wynosi O(E). Stąd już łatwo wywnioskować, że czas działania procedury BFS wynosi O(|V | + |E|). 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI 100 13. Zbiory wypukłe i ich własności Łatwo jest zauważyć, że zbiory rozwiązań układu (2.2) oraz (2.3) są zbiorami wypukłymi (patrz ćwiczenia). Poniżej przedstawimy pewne własności zbiorów wypukłych. Definicja 13.1. Niepusty zbiór S ⊆ Rn nazywamy wypukłym, jeśli dla dowolnych dwóch elementów x1 , x2 ∈ S oraz dowolnego λ ∈ [0, 1] zachodzi λx1 + (1 − λ)x2 ∈ S. Przykład 13.2. (i) Płaszczyzna w R3 , S = {(x1 , x2 , x3 ) ∈ R3 ; 2x1 + x2 − 3x3 = 7} lub ogólniej hiperpłaszczyzna w Rn , S = {cT x = α}, gdzie 0 6= c ∈ Rn , α ∈ R. (ii) Półprzestrzeń w R3 , S = {(x1 , x2 , x3 ) ∈ R3 ; 2x1 + x2 − 3x3 ≤ 7} lub ogólniej półprzestrzeń w Rn , S = {cT x ≤ α}, gdzie 0 6= c ∈ Rn , α ∈ R. (iii) Zbiór S pochodzący z Przykładu 1.1 9 1 1 0 x 18 x 3 1 x1 1 1 2 . ≥ ≤ , ∈ R ; S= 0 x2 7 1 0 x2 x2 6 0 1 Uwaga 13.3. (i) Niech S1 , S2 ⊆ Rn będą zbiorami wypukłymi. Wówczas zbiory S1 + S2 = {x1 + x2 ; x1 ∈ S1 , x2 ∈ S2 }, S1 − S2 = {x1 − x2 ; x1 ∈ S1 , x2 ∈ S2 } są również zbiorami wypukłymi. T (ii) Niech St ⊆ Rn , t ∈ T będą zbiorami wypukłymi. Wówczas zbiór t∈T St jest również wypukły. Definicja 13.4. Niech ∅ = 6 S ⊆ Rn . Otoczką wypukłą zbioru S nazywamy najmniejszy zbiór wypukły w Rn zawierający S i oznaczamy go przez conv (S). 101 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI conv (S) Lemat 13.5. Dowolny zbiór ∅ = 6 S ⊆ Rn posiada otoczkę wypukłą. Dowód. Niech ∅ = 6 S ⊆ Rn , A = {T ∈ RnT ; S ⊆ T, T −wypukły}. Odn notujmy, T ∈A T = conv (S). Mamy T że A 6= ∅, bo R ∈ A. Definiujemy T S ⊆ T ∈A T , bo ∀T ∈A S ⊆ T . Ponadto T ∈A T 6= ∅, ponieważ z założenia S T 6= ∅. Z faktu, że dowolny zbiór T T∈ A jest wypukły, dostajemy że zbiór T ∈A T jest wypukły. Załóżmy, że T ∈A T nie jest najmniejszym zbiorem wypukłymTzawierającym S. Wówczas istnieje zbiór wypukły T0 zawierający S taki, że T ∈A T 6⊆ T0 . Otrzymujemy zatem sprzeczność, bo T0 ∈ A (czyli T T ∈A T ⊆ T0 ). Twierdzenie 13.6. Niech ∅ = 6 S ⊆ Rn . Wówczas x ∈ conv wtedy P(S) k i tylko wtedy, gdy istnieją x1 , x2 , . . . , xk ∈ S, λ1 , λ2 , . . . , λk ≥ 0, i=1 λi = 1 P takie, że x = ki=1 λi xi . Dowód. Dla ustalonego ∅ = 6 S ⊆ Rn oznaczmy ( C(S) = x ∈ Rn ; ∃x1 ,x2 ,...,xk ∈S ∃λ1 ,...,λk ≥0,Pk i=1 λi =1 x= k X i=1 λi xi ) . Aby wykazać inkluzję conv (S) ⊂ C(S) wystarczy pokazać, że S ⊂ C(S) oraz że zbiór C(S) jest wypukły. Oczywiście S ⊂ C(S), ponieważ jeśli x ∈ S, to x = 1x (k = 1, λ1 = 1, x1 = x). Pokażemy, że C(S) jest zbiorem wypukłym. Niech v, w ∈ C(S). Istnieją zatem v1 , v2 , . . . , vk , w1 , w2, . . . , wl ∈ S oraz λ1 , λ2 , . . . , λk , µ1 , µ2 , . . . , µl ≥ 0 102 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI Pl Pk Pl Pk takie, że v = i=1 µi = 1. i=1 λi = 1, i=1 µi wi oraz i=1 λi vi , w = Musimy wykazać, że dla dowolnego t ∈ [0, 1], tv + (1 − t)w ∈ C(S). Mamy tv + (1 − t)w = t k X λi vi + (1 − t) i=1 l X µi wi = i=1 k X tλi vi + i=1 l X (1 − t)µi wi . i=1 Jest to kombinacja liniowa wektorów v1 , v2 , . . . , vk , w1 , w2 , . . . , wl ∈ S oraz tλi ≥ 0 dla i = 1, 2, . . . , k, (1 − t)µi ≥ 0 dla i = 1, 2, . . . , l. Ponadto k X tλi + i=1 l X (1 − t)µi = t i=1 k X λi + (1 − t) l X µi = t + 1 − t = 1. i=1 i=1 ostatecznie otrzymujemy, że conv (S) ⊂ C(S). Pozostała nam jeszcze do udowodnienia inkluzja C(S) ⊂ conv (S). Niech S ⊆ T ⊆ Rn będzie dowolnymP zbiorem wypukłym. że C(S) ⊂ T . PPokażemy, k k Weźmy x ∈ C(S), zatem x = i=1 λi xi , xi ∈ S, i=1 λi = 1. Dowód faktu, że x ∈ T przeprowadzimy indukcyjnie ze względu na k. Jeśli k = 1, to x = x1 ∈ S ⊆ T . Czyli x ∈ T . Załóżmy, że x ∈ T dla k − 1. Wówczas x= k X i=1 λi xi = k−1 X λi xi + λk xk = i=1 i=1 (1 − λk ) k−1 X k−1 X i=1 (1 − λk ) λi xi + λk xk = 1 − λk λi xi + λk xk . 1 − λk Możemy założyć, Pk−1że λλi k 6= 1 (w przeciwnym razie k = 1). Zauważmy, że element x′ = i=1 x należy do T , gdyż 1−λk i k−1 X i=1 Pk−1 λi 1 − λk λi = i=1 = =1 1 − λk 1 − λk 1 − λk oraz xi ∈ S. Zatem x = (1 − λk )x′ + λk xk , gdzie x′ ∈ T, xk ∈ S ⊆ T należy do T , ponieważ T jest zbiorem wypukłym. Z dowolności T dostajemy C(S) ⊂ conv (S). Ostatecznie otrzymujemy równość C(S) = conv (S). Definicja 13.7. Otoczkę wypukłą skończonego zbioru {x1 , x2 , . . . , xk } ⊂ R nazywamy wielościanem. Jeśli ponadto wektory x2 −x1 , x3 −x1 , . . . , xk − x1 są liniowo niezależne, to wielościan nazywamy sympleksem. n 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI wielościan 103 sympleks Twierdzenie 13.8 (Carathe’odory). Niech ∅ = 6 S ⊆ Rn będzie dowolnym zbiorem. Wówczas x ∈ conv (S) wtedy i tylko wtedy, gdy istnieją x1 , x2 , . . ., xn+1 ∈ S takie, że x ∈ conv ({x1 , x2 , . . . , xn+1 }). Dowód. Oczywiście jeżeli istnieją elementy x1 , x2 , . . . , xn+1 ∈ S takie, że x ∈ conv ({x1 , x2 , . . . , xn+1 }),to x ∈ conv Pk(S). Niech x ∈ conv (S). Wówczas x = i=1 λi xi , przy czym x1 , x2 , . . . , xk ∈ P S, λ1 , λ2 , . . . , λk ≥ 0, ki=1 λi = 1. Jeżeli k ≤ n+1, to odpowiednia implikacja jest prawdziwa z Twierdzenia 13.6. Jeśli k > n + 1, to wektorów x2 − x1 , x3 − n x1 , . . . , xk − x1 jest co najmniej n + 1, zatem są one liniowo Pk zależne (w R ). Dlatego istnieją liczby µi ∈ R, i = 2, 3, . . . , k takie, że i=2 µi (xi − x1 ) = 0 P P oraz ki=2 µ2i 6= 0. Niech µ1 = − ki=2 µi . Wówczas k X µi xi = µ1 x1 + i=1 k X µi xi = − i=2 k X µi x1 + k X µi xi = µi (xi − x1 ) = 0. i=2 i=2 i=2 k X P P Ponadto ki=1 µi = 0 oraz ki=1 µ2i 6= 0. Rozpatrzmy zbiór A = { µλii ; µi > 0}. Zauważmy, że A 6= ∅ (istnieje i ∈ {1, 2, . . . , k}, dla którego µi > 0, ponieważ jeśli dla każdego i ≥ 2, µi ≤ 0, to µ1 > 0). Niech α = min{ λi λs ; µi > 0} = >0 µi µs dla pewnego s ∈ {1, 2, . . . , k}. Mamy x= k X i=1 λi xi + 0 = k X i=1 λi xi − α k X i=1 µi xi = k X (λi − αµi )xi . i=1 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI 104 Jeśli µi ≤ 0, to λi − αµi > 0. Jeśli µi > 0, to λµii ≥ µλss = α. Czyli λi − αµi ≥ 0. Ponadto k k k X X X (λi − αµi) = λi − α µi = 1 − α0 = 1. i=1 i=1 i=1 = 0. Wobec powyższych zależności Równocześnie λs − αµs = λs − Pk x = i=1,i6=s (λi − αµi )xi , czyli x ∈ conv ({(xi )i , 1 ≤ i ≤ k, i 6= s}). Zatem x posiada przedstawienie w postaci wypukłej kombinacji k − 1 elementów ze zbioru S. Jeżeli k − 1 > n + 1, to postępujemy analogicznie. Proces ten kontynuujemy, dopóty dopóki x nie okaże się wypukłą kombinacją n + 1 elementów ze zbioru S. λs µ µs s 13.1. Topologiczne własności zbiorów wypukłych Przypomnijmy kilka podstawowych pojęć związanych z przestrzeniami metrycznymi. Przestrzenią metryczną nazywamy parę (X, d) złożoną ze zbioru X oraz funkcji d (zwanej metryką), która każdej parze elementów x, y ∈ X przyporządkowuje liczbę rzeczywistą d(x, y) w taki sposób, że spełnione są poniższe warunki: 1. d(x, y) = 0 wtedy i tylko wtedy, gdy x = y, 2. d(x, y) = d(y, x) dla każdych x, y ∈ X, 3. d(x, z) ≤ d(x, y) + d(y, z) dla każdych x, y, z ∈ X. Niech x ∈ X, 0 < r ∈ R, kulą otwartą o środku w x i promieniu r nazywamy zbiór K(x, r) = {y ∈ X; d(x, y) < r}. Niech S będzie dowolnym podzbiorem przestrzeni metrycznej (X, d). Mówimy, że punkt x ∈ S należy do domknięcia S zbioru S, jeśli dla dowolnej liczby rzeczywistej r > 0, S ∩ K(x, r) 6= ∅. Jeżeli S = S, to zbiór S nazywamy domkniętym. Punkt x ∈ S należy do wnętrza Int S zbioru S, jeśli istnieje liczba rzeczywista r > 0 taka, że K(x, r) ⊂ S. Jeżeli S = Int S, to zbiór S nazywamy otwartym. Odnotujmy, że rozważania nasze dotyczą podzbiorów przestrzeni Rn dla dowolnego n ≥ 1. Okazuje się, że para (Rn , d) jest przestrzenią metryczną z metryką d : Rn × Rn → R indukowaną przez normę euklidesową: v u n uX d(x, y) = ||x − y|| = t (xi − yi )2 , i=1 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI 105 gdzie x = (x1 , x2 , . . . , xn ), y = (y1 , y2 , . . . , yn ) ∈ Rn . Twierdzenie 13.9. Niech S ⊆ Rn będzie zbiorem wypukłym takim, że Int S 6= ∅. Jeśli x1 ∈ S, x2 ∈ Int S, to dla dowolnego λ ∈ (0, 1) zachodzi λx1 + (1 − λ)x2 ∈ Int S. Dowód. Niech S, x1 , x2 będą jak wyżej. Ustalmy λ ∈ (0, 1) i niech y = λx1 +(1−λ)x2 . Aby pokazać, że y ∈ Int S wystarczy znaleźć otoczenie punktu y zawarte w S. Pokażemy, że K(y, (1 − λ)ε) ⊂ S, gdzie ε > 0 jest taką liczbą, dla której K(x2 , ε) ⊂ S. . PonieWeźmy z ∈ K(y, (1 − λ)ε) i rozważmy zbiór K x1 , (1−λ)ε−||z−y|| λ waż z ∈ K(y, (1 − λ)ε), to ||z − y|| < (1 − λ)ε, czyli (1 − λ)ε − ||z − y|| > 0. (1−λ)ε−||z−y|| Ponieważ x1 ∈ S, to przekrój K x1 , ∩ S 6= ∅. Weźmy z1 naλ 1 . Pokażemy, że z2 ∈ S. leżący do powyższego przekroju i niech z2 = z−λz 1−λ Mamy z − λz1 z − λz1 − (1 − λ)x2 = ||z2 − x2 || = − x2 = 1−λ 1−λ z − λz1 + λx1 − λx1 − (1 − λ)x2 z − λz1 + λx1 − y = = 1−λ 1−λ 1 1 ||z − y + λ(x1 − z1 )|| ≤ (||z − y|| + λ||x1 − z1 ||) < 1−λ 1−λ (1 − λ)ε − ||z − y|| 1 ||z − y|| + λ = ε. 1−λ λ Zatem z2 ∈ K(x2 , ε) ⊂ S. Ponadto mamy λz1 + (1 − λ)z2 = λz1 + (1 − λ) z − λz1 = z. 1−λ Wiemy, że z1 , z2 ∈ S oraz że S jest zbiorem wypukłym, wobec tego z ∈ S. Zatem dowolny element z ∈ K(y, (1 − λ)ε) należy do zbioru S, czyli ostatecznie y ∈ Int S. Wniosek 13.10. Niech S ⊆ Rn będzie zbiorem wypukłym takim, że Int S 6= ∅. Wówczas Int S jest zbiorem wypukłym. 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI 106 Dowód. Niech x1 , x2 ∈ Int S. Wówczas x1 ∈ S (bo Int S ⊂ S) oraz x2 ∈ Int S, zatem na mocy Twierdzenia 13.9 Int S jest zbiorem wypukłym. Wniosek 13.11. Niech S ⊆ Rn będzie zbiorem wypukłym takim, że Int S 6= ∅. Wówczas S jest zbiorem wypukłym. Dowód. Weźmy x1 , x2 ∈ S oraz ustalmy z ∈ Int S. Chcemy pokazać, że dla dowolnego µ ∈ (0, 1), µx1 + (1 − µ)x2 ∈ S. Z Twierdzenia 13.9 wiemy, że dla dowolnego λ ∈ (0, 1), λx2 + (1 − λ)z ∈ Int S. Podobnie µx1 + (1 − µ)(λx2 + (1 − λ)z) ∈ Int S ⊂ S. Ustalmy ciąg (λn ) taki, że limn→∞ λn = 1, λn ∈ (0, 1), n ≥ 1. Dla dowolnego n ≥ 1 mamy yn = µx1 + (1 − µ)(λn x2 + (1 − λn )z) ∈ Int S. Zatem y = limn→∞ yn ∈ Int S ⊂ S, ale y = µx1 + (1 − µ)x2 ∈ S, czyli S jest zbiorem wypukłym. Wniosek 13.12. Niech S ⊆ Rn będzie zbiorem wypukłym takim, że Int S 6= ∅. Wówczas S = Int S. Dowód. Zawieranie Int S ⊂ S jest prawdziwe dla dowolnego zbioru S. Niech x ∈ S i wybierzmy y ∈ Int S (z założenia Int S 6= ∅). Wówczas na mocy Twierdzenia 13.9 λx + (1 − λ)y ∈ Int S dla dowolnego λ ∈ (0, 1). Ustalmy ciąg (λn ) taki, że limn→∞ λn = 1, λn ∈ (0, 1), n ≥ 1. Oznaczmy przez xn = λn x + (1 − λn )y. Wówczas xn ∈ Int S oraz x = limn→∞ xn ∈ Int S, czyli S ⊂ Int S. Wniosek 13.13. Niech S ⊆ Rn będzie zbiorem wypukłym takim, że Int S 6= ∅. Wówczas Int S = Int S. Dowód. Oczywiście Int S ⊂ Int S, pokażemy natomiast, że prawdziwa jest również inkluzja odwrotna. Niech x ∈ Int S. Istnieje wówczas ε > 0 taki, że K(x, ε) ⊂ S. Ustalmy ε y ∈ Int S, y 6= x. Rozważmy z = (δ + 1)x − δy, gdzie δ = 2||x−y|| . Wówczas ε ||z − x|| = ||(δ + 1)x − δy − x|| = ||δx − δy|| = δ||x − y|| = . 2 δy z + δ+1 i jeśli Zatem z ∈ K(x, ε) ⊂ S, czyli z ∈ S. Zauważmy, że x = δ+1 δ 1 przyjmiemy oznaczenie λ = δ+1 , to δ+1 = 1 − λ oraz λ ∈ (0, 1). Ponieważ z ∈ S oraz y ∈ Int S, to z Twierdzenia 13.9 otrzymujemy, że x ∈ Int S. 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI 107 Twierdzenie 13.14. Niech S ⊆ Rn będzie zbiorem wypukłym takim, że S = S oraz niech y 6∈ S. Wówczas istnieje dokładnie jeden punkt x ∈ S taki, że odległość y od x jest minimalna, tzn. ||y − x|| = minx∈S {||y − x||}. Ponadto punkt x jest jedynym punktem zbioru S spełniającym nierówność: (x − x)T (x − y) ≥ 0 dla wszystkich x ∈ S. Dowód. Niech γ = inf x∈S {||y − x||}. Ponieważ zbiór S jest domknięty, to γ > 0. Rzeczywiście, gdyby γ = 0, to istniałby ciąg (xn ) ⊂ S taki, że limn→∞ xn = y, czyli y ∈ S i w konsekwencji y ∈ S, co daje sprzeczność. Wobec tego istnieje ciąg (xn ) ⊂ S taki, że limn→∞ ||xn − y|| = γ. Pokażemy, że ciąg (xn ) jest zbieżny. Niech k, n ∈ N. Mamy ||xk −xn ||2 = ||xk −y−(xn −y)||2 = 2||xk −y||2 +2||y−xn ||2 −||xk +xn −2y||2 = 2 xk + xn 2||xk − y|| + 2||xn − y|| − 4 − y . 2 2 n n ∈ S. Z określenia γ mamy xk +x − y ≥ γ 2 . Ponieważ xk , xn ∈ S, to xk +x 2 2 Stąd ||xk − xn ||2 ≤ 2||xk − y||2 + 2||xn − y||2 − 4γ 2 . 2 2 Wiemy, że limk→∞ ||xk − y|| = γ, czyli limk→∞ ||xk − y||2 = γ 2 . Istnieje zatem N takie, że dla m ≥ N ε ||xm − y||2 < γ 2 + . 4 Stąd dla k, n ≥ N ||xk − xn ||2 < 2γ 2 + ε ε + 2γ 2 + − 4γ 2 = ε. 2 2 Zatem (xn ) jest ciągiem Cauchy’ego. Z zupełności Rn dostajemy, że ciąg (xn ) jest zbieżny. Niech x = limn→∞ xn , odnotujmy że x ∈ S, ponieważ S = S. Mamy ||y − x|| = ||y − lim xn || = lim ||y − xn || = γ. n→∞ n→∞ Aby pokazać jedyność załóżmy, że istnieje element x′ ∈ S taki, że ||y − x′ || = ′ γ. Pokażemy, iż x′ = x. Ponieważ zbiór S jest wypukły, to x+x ∈ S. Mamy 2 ′ ′ y − x + x = y − x + y − x ≤ 1 ||y − x|| + 1 ||y − x′ || = γ. 2 2 2 2 2 2 2 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI Z określenia γ wynika, że y − x+x′ 2 108 = γ, ale 2 x + x′ + ||x′ − x||2 = 2||y − x||2 + 2||y − x′ ||2 . 4 y − 2 Czyli 4γ 2 + ||x′ − x||2 = 2γ 2 + 2γ 2 , a zatem ||x′ − x|| = 0 i x′ = x. Pokażemy teraz, że (x − x)T (x − y) ≥ 0 dla dowolnego x ∈ S. Weźmy x ∈ S, wówczas ||y −x||2 ≤ ||y −x||2 (x jest najbliżej y). Zbiór S jest wypukły oraz x, x ∈ S zatem dla λ ∈ [0, 1], λx + (1 − λ)x ∈ S. Mamy ponadto ||y − x||2 ≤ ||y − x − λ(x − x)||2 = ||y − x||2 + λ2 ||x − x||2 + 2λ(y − x)T (x − x). Stąd λ2 ||x − x||2 + 2λ(x − x)T (x − y) ≥ 0 i dla λ > 0, λ||x − x||2 + 2(x − x)T (x − y) ≥ 0. Gdy λ zmierza do zera otrzymujemy (x − x)T (x − y) ≥ 0. Pokażemy teraz, że x jest jedynym punktem spełniającym powyższą nierówność. Niech x′ ∈ S oraz niech dla dowolnego x ∈ S zachodzi (x−x′ )T (x′ − y) ≥ 0. Wówczas ||y − x||2 = ||y − x′ + x′ − x||2 = ||y − x′ ||2 + ||x′ − x||2 + 2(y − x′ )T (x′ − x). Ponieważ ||x′ − x||2 ≥ 0 oraz (x − x′ )T (x′ − y) ≥ 0, to ||y − x||2 ≥ ||y − x′ ||2 dla dowolnego x ∈ S. Zatem ostatecznie x′ = x, bo tylko x posiada tę własność. Przypomnijmy, że zbiór H = {x ∈ Rn ; cT x = α} ⊂ Rn , gdzie 0 6= c ∈ Rn , α ∈ R nazywamy hiperpłaszczyzną w Rn . Wektor c nazywamy wektorem normalnym hiperpłaszczyzny H. Ponadto hiperpłaszczyzna wyznacza dwie półprzestrzenie: H + = {x ∈ Rn ; cT x ≥ α} oraz H − = {x ∈ Rn ; cT x ≤ α}. Odnotujmy, że H + ∩ H − = H. Uwaga 13.15. Obszar dopuszczalny F = A ∈ Mm×n (R), b ∈ R LP-modelu max{cT x; Ax a11 a21 m + n półprzestrzeni. Istotnie niech A = .. . am1 {x ∈ Rn ; Ax ≤ b, x ≥ 0}, ≤ b, x ≥ 0} jest przekrojem a12 . . . a1n b1 b2 a22 . . . a2n .. .. , b = .. , .. . . . . am2 . . . amn bm 109 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI x1 x2 x = .. . Dowolny element x ∈ F spełnia następujące ograniczenia: . xn a11 a21 .. . a12 a22 .. . am1 am2 b1 x1 . . . a1n . . . a2n x2 b2 .. .. ≤ .. , −x1 ≤ 0, −x2 ≤ 0, . . . , −xn ≤ 0. .. . . . . bm xn . . . amn Definiujemy Hi− = {x ∈ Rn ; ai1 x1 + · · · + ain xn ≤ bi }, dla i = 1, 2, . . . , m Tm+n − n oraz Hm+j = {x ∈ R ; −xj ≤ 0}, dla j = 1, 2, . . . , n. Czyli F = i=1 Hi− , a11 am1 −1 0 a12 am2 0 0 natomiast wektorami normalnymi są: .. , . . ., .. , .. , . . ., .. . . . . . a1n amn 0 −1 Przykład 13.16. Rozważmy przykład 1.1 z dodatkowym ograniczeniem x1 + x2 ≥ 5 (powiedzmy, że nasza firma zobowiązała się dostarczyć co najmniej 500 000 pudeł zapałek długich lub krótkich). Wówczas półprzestrzenie wyznaczone przez ograniczenia są następujące: x1 − 2 H1 = ∈ R ; x1 + x2 ≤ 9 , x2 x1 − 2 H2 = ∈ R ; 3x1 + x2 ≤ 18 , x2 x1 − 2 H3 = ∈ R ; x1 ≤ 7 , x2 x1 − 2 H4 = ∈ R ; x2 ≤ 6 , x2 x1 2 − ∈ R ; −x1 − x2 ≤ −5 , H5 = x2 x1 2 − ∈ R ; −x1 ≤ 0 , H6 = x2 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI H7− 110 x1 2 = ∈ R ; −x2 ≤ 0 , x2 1 3 1 0 czyli F = natomiast wektorami normalnymi są: , , , , 1 1 0 1 −1 −1 0 , , . −1 0 −1 T7 − i=1 Hi , Definicja 13.17. Hiperpłaszczyzna H = {x ∈ Rn ; cT x = α} ⊂ Rn , gdzie 0 6= c ∈ Rn , α ∈ R rozdziela zbiory S1 , S2 ⊆ Rn , jeśli dla dowolnych x ∈ S1 , y ∈ S2 , cT x ≥ α i cT y ≤ α. Hiperpłaszczyzna H właściwie rozdziela zbiory S1 , S2 ⊆ Rn , jeśli H rozdziela S1 i S2 oraz S1 ∪S2 6⊆ H. Hiperpłaszczyzna H ostro rozdziela zbiory S1 , S2 ⊆ Rn , jeśli dla dowolnych x ∈ S1 , y ∈ S2 , cT x > α i cT y < α. Hiperpłaszczyzna H silnie rozdziela zbiory S1 , S2 ⊆ Rn , jeśli istnieje ε > 0 takie, że dla dowolnych x ∈ S1 , y ∈ S2 , cT x ≥ α + ε i cT y ≤ α. Twierdzenie 13.18. Niech S ⊆ Rn będzie wypukłym i domkniętym zbiorem oraz niech y 6∈ S. Wówczas istnieje wektor c ∈ Rn oraz α ∈ R takie, że cT y > α oraz cT x ≤ α dla każdego x ∈ S. Dowód. Z twierdzenia 13.14 wiemy, że istnieje w zbiorze S taki element x, że ||y −x|| = minx∈S ||y −x|| oraz dla dowolnego x ∈ S, (x−x)T (y −x) ≤ 0. Stąd xT (y − x) ≤ xT (y − x), ||y − x||2 = (y − x)T (y − x) = y T (y − x) − xT (y − x) ≤ y T (y − x) − xT (y − x) = (y − x)T (y − x) = cT (y − x), gdzie c = y − x 6= 0. Mamy cT y ≥ cT x + ||y − x||2 dla dowolnego x ∈ S. Niech α = sup{cT x; x ∈ S}, wówczas cT y ≥ α + ||y − x||2 > α oraz cT x ≤ α z definicji α. Wniosek 13.19. Niech S ⊆ Rn będzie wypukłym i domkniętym zbiorem. Wówczas przekrój wszystkich półprzestrzeni zawierających zbiór S jest równy S. Twierdzenie 13.20 (Farkas). Niech A ∈ Mm×n (R), c ∈ Rn . Wówczas dokładnie jeden z poniższych układów nierówności posiada rozwiązanie: (i) Ax ≤ 0, cT x > 0, x ∈ Rn , (ii) AT y = c, y ≥ 0, y ∈ Rm . 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI 111 Dowód. Załóżmy, że układ (ii) posiada rozwiązanie tzn. istnieje y ≥ 0, y ∈ Rm takie, że AT y = c. Załóżmy, że Ax ≤ 0 dla pewnego x ∈ Rn . Wówczas cT x = (AT y)T x = y T Ax ≤ 0, ponieważ Ax ≤ 0, y ≥ 0, sprzeczność. Załóżmy teraz, że układ (ii) nie posiada rozwiązania. Niech S = {x ∈ Rn ; ∃y≥0 x = AT y}. Zbiór S jest domknięty oraz wypukły, ponadto z założenia c 6∈ S. Z twierdzenia 13.18 wiemy, że istnieje wektor p ∈ Rn oraz α ∈ R takie, że pT c > α i pT x ≤ α dla każdego x ∈ S. Ponieważ 0 ∈ S, to α ≥ 0. Zatem pT c > 0. Ponadto mamy α ≥ pT x = pT AT y = y T Ap dla dowolnego y ≥ 0. Rozważmy yi = λei , λ > 0. Wtedy λ(Ap)i ≤ α, a więc (Ap)i ≤ αλ . Z dowolności λ, Ap ≤ 0, czyli otrzymaliśmy, że p spełnia układ (i). Wniosek 13.21. Niech A ∈ Mm×n (R), c ∈ Rn . Wówczas dokładnie jeden z poniższych układów nierówności posiada rozwiązanie: (i) Ax ≤ 0, x ≥ 0, cT x > 0, x ∈ Rn , (ii) AT y ≥ c, y ≥ 0, y ∈ Rm . Dowód. Niech A0 = [AT , −In ]T , wtedy A0 x = [Ax, −x]T . Jeśli A0 x ≤ 0, to znaczy że Ax ≤ 0 oraz x ≥ 0. Jeżeli istnieje y ∈ Rn+m taki, że AT0 y = c oraz y ≥ 0, to AT0 y = [AT , −In ]y = AT y ′ − y ′′ = c. Zatem AT y ′ ≥ c, y ′ ≥ 0, y ′ ∈ Rm . Wniosek 13.22. Niech A ∈ Mm×n (R), B ∈ Ml×n (R), c ∈ Rn . Wówczas dokładnie jeden z poniższych układów nierówności posiada rozwiązanie: (i) Ax ≤ 0, Bx = 0, cT x > 0, x ∈ Rn , (ii) AT y + B T z = c, y ≥ 0, y ∈ Rm , z ∈ Rl . Dowód. Niech A0 = [AT , B T , −B T ]T , wtedy A0 x = [Ax, Bx, −Bx]T . Zatem aby A0 x ≤ 0, to Ax ≤ 0, Bx = 0. Jeżeli y0 = (y, z ′ , z ′′ ), to AT0 y0 = c, AT y + B T (z ′ − z ′′ ) = c. Definicja 13.23. Niech S ⊆ Rn będzie zbiorem wypukłym, x ∈ δS. Hiperpłaszczyzna H = {x ∈ Rn ; cT (x − x) = 0} nazywa się styczną do S w punkcie x, jeśli S ⊆ H + lub S ⊆ H − . Jeżeli ponadto S 6⊆ H, to H nazywa się hiperpłaszczyzną właściwą styczną do S w punkcie x. 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI 112 Twierdzenie 13.24. Niech S ⊆ Rn będzie zbiorem wypukłym. Wówczas dla każdego x ∈ δS istnieje hiperpłaszczyzna styczna do S w punkcie x. Dowód. Ponieważ x ∈ δS, to istnieje ciąg (yk ) w Rn , k ∈ N taki, że limk→∞ yk = x, ale dla każdego k ∈ N, y 6∈ S. Z twierdzenia 13.18 wiemy, że gdy S jest wypukły i domknięty oraz y 6∈ S, to istnieje wektor 0 6= c ∈ Rn oraz α ∈ R takie, że cT y > α ≥ cT x dla każdego x ∈ S. Istnieją zatem elementy ck ∈ Rn , ck 6= 0 takie, że cTk yk > cTk x dla dowolnego x ∈ S. Weźmy c′k = ||cckk || , wówczas dla dowolnego x ∈ S, c′ Tk yk > c′ Tk x. Ponadto ciąg (c′k ) jest ograniczony, więc można wybrać podciąg zbieżny (c′lk ). Niech limn→∞ c′lk = c. Dla dowolnego x ∈ S mamy wtedy, że cT x ≥ cT x. Stąd dla każdego x ∈ S, cT (x − x) ≤ 0. Zatem S ⊆ H − . Wniosek 13.25. Niech S ⊆ Rn będzie zbiorem wypukłym. Dla dowolnego x 6∈ S istnieje niezerowy wektor c ∈ Rn taki, że cT (x − x) ≤ 0 dla dowolnego x ∈ S. Dowód. Jeżeli x ∈ S, to x ∈ δS i na mocy twierdzenia 13.24 otrzymujemy tezę, natomiast jeśli x 6∈ S, to teza wynika z twierdzenia 13.18. Twierdzenie 13.26 (o rozdzielaniu zbiorów wypukłych). Niech S1 , S2 ⊆ R będą zbiorami wypukłymi takimi, że S1 ∩ S2 = ∅. Wówczas istnieje wektor c ∈ Rn , c 6= 0 taki, że n inf{cT x; x ∈ S1 } ≥ sup{cT x; x ∈ S2 }. Dowód. Niech S = S2 − S1 = {x2 − x1 ; x1 ∈ S1 , x2 ∈ S2 }. Wiemy, że S jest zbiorem wypukłym oraz że 0 6∈ S2 − S1 , co wynika z założenia 13. ZBIORY WYPUKŁE I ICH WŁASNOŚCI 113 S1 ∩ S2 = ∅. Z twierdzenia 13.18 istnieje c ∈ Rn taki, że dla dowolnego x ∈ S, cT x ≤ 0. Zatem dla dowolnych x1 ∈ S1 , x2 ∈ S2 , cT (x2 − x1 ) ≤ 0, to znaczy cT x2 ≤ cT x1 . Wniosek 13.27. Teza twierdzenia 13.26 pozostaje prawdziwa przy poniższych założeniach: (i) Int S1 6= ∅, S2 6= ∅, Int S1 ∩ S2 = ∅ (ii) S1 6= ∅, Int S2 6= ∅, Int S1 ∩ Int S2 = ∅. Twierdzenie 13.28 (o silnym rozdzielaniu zbiorów wypukłych). Niech S1 , S2 ⊆ Rn będą zbiorami wypukłymi i domkniętymi takimi, że S1 ∩ S2 = ∅. Ponadto niech S1 będzie zbiorem ograniczonym. Wówczas istnieją: wektor c ∈ Rn , c 6= 0 oraz skalar ε > 0 takie, że inf{cT x; x ∈ S1 } ≥ ε + sup{cT x; x ∈ S2 }. Dowód. Niech S = S1 − S2 = {x1 − x2 ; x1 ∈ S1 , x2 ∈ S2 }, wówczas S jest zbiorem wypukłym oraz 0 6∈ S. Pokażemy, że zbiór S jest domknięty. Niech {xk } będzie ciągiem z S, zbieżnym do x. Z określenia zbioru S wiemy, że każdy element ciągu można przedstawić w postaci xk = yk − zk , k ∈ N, yk ∈ S1 , zk ∈ S2 . Ponieważ S1 jest zbiorem zwartym (jako zbiór domknięty i ograniczony w Rn ), to istnieje podciąg {ykl } zbieżny do y oraz y ∈ S1 . Ponieważ limk→∞ (yk − zk ) = x, limk→∞ ykl = y, limk→∞ zk = z, przy czym z2 ∈ S2 , bo S2 jest domknięty. Zatem x = y − z, y ∈ S1 , z ∈ S2 czyli x ∈ S. Wobec tego zbiór S jest domknięty. Z twierdzenia 13.18 wiemy, że istnieją 0 6= c ∈ Rn , ε ∈ R takie, że cT x ≥ ε dla dowolnego x ∈ S oraz cT 0 < ε. Zatem ε > 0. Z określenia zbioru S (0 6∈ S) otrzymujemy, że cT x1 ≥ ε + cT x2 dla dowolnych x1 ∈ S1 , x2 ∈ S2 . Twierdzenie 13.29 (Jordan). Niech A ∈ Mm×n (R). Wówczas dokładnie jeden z poniższych układów nierówności posiada rozwiązanie: (i) Ax < 0, x ∈ Rn , (ii) AT c = 0, c ∈ Rm , c > 0. Dowód. Jeśli x jest rozwiązaniem układu (i), natomiast c rozwiązaniem układu (ii), to Ax < 0, AT c = 0, c > 0 i mamy xT AT c = xT 0 = 0, ale xT AT c = cT Ax < 0, sprzeczność. Załóżmy, że układ (i) nie posiada rozwiązania. Rozważmy następujące zbiory: S1 = {z ∈ Rm ; ∃x∈Rn z = Ax} oraz S2 = {z ∈ Rm ; z < 0}. Zauważmy, że zbiory S1 i S2 są wypukłe. Ponadto S1 ∩ S2 = ∅. Rzeczywiście, jeśli 14. PROBLEM DUALNOŚCI W PROGRAMOWANIU LINIOWYM 114 z ∈ S1 ∩ S2 , to ∃x∈Rn Ax = z < 0 co ma miejsce wtedy i tylko wtedy, gdy wektor x jest rozwiązaniem (i), sprzeczność. Z twierdzenia 13.26 wiemy, że istnieje wektor c ∈ Rm , c 6= 0 taki, że cT Ax ≥ cT z dla z < 0, x ∈ Rn . Zatem dla x = 0, cT z ≤ 0, gdzie z < 0. Stąd c ≥ 0. Z faktu, że każda współrzędna wektora z może być dowolnie mała mamy, że cT Ax ≥ 0. Niech x = −AT c, wówczas 0 ≤ cT A(−AT c) = −(AT c)T (AT c) = −||AT c||2 ≤ 0. Czyli ||AT c|| = 0, co daje równość AT c = 0. Otrzymaliśmy zatem, że wektor c jest rozwiązaniem układu (ii). 14. Problem dualności w programowaniu liniowym W skrócie problem programowania liniowego (PL-problem), to wyznaczanie maksimum lub minimum funkcji liniowej na wielościanie wypukłym. Problem ten może być sformułowany na jeden z poniższych równoważnych sposobów: (i) max{cx; Ax ≤ b}, (ii) max{cx; x ≥ 0, Ax ≤ b}, (iii) max{cx; x ≥ 0, Ax = b}, (iv) min{cx; Ax ≥ b}, (v) min{cx; x ≥ 0, Ax ≥ b}, (vi) min{cx; x ≥ 0, Ax = b}, gdzie A jest macierzą, b wektorem kolumnowym, c wektorem wierszowym. Zauważmy, redukuje się do (i), ponieważ x ≥ 0, Ax ≤ b jest równo że (ii) −I 0 ważne x ≤ ; (iii) redukuje się do (ii) poprzez zamianę Ax = b A b z Ax ≤ b, −Ax ≤ −b; (i) redukuje się do (iii) poprzez zamianę Ax ≤ b z x′ , x′′ , x′′′ ≥ 0, Ax′ − Ax′′ + x′′′ = b. Podobnie (iv), (v), (vi) są równoważne. Ponadto (iii) i (vi) są równoważne poprzez zamianę c z −c. Prawdziwy jest następujący lemat. 14. PROBLEM DUALNOŚCI W PROGRAMOWANIU LINIOWYM 115 Lemat 14.1 (Farkasa). Istnieje wektor x taki, że Ax ≤ b wtedy i tylko wtedy, gdy dla dowolnego wektora wierszowego y ≥ 0 takiego, że yA = 0 zachodzi nierówność yb ≥ 0. Twierdzenie 14.2 (o dualności programowania liniowego). Niech A będzie macierzą, b wektorem kolumnowym oraz c wektorem wierszowym. Wówczas (∗) max{cx; Ax ≤ b} = min{yb; y ≥ 0, yA = c} jeśli zbiory {Ax ≤ b} i {y ≥ 0, yA = c} są niepuste. Dowód. Zauważmy, że jeśli Ax ≤ b oraz y ≥ 0, yA = c, to cx = yAx ≤ yb. Zatem jeżeli wartości maksimum i minimum są skończone, to mamy max{cx; Ax ≤ b} ≤ min{yb; y ≥ 0, yA = c}. Wobec tego wystarczy pokazać, że istnieją x i y takie, że Ax ≤ b, y ≥ 0, yA = c, cx ≥ yb, to znaczy, że: b A 0 −c bT 0 T T x c . 0 A ≤ (∗∗) istnieją x, y takie, że T T y T −c 0 −A 0 0 −I Korzystając z lematu 14.1 otrzymujemy, że zdanie (∗∗) jest równoważne poniższemu stwierdzeniu (∗∗∗) jeśli u, λ, v, w, z ≥ 0 przy czym uA−λc = 0 i λbT +vAT −wAT −z = 0, to ub + vcT − wcT ≥ 0. W celu pokazania (∗ ∗ ∗) załóżmy, że u, λ, v, w spełniają warunek (∗ ∗ ∗). Jeśli λ > 0, to ub = λ−1 λbT uT = λ−1 (w − v)AT uT + λ−1 zuT = λ−1 λ(w − v)cT + λ−1 zuT ≥ (w − v)cT , gdyż λ−1 zuT ≥ 0. Jeżeli λ = 0, to niech Ax0 ≤ b oraz y0 ≥ 0, y0 A = c (ponieważ zbiory {Ax ≤ b}, {y ≥ 0, yA = c} są niepuste, to x0 i y0 istnieją). Wówczas ub ≥ uAx0 = λcx0 = 0 = (w − v)AT y0T + zy0T ≥ (w − v)cT , gdyż zy0T ≥ 0. Przykład 14.3. Równoważne sformułowania twierdzenia o dualności programowania liniowego. (1) max{cx; x ≥ 0, Ax ≤ b} = min{yb; y ≥ 0, yA ≥ c}, 14. PROBLEM DUALNOŚCI W PROGRAMOWANIU LINIOWYM 116 max{cx; x ≥ 0, Ax = b} = min{yb; yA ≥ c}. (2) Aby uzasadnić prawdziwość powyższych sformułowań wystarczywymienić w −I −I oraz A . zależności (∗) macierz A, odpowiednio na macierze A −A Uwaga 14.4. Niech A będzie macierzą, b wektorem kolumnowym, a c wektorem wierszowym. Rozważmy następującą równość (∗) max{cx; Ax ≤ b} = min{yb; y ≥ 0, yA = c}. Załóżmy ponadto, że obie wartości optymalne są skończone. Niech x0 , y0 będą osiąganymi rozwiązaniami (tzn. Ax0 ≤ b oraz y0 ≥ 0, y0 A = c). Wówczas następujące warunki są równoważne (i) x0 oraz y0 są optymalnymi rozwiązaniami dla (∗), (ii) cx0 = y0 b, (iii) jeśli wektor y0 jest dodatni, to odpowiadająca mu nierówność w układzie Ax ≤ b jest spełniona przez x0 ze znakiem równości (tzn. y0 (b − Ax0 ) = 0). Zauważmy, że równoważność warunków (i) oraz (ii) wynika bezpośrednio z twierdzenia 14.2, natomiast równoważność warunków (ii) oraz (iii) wynika z faktu, że cx0 = yo Ax0 ≤ y0 b. Zatem y0 Ax0 = y0 b wtedy i tylko wtedy, gdy spełniony jest warunek (iii). 14.1. Geometryczna interpretacja dualności programowania liniowego Rozważmy PL-problem (∗) max{cx; Ax ≤ b}. Niech P = {x ∈ Rn ; Ax ≤ b} będzie wielościanem wypukłym. Poszukując maksimum (∗) możemy przesuwać hiperpłaszczyznę cx = δ prostopadle do wektora c tak długo, aż otrzymamy punkt wspólny z wielościanem P . Załóżmy, że maksimum jest skończone. Niech jego wartość wynosi δ i niech jest ono osiągane przez element w ∈ P . Niech ponadto a1 x ≤ β1 , a2 x ≤ β2 , . . . , ak x ≤ βk będą nierównościami pochodzącymi z układu Ax ≤ b, które spełnia element w ze znakami równości. Interpretacja geometryczna pozwala zobaczyć, że cx = δ jest nieujemną kombinacją liniową równości a1 x = β1 , a2 x = β2 , . . ., ak x = βk . Powiedzmy, że 14. PROBLEM DUALNOŚCI W PROGRAMOWANIU LINIOWYM 117 c = λ1 a1 + λ2 a2 + · · · + λk ak oraz δ = λ1 β1 + λ2 β2 + · · · + λk βk , gdzie λ1 , λ2 , . . . , λk ≥ 0. Wobec tego mamy max{cx; Ax ≤ b} = δ = λ1 β1 + λ2 β2 + · · · + λk βk ≥ min{yb; y ≥ 0, yA = c}. Zauważmy, że powyższa nierówność wynika z faktu, że liczby λi dostarczają możliwych rozwiązań dla minimum. Wobec prostej zależności cx = yAx ≤ yb otrzymujemy równość max{cx; Ax ≤ b} = min{yb; y ≥ 0, yA = c}.