1 Podstawowe poj˛ecia
Transkrypt
1 Podstawowe poj˛ecia
Łukasz Kowalik, Wst˛ep do programowania liniowego 1 1 Podstawowe poj˛ecia 1.1 Co to jest programowanie liniowe? Program liniowy (w skrócie PL1 ) jest to problem minimalizacji/maksymalizacji liniowej funkcji celu o n argumentach x1 , x2 , . . . , xn przy zachowaniu pewnej liczby równości lub nierówności liniowych (b˛edziemy je nazywać ograniczeniami) zawierajacych ˛ zmienne xi . Przykład: x1 + 2x2 zminimalizuj z zachowaniem warunków x2 ≤ x1 + 2 2x1 + x2 ≤ 4 2x2 + x1 ≥ 0 x2 ≥ 0 Za pomoca˛ programów liniowych można wyrazić bardzo wiele naturalnych problemów optymalizacyjnych. Dla przykładu, problem maksymalnego przepływu w sieci o n wierzchołkach, źródle s, ujściu t, i funkcji przepustowości c : V 2 → R można wyrazić za pomoca˛ nast˛epujacego ˛ 2 programu liniowego o |V | zmiennych (dla każdej pary wierzchołków v, w mamy zmienne fvw i fwv odpowiadajace ˛ przepływowi od v do w i odwrotnie) i 2|V |2 + |V | − 2 ograniczeniach: zmaksymalizuj P v∈V fsv z zachowaniem warunków fvw ≤ c(v, w) fvw = −fwv P w∈V fvw = 0 v, w ∈ V v, w ∈ V v ∈ V \ {s, t} Inny przykład: znajdowanie długości najkrótszej ścieżki od s do t w grafie G = (V, E) z funkcja˛ w : E → R opisujac ˛ a˛ długości kraw˛edzi. Tu dla każdego wierzchołka v mamy zmienna˛ dv . Dla wierzchołków na najkrótszej ścieżce od s do t zmienna dv b˛edzie odpowiadać odległości od s do v. zmaksymalizuj dt z zachowaniem warunków dv ≤ du + w(u, v) ds = 0 (u, v) ∈ E Zadanie. Udowodnij, że ten program faktycznie jest równoważny problemowi najkrótszej ścieżki. Rozwiazanie. ˛ Dowód można przedstawić w nast˛epujacy ˛ nieformalny sposób: wyobraźmy sobie że mamy fizyczny model grafu, w którym wierzchołki (powiedzmy metalowe kulki) sa˛ połac˛ zone sznurkami o odpowiednich długościach. Żeby znaleźć odległość od s do t chwytamy za kulki odpowiadajace ˛ tym wierzchołkom i staramy si˛e je maksymalnie od siebie oddalić (aż do całkowitego napi˛ecia niektórych sznurków). 1 w tekstach angloj˛ezycznych powszechnie używany jest skrót LP Łukasz Kowalik, Wst˛ep do programowania liniowego 2 1.2 Terminologia, postać kanoniczna i dopełnieniowa Rozważmy PL o n zmiennych x1 , . . . , xn . Wartości zmiennych możemy Pn utożsamiać z wektorem n x = (x1 , . . . , xn ) ∈ R . Zauważmy też, że liniowa˛ funkcj˛e celu j=1 cj xj możemy zapisać krócej jako cT x dla wektora c = (c1 , . . . , cn ). B˛edziemy utożsamiać t˛e funkcj˛e z wektorem c. • x ∈ Rn jest rozwiazaniem ˛ dopuszczalnym2 PL gdy x spełnia wszystkie ograniczenia. • x ∈ Rn jest rozwiazaniem ˛ optymalnym PL gdy x jest rozwiazaniem ˛ dopuszczalnym i optymalizuje funkcj˛e celu, tzn. jeśli dla dowolnego dopuszczalnego y ∈ Rn jest cT x ≤ cT y w przypadku gdy PL jest minimalizacyjny (cT x ≥ cT y gdy maksymalizacyjny). • PL jest dopuszczalny gdy istnieje rozwiazanie ˛ dopuszczalne, w przeciwnym przypadku 3 jest sprzeczny . • PL jest nieograniczony gdy jest dopuszczalny ale nie ma rozwiazań ˛ optymalnych, tzn. dla PL minimalizacyjnego dla dowolnego λ ∈ R istnieje rozwiazanie ˛ dopuszczalne x takie, T że c x < λ. B˛edziemy posługiwać si˛e trzema wygodnymi postaciami programów liniowych: kanoniczna,˛ standardowa˛ i dopełnieniowa˛4. 1.2.1 Postać kanoniczna Postać kanoniczna jest najbardziej ogólna z trzech rozważanych tu postaci. Program w postaci kanonicznej wyglada ˛ nast˛epujaco: ˛ Pn zminimalizuj j=1 cj xj Pn i = 1, . . . , m z zachowaniem warunków j=1 aij xj ≥ bi gdzie {aij , bi , cj } sa˛ dane. Wygodniej b˛edzie nam używać zapisu macierzowego: zminimalizuj cT x z zachowaniem warunków Ax ≥ b gdzie c ∈ Rn , b ∈ Rm , A ∈ Mm×n [R]. Lemat 1. Każdy PL można sprowadzić do postaci kanonicznej. Dowód. Zadanie max cT x zamieniamy na min (−c)T x. Równości aTi x = bi zamieniamy na par˛e aTi x ≤ bi , aTi x ≥ bi . Nierówności aTi x ≤ bi zamieniamy na (−ai )T x ≥ −bi . 2 ang. feasible solution ang. infeasible 4 W literaturze panuje niemały bałagan dotyczacy ˛ terminologii postaci PL. W szczególności, w wielu tekstach postać dopełnieniowa (ang. augmented) jest nazywana standardowa˛ (standard). Dokonaliśmy tu takiego wyboru, ponieważ słowo „dopełnieniowa” wi˛ecej mówi o naturze tej postaci, natomiast wi˛ekszość naturalnych problemów algorytmicznych zapisuje si˛e standardowo w postaci, która˛ nazwiemy standardowa. ˛ Wreszcie, ta terminologia jest używana w Cormenie i Vaziranim 3 Łukasz Kowalik, Wst˛ep do programowania liniowego 3 1.2.2 Postać standardowa Programy liniowe modelujace ˛ problemy algorytmiczne bardzo cz˛esto sa˛ w nast˛epujacej ˛ postaci (jest to szczególny przypadek postaci kanonicznej): zminimalizuj cT x z zachowaniem warunków Ax ≥ b x≥0 Lemat 2. Każdy PL można sprowadzić do postaci standardowej. Dowód. Możemy założyć, że mamy już PL w postaci kanonicznej. Aby zapewnić nieujemność − każdej zmiennej, dla każdej zmiennej xi wprowadzamy par˛e zmiennych x+ i i xi i każde wys− + tapienie ˛ xi w PL (także w funkcji celu) zast˛epujemy przez x+ i − xi . Dodajemy też xi ≥ 0 i x− i ≥ 0. W j˛ezyku macierzy, program min{cT x | Ax ≥ b} zamieniliśmy na min{ĉT x̂ | Âx̂ ≥ b, x̂ ≥ 0}, gdzie  = [A| − A] oraz ĉ = [c| − c]T , natomiast x̂ możemy interpretować jako x̂ = [x+ | x− ]T . 1.2.3 Postać dopełnieniowa Program w postaci dopełnieniowej wyglada ˛ nast˛epujaco: ˛ zminimalizuj cT x z zachowaniem warunków Ax = b x≥0 i = 1, . . . , m gdzie c ∈ Rn , b ∈ Rm , A ∈ Mm×n [R]. Zauważmy, że z dokładnościa˛ do zamiany równości na pary nierówności możemy powiedzieć, że PL w postaci dopełnieniowej jest w postaci kanonicznej. Lemat 3. Każdy PL można sprowadzić do postaci dopełnieniowej. Dowód. Możemy założyć, że mamy już PL w postaci standardowej. Dla każdej nierówności aTi x ≤ bi wprowadzamy „zmienna˛ swobody”5 si i nierówność zast˛epujemy przez aTi x − si = bi oraz si ≥ 0. W j˛ezyku macierzy, program min{cT x | Ax ≥ b, x ≥ 0} zamieniliśmy na min{ĉT x̂ | Âx̂ = b, x̂ ≥ 0}, gdzie  = [A| − I] oraz ĉ = [c|0]T , natomiast x̂ można interpretować jako x̂ = [x | s]T . 5 ang. slack variable Łukasz Kowalik, Wst˛ep do programowania liniowego 4 2 Geometria programów liniowych Przypomnijmy: • zbiór punktów spełniajacych ˛ aT x = b, a ∈ Rn , b ∈ R to hiperpłaszczyzna, • zbiór punktów spełniajacych ˛ aT x ≥ b to półprzestrzeń, • zbiór rozwiazań ˛ dopuszczalnych PL w postaci dopełnieniowej Ax = b, x ≥ 0 to przeci˛ecie hiperpłaszczyzn, • zbiór rozwiazań ˛ dopuszczalnych PL w postaci kanonicznej Ax ≥ b to przeci˛ecie półprzestrzeni, czyli wielościan6 . Dla przykładu, zbiór rozwiazań ˛ dopuszczalnych PL z rozdziału 1.1 jest czworokatem ˛ (w 2 wymiarach hiperpłaszczyzny to proste, półprzestrzenie to półpłaszczyzny, a wielościany to wielokaty). ˛ Zauważmy, że rozwiazanie ˛ optymalne to najdalszy punkt wielościanu w kierunku wektora funkcji celu (dla problemu maksymalizacyjnego; dla minimalizacyjnego w kierunku wektora odwrotnego). Zauważmy, że zbiór rozwiazań ˛ PL jest przeci˛eciem zbiorów wypukłych (półprzestrzeni, hiperpłaszczyzn) a wi˛ec jest wypukły. 2.1 Struktura rozwiaza ˛ ń optymalnych Zdefiniujemy teraz trzy naturalne poj˛ecia zwiazane ˛ z programami liniowymi i ich geometryczna˛ interpretacja.˛ Za chwil˛e pokażemy, że sa˛ one równoważne. • Wierzchołkiem wielościanu P nazywamy dowolny punkt x ∈ P, który jest jedynym rozwiazaniem ˛ optymalnym dla pewnej funkcji celu c. • Punktem ekstremalnym wielościanu P nazywamy dowolny punkt x ∈ P, który nie jest wypukła˛ kombinacja˛ dwóch innych punktów y, z ∈ P. (Przypomnijmy, że wypukła kombinacja y i z to dowolny punkt postaci λy + (1 − λ)z dla pewnego λ ∈ [0, 1].) • Bazowe rozwiazanie ˛ dopuszczalne (brd) PL o n zmiennych to rozwiazanie ˛ dopuszczalne n x ∈ R takie, że istnieje n liniowo niezależnych ograniczeń (w sensie wektorów współczynników przy xi , tzn. x1 +2x2 ≥ 1 i x1 +2x2 ≤ 2 sa˛ liniowo zależne), które dla x sa˛ spełnione z równościa˛7 . Na przykład (0, 0) i ( 23 , 38 ) sa˛ brd programu z rozdziału 1.1. W poniższych lematach zakładamy, że PL jest w postaci kanonicznej, a P jest wielościanem jego rozwiazań ˛ dopuszczalnych. Lemat 4. Jeśli x jest wierzchołkiem PL to x jest punktem ekstremalnym. 6 7 ang. polyhedron ang. tight Łukasz Kowalik, Wst˛ep do programowania liniowego 5 Dowód. Niech c b˛edzie funkcja˛ celu taka,˛ że x jest jedynym rozwiazaniem ˛ optymalnym LP dla funkcji celu c. Załóżmy, że x = λy + (1 − λ)z dla pewnych y, z ∈ P oraz λ ∈ [0, 1]. Z liniowości c cT x = λcT y + (1 − λ)cT z. Ponieważ x jest optymalny wi˛ec cT y, cT z ≥ cT x. Gdyby cT y > cT x to cT x > λcT x + (1 − λ)cT x = cT x, sprzeczność (podobnie dla cT z). Stad ˛ cT x = cT y = cT z. Ponieważ x jest jedynym rozwiazaniem ˛ optymalnym wzgl˛edem c wi˛ec x = y = z. Lemat 5. Jeśli x jest punktem ekstremalnym PL to x jest bazowym rozwiazaniem ˛ dopuszczalnym. Dowód. Z definicji punktu ekstremalnego x jest dopuszczalny. Załóżmy, że nie jest brd, tzn. że nie istnieje n liniowo niezależnych ograniczeń spełnionych z równościa˛ dla x. Intuicyjnie, oznacza to, że wokół x jest nieco „luzu”, tzn. jest pewien wektor d (liniowo niezależny od wektorów ograniczeń spełnionych z równościa), ˛ wzdłuż którego możemy si˛e przemieszczać z x w przód i w tył pozostajac ˛ w P. Istotnie, pokażemy, że x jest kombinacja˛ wypukła˛ dwóch punktów w P. Niech T = {i | aTi x = bi }. Wiemy, że {ai | i ∈ T } nie rozpina Rn , tzn. rank[ai , i ∈ T ] < n. Stad ˛ układ równań (jednorodny) aTi d = 0 i ∈ T ma przestrzeń rozwiazań ˛ wymiaru n − rank[ai | i ∈ T ] ≥ 1. Czyli istnieje d 6= 0 który jest rozwiazaniem ˛ tego układu. Pokażemy, że dla pewnego małego ǫ > 0, x ± ǫd ∈ P, czyli b˛edzie sprzeczność (bo x jest ekstremalny). Istotnie, jeśli i ∈ T to dla dowolnego ǫ, aTi (x ± ǫd) = bi . Dla i 6∈ T mamy aTi x > bi , a wi˛ec na pewno można wybrać dostatecznie małe ǫ, żeby aTi (x ± ǫd) ≥ bi dla każdego i 6∈ T . Lemat 6. Jeśli x jest bazowym rozwiazaniem ˛ dopuszczalnym PL to x jest wierzchołkiem. Dowód. Niech T = {i | aTi x = P bi }. Podamy funkcj˛e celu c, przy której x jest jedynym rozwiazaniem ˛ optymalnym: c = i∈T ai . Dla dowolnego y ∈ P mamy cT y = X i∈T aTi y ≥ X bi = cT x, i∈T (czyli x jest rozwiazaniem ˛ optymalnym) przy czym równość zachodzi tylko gdy dla każdego i ∈ T T , ai y = bi , a to jest układ którego jedynym rozwiazaniem ˛ jest x (bo rank[ai | i ∈ T ] = n). Wniosek 1. Dla PL w postaci kanonicznej sa˛ równoważne: (i) x jest wierzchołkiem, (ii) x jest punktem ekstremalnym, (iii) x jest bazowym rozwiazaniem ˛ dopuszczalnym. Łukasz Kowalik, Wst˛ep do programowania liniowego 6 Twierdzenie 1. Każdy ograniczony PL w postaci standardowej Ax ≥ b, x ≥ 0 ma rozwiazanie ˛ optymalne, które jest punktem ekstremalnym. Dowód. Niech x b˛edzie rozwiazaniem ˛ optymalnym PL. Jeśli x jest ekstremalny – koniec. W przeciwnym przypadku pokażemy jak przejść od x do punktu ekstremalnego o tej samej wartości funkcji celu (używajac ˛ analogii trójwymiarowej, przesuniemy si˛e z x wewnatrz ˛ wielościanu do ściany wielościanu, nast˛epnie ze środka ściany do kraw˛edzi, a z kraw˛edzi do wierzchołka). Oznaczmy przez P wielościan rozwiazań ˛ dopuszczalnych. Skoro x nie jest punktem ekstremalnym, to istnieje y 6= 0 taki że x + y, x − y ∈ P. Po pierwsze zauważmy, że przesuwajac ˛ si˛e wzdłuż wektora y nie zmieniamy wartości funkcji T T celu. Istotnie, gdyby c y < 0 to c (x + y) < cT x, natomiast gdyby cT y > 0 to cT (x − y) < cT x, czyli w obu przypadkach dostajemy sprzeczność z założniem że x jest ekstremalny (a wi˛ec jest wierzchołkiem). Skoro cT y = 0 to dla dowolnego α, cT (x + αy) = cT x. Teraz zauważmy, że skoro (ai )T (x + y) ≥ b oraz (ai )T (x − y) ≥ b to (ai )T y = 0, a wi˛ec (ai )T (αy) = 0 dla dowolnego α. Stad ˛ wnioskujemy, że jeśli i-te ograniczenie jest T spełnione z równościa,˛ czyli (ai ) x = bi , to po przesuni˛eciu si˛e wzdłuż y dalej tak b˛edzie, czyli (ai )T (x + αy) = bi . Geometrycznie, odpowiada to spostrzeżeniu, że jeśli x jest na kraw˛edzi (ścianie, ...), to posuwajac ˛ si˛e wzdłuż y dalej pozostajemy na kraw˛edzi (ścianie, ...). Niech teraz λ = max{α | x + αy ∈ P oraz x − αy ∈ P}. Weźmy j takie, że yj 6= 0. Zauważmy, że z naszej ostatniej obserwacji wynika w szczególności, że jeśli xj = 0 to yj = 0, a wi˛ec musi być xj 6= 0. Oznacza to, że dla dostatecznie dużego α, xj +αyj = 0 lub xj −αyj = 0, czyli λ jest dobrze określone. Zauważmy, że w rozwiazaniu ˛ dopuszczalnym x + λy pojawia si˛e nowe ograniczenie spełnione z równościa.˛ To implikuje, że powyższa˛ operacj˛e wykonamy co najwyżej n + m razy zanim dojdziemy do punktu ekstremalnego. Wniosek 2. Istnieje algorytm (brutalny), który ˛ PL w postaci standardowej o n zmi 3 rozwiazuje ennych i m ograniczeniach w czasie O( m n ). n Dowód. Żeby rozwiazać ˛ LP w postaci standardowej wystarczy sprawdzić wszystkie wierzchołki wielościanu i wybrać wierzchołek o najmniejszej wartości funkcji celu. Wierzchołków jest tyle co bazowych rozwiazań ˛ dopuszczalnych, czyli m . Aby znaleźć taki wierzchołek wystarczy n rozwiazać ˛ układ odpowiednich n liniowo niezależnych równań. (Uwaga. W powyższym twierdzeniu m oznacza liczb˛e ograniczeń, a nie liczb˛e wierszy macierzy A. Jeśli t˛e liczb˛e wierszy oznaczymy przez r to m = r + n). 3 Algorytmy programowania liniowego Pierwszym algorytmem programowania liniowego był algorytm simplex, opublikowany przez George’a Dantziga w 1947 roku. Algorytm ten najpierw znajduje pewien wierzchołek wielościanu rozwiazań ˛ dopuszczalnych, a nast˛epnie w p˛etli przemieszcza si˛e wzdłuż kraw˛edzi do jednego z sasiednich ˛ wierzchołków tak, aby poprawić wartość funkcji celu. Niestety okazuje si˛e, że jego pesymistyczna złożoność jest wykładnicza. Doskonale zachowuje si˛e on jednak dla rzeczywistych danych i jest powszechnie stosowany w praktyce. Łukasz Kowalik, Wst˛ep do programowania liniowego 7 Kolejny przełom nastapił ˛ w 1979 kiedy to Leonid Khachiyan opublikował tzw. metod˛e elipsoidalna,˛ czyli algorytm wielomianowy o złożoności O(n4 L), gdzie L jest ograniczone z góry przez długość zapisu binarnego danych (macierzy A, wektorów b i c). Istnieja˛ implementacje tego algorytmu, jednakże źle sprawdzaja˛ si˛e w praktyce. W 1984 roku zupełnie inne podejście zaproponował Narendra Karmarkar. Jego metoda punktu wewn˛etrznego osiaga ˛ złożoność O(n3.5L) i została poprawiona przez kolejnych autorów do O(n3 L). Podobno niektóre implementacje niektórych wersji tego algorytmu zachowuja˛ si˛e bardzo dobrze dla rzeczywistych danych (porównywalnie albo lepiej niż algorytm simplex). 3.1 Algorytm simplex W poprzednim rozdziale zauważyliśmy już, że poszukujac ˛ rozwiazań ˛ optymalnych można ograniczyć si˛e do wierzchołków wielościanu. Algorytm simplex korzysta z tej obserwacji i realizuje podejście local search. Dokładniej (ale ciagle ˛ nieprecyzyjnie), algorytm zaczyna od dowolnego wierzchołka wielościanu i w każdej kolejnej iteracji przemieszcza si˛e do takiego sasiedniego ˛ wierzchołka, że wartość funkcji celu poprawia si˛e (lub przynajmniej nie pogarsza). Opiszemy teraz algorytm simplex na przykładzie konkretnego programu liniowego: 3x1 + x2 + 2x3 max x1 + x2 + 3x3 ≤ 30 2x1 + 2x2 + 5x3 ≤ 24 4x1 + x2 + 2x3 ≤ 36 x1 , x2 , x3 ≥ 0. Zauważmy, że jest to program w postaci standardowej (w wersji maksymalizacyjnej), oraz wszystkie wyrazy wolne z prawych stron nierówności sa˛ nieujemne. Dzi˛eki temu łatwo znaleźć dla niego rozwiazanie ˛ dopuszczalne — rozwiazanie ˛ zerowe: x1 = 0, x2 = 0, x3 = 0. Zapiszmy teraz ten program w postaci dopełnieniowej, wprowadzajac ˛ zmienna˛ dopełnieniowa˛ dla każdej nierówności (z wyłaczeniem ˛ warunków nieujemnościowych). Dodatkowo funkcj˛e celu zastapmy ˛ nowa˛ zmienna˛ z: max z z x4 x5 x6 = 3x1 + x2 + 2x3 = 30 − x1 − x2 − 3x3 = 24 − 2x1 − 2x2 − 5x3 = 36 − 4x1 − x2 − 2x3 x1 , x2 , x3 , x4 , x5 , x6 ≥ 0. Nasze rozwiazanie ˛ dopuszczalne, rozszerzone o zmienne dopełnieniowe ma teraz nast˛epujac ˛ a˛ postać: x1 = 0, x2 = 0, x3 = 0, x4 = 30, x5 = 24, x6 = 36. Zmienne x1 , x2 , x3 b˛edziemy nazywać zmiennymi niebazowymi, natomiast zmienne x4 , x5 , x6 b˛edziemy nazywać zmiennymi bazowymi. Baza˛ nazwiemy zbiór indeksów zmiennych bazowych Łukasz Kowalik, Wst˛ep do programowania liniowego 8 i oznaczymy przez B, B = {4, 5, 6}, natomiast zbiór indeksów pozostałych zmiennych oznaczymy przez N, N = {1, 2, 3}. Podczas działania algorytmu zbiory te b˛eda˛ si˛e zmieniać, jednak zachowany b˛edzie nast˛epujacy ˛ niezmiennik: Niezmiennik 1. Każda zmienna x1 , . . . , xn jest albo bazowa albo niebazowa. Lewa strona jednego równania zawiera zmienna˛ funkcji celu z, lewa strona każdego z pozostałych równań zawiera inna˛ zmienna˛ bazowa,˛ oraz prawa strona dowolnego równania zawiera wyłacznie ˛ zmienne niebazowe (i wyraz wolny). Dodatkowo, wszystkie zmienne niebazowe maja˛ wartość 0. Zauważmy, że z niezmiennika wynika, że wartości funkcji celu i zmiennych bazowych sa˛ równe wyrazom wolnym w odpowiednich równaniach. Fakt 1. Jeśli dla pewnego programu L i rozwiazania ˛ x spełniony jest niezmiennik, to x jest bazowym rozwiazaniem ˛ dopuszczalnym programu L. Dowód. Należy pokazać, że jest tyle liniowo niezależnych ograniczeń spełnionych z równościa˛ co zmiennych. Istotnie, dla każdej zmiennej bazowej mamy (inne) równanie zawierajace ˛ t˛e zmienna,˛ natomiast dla każdej zmiennej niebazowej xj ograniczenie xj ≥ 0 jest spełnione z równościa.˛ Z powyższego faktu wynika, że o ile spełniony jest niezmiennik, to faktycznie znajdujemy si˛e w wierzchołku aktualnego progamu w postaci dopełnieniowej. Łatwo sprawdzić też, że po zignorowaniu zmiennych dopełnieniowych otrzymamy wierzchołek odpowiadajacego ˛ programu w postaci standardowej. Podczas działania algorytmu simplex program liniowy b˛edzie si˛e zmieniał, ale b˛edzie reprezentował cały czas ten sam wielościan, a wi˛ec faktycznie algorytm b˛edzie generował wierzchołki wielościanu oryginalnego programu liniowego. Wróćmy do algorytmu simplex. Naszym celem jest zwi˛ekszenie zmiennej z. W tym celu spójrzmy na dowolna˛ zmienna˛ niebazowa˛ z dodatnim współczynnikiem w funkcji celu. W tym przypadku możemy wybrać dowolna˛ zmienna˛ z x1 , x2 , x3 — wybierzmy x1 . Oczywiście powi˛ekszajac ˛ x1 powi˛ekszamy z. Jak bardzo możemy powi˛ekszyć z, zachowujac ˛ wszystkie ograniczenia? Dopóki zmienne bazowe pozostaja˛ nieujemne, a wi˛ec: , 24 , 36 }= x1 := min{ 30 1 2 4 36 4 = 9. Po takiej operacji przynajmniej jedna zmienna bazowa (w tym przypadku x6 ) przyjmuje wartość 0. To pozwala na zmian˛e bazy (a w konsekwencji zmian˛e wierzchołka, w którym jesteśmy): zmienna x1 wchodzi do bazy (jest zmienna˛ wchodzac ˛ a), ˛ a zmienna x6 wychodzi z bazy (zmienna wychodzaca). ˛ Operacja wymiany bazy (ang. pivot) przebiega w dwóch krokach: 1. Rozwia˛ż równanie zawierajace ˛ zmienna˛ wychodzac ˛ a˛ ze wzgl˛edu na zmienna˛ wchodzac ˛ a.˛ W tym przypadku otrzymujemy: x1 = 9 − 14 x2 − 12 x3 − 41 x6 . Łukasz Kowalik, Wst˛ep do programowania liniowego 9 2. wstaw wynik zamiast x1 z prawej strony wszystkich równań (czyli uaktualnij współczynniki przy zmiennych niebazowych i wyrazy wolne). W tym przypadku otrzymujemy: z x1 x4 x5 = 27 + = 9 − = 21 − = 6 − 1 x 4 2 1 x 4 2 3 x 4 2 3 x 2 2 + 12 x3 − 12 x3 − 52 x3 − 4x3 − − + + 3 x 4 6 1 x 4 6 1 x 4 6 1 x. 2 6 Fakt 2. Po operacji wymiany bazy otrzymujemy program liniowy o tym samym zbiorze rozwiazań ˛ dopuszczalnych. Otrzymaliśmy rozwiazanie ˛ (9, 0, 0, 21, 6, 0) o wartości funkcji celu 27. Wykonajmy kolejna˛ operacj˛e wymiany bazy. Teraz jako zmienna˛ wchodzac ˛ a˛ możemy wybrać już tylko jedna˛ z dwóch: x2 lub x3 , bo tylko te zmienne maja˛ dodatnie współczynniki w funkcji celu. Wybierzmy x3 . Podobnie jak poprzednio: 6 3 9 21 6 = = . x3 := min 1 , 5 , 4 4 2 2 2 A wi˛ec x5 wychodzi z bazy. Otrzymujemy nowy program: z x1 x3 x4 = = = = 111 4 33 4 3 2 69 4 + − − + 1 x 16 2 1 x 16 2 3 x 8 2 3 x 16 2 − + − + 1 x 8 5 1 x 8 5 1 x 4 5 5 x 8 5 − − + − 11 x 16 6 5 x 16 6 1 x 8 6 1 x. 16 6 Teraz jedynym kandydatem do wejścia do bazy jest x2 . Zauważmy, że w ostatnim równaniu współczynnik przed x2 jest dodatni. Oznacza to, że zwi˛ekszajac ˛ x2 możemy też zwi˛ekszać x4 zachowujac ˛ ostatnia˛ równość zawsze spełniona.˛ A wi˛ec przy wyborze zmiennej wychodzacej ˛ nie bierzemy pod uwag˛e x4 : 33 3 6 x2 := min 41 , 23 = = 4. 4 16 8 Uwaga. Zastanówmy si˛e jednak przez chwil˛e, co by było, gdybyśmy nie mieli czego wziać ˛ do minimum, tzn. gdyby istniała zmienna z dodatnim współczynnikiem w funkcji celu i nieujemnymi współczynnikami w pozostałych równaniach? Wtedy powi˛ekszajac ˛ t˛e zmienna˛ moglibyśmy otrzymać rozwiazanie ˛ dopuszczalne o dowolnie wysokiej wartości fukcji celu. W takiej sytuacji algorytm simplex zwraca komunikat “PROGRAM NIEOGRANICZONY” i kończy działanie. Wracajac ˛ do naszego programu liniowego, otrzymujemy: z x1 x3 x4 = 28 − = 8 + = 4 − = 18 − 1 x 6 3 1 x 6 3 8 x 3 3 1 x 2 3 − + − + 1 x 6 5 1 x 6 5 2 x 3 5 1 x 2 5 − 23 x6 − 13 x6 + 13 x6 + 0x6 . Łukasz Kowalik, Wst˛ep do programowania liniowego 10 Otrzymaliśmy wi˛ec sytuacj˛e, gdy nie możemy wykonać operacji wymiany bazy ponieważ wszystkie współczynniki w funkcji celu sa˛ ujemne. Jest jednak jasne, że musieliśmy w ten sposób dostać rozwiazanie ˛ optymalne programu, ponieważ dla dowolnych nieujemnych wartości zmiennych wartość funkcji celu naszego programu nie może przekroczyć aktualnej, czyli 28. Ponieważ w kolejnych krokach algorytmu otrzymywaliśmy równoważne programy liniowe o tym samym zbiorze rozwiazań ˛ dopuszczalnych, jest to także rozwiazanie ˛ optymalne oryginalnego programu. Odnotujmy te rozważania jako fakt: Fakt 3. Jeśli w pewnym kroku algorytmu simplex wszystkie współczynniki (przy zmiennych niebazowych) w funkcji celu sa˛ ujemne, to znalezione bazowe rozwiazanie ˛ dopuszczalne jest optymalnym rozwiazaniem ˛ oryginalnego programu. W naszym przypadku dostaliśmy rozwiazanie ˛ (x1 , x2 , x3 ) = (8, 4, 0) o wartości funkcji celu 28. W tej chwili zasada działania algorytmu simplex i jego cz˛eściowa poprawność (tzn. poprawność pod warunkiem zatrzymania si˛e programu) powinny być już jasne. Zajmijmy si˛e jeszcze przez chwil˛e właśnie kwestia˛ warunku stopu i złożoności obliczeniowej. 3.1.1 Warunek stopu i reguła Blanda Jest jasne, że jeśli przy kolejnych operacjach wymiany bazy zawsze otrzymujemy wi˛eksza˛ (lub, w przypadku minimalizacji, mniejsza) ˛ wartość funkcji celu to algorytm musi si˛e zakończyć — po prostu dlatego, że jest ograniczona liczba wierzchołków wielościanu. Poprzednik tej implikacji niestety nie zawsze jest jednak spełniony. Dla przykładu, rozważmy nast˛epujacy ˛ program: z x3 x5 x6 = 4 + 2x1 − x2 = 12 = − 2x1 + 4x2 = + x1 − 3x2 − 4x4 − 12 x4 + 3x4 + 2x4 . Mamy B = {3, 4, 6}, N = {1, 2, 4}, x = (0, 0, 21 , 0, 0, 0) oraz funkcja celu ma wartość z = 4. Jako zmienna˛ wchodzac ˛ a˛ możemy wybrać jedynie x1 , natomiast jako zmienna˛ wychodzac ˛ a˛ jedynie x5 . Po wymianie bazy otrzymujemy: z x1 x3 x6 = 4 + 3x2 = + 2x2 1 = 2 = − x2 − + − + x4 3 x 2 4 1 x 2 4 7 x 2 4 − − x5 1 x 2 5 − 1 x. 2 5 Mamy B = {1, 3, 6}, N = {2, 4, 5}, x = (0, 0, 21 , 0, 0, 0) oraz funkcja celu ma wartość z = 4. Widzimy, że chociaż zmieniła si˛e baza, bazowe rozwiazanie ˛ dopuszczalne pozostało to samo (w szczególności wartość funkcji celu si˛e nie zmieniła). Może być to powodem poważnych kłopotów, a nawet zap˛etlenia si˛e algorytmu. Poczatkowo ˛ ten problem ignorowano (!), gdyż w praktycznych zastosowaniach pojawia si˛e on niezwykle rzadko. W 1977 (czyli w 30 lat od powstania algorytmu simplex) Robert Bland zaproponował niezwykle prosta˛ heurystyk˛e, o której Łukasz Kowalik, Wst˛ep do programowania liniowego 11 można pokazać (dowód nie jest bardzo trudny, lecz pominiemy go tutaj), że gwarantuje zakończenie algorytmu. Twierdzenie 2 (Reguła Bland’a). Jeśli podczas wymiany bazy: • spośród możliwych zmiennych wchodzacych ˛ wybierana jest zmienna o najmniejszym indeksie oraz, • spośród możliwych zmiennych wychodzacych ˛ wybierana jest zmienna o najmniejszym in8 deksie to algorytm simplex kończy swoje działanie. Jest oczywiste, że algorytm simplex wykonuje O( n+m ) operacji wymiany bazy, dla pron gramu o m zmiennych niebazowych i n zmiennych niebazowych. Z drugiej strony, odnotujmy, że Fakt 4. Istnieja˛ przykłady programów liniowych, dla których algorytm simplex działa w czasie Ω(2n ). 3.1.2 Znajdowanie poczatkowego ˛ bazowego rozwiazania ˛ dopuszczalnego Do wyjaśnienia pozostała jeszcze jedna kwestia. Zakładaliśmy, że program jest postaci max cT x, Ax ≤ b, x ≥ 0, oraz że b ≥ 0. Wtedy łatwo jest znaleźć pierwsze rozwiazanie ˛ dopuszczalne. Teraz opiszemy jak to zrobić w przypadku ogólnym: 1. Sprowadź program do postaci dopełnieniowej: max cT x Ax = b x≥0 (1) 2. Wyeliminuj liniowo zależne równości (tak, żeby rankA = m, gdzie m jest liczba˛ wierszy A) 3. Dodaj m nowych zmiennych x e1 , . . . , x em i zbuduj program: x e1 x e2 z funkcja˛ celu min 8 P .. x ei . . + + .. . a11 x1 + a12 x2 + . . . + a1n xn = b1 a21 x1 + a22 x2 + . . . + a2n xn = b2 .. . (2) x em + am1 x1 + am2 x2 + . . . + amn xn = bn zauważmy, że może być wiele możliwych zmiennych wychodzacych, ˛ gdy w wielu równaniach iloraz wyrazu wolnego i współczynnika przy zmiennej wchodzacej ˛ jest taki sam Łukasz Kowalik, Wst˛ep do programowania liniowego 12 4. Rozwia˛ż program (2) za pomoca˛ algorytmu simplex, zaczynajac ˛ od bazowego rozwiazania ˛ dopuszczalnego x ei = bi , xj = 0 dla każdego i = 1, . . . , m, j = 1, . . . , n. 5. Jeśli algorytm simplex zwrócił rozwiazanie ˛ o wartości funkcji celu 0, weź wartości zmiennych xj jako bazowe rozwiazanie ˛ dopuszczalne programu (1). W przeciwnym przypadku wypisz komunikat “PROGRAM SPRZECZNY” i zakończ działanie. Łatwe uzasadnienie poprawności powyższego post˛epowania pozostawiamy czytelnikowi. 4 Dualność Uwaga: Materiał z tego rozdziału nie był wykładany na algorytmice. 4.1 Motywacje z teorii złożoności Rozważmy decyzyjna˛ wersj˛e problemu programowania liniowego: majac ˛ dany (minimalizaT cyjny) PL i liczb˛e δ rozstrzygnać, ˛ czy istnieje dopuszczalny x taki, że c x ≤ δ. Aby pokazać, że taki problem jest w NP wystarczy jako świadectwo podać szukany element x, np. rozwiazanie ˛ optymalne (uwaga! nietrywialne jest wykazanie, że długość zapisu binarnego takiego x-a b˛edzie wielomianowa wzgl˛edem długości zapisu binarnego danych, tzn. macierzy A, wektorów b, c i liczby δ), a weryfikator już w czasie liniowym sprawdzi, czy x jest dopuszczalny i czy cT x ≤ δ. Innymi słowy łatwo jest pokazać górne ograniczenie na rozwiazanie ˛ optymalne: wystarczy wskazać odpowiednie wartościowanie zmiennych. Przypomnijmy, że j˛ezyk L jest w klasie co-NP, gdy jego dopełnienie jest w NP. Czy programowanie liniowe jest w co-NP? Inaczej, czy można w czasie wielomianowym potwierdzić (majac ˛ do dyspozycji wielomianowej długości świadectwo), że nie istnieje taki dopuszczalny x, że cT x ≤ δ? Jest to pytanie o dolne ograniczenie na rozwiazanie ˛ optymalne. 4.2 Poszukiwanie dolnego ograniczenia Rozważmy nast˛epujacy ˛ PL w postaci dopełnieniowej: zminimalizuj 7x1 + x2 + 5x3 z zachowaniem warunków x1 − x2 + 3x3 = 10 5x1 + 2x2 − x3 = 6 x1 , x2 , x3 ≥ 0 (3) Zauważmy, że skoro x1 , x2 , x3 ≥ 0, to 7x1 + x2 + 5x3 ≥ x1 − x2 + 3x3 , bo 7 > 1, 1 > −1 oraz 5 > 3. Stad ˛ 7x1 + x2 + 5x3 ≥ 10. Dostaliśmy dolne ograniczenie! (Choć, trzeba przyznać, dość fartownie). W tym przypadku możemy zauważyć nawet wi˛ecej: 7x1 + x2 + 5x3 ≥ x1 − x2 + 3x3 + 5x1 + 2x2 − x3 = 16. Łukasz Kowalik, Wst˛ep do programowania liniowego 13 Możemy to rozumowanie uogólnić: można brać dowolne kombinacje liniowe równań. Jak dobre ograniczenie dolne możemy w ten sposób uzyskać? Czyli jaka˛ kombinacj˛e liniowa˛ równości wybrać, żeby dostać jak najwi˛eksza˛ liczb˛e z prawej strony wynikowej równości, ale żeby wszystkie współczynniki przed xi były ≤ niż w funkcji celu? Można to zapisać za pomoca˛ programu liniowego: zmaksymalizuj 10y1 + 6y2 z zachowaniem warunków y1 + 5y2 ≤ 7 −y1 + 2y2 ≤ 1 3y1 − y2 ≤ 5 Powyższy program b˛edziemy nazywać programem dualnym do programu (3). 4.3 Konstruowanie programu dualnego 4.4 Postać dopełnieniowa Spróbujmy zastosować rozumowanie z poprzedniego podrozdziału do dowolnego programu w postaci dopełnieniowej (nazwiemy go programem prymalnym): zminimalizuj cT x z zachowaniem warunków Ax = b x≥0 (4) Kombinacj˛e liniowa˛ równań otrzymujemy przez pomnożenie obu stron równości Ax = b z lewej strony przez wektor współczynników kombinacji yT , tzn. dostajemy yT Ax = yT b. Jeśli zadbamy, żeby cT ≥ yT A to ponieważ x ≥ 0, mamy cT x ≥ yT Ax = yT b, czyli cT x ≥ yT b, (5) a to jest dolne ograniczenie na rozwiazanie ˛ optymalne. Chcemy mieć dolne ograniczenie jak najwi˛eksze, czyli rozwiazać ˛ zadanie max{yT b | cT ≥ yT A}. Pami˛etajac, ˛ że yT b = bT y oraz yT A = (AT y)T możemy to zapisać w znajomej postaci: zmaksymalizuj bT y z zachowaniem warunków AT y ≤ c (6) 4.5 Dualna dualność ;) Lemat 7. Niech L b˛edzie programem prymalnym w postaci dopełnieniowej. Program dualny do programu dualnego L jest programem prymalnym (czyli L). Proof. Spróbujemy utworzyć program dualny do (6). Zauważmy, że (6) jest równoważny pro- Łukasz Kowalik, Wst˛ep do programowania liniowego 14 gramowi w postaci dopełnieniowej (patrz dowody lematów 2 i 3): zminimalizuj −(bT y+ − bT y− ) + y z zachowaniem warunków AT | − AT | I y− = c s y+ , y− , s ≥ 0 (7) Zgodnie z rozdziałem 4.4 program dualny do powyższego ma postać: cT x A −b z zachowaniem warunków −A x ≤ b I 0 (8) zmaksymalizuj −cT (−x) z zachowaniem warunków A(−x) = b −x ≥ 0. (9) zmaksymalizuj czyli równoważnie: Po przejściu z maksymalizacji −cT (−x) do minimalizacji cT (−x) oraz po zamianie −x na x, otrzymujemy (4). 4.6 Postać kanoniczna Rozważmy program w postaci kanonicznej zminimalizuj cT x z zachowaniem warunków Ax ≥ b . Po przemnożeniu nierówności przez −1 i zamianie minimalizacji na maksymalizacj˛e (c zamieniamy na −c), otrzymujemy (6). Z lematu 7 programem dualnym jest (4). Zamieniajac ˛ minimalizacj˛e na maksymalizacj˛e (i mnożac ˛ równości przez −1) dostajemy zmaksymalizuj bT y z zachowaniem warunków AT y = c y≥0 4.7 Postać standardowa i komplementarne warunki swobody zminimalizuj cT x z zachowaniem warunków Ax ≥ b x≥0 (10) Postapimy ˛ podobnie jak przy postaci dopełnieniowej: teraz też potrzebujemy cT ≥ yT A, ale dodatkowo założymy y ≥ 0 (żeby przy mnożeniu przez y nie zmieniały si˛e kierunki nierówności. Mamy wtedy Łukasz Kowalik, Wst˛ep do programowania liniowego 15 cT x ≥ yT Ax ≥ yT b. (11) Znowu, chcac ˛ mieć jak najwyższe dolne ograniczenie, maksymalizujemy yT b. Po identycznej kosmetyce jak poprzednio dostajemy: zmaksymalizuj bT y z zachowaniem warunków AT y ≤ c y≥0 (12) Zastanówmy si˛e, kiedy rozwiazania ˛ optymalne programu dualnego i prymalnego spotykaja˛ T T si˛e, czyli c x = b y. Jest tak wtedy i tylko wtedy gdy w (11) obie nierówności sa˛ równościami. Ponieważ z (12) cT ≥ yT A oraz z (10) x ≥ 0, wi˛ec dla każdego j = 1, . . . , n: cj xj ≥ (yT [a∗,j ])xj . Stad ˛ cT x = yT Ax wtedy i tylko wtedy gdy dla każdego j = 1, . . . , n: cj xj = T (y [a∗,j ])xj , gdzie [a∗,j ] oznacza j-ta˛ kolumn˛e macierzy A. Analogicznie, yT AT x = yT b wtedy i tylko wtedy gdy dla każdego i = 1, . . . , m: bi yi = yi([ai,∗ ]x), gdzie [ai,∗ ] oznacza i-ty wiersz macierzy A. Jest to równoważne nast˛epujacemu ˛ twierdzeniu. Twierdzenie 3. Niech x i y b˛eda˛ rozwiazaniami ˛ dopuszczalnymi odpowiednio dla zadania prymalnego i dualnego w postaci standardowej. Rozwiazania ˛ x i y sa˛ oba optymalne wtedy i tylko wtedy gdy (i) prymalne komplementarne warunki swobody dla każdego j = 1, . . . , n albo xj = 0 albo [a∗,j ]T y = cj . (albo xj = 0 albo j-ta nierówność programu dualnego jest spełniona z równościa.) ˛ (ii) dualne komplementarne warunki swobody dla każdego i = 1, . . . , m albo yi = 0 albo [ai,∗ ]x = bi . (albo yi = 0 albo i-ta nierówność programu prymalnego jest spełniona z równościa.) ˛ Powyższe twierdzenie b˛edzie miało duże znaczenie w zastosowaniach algorytmicznych. Oczywiście można formułować analogiczne twierdzenia dla innych postaci PL. (Np. dla postaci dopełnieniowej otrzymamy jedynie warunek (i). Dlaczego?) 4.8 Postać dowolna Stosujac ˛ powyższe rozumowania do prymalnego PL w dowolnej postaci: zminimalizuj cT1 x1 + cT2 x2 + cT3 x3 z zachowaniem warunków A11 x1 + A12 x2 + A13 x3 A21 x1 + A22 x2 + A23 x3 A31 x1 + A32 x2 + A33 x3 x1 x2 x3 dostajemy nast˛epujacy ˛ program dualny: = b1 ≥ b2 ≤ b3 ≥0 ≤0 nieograniczony (13) Łukasz Kowalik, Wst˛ep do programowania liniowego zmaksymalizuj bT1 y1 + bT2 y2 + bT3 y3 z zachowaniem warunków AT11 y1 + AT21 y2 + AT31 y3 AT12 y1 + AT22 y2 + AT32 y3 AT13 y1 + AT23 y2 + AT33 y3 y1 y2 y3 16 ≤ c1 ≥ c2 = c3 nieograniczony ≥0 ≤ 0. (14) Zasada dualny-do-dualnego-jest-prymalny też tu działa, tzn. programem dualnym do (14) jest (13). 4.9 Słaba i silna dualność Z konstrukcji programu dualnego możemy wysnuć nast˛epujacy ˛ wniosek: Lemat 8 (słaba dualność). Jeśli z jest wartościa˛ funkcji celu rozwiazania ˛ optymalnego prymalnego minimalizacyjnego PL, natomiast w jest wartościa˛ funkcji celu rozwiazania ˛ optymalnego programu dualnego, to z ≥ w. Wniosek 3. Jeśli program prymalny jest nieograniczony, to program dualny jest sprzeczny. Okazuje si˛e, że prawdziwe jest znacznie wi˛ecej niż słaba dualność: Twierdzenie 4 (silna dualność). Przy oznaczeniach jak powyżej, z = w. Do udowodnienia twierdzenia o silnej dualności b˛edziemy potrzebować dwóch lematów. Lemat 9 (o hiperpłaszczyźnie oddzielajacej). ˛ Niech P ⊂ Rn b˛edzie zbiorem wypukłym, z ∈ Rn , z 6∈ P. Wtedy istnieje a ∈ Rn oraz b ∈ R takie, że aT x ≤ b aT z > b. dla każdego x ∈ P Dowód. Niech y b˛edzie najbliższym punktem z w zbiorze P. Określamy a := z − y oraz b := aT y. Wtedy b < aT z (bo aT z = aT (y + a) = aT y + aT a > aT y = b). Załóżmy (dowodzac ˛ niewprost), że istnieje T T T x ∈ P taki, że a x > b, czyli a x > a y. Pokażemy, że nawet gdy taki x jest dalej od z niż y, to na odcinku łacz ˛ acym ˛ x i y (który cały zawiera si˛e w P) istnieje punkt bliższy z niż y (patrz rysunek 1), a to b˛edzie sprzeczność. Dowolny punkt na odcinku xy odpowiada λx + (1 − λ)y dla pewnego λ ∈ [0, 1]. Określmy funkcj˛e zmiennej λ b˛edac ˛ a˛ kwadratem odległości takiego punktu od z: f (λ) = ||λx + (1 − λ)y − z||2 = (λx + (1 − λ)y − z)2 = λ2 (x − y)2 + 2λ(x − y)(y − z) + (y − z)2 . Łukasz Kowalik, Wst˛ep do programowania liniowego 17 Rys. 1: Dowód lematu o hiperpłaszczyźnie separujacej ˛ Policzmy pochodna: ˛ f ′ (λ) = 2λ(x − y)2 + 2(x − y)(y − z) = 2λ(x − y)2 − 2(aT x − aT y). Widzimy, że limλ→0+ f ′ (λ) < 0, a wi˛ec dla pewnego dostatecznie małego λ > 0 punkt λx + (1 − λ)y jest bliżej z niż y, sprzeczność. Kolejny lemat jest interesujacy ˛ sam w sobie. Przypomnijmy, że dla układów równań prawdziwa jest nast˛epujaca ˛ elegancka własność: Lemat 10. Dokładnie jedno jest prawda˛ dla układu równań Ax = b: (i) istnieje x taki, że Ax = b, (ii) istnieje y taki, że yT A = 0 oraz yT b 6= 0. Innymi słowy, albo układ ma rozwiazanie, ˛ albo istnieje taka kombinacja liniowa y jego równań, która prowadzi do sprzeczności. Odpowiednik tego faktu dla programów liniowych nosi nazw˛e Lemat Farkasa. Oto jego sformułowanie dla postaci dopełnieniowej: Lemat 11 (Farkasa). Dokładnie jedno jest prawda: ˛ (i) istnieje x taki, że Ax = b i x ≥ 0, (ii) istnieje y taki, że yT A ≥ 0 oraz yT b < 0. Dowód. Łatwo jest pokazać, że oba warunki nie moga˛ być równocześnie prawdziwe: jeśli Ax = x ≥ 0. b, x ≥ 0 oraz yT A ≥ 0 to yT b = yT A |{z} | {z } ≥0 ≥0 Załóżmy teraz, że nie zachodzi (i). Niech S := {Ax | x ≥ 0}. S jest zbiorem wypukłym (jako obraz przekształcenia liniowego na zbiorze wypukłym) i b 6∈ S. Z lematu o Łukasz Kowalik, Wst˛ep do programowania liniowego 18 hiperpłaszczyźnie oddzielajacej ˛ 9 , istnieja˛ takie y i b′ , że yT s ≥ b′ > yT b dla każdego s ∈ S, czyli yT Ax > yT b dla każdego x ≥ 0. Podstawiajac ˛ x = 0 dostajemy yT b < 0. Z kolei podstawiajac ˛ λei , gdzie λ > 0 jest dowolna˛ T T liczba˛ a ei wektorem jednostkowym dostajemy y (Aλei ) > yT b, czyli yT (Ai) > y λb , gdzie T Ai jest i-ta˛ kolumna˛ A. Nast˛epnie yT (Ai) ≥ limλ→+∞ y λ b , czyli yT (Ai ) ≥ 0 dla każdego i, a to daje w końcu yT A ≥ 0. B˛edziemy jednak potrzebować wersji lematu Farkasa dla postaci kanonicznej: Lemat 12 (Farkasa, wersja kanoniczna). Dokładnie jedno jest prawda: ˛ (i’) istnieje x taki, że Ax ≤ b, (ii’) istnieje y ≥ 0 taki, że AT y = 0 oraz yT b < 0. Dowód. Przypomnijmy z dowodów lematów 2 i 3, że (i’) jest równoważny temu, że istnieje x̄ taki, że [A | − A | I]x̄ = b, x̄ ≥ 0. A wi˛ec, z lematu Farkasa, prawda˛ jest albo (i’) albo istnieje ȳ taki, że yT [A | − A | I] ≥ 0, yT b < 0. Zauważmy jednak, że yT [A | − A | I] ≥ 0 jest równoważne y ≥ 0 i AT y = 0, co kończy dowód. Możemy już teraz udowodnić twierdzenie o silnej dualności (w wersji dla postaci dopełnieniowej): Twierdzenie 5 (silna dualność). Jeśli z jest wartościa˛ funkcji celu c rozwiazania ˛ optymalnego T prymalnego minimalizacyjnego PL w postaci dopełnieniowej A x = b, x ≥ 0, natomiast w jest wartościa˛ funkcji celu rozwiazania ˛ optymalnego programu dualnego, to z = w. Dowód. Ze słabej dualności, z ≥ w. Załóżmy, że z > w. Wtedy {y | AT y ≤ c, bT y ≥ z} = ∅. Z lematu Farkasa (wersja kanoniczna) mamy, że c x x < 0. = 0 oraz [x | q] ≥ 0 takie, że [A | − b] istnieje −z q q Stad ˛ x ≥ 0, q ≥ 0, Ax = bq oraz cT x < qz. Rozważamy dwa przypadki w zależności od q. Jeśli q > 0, to mamy A xq = b, xq ≥ 0 oraz cT xq < z czyli xq jest rozwiazaniem ˛ dopuszczalnym o mniejszej wartości funkcji celu niż z, sprzeczność. Jeśli q = 0, to Ax = 0 i cT x < 0. Niech x∗ b˛edzie rozwiazaniem ˛ dopuszczalnym takim, że T ∗ ∗ ∗ T ∗ c x = z. Wówczas A(x + x) = b oraz x + x ≥ 0 ale c (x + x) < cT x∗ = z, ponownie sprzeczność. 9 Stosujemy ten lemat z odwróconymi nierównościami (wystarczy pomnożyć oryginalne nierówności przez −1) Łukasz Kowalik, Wst˛ep do programowania liniowego 19 Zadanie Sprowadzić problem znajdowania rozwiazania ˛ optymalnego do problemu znajdowania rozwiazania ˛ dopuszczalnego. Zadanie Przyjmujac, ˛ że dla PL ograniczonego długość zapisu binarnego rozwiazania ˛ dopuszczalnego jest ograniczona przez wielomian rozmiaru współczynników PL (macierzy A, wektorów b, c), pokaż, że programowanie liniowe jest w co-NP ∩ NP. 4.10 Przykład zastosowania dualności: przepływy i przekroje Rozważmy problem maksymalnego przepływu (niedouczony czytelnik jest proszony o przypomnienie sobie definicji problemu maksymalnego przepływu i problemu minimalnego przekroju). Zamiast maksymalizować całkowity przepływ wypływajacy ˛ z s możemy dodać nowa˛ kraw˛ P edź (t, s) o nieskończonej przepustowości oraz zażadać ˛ warunku zachowania przepływu (tzn. w xvw = 0) także dla źródła s i ujścia t. Otrzymujemy nast˛epujacy ˛ program: zmaksymalizuj x ts P z zachowaniem warunków dla każdego v ∈ V w∈V (xvw − xwv ) = 0 (15) xvw ≤ c(v, w) dla wszystkich v, w ∈ V xvw ≥ 0 dla wszystkich v, w ∈ V P P Zauważmy, że warunki zachowania przepływu w∈V (xvw − xwv ) = 0 możemy zamienić na ˛ dopuszczalnym dla pewnego wierzchołka Pw∈V (xvw −xwv ) ≤ 0. Istotnie, gdyby w rozwiazaniu (x − x ) < 0, czyli mniej wypływa z v ni ż wpływa do v, to ponieważ całkowity vw wv w∈V przepływ wpływajacy ˛ do wszystkich wierzchołków jest równy wypływajacemu ˛ wi˛ec z jakiegoś innego wierzchołka q musiałoby wi˛ecej wypływać niż wpływać, czyli rozwiazanie ˛ nie byłoby dopuszczalne. W ten sposób otrzymaliśmy PL w postaci standardowej: zmaksymalizuj x ts P z zachowaniem warunków w∈V (xvw − xwv ) ≤ 0 xvw ≤ c(v, w) xvw ≥ 0 dla każdego v ∈ V dla wszystkich v, w ∈ V dla wszystkich v, w ∈ V (16) Skonstruujmy program dualny. Dla każdego warunku zachowania przepływu program dualny b˛edzie zawierał zmienna˛ zv . Podobnie, każdemu warunkowi przepustowości w (16) odpowiada zmienna yvw w programie dualnym. Każda zmienna xvw programu (16) wyst˛epuje raz w warunku zachowania przepływu dla v (ze współczynnikiem 1), raz w warunku zachowania przepływu dla w (ze współczynnikiem −1) oraz raz w warunku przepustowości dla vw (ze współczynnikiem 1). Zmienna xvw b˛edzie wi˛ec odpowiadać nierówności o lewej stronie zv − zw + yvw . Zmienna xvw jest nieujemna wi˛ec nierówność b˛edzie postaci zv − zw + yvw ≥?, gdzie ? to współczynnik w funkcji celu przy xvw , czyli 1 gdy vw = ts i 0 w przeciwnym przypadku. Możemy już napisać cały program dualny: Łukasz Kowalik, Wst˛ep do programowania liniowego P zminimalizuj vw c(v, w)yvw z zachowaniem warunków zv − zw + yvw ≥ 0 zt − zs + yts ≥ 1 yvw ≥ 0 zv ≥ 0 20 dla każdego vw 6= ts (17) dla wszystkich v, w ∈ V dla każdego v ∈ V Zauważmy, że gdyby w optymalnym rozwiazaniu ˛ (17) yts > 0 to skoro c(t, s) = +∞, wi˛ec (17) jest nieograniczony. Ale wtedy (16), jako program dualny do (17), jest sprzeczny, a przecież zerowy przepływ jest zawsze dopuszczalny. Stad ˛ yts = 0. Uwzgl˛edniajac ˛ t˛e równość po niewielkich zabiegach kosmetycznych dostajemy: P zminimalizuj vw c(v, w)yvw z zachowaniem warunków yvw ≥ zw − zv dla każdego vw 6= ts zt − zs ≥ 1 (18) yvw ≥ 0 dla wszystkich v, w ∈ V zv ≥ 0 dla każdego v ∈ V Zauważmy, że gdyby dołożyć warunki zv , yvw ∈ {0, 1} to dostalibyśmy dokładnie problem minimalnego przekroju! W szczególności, dla minimalnego przekroju (S, S̄), rozwiazanie ˛ postaci zv = 0 dla v ∈ S, zw = 1 dla w ∈ S̄, yvw = zv − zw jest rozwiazaniem ˛ dopuszczalnym (18). Na podstawie słabej dualności dostajemy znajomy fakt: max-przepływ ≤ min-przekrój. Gdyby teraz udowodnić, że rozwiazanie ˛ optymalne (18) ograniczonego do wartości {0, 1} jest też rozwiazaniem ˛ optymalnym (18), to z twierdzenia o dualności mielibyśmy jako wniosek twierdzenie o maksymalnym przepływie i minimalnym przekroju, tzn. że wartość maksymalnego przepływu jest równa przepustowości minimalnego przekroju. Można tak uczynić, my jednak w inny sposób pokażemy, że twierdzenie o maksymalnym przepływie i minimalnym przekroju jest szczególnym przypadkiem teorii dualności PL. Wystarczy pokazać, że min-przekrój ≤ max-przepływ. Nawet mniej: wystarczy skonstruować dowolny przekrój o przepustowości ≤ max-przepływ. Niech x∗ b˛edzie optymalnym rozwiazaniem ˛ (16) natomiast z∗ , y∗ optymalnym rozwiazaniem ˛ (18). Bez straty ogólności możemy ˛ rozwiazanie ˛ dozałożyć, że zs∗ = 0 (jeśli tak nie jest ustawiamy zv∗ := zv∗ − zs∗ , otrzymujac ∗ puszczalne o tej samej wartości funkcji celu). Niech S = {v | zv < 1} i T = V − S. Zauważmy, że s ∈ S oraz t ∈ T , a wi˛ ec (S, T ) jest przekrojem. Pokażemy, że jego przepustowość jest równa P ∗ xts , czyli że c(S, T ) = v∈S,w∈T c(v, w) = x∗ts . W tym celu rozważmy dwa rodzaje kraw˛edzi (v, w) przecinajacych ˛ przekrój: ∗ ∗ 1. v ∈ S, w ∈ T . Wtedy yvw ≥ zw∗ − zv∗ > 0. Stad ˛ yvw 6= 0 i na podstawie komplementarnych warunków swobody, odpowiedni warunek w programie prymalnym musi być spełniony z równościa,˛ czyli x∗vw = c(v, w). 2. v ∈ T, w ∈ S, (v, w) 6= (t, s). Wtedy zv∗ − zw∗ + y ∗ vw ≥ zv∗ − zw∗ > 0. Stad ˛ warunek zv∗ − zw∗ + y ∗vw ≥ 0 w programie (18) nie jest spełniony z równościa,˛ wi˛ec na mocy Łukasz Kowalik, Wst˛ep do programowania liniowego 21 komplementarnych warunków swobody odpowiadajaca ˛ mu zmienna x∗vw w (16) jest równa 0. Pokazaliśmy, że c(S, T ) = X x∗vw − v∈S w∈T X x∗wv . w∈T,v∈S (w,v)6=(t,s) Jeszcze kilka przekształceń10 c(S, T ) = X x∗vw − v∈S w∈T = x∗ts + X X x∗wv w∈T,v∈S (w,v)6=(t,s) x∗vw − v∈S w∈T X x∗wv w∈T v∈S X X X ∗ X ∗ = x∗ts + xvw + x∗vw − x∗wv xwv + v∈S w∈T = x∗ts + X x∗vw − v∈S w∈V = x∗ts + XX v∈S w∈V | w∈T v∈S v,w∈S X w,v∈S x∗wv w∈V v∈S (x∗vw − x∗vw ) = x∗ts . {z 0 } 5 Podzi˛ekowania Dzi˛ekuj˛e Adamowi Iwanickiemu za uważna˛ lektur˛e i liczne uwagi. Literatura • Notatki do wykładu „Advanced Algorithms” E. Demiane’a i D. Kargera (2003) http://courses.csail.mit.edu/6.854/fall03/ • Notatki do wykładu „Advanced Algorithms” M. Goemans’a (1994) http://www-math.mit.edu/~goemans/notes-lp.ps • O zastosowaniach PL do algorytmów aproksymacyjnych można poczytać w V. Vazirani „Algorytmy Aproksymacyjne” WNT 2005. 10 właściwie już widać, że z prawej strony mamy przepływ płynacy ˛ przez przekrój, a to jest równe po prostu x∗ts , ale kto o tym pami˛eta? Łukasz Kowalik, Wst˛ep do programowania liniowego 22 • O programowaniu liniowym (z perspektywy algorytmu Simplex) można też poczytać w Cormen, Leiserson, Rivest, Stein „Wprowadzenie do algorytmów”, Wydanie ≥ 6, WNT 2004.