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ń wystarczywymienić
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}.

Podobne dokumenty