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ć:
cT 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.

Podobne dokumenty