Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania...

142
Wyklady z programowania liniowego A. Pawel Wojda Wydzial Matematyki Stosowanej AGH

Transcript of Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania...

Page 1: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Wykłady z programowania liniowego

A. Paweł Wojda

Wydział Matematyki Stosowanej AGH

Page 2: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

2

Page 3: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Spis treści

1 Wstęp 5

2 Problem programowania liniowego 72.1 PPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2 Definicje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3 ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Opis algorytmu sympleks 133.1 Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2 Tabele sympleksowe . . . . . . . . . . . . . . . . . . . . . . . . . 193.3 Szczegóły metody . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.3.1 Od czego zacząć? . . . . . . . . . . . . . . . . . . . . . . . 213.3.2 Czy sympleks może się zaciąć? . . . . . . . . . . . . . . . 233.3.3 Cykliczność . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.4 Ile jest rozwiązań optymalnych? . . . . . . . . . . . . . . . . . . . 303.5 Skuteczność algorytmu sympleks . . . . . . . . . . . . . . . . . . 303.6 Wyjaśnienie nazwy sympleks . . . . . . . . . . . . . . . . . . . . . 353.7 ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4 Dualizm 374.1 Problem dualny programowania liniowego . . . . . . . . . . . . . 374.2 Korzyści . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4.2.1 Przykład . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.3 Interpretacja ekonomiczna . . . . . . . . . . . . . . . . . . . . . . 444.4 Dualność ogólniej . . . . . . . . . . . . . . . . . . . . . . . . . . . 464.5 ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

5 Zredukowana metoda sympleksowa 515.1 Macierzowy opis słownika . . . . . . . . . . . . . . . . . . . . . . 515.2 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.3 Programowanie całkowite . . . . . . . . . . . . . . . . . . . . . . 585.4 ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

3

Page 4: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

4 SPIS TREŚCI

6 Zadanie ograniczone 656.1 Sympleks dla zadania ograniczonego . . . . . . . . . . . . . . . . 666.2 Inicjalizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

6.2.1 ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

7 Interpretacje i zastosowania 757.1 Interpretacja geometryczna . . . . . . . . . . . . . . . . . . . . . 75

7.1.1 n = 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757.1.2 n=3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777.1.3 Komentarz . . . . . . . . . . . . . . . . . . . . . . . . . . 79

7.2 Powłoki wypukłe zbiorów . . . . . . . . . . . . . . . . . . . . . . 797.3 Układy nierówności i równań liniowych . . . . . . . . . . . . . . . 827.4 Wielościany i półprzestrzenie . . . . . . . . . . . . . . . . . . . . 857.5 Metoda Fouriera–Motzkina . . . . . . . . . . . . . . . . . . . . . 867.6 ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

8 Metody sieciowe 918.1 Grafy i sieci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

8.1.1 Macierz sąsiedztw grafu zorientowanego . . . . . . . . . . 938.1.2 Macierz incydencji . . . . . . . . . . . . . . . . . . . . . . 938.1.3 ścieżki i cykle . . . . . . . . . . . . . . . . . . . . . . . . . 94

8.2 Sieci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948.3 Przepływy w sieciach . . . . . . . . . . . . . . . . . . . . . . . . . 948.4 Maksymalny przepływ a dualność . . . . . . . . . . . . . . . . . . 1008.5 Algorytm Forda–Fulkersona . . . . . . . . . . . . . . . . . . . . . 1018.6 Przepływ całkowity. Zbieżność Algorytmu F–F . . . . . . . . . . 1028.7 Wnioski i zastosowania . . . . . . . . . . . . . . . . . . . . . . . . 1048.8 Przepustowość wierzchołków . . . . . . . . . . . . . . . . . . . . . 1098.9 Twierdzenie Mengera . . . . . . . . . . . . . . . . . . . . . . . . . 110

8.9.1 ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

9 Problem transportowy 1159.1 Drzewa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159.2 Drzewa skierowane . . . . . . . . . . . . . . . . . . . . . . . . . . 1189.3 Problem transportowy - simpleks sieciowy . . . . . . . . . . . . . 119

9.3.1 Iteracje . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219.3.2 Inicjalizacja . . . . . . . . . . . . . . . . . . . . . . . . . . 1309.3.3 Dekompozycja problemu transportowego . . . . . . . . . . 1319.3.4 Modyfikacja uczciwych cen w wierzchołkach. . . . . . . . 1339.3.5 Procedura unikania zapętlenia . . . . . . . . . . . . . . . 134

9.4 Zapotrzebowanie mniejsze od zasobów . . . . . . . . . . . . . . . 137

Bibliografia 138

Index 141

Page 5: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Rozdział 1

Wstęp

Jeśli nie jesteś w stanie czegoś wytłumaczyć 5-letniemu dziecku,to znaczy, że nie rozumiesz tego do końca

Albert Einstein

Niniejsza książka może być przydatna studentom różnych kierunków, szcze-gólnie zaś kierunków ekonomicznych i technicznych. Pisałem ją jednak główniez myślą o studentach Wydziału Matematyki Stosowanej AGH, dla których pro-wadzę od trzech lat semestralny wykład "Programowanie liniowe".

Mimo że istnieje wiele bardzo dobrych książek do nauki programowania li-niowego, chcę przekazać studentom podręcznik, który zawiera dokładnie treśćmoich wykładów, w tym samym stopniu szczegółowości. Wykłady te obejmująrównież związane z programowaniem liniowym elementy optymalizacji kombi-natorycznej: metody sieciowe i ich zastosowania w teorii grafów.

Mam nadzieję, że studenci Wydziału Matematyki Stosowanej zetkną się wtym podręczniku z matematyką, która rozwiązuje w niezbyt skomplikowany spo-sób trudne problemy praktyczne.

Programowanie liniowe jest szczególnym zagadnieniem programowania ma-tematycznego. Ogólny problem programowania matematycznego1 możnasformułować następująco:

Niech X będzie dowolnym zbiorem i niech f będzie funkcją zdefiniowaną wzbiorze X o wartościach w zbiorze liczb rzeczywistch. Znajdź wartość maksy-malną f(x) dla x ∈ X.

Będziemy pisać krótko:

f(x)→ max

1Warto zapamiętać tę definicję dlatego, że słowo "programowanie"występuje także w in-formatyce w znaczeniu bardzo różnym od rozważanego.

5

Page 6: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

6 Wstęp

x ∈ X

W przypadku programowania liniowego o zbiorze X zakładamy, że jest pod-zbiorem Rn zdefiniowanym przez układ nierówności liniowych, zaś funkcja fjest funkcją liniową.

Rozdziały 2–6 są poświęcone samemu programowaniu liniowemu. Kolejnowięc przedstawiona jest metoda sympleks (rozdz. 3), zasada dualności (rozdz.4), zredukowana metoda sympleks (rozdz. 5).

W rozdziale 6 omówiona jest szczególna sytuacja zadania ograniczonego.

Pozostałe rozdziały to interpretacje i zastosowania geometryczne programo-wania liniowego (rozdz. 7) i metody sieciowe z przykładami ich zastosowań wteorii grafów (rozdz. 8). Podrozdział 7.1, w którym jest mowa o interpretacjiprogramowania liniowego w przypadkach dwu- i trzy-wymiarowym, może byćczytany znacznie wcześniej niż występuje w tekście, jednak koniecznie po opisiemetody sympleks – a więc po rozdziale 3.

Poświęcony przepływom w sieciach rozdział 8 zawarty jest w podręczniku zdwóch powodów. Powodem pierwszym jest fakt, że choć metoda sieci rozwiązujetylko pewien szczególny problem programowania liniowego, niemniej dla tegoszczególnego problemu algorytm sieciowy jest szybszy. Po drugie, mamy w tensposób okazję do przedstawienia pięknego twierdzenia o maksymalnym przepły-wie i minimalnym przekroju. Wynikające z niego twierdzenia: Halla, Königa–Egerváryego i Mengera, dowodzą, jak głębokim jest ono wynikiem. Przekonamysię także, że twierdzenie to jest konsekwencją zasady dualności.

Pozostaje mi wyjaśnić znaczenie dwóch znaczków pojawiających się w róż-nych miejscach tekstu. oznacza, że coś definitywnie się skończyło, najczęściejjest to znak końca dowodu twierdzenia (lub sygnał, że dowodu w ogóle nie bę-dzie), czasami występuje na końcu przykładu. � występuje w tekście, gdy nachwilę przerywamy dany fragment (na ogół przykład) do którego jeszcze wró-cimy.

Adam Paweł Wojda

Kraków, 2013 [email protected]

Page 7: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Rozdział 2

Problem programowanialiniowego

2.1 PPL

Rozważania o programowaniu liniowym rozpocznijmy od przykładu.

Przykład 2.1.1 Właściciel ciężarówki przewozi cukier, mąkę i chipsy z miej-scowości A do B. W ciężarówce mieści się towar o objętości co najwyżej 7000litrów i o wadze co najwyżej 5 ton. 1 kilogram cukru ma objętość 1,5 litra, 1 kilo-gram mąki 2 litry, natomiast 1 kilogram chipsów ma objętość 4 litrów. Załóżmytakże, że nasz przewoźnik zobowiązał się do dostarczenia co najmniej 1000 kgmąki i cukru. Zysk od przewozu poszczególnych towarów jest następujący:

– 8 zł za 100 kg cukru,

– 10 zł za 100 kg mąki,

– 25 zł za 100 kg chipsów.

Ile cukru, mąki i chipsów powinien załadować właściciel ciężarówki, abyzmaksymalizować swój zysk?

Matematyczny model tak postawionego zadania jest następujący:Oznaczmy przez x1 – wagę cukru, x2 – wagę mąki, x3 – wagę chipsów (za każdymrazem w setkach kilogramów). Skoro ciężarówka może zabrać co najwyżej 5 tontowarów, musi zachodzić nierówność

100x1 + 100x2 + 100x3 ≤ 5000.

Z kolei ograniczenie objętości wyraża się wzorem

150x1 + 200x2 + 400x3 ≤ 7000.

7

Page 8: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8 Problem programowania liniowego

Zobowiązanie dostarczenia 1000 kg mąki i cukru oznacza spełnienie wzoru

100x1 + 100x2 ≥ 1000

Zysk właściciela wynosi

z = 8x1 + 10x2 + 25x3,

x1, x2 i x3 muszą być oczywiście nieujemne.Po uproszczeniach otrzymamy więc problem programowania matematycznego:

f(x1, x2, x3) = 8x1 + 10x2 + 25x3 → max,

w zbiorze

x1 +x2 +x3 ≤ 50

1, 5x1 +2x2 +4x3 ≤ 70x1 +x2 ≥ 10

xj ≥ 0 dla j = 1, 2, 3.

Problemem programowania liniowego, lub krótko: PPL, będziemy na-zywać problem programowania matematycznego sformułowany następująco:

Niech cj oraz aij dla i = 1, ...,m, j = 1, ..., n będą liczbami rzeczywistymi.Znaleźć maksimum funkcji f(x1, ..., xn) =

∑nj=1 cjxj przy ograniczeniach:{ ∑n

j=1 aijxj ≤ bi (i = 1, ...,m)

xj ≥ 0 (j = 1, .., n)(2.1)

Często wygodnie będzie nam pisać:∑nj=1 aijxj ≤ bi (i = 1, ...,m)

xj ≥ 0 (j = 1, .., n)f(x1, ..., xn) =

∑nj=1 cjxj → max

(2.2)

f(x1, ..., xn) =∑nj=1 cjxj nazywamy funkcją celu, zaś nierówności (2.2) ogra-

niczeniami. Zmienne x1, ..., xn nazywamy zmiennymi decyzyjnymi. Za-uważmy, że zarówno funkcja celu, jak i lewe strony nierówności we wzorze (2.2)są funkcjami liniowymi.

Problem programowania liniowego można także sformułować następująco: zmaksymalizować cxprzy warunkach: Ax ≤ b

x ≥ Θn

(2.3)

gdzie:c = (c1, ..., cn),x = (xj)j=1,...,n ∈ Rn,Θn = (0, ..., 0) ∈ Rn,A = (aij)i=1,...,m;j=1,...,n ∈ Rm×n.

Page 9: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

2.1 PPL 9

Postać PPL przedstawioną wzorem (2.2) lub (2.3) nazywamy postacią stan-dardową PPL.

Uwaga. Biznesmeni mają dwie strategie zachowań:

1) maksymalizują swój zysk (model optymistyczny),

2) minimalizują koszty (model pesymistyczny) – oczywiście przy założonychz góry minimalnych efektach.

Pesymistyczny model zachowań może mieć formę analityczną taką, jak w poniż-szym przykładzie.

Przykład 2.1.2 PPL w postaci niestandardowejNiech będzie dany następujący problem:

zminimalizować: x1 − x2 + x3

przy ograniczeniach:

x1 −2x2 +x3 ≤ 2x1 −x3 ≥ 1x1 +x2 +2x3 = 4

xi ≥ 0 (i = 1, 2, 3).

Zauważmy, że za pomocą banalnych operacji arytmetycznych można powyż-szy problem sprowadzić do PPL w postaci standardowej:

zmaksymalizować: −x1 + x2 − x3

przy ograniczeniach:

x1 −2x2 +x3 ≤ 2−x1 +x3 ≤ −1x1 +x2 +2x3 ≤ 4−x1 −x2 −2x3 ≤ −4

xi ≥ 0 (i = 1, 2, 3).

Zadanie polegające na maksymalizacji funkcji f : X → R jest równoważneminimalizacji funkcji g : X → R zdefiniowanej wzorem g(x) = −f(x). Każdąnierówność postaci

n∑j=1

aijxj ≥ bi

można zastąpić równoważną jej nierównościąn∑j=1

(−aij)xj ≤ −bi,

zaś równośćn∑j=1

aijxj = bi

Page 10: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

10 Problem programowania liniowego

dwiema nierównościami:n∑j=1

aijxj ≤ bi

orazn∑j=1

aijxj ≥ bi.

Tak więc mimo że wcześniej zdefiniowaliśmy PPL w postaci na pozór dość szcze-gólnej (nazwaliśmy ją standardową), równie dobrze można powiedzieć, że PPLpolega na maksymalizacji lub minimalizacji formy liniowej w zbiorze, który jestrozwiązaniem układu nierówności i równań liniowych w Rn.

Problemem rozstrzygania niesprzeczności i rozwiązywania układów nierów-ności i równań liniowych będziemy się zajmować w rozdziale 7.

2.2 Definicje

Niech dany będzie problem programowania liniowego (w postaci standardowej)Ax ≤ b

x ≥ Θn

cx → max

(2.4)

x = (x1, ..., xn) (lub: xj (j = 1, ..., n)) nazywamy rozwiązaniem dopusz-czalnym PPL (2.4) jeśli

x ≥ Θn (inaczej: xj ≥ 0, dla j = 1, ..., n),

Ax ≤ b (inaczej:∑nj=1 aijxj ≤ bi, i = 1, ...,m).

Rozwiązaniem optymalnym PPL (2.4) (lub (2.3)) nazywamy takie rozwią-zanie dopuszczalne x, dla którego funkcja f(x) = cx przyjmuje wartość maksy-malną.

Oczywiście, może się zdarzyć, że PPL w ogóle nie ma rozwiązań dopuszczal-nych, tzn. zbiór

{x ∈ Rn : x ≥ Θn i Ax ≤ b} (2.5)

jest zbiorem pustym. Mówimy wówczas, że PPL (2.4) jest problemem sprze-cznym (lub, że warunki: x ≥ Θn i Ax ≤ b są sprzeczne).

Jeśli zbiór (2.5) jest niepusty i funkcja f w tym zbiorze nie ma maksimum,to mówimy że PPL jest nieograniczony. W rzeczy samej, zbiór (2.5) jest oczy-wiście domknięty w Rn, a funkcja f - ciągła. Jeśli więc zbiór (2.5) jest niepustyi f nie przyjmuje w tym zbiorze maksimum, to f jest w zbiorze nieograniczona(sam zbiór także jest nieograniczony).

Page 11: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

2.3 ćwiczenia 11

Przykład 2.2.1 Problemx1 − x2 ≤ 2x2 − x1 ≤ 3

xi ≥ 0 (i = 1, 2)x1 + x2 → max

jest oczywiście sprzeczny.

Przykład 2.2.2 Problemx1 − x2 ≤ 0

−3x1 + x2 ≤ 0xi ≥ 0 (i = 1, 2)

x1 + x2 → maxjest nieograniczony.

Rzeczywiście, dla dowolnego t ≥ 0, x1 = t, x2 = 2t jest rozwiązaniemdopuszczalnym. Wartość funkcji f(x1, x2) = x1 + x2 = 3t może być wówczasdowolnie duża.

2.3 ćwiczenia

Ćwiczenie 2.3.1 Sprowadź poniższe problemy programowania liniowego do po-staci standardowej:

a) zmaksymalizuj: x1 + 2x2 − 3x3

przy warunkach:

x1 −x2 +x3 ≤ 3x1 −x3 ≥ 2x1 +x2 −2x3 = 4

xi ≥ 0 (i = 1, 2, 3),

b) zminimalizuj: −x1 + 2x2 − 3x3 − x4

przy warunkach:

x1 −x2 +3x3 −2x4 = 2−2x1 −x2 +2x4 ≥ 3

xi ≥ 0 (i = 1, ..., 4),.

c)x1 +2x2 −x3 −3x4 ≥ 2x1 +2x2 +x3 +3x4 = 1

xi ≥ 0 (i = 1, ..., 4)

−x1 − 2x2 + 3x3 + x4 → min .

Ćwiczenie 2.3.2 Problem diety Jest to znany, klasyczny wręcz problem.Przedstawmy go w wielkim uproszczeniu (pełne dane można znaleźć w [23]).

Ola postanowiła odżywiać się najtaniej, jak to możliwe, dostarczając jednakswojemu organizmowi odpowiednich ilości białka, witamin A i C, wapnia orazenergii (czyli składników żywności). Postanowiła odżywiać się mlekiem, serem,chlebem, cielęciną i marchewką. W poniższym zestawieniu podano zawartościodpowiednich składników w tych produktach (na 100 g produktu).

Page 12: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

12 Problem programowania liniowego

składniki żywności mleko ser chleb cielęcina marchewbiałko (g) 3 38 0 20 1wit A (jedn.) 140 120 0 0 5760wit C (mg) 1 0 0 0 3wapń (mg) 120 1450 90 8 19energia (kcal) 53 200 240 82 21

Zestawienia prezentujące zapotrzebowania dobowe Oli na poszczególne skład-niki oraz ceny produktów podajemy poniżej.

białko 70wit A 5000wit C 75wapń 70energia 2700

mleko 1,5 zł/łser 5 zł//kgchleb 1,5 zł//kgcielęcina 12 zł//kgmarchew 0,8 zł//kg

Ułóż PPL, którego rozwiązanie będzie dla Oli wskazówką, jak za najniższącenę zaspokoić potrzeby swojego organizmu. Waga dziennego pożywienia niemoże przekroczyć 2 kg1.

1Po to, by Ola nie musiała jeść zbyt dużo marchewki z chlebem.

Page 13: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Rozdział 3

Opis algorytmu sympleks

3.1 WprowadzenieW niniejszym rozdziale przedstawiony zostanie algorytm sympleks. Jak zoba-czymy, algorytm ten rozwiązuje problemy programowania liniowego. Zaczniemyod rozwiazania prostych przykładów. Będziemy systematycznie zwiększać sto-pień trudności przykładów, by nieco później, w podrozdziale 3.3, podać szczegó-łowy opis algorytmu, łącznie ze sposobami wybrnięcia z problemów, które mogąsie pojawić (wyznaczenie pierwszego rozwiązania dopuszczalnego i wystąpieniezjawiska cykliczności).

Przykład 3.1.1.Rozważmy PPL

x1 +2x2 +3x3 ≤ 52x1 +3x2 +5x3 ≤ 83x1 +x2 +3x3 ≤ 4

xi ≥ 0 (i = 1, ..., 3)z = 2x1 +x2 +3x3 → max

(3.1)

Pierwszym krokiem będzie wprowadzenie zmiennych dodatkowych x4, x5, x6,które zdefiniujemy następująco x4 = 5 −x1 −2x2 −3x3

x5 = 8 −2x1 −3x2 −5x3

x6 = 4 −3x1 −x2 −3x3

(3.2)

Rozważmy teraz problem następujący

x4 = 5 −x1 −2x2 −3x3

x5 = 8 −2x1 −3x2 −5x3

x6 = 4 −3x1 −x2 −3x3

xi ≥ 0 (i = 1, ..., 6)z = 2x1 +x2 +3x3 → max

(3.3)

13

Page 14: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

14 Opis algorytmu sympleks

Jest zupełnie oczywiste, że problemy (3.1) i (3.3) są równoważne w tymsensie, że każde rozwiązanie optymalne problemu (3.1) daje nam pewne roz-wiązanie optymalne problemu (3.3) (wystarczy wartości zmiennych x4, x5 i x6

wyznaczyć z równości (3.2)). Podobnie, każde optymalne rozwiązanie problemu(3.3) dostarcza nam optymalnego rozwiązania (3.1).

Metoda będzie polegała na tym, że mając pewne rozwiązanie dopuszczalneproblemu (3.3) x, będziemy szukali następnego rozwiązania x′ takiego, że f(x′) >f(x), a więc lepszego. Takie postępowanie będziemy powtarzali wielokrotnie,otrzymując rozwiązania coraz bardziej zbliżone do optymalnego (o ile takie roz-wiązanie istnieje).

O pierwsze rozwiązanie dopuszczalne w przykładzie nietrudno. Niech

x1 = x2 = x3 = 0.

Wtedy oczywiście:

x4 = 5, x5 = 8, x6 = 4, z = 0.

Przyjrzyjmy się teraz wzorowi na z w (3.3). Ponieważ współczynniki przy xi(i = 1, 2, 3) są dodatnie, jeśli zwiększymy wartość którejkolwiek ze zmiennychxi (i = 1, 2, 3), wówczas zwiększy się także wartość z. Wartość ta będzie się tymszybciej powiększać, im większy jest współczynnik (dodatni) przy powiększanymx we wzorze na z.

Współczynnikiem przy x1 jest 2, przy x2 – 1, natomiast przy x3 – 3. Bę-dziemy więc zwiększać wartość x3. O ile można powiększyć x3 bez zmienianiawartości pozostałych zmiennych, by otrzymane w ten sposób nowe rozwiązaniebyło dopuszczalne? Wartość x3 można zwiększyć o tyle, by zachowane zostaływ dalszym ciągu nierówności:

x4 ≥ 0, x5 ≥ 0, x6 ≥ 0

(pamiętamy, że w naszym rozwiązaniu x1 = x2 = x3 = 0).łatwo zauważyć, że:

x4 ≥ 0⇒ x3 ≤5

3, x5 ≥ 0⇒ x3 ≤

8

5, x6 ≥ 0⇒ x3 ≤

4

3.

Największą wartością x3, jaką możemy wybrać, jest

x3 =4

3.

Wtedyz = 4.

Zauważmy jak oczywista jest tu metoda postępowania. Funkcja celu wyrażasię za pomocą zmiennych, które w rozwiązaniu dopuszczalnym miały począt-kową wartość równą zero. Jasne więc było, że jeśli zwiększyć wartość tej zmien-nej, która we wzorze na z ma współczynnik dodatni, zwiększy się także wartość

Page 15: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

3.1 Wprowadzenie 15

z. Z kolei ograniczenia xi ≥ 0 i wzory na x4, x5, x6 pozwoliły z łatwościąustalić, o ile wolno nam zwiększyć wartości poszczególnych zmiennych tak, byotrzymać rozwiązanie dopuszczalne.

Teraz wartość zero przyjmują zmienne x1, x2 oraz x6, natomiast x3 = 43 .

Przedstawmy x3 za pomocą x1, x2 i x6 korzystając z trzeciego z równań (3.2)

x3 =4

3− x1 −

1

3x2 −

1

3x6. (3.4)

Tak otrzymane x3 wstawmy do wzoru na z:

z = 4− x1 −1

2x6.

Wobec warunków x1 ≥ 0 i x6 ≥ 0 jest oczywiste, że maksymalną wartością,jaką może przyjąć z, jest 4.

Rozwiązanie:

x1 = 0, x2 = 0, x3 =4

3, z = 4

jest rozwiązaniem optymalnym.

To co zrobiliśmy w przykładzie 3.1.1 spróbujmy teraz przenieść na przypadekogólny. Niech będzie dany PPL∑n

j=1 aijxj ≤ bi (i = 1, ...,m)

xj ≥ 0 (j = 1, .., n)(3.5)

z =∑nj=1 cjxj → max

Page 16: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

16 Opis algorytmu sympleks

Problem ten jest oczywiście równoważny problemowi znalezienia maksymal-nej wartości z spełniającej układ równań:

xn+i = bi−

∑nj=1 aijxj (i = 1, ...,m)

z =∑nj=1 cjxj

(3.6)

przy założeniu, że xl ≥ 0, dla l = 1, ..., n+m.Podobnie jak to miało miejsce w przykładzie (3.1.1), także w przypadku

ogólnym będziemy rozważali układ równańxn+i = bi −

∑nj=1 aij xj (i = 1, ...,m)

z = z0 +∑nj=1 cj xj

(3.7)

skojarzony z PPL (3.5) równoważny układowi (3.6) w tym sensie, że otrzymanyz niego przez być może wielokrotne zamiany ról zmiennych znajdujących się poprawej i lewej stronie układu.

Definicja 3.1.1 Układ równań (3.7) nazywamy słownikiem PPL (3.5). Sło-wnik (3.7) nazywamy słownikiem dopuszczalnym PPL (3.5), jeżeli po pod-stawieniu xj = 0 dla j = 1, ..., n, otrzymamy rozwiązanie dopuszczalne, inaczejmówiąc, jeżeli

x1 = ... = xn = 0; xn+1 = b1, ..., xn+m = bm (3.8)

jest rozwiązaniem dopuszczalnym PPL (3.5).Zmienne po lewej stronie znaków równości w słowniku nazywamy zmien-

nymi bazowymi, zmienne po prawej stronie – niebazowymi.

Zwróćmy uwagę, że dla słownika (3.7) wektor x = (x1, ..., xn+m) zdefinio-wany wzorem (3.8) nie musi być rozwiązaniem dopuszczalnym PPL (3.5). żebyx był rozwiązaniem dopuszczalnym wszystkie liczby b1, ..., bm muszą być nie-ujemne, a to wcale nie musi zachodzić. Stąd następna definicja.

Definicja 3.1.2 Wektor (xk)k=1,...,n+m dany równaniami (3.8) nazywamy roz-wiązaniem bazowym.

W przykładzie 3.1.1 mieliśmy do czynienia z dwoma słownikami:x4 = 5 −x1 −2x2 −3x3

x5 = 8 −2x1 −3x2 −5x3

x6 = 4 −3x1 −x2 −3x3

z = 2x1 +x2 +3x3

(3.9)

oraz

Page 17: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

3.1 Wprowadzenie 17

x3 = 4

3 −x1 − 13x2 − 1

3x6

x4 = 1 +2x1 −x2 +x6

x5 = 43 +3x1 − 4

3x2 + 53x6

z = 4 −x1 −x6

(3.10)

Słownika (3.10) nie mieliśmy potrzeby wypisywać wcześniej. żeby go otrzy-mać, należy x3 ze wzoru (3.4) wstawić do wzorów na z, x4 i x5 w słowniku(3.9).

W słowniku (3.9) zmiennymi bazowymi są x4, x5 i x6, zaś x1, x2, x3 są zmien-nymi niebazowymi. W (3.10) zmienne bazowe to x3, x4, x5, zmienne niebazowe– x1, x2, x6.

Oba słowniki są dopuszczalne bo, dla przykładu, rozwiązanie bazowe (3.10)x1 = x2 = x6 = 0, x3 = 4

3 , x4 = 1, x5 = 43 , jest równocześnie rozwiązaniem

dopuszczalnym (xi ≥ 0 dla i = 1, ..., 6)).

W przykładzie 3.1.1 wystarczyła jedna iteracja do otrzymania rozwiązaniaoptymalnego. W następnym przykładzie zobaczymy, że tak być nie musi. Opistego przykładu ułatwią nam nowe definicje.

Przykład 3.1.2.Rozwiążemy PPL:

x1 +2x2 +x3 ≤ 42x1 +x2 +x3 ≤ 3x1 −x2 +4x3 ≤ 2

xi ≥ 0 i = 1, 2, 3

(3.11)

z = 3x1 + x2 + 2x3 → max

Zdefiniujmy zmienne dodatkowe (są one równocześnie zmiennymi bazowymipierwszego słownika).

x4 = 4 −x1 −2x2 −x3

x5 = 3 −2x1 −x2 −x3

x6 = 2 −x1 +x2 −4x3

xi ≥ 0 (i = 1, ..., 6)

(3.12)

Największym współczynnikiem dodatnim w funkcji celu jest 3 (współczyn-nik przy x1), stąd nową zmienną bazową będzie x1. Taką zmienną xj będziemynazywali zmienną wchodzącą.

Zmienną wychodzącą, czyli taką, która przestanie w następnym krokubyć zmienną bazową, jest xn+i (i ∈ {1, ...,m}), dla którego nierówność xn+i ≥ 0daje najostrzejsze ograniczenie od góry na wartość zmiennej wchodzącej. Inaczejmówiąc, xn+i0 jest zmienną wychodzącą słownika (3.7), jeżeli

bi0ai0j

≥ 0 i i0 :bi0ai0j

= min

{biaij

: aij 6= 0 ∧ biaij≥ 0, i = 1, ...,m

}.

Page 18: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

18 Opis algorytmu sympleks

W naszym przykładzie zmienną wychodzącą będzie x5, łatwo bowiem spraw-dzić, że:

x4 ≥ 0⇒ x1 ≤ 4,

x5 ≥ 0⇒ x1 ≤ 32 ,

x6 ≥ 0⇒ x1 ≤ 2.

Obliczamy więc x1 z drugiego równania słownika (3.12)

x1 =3

2− 1

2x2 −

1

2x3 −

1

2x5 (3.13)

i tworzymy nowy słownik o zmiennych bazowych x1, x4, x6, przepisując (3.13)jako pierwsze równanie i tworząc pozostałe dwa z pierwszego i trzeciego z równańsłownika (3.12), zastępując w nich x1 prawą stroną wzoru (3.13). Nową funkcjęcelu otrzymamy, wstawiając x3 dane wzorem (3.13) do starej funkcji celu.

W rezultacie otrzymamy słownik dopuszczalny:

x1 = 32 − 1

2x2 − 12x3 − 1

2x5

x4 = 52 − 3

2x2 − 12x3 + 1

2x5

x6 = 12 + 3

2x2 − 72x3 + 1

2x5

z = 92 − 1

2x2 + 12x3 − 3

2x5

(3.14)

Teraz jako zmienną wchodzącą musimy wybrać x3, ponieważ tylko ta zmiennama współczynnik dodatni we wzorze na z. Nierówności xi ≥ 0 dla i = 1, 4, 6dają, odpowiednio, nierówności dla wchodzącej zmiennej bazowej: x3 ≤ 3, x3 ≤5, x3 ≤ 1

7 .Z tych nierówności najostrzejszym ograniczeniem na wartość x2 od góry jest

x3 ≤ 17 , otrzymana z x6 ≥ 0, tak więc wychodzącą zmienną bazową jest x6. Po

analogicznych do poprzednich obliczeniach otrzymamy nowy słownik (już trzecidla naszego problemu):

x1 = 107 − 5

7x2 − 47x5 + 1

7x6

x3 = 17 + 3

7x2 + 17x5 − 2

7x6

x4 = 177 − 12

7 x2 + 37x5 + 1

7x6

z = 327 − 2

7x2 − 107 x5 − 1

7x6

(3.15)

Ten słownik jest ostatni. Jest dopuszczalny, a jego rozwiązanie bazowe

x1 =10

7, x2 = 0, x3 =

1

7, x4 =

17

7, x5 = x6 = 0, z =

32

7

jest rozwiazaniem optymalnym. �

Page 19: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

3.2 Tabele sympleksowe 19

3.2 Tabele sympleksowePrzyjrzyjmy się jeszcze raz przykładowi 3.1.1 zapisując PPL rozważany w nimnieco inaczej. Przeanalizujmy mianowicie układ równań:

x1 +2x2 +3x3 +x4 = 52x1 3x2 +5x3 +x5 = 83x1 +x2 +3x3 +x6 = 4

−z +2x1 +x2 +3x3 = 0

Powyżej linii poziomej zapisaliśmy ograniczenia naszego PPL (pominęliśmyxj ≥ 0, j = 1, ..., 6, ale w programowaniu liniowym wystarczy zapamiętać, żeograniczenia na nieujemność wszystkich zmiennych występują często, dopiero wdalszej części książki omówimy sytuację w której ograniczenia na znak występu-ją tylko dla niektórych zmiennych), poniżej zaś funkcję celu. Skojarzone z tymPPL rozwiązanie bazowe jest w naszym przykładzie postaci: x1 = x2 = x3 =0, x4 = 5, x5 = 8, x6 = 4, z = 0. Schematycznie można to zapisać w tabeli:

1 2 3 1 0 0 52 3 5 0 1 0 83 1 3 0 0 1 42 1 3 0 0 0 0

Naszą metodę przedstawioną na przykładach 3.1.1 i 3.1.2 można teraz przed-stawić następująco:

Krok 1. Wyznaczanie zmiennej wchodzącej. Sprawdzamy ostatniwiersz tabeli, pomijając ostatni wyraz tego wiersza (odpowiadający war-tości z). Jeśli w tym wierszu wszystkie współczynniki są mniejsze od zeraSTOP, tabela opisuje rozwiązanie optymalne.Jeśli niektóre ze współczynników w tym wierszu są dodatnie, wybieramynajwiększy z nich. Numer j kolumny, w której się znajduje, jest nume-rem zmiennej wchodzącej xj (inaczej: xj jest nową zmienną bazową). Wnaszym przypadku zmienną bazową wchodzącą jest x3.

aij bi1 2 3 1 0 0 52 3 5 0 1 0 83 1 3 0 0 1 42 1 3 0 0 0 0

Krok 2. Wybieramy zmienną wychodzącą. Wybieramy wiersz i0,w którym aij > 0 i iloraz bi

aijjest najmniejszy. W naszym przykładzie

najmniejszą z liczb 53 ,

85 ,

43 jest 4

3 . Wybieramy więc trzeci wiersz (i0 = 3).

1 2 3 1 0 0 52 3 5 0 1 0 83 1 3 0 0 1 4

2 1 3 0 0 0 0

Page 20: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

20 Opis algorytmu sympleks

Krok 3. Tworzymy nowy słownik. Mnożymy wiersz i0 przez odpowiedniewspółczynniki i odejmujemy od pozostałych tak, by w j-tej kolumnie je-dynym niezerowym wyrazem był wyraz w wierszu i0. Dzielimy wiersz i0przez ai0j .Tak więc w naszym przykładzie:

1. odejmujemy trzeci wiersz od pierwszego,2. mnożymy trzeci wiersz przez 5

3 i odejmujemy od drugiego,3. odejmujemy trzeci wiersz od ostatniego (tego pod kreską, odpowia-

dającego zmiennej z,4. dzielimy trzeci wiersz przez 3.

Otrzymamy następną tabelę:

−2 1 0 1 0 −1 1−3 − 4

3 0 0 1 − 53

43

−1 13 1 0 0 1

343

−1 0 0 0 0 −1 −4

(3.16)

Zauważmy, że otrzymana tabela dokładnie odpowiada słownikowi. Przeko-nujemy się o tym stwierdzając, że:

• pierwszy wiersz tabeli (3.16) odpowiada drugiemu równaniu słownika (3.10),

• drugi wiersz tabeli (3.16) trzeciemu równaniu (3.10),

• trzeci wiersz pierwszemu równaniu (3.10),

• należy uwzględnić zmiany znaków (np. w ostatnim wierszu i kolumnie ta-beli (3.16) występuje minus wartość zmiennej z, podczas gdy w słowniku(3.10) występuje wartość z itd.

Jest oczywiste, że przedstawienie algorytmu przy pomocy ciągu tabel sym-pleksowych niczym istotnym nie różni się od przedstawienia go w postaci ciąguzmieniających się słowników. Wielu autorów (np. [17], [14], [21]) tak właśnierobi. W dalszym ciągu prezentacji metody simpleks nie będziemy się tymi ta-belami posługiwać.

Słownik jest układem równań liniowych – tabela macierzą jednoznacznie muprzyporządkowaną. Jeden słownik powstaje z drugiego przez operacje alge-braiczne prowadzące do układów równoważnych. Stąd oczywista jest własnośćwszystkich słowników każdego PPL, którą wygodnie będzie nam zapisać w po-staci twierdzenia.

Twierdzenie 3.2.1 Dla ustalonego PPL dowolne dwa słowniki są równowa-żne. W szczególności każde rozwiązanie dowolnego słownika jest rozwiązaniemkażdego innego słownika.

Page 21: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

3.3 Szczegóły metody 21

3.3 Szczegóły metody

Zapoznając się z metodą simpleks skrupulatnie omijaliśmy wszelkie trudności,na które można natrafić. Przykłady były dobrane tak, by:

1) wiadomo było od czego trzeba zacząć bowiem xj = 0 dla j = 1, ..., n byłorozwiązaniem dopuszczalnym;

2) rozpoczęty algorytm działał niezawodnie w tym sensie, że na żadnym eta-pie jego funkcjonowania nie mieliśmy wątpliwości co należy zrobić w na-stępnym kroku a następny krok był zawsze wykonywalny;

3) po trzech (co najwyżej!) zmianach zmiennych bazowych otrzymywaliśmyoptymalne rozwiązanie.

Czy zawsze funkcjonowanie algorytmu jest takie proste? Okazuje się, że nie.Rozważmy następujący przykład.

Przykład 3.3.1

x1 − 2x2 + 3x3 ≤ 5−x1 + 4x2 − x3 ≤ −63x1 − 2x2 + x3 ≤ −3

z = x1 + x2 + 2x3 → maxxi ≥ 0 i = 1, 2, 3

(3.17)

Tym razem x1 = x2 = x3 = 0 nie jest rozwiązaniem dopuszczalnym pro-blemu, nie spełnia drugiej ani trzeciej nierówności w PPL (3.17). Co więcej,wcale nie jest oczywiste, że takie rozwiązanie w ogóle istnieje.

3.3.1 Od czego zacząć?

W ogólnym przypadku problemu PL w postaci standardowej:∑nj=1 aijxj ≤ bi i = 1, ...,m

xj ≥ 0 j = 1, ..., n∑nj=1 cjxj → max

(3.18)

rozwiązanie bazowe x1 = x2 = ... = xn = 0 jest dopuszczalne, wtedy i tylkowtedy, gdy bi ≥ 0 dla każdego i = 1, ...,m.Jak postępować gdy choć jedna z liczb bi jest ujemna?

Rozwiążemy ten problem za pomocą metody sympleks. Rozważmy następu-jący PPL: ∑n

j=1 aijxj − x0 ≤ bi i = 1, ...,m

xj ≥ 0 j = 0, 1, ..., nx0 → min

(3.19)

Page 22: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

22 Opis algorytmu sympleks

Dla dowolnie ustalonych x1, ..., xn istnieje takie x0, że nierówności

n∑j=1

aijxj − x0 ≤ bi dla i = 1, ...,m

są spełnione, bowiem można przyjąć dowolnie duże x0. Tak więc problem (3.19)jest niesprzeczny. Jest także oczywiste, że problem wyjściowy (3.18) jest nie-sprzeczny wtedy i tylko wtedy jeśli rozwiązaniem PPL (3.19) jest x0 = 0. Pierw-szą zmienną wchodzącą będzie x0, natomiast zmienną wychodzącą xi0 taka, żebi0 jest najmniejszą ze stałych bi, i = 1, ...,m.

Sprawdźmy na naszym przykładzie jak ta metoda funkcjonuje.

Przykład 3.3.1 (cd.).Zgodnie przyjętym przez nas zwyczajem, będziemy maksymalizować, a nie mi-nimalizować, pewną funkcję celu.

Problem

x1 −2x2 +3x3 −x0 ≤ 5−x1 +4x2 −x3 −x0 ≤ −63x1 −2x2 +x3 −x0 ≤ −3

xi ≥ 0 i = 0, 1, 2, 3w = −x0 → max

(3.20)

po wprowadzeniu zmiennych bazowych x4, x5, x6 przyjmie postać

x4 = 5 +x0 −x1 +2x2 −3x3

x5 = −6 +x0 +x1 −4x2 +x3

x6 = −3 +x0 −3x1 +2x2 −x3

xi ≥ 0 i = 0, ..., 6w = −x0 → max

(3.21)

(3.21) nie jest słownikiem dopuszczalnym, bowiem rozwiązaniem bazowym jestx0 = x1 = x2 = x3 = 0, x4 = 5, x5 = −6, x6 = −3, więc x5 i x6 przyjmująwartości ujemne. Ten defekt zniknie po wprowadzeniu x0 jako zmiennej bazowejw miejsce x5, inaczej mówiąc przyjmujemy x0 jako zmienną wchodzącą zaś x5

jako zmienną wychodzącą.Nowym słownikiem będzie

x0 = 6 −x1 +4x2 −x3 +x5

x4 = 11 −2x1 +6x2 −4x3 +x5

x6 = 3 −4x1 +6x2 −2x3 +x5

w = −6 +x1 −4x2 +x3 −x5

(3.22)

Teraz już (3.22) jest słownikiem dopuszczalnym (rozwiązanie bazowe jestrozwiązaniem dopuszczalnym: x0 = 6, x1 = x2 = x3 = x5 = 0, x4 = 11, x6 =3, w = −6).

Zauważmy, że także w ogólnym przypadku, zawsze będzie możliwy taki wybórzmiennej bazowej wychodzącej, aby pierwsza iteracja dała słownik dopuszczalny.

Page 23: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

3.3 Szczegóły metody 23

Wystarczy w tym celu tak wybrać xn+i0 żeby bi0 było najmniejsze spośród bi,i = 1, ...,m.

Nową zmienną bazową wchodzącą może być x1 lub x3 (we wzorze na w wsłowniku (3.22) współczynniki przy tych zmiennych są dodatnie i równe 1, przypozostałych zmiennych współczynniki są ujemne).

Mamy teraz:

x0 ≥ 0 ⇒ x1 ≤ 6,

x4 ≥ 0 ⇒ x1 ≤ 112 ,

x6 ≥ 0 ⇒ x1 ≤ 34 .

Wobec tego, zmienną wychodzącą jest x6. Wyliczamy więc x1 z trzeciegoz równań (3.22) i obliczamy nowe wzory na x0, x4 oraz w. Po elementarnychrachunkach otrzymamy trzeci słownik

x0 = 5 14 +2 1

2x2 − 12x3 + 3

4x5 + 14x6

x1 = 34 + 3

2x2 − 12x3 + 1

4x5 − 14x6

x4 = 9 12 +3x2 −3x3 + 1

2x5 + 12x6

w = − 214 − 5

2x2 + 12x3 − 3

4x5 − 14x6

(3.23)

Zmienną wchodzącą jest teraz x3 a wychodzącą x1. Wyliczamy więc x3

z drugiego ze wzorów słownika (3.22), a następnie wstawiamy do pozostałychrównań eliminując w ten sposób x3.

Nowym słownikiem jest następujący układ równań:

x0 = 4 12 +x1 +x2 + 1

2x5 + 12x6

x3 = 32 −2x1 +3x2 + 1

2x5 − 12x6

x4 = 5 +6x1 −6x2 −x5 +2x6

w = − 92 −x1 −x2 − 1

2x5 − 12x6

(3.24)

Wartością maksymalną jaką może przyjąć w w problemie (3.20) jest w = − 92 ,

a więc liczba ujemna, nie zero. Oznacza to, że problem (3.17) jest sprzeczny. �

3.3.2 Czy sympleks może się zaciąć?

Pytanie postawione w tytule należy rozumieć tak: czy na każdym etapie algo-rytmu wiadomo co należy czynić dalej? Czy zawsze kolejny krok jest wykonalny?

Działanie algorytmu polega na wykonywaniu następujących kroków:

Page 24: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

24 Opis algorytmu sympleks

1. Wybór zmiennej bazowej wchodzącejPrzypomnijmy, że nową zmienną wchodzącą jest zmienna xj0 taka, żecj0 > 0. Jeśli istnieje więcej niż jedna taka zmienna, można, jak to robili-śmy w przykładach, wybrać tę dla której dodatnie cj0 jest największe (znadzieją – ale bez gwarancji – że taki wybór doprowadzi nas najszybciejdo celu).Jeśi taki wybór jest niemożliwy to wszystkie współczynniki cj dla j =1, ..., n we wzorze

z = a+ c1x1 + ...+ cnxn

są ujemne. To zaś oznacza, że rozwiązanie dopuszczalne stowarzyszone zesłownikiem dopuszczalnym jest optymalne (w szczególności maksymalnawartość z jest równa a).

2. Wybór zmiennej wychodzącejJako zmienną wychodzącą przyjmujemy tę która daje najostrzejsze ograni-czenie od góry na zmienną wchodzącą xj0 .Na przykład, dla słownika dopuszczalnego

x3 = 5 −x1 +x2 −x4

x5 = 3 −x1 −x2 +2x4

z = 15 +2x1 −x2 −x4

zmienną wchodzącą jest x1. Nierówności x3 ≥ 0 i x5 ≥ 0 dają dla odpo-wiedniego rozwiązania dopuszczczalnego (tj. takiego w którym x2 = x4 =0) następujące ograniczenia:

x3 ≥ 0⇒ x1 ≤ 5, x5 ≥ 0⇒ x1 ≤ 3.

Wybieramy zmienną wychodzącą x5.Jeśli na wartości zmiennej wchodzącej nie otrzymujemy ograniczenia

od góry, jak w przykładzie słownika

x3 = 5 +x1 −x2 +x4

x5 = 3 +x1 −x2 +2x4

z = 15 +2x1 −x2 −x4

czyli jeśli współczynniki przy xj0 są nieujemne, to wartość z jest oczywi-ście nieograniczona od góry. Nie ma rozwiązania maksymalnego, z możebyć dowolnie duże.

3. Tworzenie nowego słownikaW tym kroku algorytmu tworzymy nowy słownik przy pomocy prostychoperacji arytmetycznych.

Można więc z całą pewnością stwierdzić, że w każdym momencie swojego działa-nie algorytm albo poda rozwiązanie problemu (tzn. rozwiązanie optymalne lubinformację, że problem jest sprzeczny lub nieograniczony), albo będzie wykony-wał następne kroki. Czy oznacza to, że algorytm sympleks zawsze rozwiązujekażdy PPL? Przekonamy się wkrótce, że nie rozwiązaliśmy jeszcze wszstkichtrudności.

Page 25: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

3.3 Szczegóły metody 25

3.3.3 CyklicznośćZacznijmy od przykładu.

Przykład 3.3.2.Rozważmy słownik

x4 = −x1 −x2 +3x3

x5 = 2 +x1 −3x2 +x3

x6 = −2x1 +x2 −x3

z = 3 +2x1 −x2 −x3

(3.25)

Rozwiązaniem bazowym tego słownika jest x1 = x2 = x3 = x4 = x6 =0, x5 = 2, z = 3. Zmienną wchodzącą będzie x1, zaś zmienną wychodzącą możebyć x4 lub x6. Wybierzmy na przykład x4.

Nowym słownikiem będzie:

x1 = x2 −3x3 −x4

x5 = 2 +4x2 −2x3 −x4

x6 = −x2 +5x3 +2x4

z = 3 +x2 −7x3 −2x4

(3.26)

Zauważmy więc, że na naszej operacji zamiany słownika nic nie zyskaliśmy wtym sensie, że wartość z nie wzrosła.

Sytuacja w której zastąpienie jednej ze zmiennych bazowych zmienną nieba-zową według podanych przez nas reguł nie spowoduje zwiększenia wartości z wrozwiązaniu bazowym może zajść tylko wtedy, gdy wartość jednej ze zmiennychw rozwiązaniu bazowym wynosi zero. W naszym przykładzie takimi zmiennymibyły x4 i x6 dla słownika (3.25) i x1 i x6 dla słownika (3.26).

Definicja 3.3.1. Mówimy, że rozwiązanie bazowe słownika jest zdege-nerowane jeżeli co najmniej jedna zmienna bazowa w tym rozwiązaniu przyj-muje wartość zero. Odpowiedni słownik także nazywamy zdegenerowanym.

Przykład 3.3.2 (cd).Czytelnik zechce sprawdzić, że następnym (po (3.26)) słownikiem będzie

x1 = 2x3 +x4 −x6

x2 = 5x3 +2x4 −x6

x5 = 2 +18x3 +7x4 −4x6

z = 3 −2x3 −x6

a więc sympleks doprowadził do rozwiązania optymalnego PPL (3.25), rozwią-zaniem optymalnym jest x1 = x2 = x3 = x4 = x6 = 0, x5 = 2, z = 3.

Ponieważ przy przejściu ze słownika (3.25) do (3.26) rozwiązanie nie polep-szyło się (wartość z w tych słownikach jest taka sama) powstaje pytanie, czymoże zaistnieć sytuacja, w której po kilku zmianach słownika algorytm wróci do

Page 26: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

26 Opis algorytmu sympleks

słownika który był już rozważany?

Odpowiedź na to pytanie brzmi tak! Jest jasne, że jeśli konsekwentnie wy-bieramy zmienne wchodzące i wychodzące z jakąś regułą i na ten sam słownikwpadamy dwa razy, to te same słowniki będą sie pojawiały cyklicznie (nazwiemyto zjawisko zapętlaniem się algorytmu).

Zauważmy, że taka sytuacja może się pojawić tylko wtedy gdy pojawi sięsłownik zdegenerowany – jeśli nie, to w każdej iteracji rozwiązanie bazowe jestinne, różni się od wszystkich poprzednich chociażby wartością z.

W przykładzie 3.3.2 oba słowniki (3.25) i (3.26) są zdegenerowane. Czy-telnik zechce sprawdzić, że przykład Chvátala [4] zaproponowany poniżej jakoćwiczenie 3.7.6 jest problemem PL, w którym po kilku odpowiednio przeprowa-dzonych iteracjach wracamy do wyjściowego słownika 1.

Z twierdzenia 3.2.1 wynika, że każde rozwiązanie bazowe jest rozwiązaniemkażdego innego słownika (nie tylko tego, którego jest rozwiązaniem bazowym).Stąd wniosek, że wszystkich możliwych rozwiązań bazowych dla PPL jest co naj-wyżej tyle, na ile sposobów można wybrać n elementów (zmiennych bazowych)

spośród n+m elementów (tyle jest wszystkich zmiennych), a więc(m+ nn

).

Tak więc dla danego PPL istnieje skończona liczba słowników i jeśli w każdejiteracji otrzymujemy inny słownik, wówczas algorytm sympleks musi nas do-prowadzić do rozwiązania problemu w skończonej liczbie iteracji (co najwyżej(m+ nn

)). Wykazaliśmy więc bardzo ważne twierdzenie:

Twierdzenie 3.3.1 Jeśli algorytm simpleks nie zapętla się2, to rozwiązuje PPLw skończonej liczbie iteracji. Co więcej, jeśli problem jest niesprzeczny i ogra-niczony, to istnieje rozwiązanie bazowe, które jest równocześnie rozwiązaniemoptymalnym.

Wśród metod unikania cykliczności elegancją 3 wyróżnia się reguła R.G.Blanda [2] zwana także regułą najmniejszego indeksu.

Reguła Blanda.

1. Wybierz jako zmienną wchodzącą tę zmienną która:

(i) ma dodatni współczynnik we wzorze na z,

1Można wykazać, że PPL w którym występuje zjawisko cykliczności musi mieć co najmniej7 zmiennych decyzyjnych. Przykład Chvátala jest więc, w pewnym sensie, najmniejszym PPLktóry się zapętla.

2Inaczej: jeśli nie występuje zjawisko cykliczności.3elegancja (mat.) = prostota (wulg.)

Page 27: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

3.3 Szczegóły metody 27

(ii) spośród wszystkich zmiennych o dodatnim współczynniku we wzorzena z ma najmniejszy indeks.

2. Wybierz jako zmienną wychodzącą tę która:

(iii) powoduje najsilniejsze ograniczenie od góry dla zmiennej wchodzącej,

(iv) spośród wszystkich kandydatów na zmienną wychodzącą (tj. zmien-nych bazowych spełniających (iii)) ma najmniejszy indeks.

Regułę Blanda można podać nieco bardziej formalnie w sposób następujący.Niech będzie dany słownik

xi = bi −∑j /∈B aijxj (i ∈ B)

z = z0 +∑j /∈B cjxj

(3.27)

(w słowniku (3.27) B jest zbiorem indeksów zmiennych bazowych).

• Wybierz jako zmienną wchodzącą xj0 dla której

(a) cj0 > 0,

(b) j0 = min{j : j /∈ B ∧ cj > 0}.

• Wybierz jako zmienną wychodzącą xi0 dla której

(a) ai0j0 > 0,

(b) bi0ai0j0

= min{ biaij0

: aij0 > 0, i = 1, ...,m} = a,

(c) i0 = min{i : i ∈ B ∧ biaij0

= a}.

W porównaniu z metodą stosowaną do tej pory różnica pojawia się w punkcie(ii) – stosujemy tę regułę zamiast wybierać zmienną wchodzącą o największymwspółczynniku (dodatnim) w funkcji celu.

Przykład 3.3.3.Dla słownika

x4 = 4 +x1 +2x2 −x3

x5 = 2 −2x1 −2x2 +x3

x6 = 3 −x1 −3x2 +2x3

z = 1 −x1 +2x2 +3x3

postępując według reguły Blanda wybierzemy x2 jako zmienną wchodzącą i x5

jako zmienną wychodzącą.

Twierdzenie 3.3.2 (Bland [2]). Jeśli wybory zmiennych wchodzących i wy-chodzących w algorytmie simpleks dokonywane są według reguły Blanda, to al-gorytm kończy się po skończonej liczbie iteracji.

Page 28: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

28 Opis algorytmu sympleks

Idea dowodu twierdzenia Blanda zaczerpnięta jest z [4].Dowód. Ze względu na twierdzenie 3.3.1 wystarczy wykazać, że jeżeli zmiennewchodząca i wychodząca będą wybierane według reguły Blanda to nie możewystąpić cykliczność.Dla dowodu nie wprost przypuśćmy, że zmienne są wybierane regułą Blanda, ajednak algorytm zapętla się. Oznacza to, że poczynając od pewnego słownika S1

w kolejnych iteracjach otrzymujemy k–elementowy ciąg słowników S1, S2, ..., Sk−1, Sktaki, że k > 1 i Sk = S1. Oczywiście wszystkie słowniki S1, ..., Sk−1 muszą byćzdegenerowane.

Zmienną będziemy nazywali błędną4 jeżeli dla pewnych słowników spośródS1, ..., Sk−1 jest zmienną bazową a dla innych niebazową.

Przypuśćmy, że xt jest zmienną błędną o największym indeksie t. NiechS będzie jednym ze słowników S1, S2, ..., Sk−1, Sk, takim, że xt jest zmiennąbazową wychodzącą słownika S i niech xs będzie zmienną wchodzącą S.

Inaczej mówiąc: xt i xs są takie, że

– xt jest zmienną bazową S i nie jest zmienną bazową słownika następnego,

– xs jest zmienną niebazową słownika S i zmienną bazową słownika następnego.

Oznaczmy przez B zbiór indeksów zmiennych bazowych słownika S i po-wiedzmy, że S jest postaci

xi = bi −∑i/∈B aijxj , i ∈ B

z = w +∑j /∈B cjxj

(3.28)

Skoro S1, ..., Sk−1, Sk jest cyklem, tzn. Sk = S1, musi istnieć inny słownik,nazwijmy go S∗ taki, że xt jest zmienną wchodzącą S∗. Z tego samego powoduwartość zmiennej z (funkcji celu) w rozwiązaniu bazowym każdego słownikaS1, ..., Sk−1, Sk jest taka sama. Tak więc wzór na z w słowniku S∗ jest postaci

z = w +

m+n∑j=1

c∗jxj (3.29)

przy czym c∗j = 0 dla j ∈ B∗, gdzie B∗ jest zbiorem indeksów zmiennychbazowych słownika S∗. Na mocy twierdzenia 3.2.1, każde rozwiązanie słownikaS jest także rozwiązaniem słownika S∗. Jednym z rozwiązań słownika S jest,jak łatwo zauważyć:

xj = 0 dla wszystkich zmiennych niebazowych S , poza xs (czyli dla j /∈ B, j 6=s),

xs = yxi = bi − aisy dla i ∈ Bz = w + csy

dla dowolnego y.

4Tu określenie błędna nie pochodzi od słowa błąd a raczej od błądzić, w sensie pojawianiasię i znikania jak błędny rycerz lub błędny ognik.

Page 29: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

3.3 Szczegóły metody 29

Wstawiając to rozwiązanie do wzoru (3.29) otrzymamy

w + csy = w + c∗sy +∑i∈B

c∗i (bi − aisy)

Stąd(cs − c∗s +

∑i∈B

c∗i ais)y =∑i∈B

c∗i bi

dla każdego y ∈ R. Wobec dowolności y mamy

cs − c∗s +∑i∈B

c∗i ais = 0 (3.30)

Zauważmy następujące fakty:

– Ponieważ xs jest zmienną wchodzącą słownika S zachodzi cs > 0.

– Przypomnijmy, że xt jest błędną zmienną o największym indeksie. Stądoczywiście wynika, że s < t (xs jest także zmienną błędną).

– Skoro xs nie jest zmienną wchodzącą w słowniku S∗, s < t, i wybór zmien-nej wchodzącej następuje według reguły Blanda, zachodzic∗s ≤ 0.

Ze wzoru (3.30) wynika więc, że

c∗i0ai0s < 0 dla pewnego i0 ∈ B (3.31)

Oczywiście xi0 jest zmienną bazową w słowniku S (bo i0 ∈ B) i zmiennąniebazową w słowniku S∗ (c∗i0 6= 0, w przeciwnym przypadku nie moglibyśmymieć c∗i0ai0s < 0).xi0 jest więc zmienną błędną i wobec tego i0 ≤ t. Co więcej: i0 6= t, bowiemats > 0 skoro xt jest zmienną wychodzącą a xs zmienną wchodzącą słownika S.Pamiętamy, że xt jest zmienną wchodzącą słownika S∗. Wobec tego c∗t > 0 i wkonsekwencji c∗tats > 0. Ostatecznie i0 < t.

xi0 nie jest jednak zmienną wchodzącą słownika S∗ (jest nią przecież xt, awłaśnie wykazaliśmy, że i0 6= t), a ponieważ zmienną wchodzącą wybieramywedług reguły Blanda, musi być c∗i0 ≤ 0. Ze wzoru (3.31) mamy więc ai0s > 0.

Z faktu, że xi0 jest błędną zmienną oraz, że wartość z w rozwiązaniu bazo-wym jest stale równa w dla wszystkich słowników S1, ..., Sk wynika, że bi0 = 0.Tak więc xi0 była zmienną, która powinna według reguły Blanda, być zmiennąwychodzącą ze słownika S (i0 < t). Ta sprzeczność kończy dowód twierdzeniaBlanda.

Page 30: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

30 Opis algorytmu sympleks

3.4 Ile jest rozwiązań optymalnych?Problemowi ilości rozwiązań optymalnych nie będziemy poświęcali wiele miejscai czasu. Niemniej często można łatwo stwierdzić, że rozwiązanie jest jedyne.Najlepiej wyjaśni to poniższy przykład.

Przykład 3.4.1.Niech będzie dany problem PL

x1 −x2 +2x3 ≤ 1x1 +2x2 +x3 ≤ 4x1 −x2 −x3 ≤ 2

x1, x2, x3 ≥ 0z = x1 −x2 +x3 → max

(3.32)

Kolejnymi słownikami dla tego problemu będą:

x4 = 1 −x1 +x2 −2x3

x5 = 4 −x1 −2x2 −x3

x6 = 2 −x1 +x2 +x3

z = x1 −x2 +x3 → max

(3.33)

x1 = 1 +x2 −2x3 −x4

x5 = 3 −3x2 +x3 +x4

x6 = 1 +3x3 +x4

z = 1 −x3 −x4 → max

(3.34)

Zauważmy, że wartość maksymalna z = 1 jest przyjęta dla więcej niż jednegowektora x. Rzeczywiście, we wzorze na z słownika (3.34), a więc ostatniegosłownika w metodzie simpleks dla naszego problemu, nie występuje zmiennabazowa x2. Jeżeli we wzorze na z w ostatnim słowniku występująwszystkie zmienne niebazowe, to rozwiązanie jest jedyne: zmienneniebazowe muszą w rozwiązaniu maksymalizującym z być równe zeru,zaś zmienne bazowe wyznaczone są jednoznacznie przez odpowiednierównania słownika. W naszym przykładzie, aby z było równe 1 musi za-chodzić x3 = 0 oraz x4 = 0, natomiast x2 niekoniecznie jest równe zero. Naprzykład dla x3 = x4 = 0, x2 = t ∈< 0, 1 >, x1 = 1 + t, x5 = 3 − 3t, x6 = 1wartość z jest także równa wartości maksymalnej 1. Dla problemu (3.40) ozna-cza to, jak łatwo stwierdzić, że zbiorem wszystkich rozwiązań jest zbiór punktówodcinka {(x1, x2, x3) : x1 = 1 + t, x2 = t, x3 = 0, t ∈< 0, 1 >}.

3.5 Skuteczność algorytmu sympleksPanuje powszechna, jak się wydaje, zgoda co do tego, że sympleks jest w prak-tyce bardzo skutecznym i szybkim algorytmem, pozwalającym rozwiązywać pro-blemy w których występują setki czy nawet tysiące zmiennych. Dowodzą tegoróżnego rodzaju testy (por. [4, 10, 14, 17, 20, 22]). A jednak, okazuje się, że jeśli

Page 31: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

3.5 Skuteczność algorytmu sympleks 31

dobrać wystarczająco złośliwie przykład, to liczba iteracji może wynosić nawet2n− 1, gdzie n oznacza ilość zmiennych. Oznacza to konieczność utworzenia 2n

słowników. To zaś z kolei znaczy, że sympleks jest teoretycznie beznadziejny:licząc 1 mikrosekundę na utworzenie słownika (przy dużej liczbie zmiennych tokompletnie nierealne, nawet przy bardzo szybkim komputerze), oznaczałoby tokonieczność oczekiwania trudno wyobrażalnej liczby lat na obliczenie zadania o1000 zmiennych5.

Takim złośliwym przykładem jest zadanie Klee–Minty’ego (por. [4, 20]) któreprzedstawione poniżej (lemat 3.5.2) posłuży do wykazania następującego twier-dzenia.

Twierdzenie 3.5.1 Algorytm sympleks nie jest algorytmem wielomianowym.

Dowód twierdzenia 3.5.1 wynika z lematu:

Lemat 3.5.2 Algorytm sympleks rozwiązuje problem PLn:

x1 ≤ 54x1+ x2 ≤ 258x1+ 4x2 + x3 ≤ 125

...2nx1+ 2n−1x2 + ... + 4xn−1 + xn ≤ 5n

z = 2n−1x1+ 2n−2x2 + ... + 2xn−1 + xn → max

(3.35)

w 2n − 1 iteracjach (tj. 2n słownikach).

Dowód lematu 3.5.2. Udowodnijmy najpierw dwa proste fakty.

Fakt 1. z = 5n jest wartością optymalną, zaś

x1 = ... = xn−1 = 0, xn = 5n (3.36)

rozwiązaniem optymalnym problemu (3.35).

Rzeczywiście, pierwszy słownik problemu (3.35) można zapisać następu-jąco 6:

5Policz sam jeśli nie wierzysz!6Wyjątkowo w tym przypadku, wygodniej nam będzie oznaczać zmienne sztuczne przez yi

zamiast, jak to było zawsze do tej pory, przez xn+i.

Page 32: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

32 Opis algorytmu sympleks

y1 = 5− x1

y2 = 25− 4x1 − x2

y3 = 125− 8x1 − 4x2 − x3

... ...yn−1 = 5n−1 − 2n−1x1 − 2n−2x2− ... − xn−1

yn = 5n − 2nx1 − 2n−1x2− ... − 4xn−1 − xn

z = 2n−1x1 + 2n−2x2+ ... + 2xn−1 + xn

(3.37)

Słownikiem, w którym zmiennymi niebazowymi są x1, ..., xn−1, yn, zaśzmiennymi bazowymi y1, ..., yn−1, xn jest

y1 = 5− x1

y2 = 25− 4x1 − x2

y3 = 125− 8x1 − 4x2 − x3

... ...yn−1 = 5n−1 − 2n−1x−2n−2− ... − xn−1

xn = 5n − 2nx1 − 2n−1x2− ... − 4xn−1 − ynz = 5n + c1x1 + c2x2+ ... + cn−1xn−1 − yn

(3.38)

gdzie ci = 2n−i − 2n−i+1 dla każdego i = 1, ..., n − 1. Jest oczywi-ste, że słownik (3.38) jest ostatnim słownikiem algorytmu sympleks dla(3.35), zaś (3.36) optymalnym rozwiązaniem (współczynniki ci są oczywi-ście ujemne).�

Fakt 2. W każdym słowniku problemu (3.35), dla każdego i ∈ {1, ..., n} dokład-nie jedna ze zmiennych xi, yi jest zmienną bazową.Gdyby tak nie było, to w w pewnym słowniku dla pewnego i0 zarównoxi0 jak i yi0 byłyby zmiennymi niebazowymi.Dla odpowiadającego temu słownikowi bazowego rozwiązania dopuszczal-nego (x1, ..., xn, y1, ..., yn) mamy oczywiście xi0 = 0 i yi0 = 0. Napiszmyrównania i0 − 1 i i0 słownika (3.37).

2i0−1x1 + 2i0−2x2 + ...+ 4xi0−2 + xi0−1 + yi0−1 = 5i0−1 (3.39)

2i0x1 + 2i0−1x2 + ...+ 8xi0−2 + 4xi0−1 + xi0 + yi0 = 5i0 (3.40)

Dla naszego rozwiązania bazowego w którym xi0 = 0 i yi0 = 0 mamy więcz (3.40)

2i0 x1 + 2i0−1x2 + ...+ 4xi0−1 = 5i0

Z drugiej zaś strony, korzystając z (3.40), (3.39), nierówności 2xi0−1 ≤2 · 5i0−1 wynikającej w sposób banalny z (3.39) i pamiętając, że wszystkiewspółrzędne rozwiązania są nieujemne, otrzymamy

5i0 = 2i0 x1 + 2i0−1x2 + ...+ 8xi0−2 + 4xi0−1 =

Page 33: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

3.5 Skuteczność algorytmu sympleks 33

= 2(2i0−1x1 + 2i0−2x2 + ...+ 4xi0−2 + xi0−1)+

+ 2xi0−1 ≤ 2 · 5i0−1 + 2 · 5i0−1 = 4 · 5i0−1

– sprzeczność która kończy dowód faktu 2.�

Reszta dowodu lematu 3.5.2 przez indukcję ze względu na n.Dla n = 1 problem jest banalny: PLn ma postać

x1 ≤ 5z = x1

i rozwiązuje się w 2 słownikach:y1 = 5− x1

z = x1,

x1 = 5− y1

z = 5− y1.

Pierwszy słownik dla PLn (n ≥ 2) jest postaci

y1 = 5− x1

y2 = 25− 4x1 −x2

y3 = 125− 8x1 −4x2 − x3

...yn = 5n− 2nx1 −2n−1x2− ...− 4xn−1 −xnz = 2n−1x1 +2n−2x2+ ...+ 2xn−1 +xn

(3.41)

a ostatni (o rozwiązaniu bazowym x1 = ... = xn−1 = 0, xn = 5n, z = 5n)

y1 = 5 −x1

y2 = 25 −4x1 −x2

y3 = 125 −8x1 −4x2 −x3

...yn−1 = 5n−1 −2n−1x1 −2n−2x2 − ...− 4xn−2 −xn−1

xn = 5n −2nx1 −2n−1x2 − ...− 8xn−2 −4xn−1 −ynz = 5n −2n−1x1 −2n−2x2 − ...− 4xn−2 −2xn−1 −yn

Napiszmy teraz pierwszy słownik dla PLn+1

y1 = 5− x1

y2 = 25− 4x1 − x2

...yn−1 = 5n−1 − 2n−1x1 − 2n−2x2 − ...− 4xn−2 − xn−1

yn = 5n − 2nx1 − 2n−1x2 − ...− 8xn−2 − 4xn−1 − xnyn+1 = 5n+1 − 2n+1x1 − 2nx2 − ...− 2nxn−2 − 8xn−1 − 4xn − xn+1

z = 2nx1 + 2n−1x2 + ...+ 23xn−2 + 4xn−1 + 2xn + xn+1

Słownik ten różni się od (3.41) tym, że dodaliśmy do niego jeden wierszograniczeń, a funkcję celu najpierw pomnożyliśmy przez 2, a potem dodaliśmydo niej xn+1. Wszystkie współczynniki (a także wyrazy wolne) we wszystkichsłownikach są całkowite. Rzeczywiście: skoro, jak stwierdziliśmy wyżej, dla

Page 34: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

34 Opis algorytmu sympleks

każdego i dokładnie jedna ze zmiennych xi, yi jest bazowa, za każdym razemzmienna wchodząca (xi lub yi) jest obliczana z i−tego równania w którym wy-stępuje zawsze ze współczynnikiem −1. Tak więc, dopóki we wzorze na funkcjęz któregokolwiek słownika problemu PLn+1 występuje któraś ze zmiennych xi,i < n+ 1, ze współczynnikiem dodatnim, zmienną wchodzącą jest jedna z nich(ta której współczynnik w funkcji z jest największy). Tak więc algorytm sym-pleks będzie funkcjonował na pierwszych n wierszach ograniczeń dopóty, dopókiw funkcji celu wszystkie współczynniki przy zmiennych x1, ..., xn, y1, ..., yn będąniedodatnie.

W ostatnim z tych słowników podstawiamy

xn = 5n − 2nx1 − 2n−1x2 − ...− 23xn−2 − 22xn−1 − yn

do

yn+1 = 5n+1 − 2n+1x1 − 2nx2 − ...− 24xn−2 − 23xn−1 − 4xn − xn+1

i doz = 2nx1 + 2n−1x2 + ...+ 4xn−1 + 2xn + xn+1

otrzymując

y1 = 5− x1

y2 = 52 − 4x1 − x2

...yn−1 = 5n−1 − 2n−1x1 − 2n−2x2 − ...− 4xn−2 − xn−1

xn = 5n − 2nx1 − 2n−1x2 − ...− 8xn−2 − 4xn−1 − ynyn+1 = 5n + 2n+1x1 + 2nx2 + ...+ 24xn−2 + 23xn−1 + 4yn − xn+1

z = 2 · 5n − 2nx1 − 2n−1x2 − 2n−2x3 − ...− 4xn−1 − 2yn + xn+1

Zmienną wchodzącą teraz jest xn+1 = 5n + 2n+1x1 + 2nx2 + ...+ 24xn−2 +23xn−1 + 4yn − yn+1. Tak więc następnym, 2n + 1−szym słownikiem PLn+1

jest słownik następujący

y1 = 5− x1

y2 = 52 − 4x1 − x2

...yn−1 = 5n−1 − 2n−1x1 − 2n−2x2 − ...− 4xn−2 − xn−1

xn = 5n − 2nx1 − 2n−1x2 − ...− 8xn−2 − 4xn−1 − ynxn+1 = 5n+1 + 2n+1x1 + 2nx2 + ...+ 24xn−2 + 23xn−1 + 4yn − yn+1

z = 3 · 5n + 2nx1 + 2n−1x2 + ...+ 23xn−2 + 22xn−1 + 2yn − yn+1

Otrzymaliśmy problem w którym następne iteracje będą polegały na mini-malizacji funkcji

z = 3 · 5n + 2nx1 + 2n−1x2 + ...+ 23xn−2 + 22xn−1 + 2yn. (3.42)

Page 35: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

3.6 Wyjaśnienie nazwy sympleks 35

Operacje na wierszach ograniczeń dotyczyć będą wyłącznie pierwszych nwierszy. Funkcja z dana wzorem (3.42) równa jest stałej 3 · 5n plus 2 razyfunkcja celu PLn, potrzebować będziemy więc jeszcze 2n słowników, czyli wsumie 2 · 2n = 2n+1 słowników, co należało udowodnić.

3.6 Wyjaśnienie nazwy sympleksPozostaje wyjaśnić skąd wzięła się nazwa algorytm sympleks? Sympleksem wmatematyce nazywa się obwiednie wypukłą zbioru n+ 1 elementowego w prze-strzeni rzeczywistej n wymiarowej (odcinek w R, trójkąt w R2, czworościan wR3). Metoda (algorytm) sympleks polega zaś na sprawdzaniu kolejnych wierz-chołków wielościanów (w Rn – por. rozdział 7). A więc poruszamy się pokrawędziach od wierzchołka do sąsiedniego wierzchołka n–wymiarowego wielo-ścianu, zawsze w pewnym sympleksie zwiększając, o ile to możliwe, wartośćfunkcji celu.

3.7 ćwiczeniaĆwiczenie 3.7.1Rozwiąż następujące problemy:

x1 +x2 ≤ 32x1 −x2 ≤ 4

x1, x2 ≥ 02x1 +x2 → max

2x1 +4x2 +x3 ≤ 6x1 −4x2 +x3 ≤ 4

2x1 +2x2 +x3 ≤ 2xj ≥ 0 (j = 1, 2, 3)

x1 +2x2 +3x3 → max

Ćwiczenie 3.7.2Posługując sie tabelami simpleksowymi rozwiąż przykład 3.1.2

Ćwiczenie 3.7.3Posługując sie tabelami simpleksowymi rozwiąż PPL:

x1 − 2x2 + 3x3 ≤ 102x1 + x2 + x3 ≤ 12x1 + 3x2 + x3 ≤ 9

z = x1 + 3x2 + 4x3 → maxxi ≥ 0 i = 1, 2, 3

Ćwiczenie 3.7.4Rozwiąż następujące PPL:−3x1 +x2 ≤ −3x1 +x2 ≥ 1

x1, x2 ≥ 0x1 +3x2 → max

Page 36: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

36 Opis algorytmu sympleks

−x1 −x2 +x3 ≤ −12x1 +x2 +x3 ≤ 8x1 +x2 ≤ 10x1 +2x2 +x3 → max

xi ≥ 0, i = 1, 2, 3.

Ćwiczenie 3.7.5Sprawdź, że PPL2x1 −x2 +x3 ≤ 12x1 +2x2 +x3 ≤ 10x1 +x2 −x3 ≥ 4

2x1 +x2 −3x3 → maxxi ≥ 0, i = 1, 2, 3.jest niesprzeczny. Wskaż dla tego problemu bazowe rozwiązanie dopuszczalne.

Ćwiczenie 3.7.6 (przykład Chvatála)Zastosuj algorytm simpleks do PPL

x5 = −0, 5x1 +5, 5x2 +2, 5x3 −9x4

x6 = −0, 5x1 +1, 5x2 +0, 5x3 −x4

x7 = 1 −x1

z = 10x1 −57x2 −9x3 −24x4

(3.43)

wybierając za każdym razem

– zmienną wchodzącą o największym współczynniku we wzorze na z,

– zmienną wychodzącą o najmniejszym indeksie spośród tych które dająnajostrzejsze ograniczenie od góry na zmienną wchodzącą (np pierwszązmienną wychodzącą będzie x5).

Ćwiczenie 3.7.7Wykaż, że każda wypukła kombinacja rozwiązań optymalnych PPL jest rozwią-zaniem tego problemu (kombinacja wypukła zdefiniowana jest w podrozdziale7.2).

Ćwiczenie 3.7.8Algorytmem sympleks rozwiąż zadanie Klee–Minty’ego dla n = 3 (a jeśli maszcierpliwość i potrzebę lepszego zrozumienia dowodu twierdzenia 3.5.1 to dlan = 4). Ile otrzymasz iteracji a ile słowników w każdym z tych przypadków(por. przykład 7.1.2)?

Page 37: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Rozdział 4

Dualizm

W tym rozdziale zmienimy metodę prezentacji. Dotychczas każde nowe zagdnie-nie rozpoczynaliśmy od podania przykładów których celem było uzasadnienietego co robiliśmy później. Tym razem najpierw podamy ogólną zasadę dual-ności w programowaniu liniowym. Dopiero później zostanie podane kryteriumoptymalności które można otrzymać dzieki tej zasadzie a następnie interpretacjęekonomiczną.

4.1 Problem dualny programowania liniowego

Definicja 4.1.1 Niech będzie dany PPL∑nj=1 aijxj ≤ bi (i = 1, ...,m)

xj ≥ 0 (j = 1, ..., n)z =

∑nj=1 cjxj → max

(4.1)

PPL ∑mi=1 aijyj ≥ cj (j = 1, ..., n)

yi ≥ 0 (i = 1, ...,m)w =

∑mi=1 biyi → min

(4.2)

nazywamy problemem dualnym problemu (4.1). Problem (4.1) nazywamyproblemem prymalnym.

Z łatwością można się przekonać, że po sprowadzeniu problemu (4.2) do postacistandardowej otrzymamy PPL którego problemem dualnym jest wyjściowy PPL(4.1). Tak więc prawdziwy jest natychmiast następujący wniosek.

Wniosek 4.1.1 Problemem dualnym do problemu dualnego do PPL jest wyj-ściowy PPL.

37

Page 38: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

38 Dualizm

Przykład 4.1.1 Problemem dualnym do

2x1 +x2 +5x3 ≤ 2x1 −2x2 +x3 ≤ 1x1 +4x2 −x3 ≤ 3

xi ≥ 0 (i = 1, 2, 3)2x1 −x2 +3x3 → max

(4.3)

jest

2y1 +y2 +y3 ≥ 2y1 −2y2 +4y3 ≥ −1

5y1 +y2 −y3 ≥ 3yi ≥ 0 (i = 1, 2, 3)

2y1 +y2 +3y3 → min

(4.4)

Następne twierdzenie bywa nazywane słabą zasadą dualności.

Twierdzenie 4.1.2 Niech (4.1) będzie problemem prymalnym a (4.2) proble-mem do niego dualnym. Jeżeli x1, ..., xn oraz y1, ..., ym są rozwiązaniami do-puszczalnymi, odpowiednio, problemów (4.1) i (4.2) to

n∑j=1

cj xj ≤m∑i=1

biyi

Dowód twierdzenia 4.1.2 jest wyjątkowo prosty i mieści się w jednej linijce:

n∑j=1

cj xj ≤n∑j=1

(m∑i=1

aij yi

)xj =

m∑i=1

n∑j=1

aij xj

yi ≤m∑i=1

biyi

Przykład 4.1.1 (c.d.) y1 = 2, y2 = 1, y3 = 0 jest rozwiązaniem dopuszczal-nym (4.4) o wartości funkcji celu w = 5. Stąd i z twierdzenia 4.1.2 wynikajądwa wnioski:

1. problem (4.3) jest ograniczony,

2. wartość maksymalna funkcji celu jest co najwyżej równa 5.

Oczywisty jest następujący wniosek z twierdzenia 4.1.2.

Wniosek 4.1.3 Jeżeli problem prymalny jest nieograniczony, to problem doniego dualny jest sprzeczny.

Przykład 4.1.2 Może się zdarzyć, że oba problemy: prymalny i dualny sąsprzeczne. Tak jest na przykład dla problemu prymalnego:

2x1 −x2 ≤ 2−2x1 +x2 ≤ −3

3x1 −x2 → max

Page 39: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

4.1 Problem dualny programowania liniowego 39

Z twierdzenia 4.1.2 wynika, że gdyby udało nam się znaleźć takie rozwiąza-nie dopuszczalne x1, ..., xn, z problemu prymalnego (4.1) i y1, ..., ym, w problemudo niego dualnego (4.2), że z = w, to każde z tych rozwiązań byłoby rozwiąza-niem optymalnym swojego problemu. Powstaje pytanie: kiedy takie rozwiąza-nia istnieją? Zaraz zobaczymy, że zawsze wtedy gdy problemy (4.1) i (4.2) sąniesprzeczne. Mówi o tym twierdzenie sformułowane w ostatecznej formie przezD. Gale’a, H.W. Kuhna i A.W. Tuckera w 1951 roku.

Twierdzenie 4.1.4 (Zasada dualności.) Jeżeli zagadnienie prymalne (4.1)ma rozwiązanie optymalne (x1, ..., xn) to problem dualny (4.2) ma także rozwią-zanie optymalne (y1, ..., ym) i zachodzi równość

n∑j=1

cj xj =

m∑i=1

biyi (4.5)

Dowód. Przypuśćmy, że (x1, ..., xn) jest optymalnym rozwiązaniem pro-blemu prymalnego (4.1). Zgodnie z twierdzeniem 4.1.2 wystarczy wskazać takierozwiązanie (y1, ..., ym) problemu dualnego (4.2), żeby zachodziła równość (4.5).Przypuśćmy, że ostatnim słownikiem otrzymanym dla problemu (4.1) jest słow-nik w którym funkcja celu wyraża się wzorem

z = z +

m+n∑k=1

ckxk (4.6)

Pamiętamy, że we wzorze (4.6)

ck = 0 gdy xk jest zmienną niebazową ostatniego słownika

ck ≤ 0 dla każdego k = 1, ...,m+n, bowiem zakładamy, że (4.1) ma rozwiązanieoptymalne.

z jest oczywiście wartością maksymalną funkcji celu problemu (4.1) i, skoro(x1, ..., xn) jest rozwiązaniem optymalnym, zachodzi

z =

n∑j=1

cj xj

Wykażemy, że szukanym rozwiązaniem optymalnym problemu du-alnego jest

y1 = −cn+1, y2 = −cn+2, ..., ym = −cn+m

W tym celu przepiszemy wzór (4.6) po dokonaniu na nim następujących mani-pulacji:

– zastępujemy z przez∑nj=1 cjxj ,

– korzystając z faktu, że∑n+mk=1 ckxk =

∑nj=1 cjxj +

∑mi=1 cn+ixn+i (xn+i są

zmiennymi sztucznymi), zastępujemy

Page 40: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

40 Dualizm

cn+i przez −yi (inaczej mówiąc, definiujemy yi := −cn+i)

xn+i przez bi −∑nj=1 aijxj .

Otrzymamy wtedy wzór

n∑j=1

cjxj = z +

n∑j=1

cjxj −m∑i=1

yi(bi −n∑j=1

aijxj)

a stąd po łatwych przekształceniach

n∑j=1

cjxj = (z −m∑i=1

yibi) +

n∑j=1

(cj +

m∑i=1

yiaij)xj (4.7)

Równość (4.7) jest równością wielomianów zmiennych x1, ..., xn, stąd

cj = cj +

m∑i=1

aij yi dla j = 1, ..., n (4.8)

oraz

z =

m∑i=1

yibi (4.9)

Równość (4.9) oznacza, że zachodzi równość (4.5). Ponieważ cj ≤ 0 dlawszystkich j, równość (4.8) pociąga

n∑j=1

aij yi ≥ cj dla j = 1, ..., n

a więc y1, ..., ym jest rozwiązaniem dopuszczalnym problemu (4.2) i twierdzeniezostało wykazane.Wzajemne zależności pomiędzy problemem prymalnym a dualnym wygodniebędzie mieć zapisane w poniższej tabeli.

Jeśli problem prymalny to problem dualnyma rozwiązanie optymalne ma rozwiązanie optymalne o tej

skończone samej wartości (twierdzenie 4.1.4)jest nieograniczony jest sprzeczny (wniosek 4.1.3)

jest sprzeczny jest sprzeczny lub nieograniczony

4.2 KorzyściZ pewnością łatwiej jest rozwiązywać PPL w którym jest mniej równań – liczbazmiennych odgrywa tu mniejszą rolę. Jeśli więc mamy PPL o bardzo wielu (np.m = 100) równaniach i znacznie mniejszej liczbie (np n = 5) niewiadomych,to łatwiej będzie nam rozwiązywać, zamiast problemu oryginalnego, problem

Page 41: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

4.2 Korzyści 41

dualny, z 5 równaniami i 100 niewiadomymi 1.

Powiedzmy, że rozwiązaliśmy prymalny PPL∑nj=1 aijxj ≤ bi (i = 1, ...,m)

xj ≥ 0 (j = 1, ..., n)∑nj=1 cjxj → max

(4.10)

Rozwiązaniem optymalnym (4.10) niech będzie x∗1, ..., x∗n. Powiedzmy dalej,że y∗1 , ..., y∗m jest rozwiązaniem optymalnym problemu dualnego∑m

i=1 aijyi ≥ cj(j = 1, ..., n)yi ≥ 0 (i = 1, ..., n)∑m

i=1 biyi → min(4.11)

Przekonanie kogokolwiek wystarczającego światłego, na przykład naszego zlece-niodawcy, że rozwiązania te są rzeczywiście rozwiązaniami optymalnymi swoichproblemów (odpowiednio (4.10) i (4.11)) jest bardzo proste: wystarczy spraw-dzić, że x∗1, ..., x∗n oraz y∗1 , ..., y∗m są rozwiązaniami dopuszczalnymi swoich pro-blemów, czyli

n∑j=1

aijxj ≤ bi (i = 1, ...,m)

orazm∑i=1

aijyi ≥ ci (j = 1, ..., n)

oraz zachodzi wzórn∑j=1

cjx∗j =

m∑i=1

biy∗i (4.12)

Twierdzenia 4.2.1 i 4.2.2 pozwolą nam nie tylko sprawdzić optymalność roz-wiązań problemów prymalnego i dualnego kiedy już je mamy, ale także, w pew-nych sytuacjach, łatwo znależć optymalne rozwiązanie problemu dualnego, gdybędzie dane rozwiązanie problemu prymalnego.

Twierdzenie 4.2.1 Niech x∗1, ..., x∗n będzie rozwiązaniem dopuszczalnym pro-

blemu (4.10), zaś y∗1 , ..., y∗m rozwiązaniem dopuszczalnym problemu dualnego

(4.11). x∗1, ..., x∗n oraz y∗1 , ..., y∗m są – równocześnie – rozwiązaniami optymal-

nymi swoich problemów wtedy i tylko wtedy, gdy dla każdego j = 1, ..., n

m∑i=1

aijy∗i = cj lub x∗j = 0

1Pamiętamy z dowodu twierdzenia 3.3.1, że w najgorszym przypadku iteracji może być(m+ nn

)w pierwszym i

(n+mm

)drugim przypadku, a więc tyle samo.

Page 42: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

42 Dualizm

oraz dla każdego i = 1, ...,m

n∑j=1

aijx∗j = bi lub y∗i = 0

Dowód. Niech x∗1, ..., x∗n będzie rozwiązaniem dopuszczalnym problemu pry-

malnego (4.10), zaś y∗1 , ..., y∗m rozwiązaniem dopuszczalnym problemu dualnego(4.11). Podobnie jak w dowodzie twierdzenia 4.1.2

n∑j=1

cjx∗j ≤

n∑j=1

(m∑i=1

aijy∗i

)x∗j =

m∑i=1

n∑j=1

aijx∗j

y∗i ≤m∑i=1

biy∗i

Zachodzenie równościn∑j=1

cjx∗j =

m∑i=1

biy∗i

która, na mocy twierdzenia 4.1.4 jest warunkiem koniecznym i wystarczającymoptymalności rozwiązań x∗1, ..., x∗n i y∗1 , ..., y∗n jest równoważne równościom

n∑j=1

cjx∗j =

n∑j=1

(m∑i=1

aijy∗i

)x∗j i

m∑i=1

n∑j=1

aijx∗j

y∗i =

m∑i=1

biy∗i

czyli, wobec cj ≤∑mi=1 aijy

∗i oraz x∗j ≥ 0, (j = 1, ..., n)

x∗j = 0 lub cj =

m∑i=1

aijy∗i (j = 1, ..., n)

oraz (wobec∑nj=1 aijx

∗j ≤ bi y∗i ≥ 0 dla i = 1, ...,m)

y∗i = 0 lubn∑j=1

aijx∗j = bi (i = 1, ...,m).

Z twierdzeń 4.2.1 i 4.1.4 wynika następne twierdzenie które nazwiemy twier-dzeniem o odstępach .

Twierdzenie 4.2.2 Rozwiązanie dopuszczalne x∗1, ..., x∗n problemu (4.10) jestoptymalne wtedy i tylko wtedy, jeżeli istnieje ciąg m elementowy y∗1 , ..., y∗m taki,że

1. jeśli x∗j > 0 to∑mi=1 aijy

∗i = cj (dla j = 1, ..., n),

2. jeśli∑nj=1 aijx

∗j < bi to y∗i = 0 (dla i = 1, ...,m),

przy czym: ∑mi=1 aijy

∗i ≥ cj (j = 1, ..., n)

y∗i ≥ 0 (i = 1, ...,m).(4.13)

Page 43: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

4.2 Korzyści 43

Dowód.

– Jeśli PPL (4.10) ma rozwiązanie optymalne x∗1, ..., x∗n, to na mocy twier-dzenia 4.1.4 istnieje rozwiązanie optymalne y∗1 , ..., y∗m problemu dualnego.Tak więc y∗1 , ..., y∗m spełniają (4.13) zaś x∗1, ..., x∗n spełniają warunki 1 i 2na mocy twierdzenia 4.2.1.

– Z drugiej strony, jeśli y∗1 , ..., y∗m jest ciągiem spełniającym (4.13), to sta-nowi on rozwiązanie dopuszczalne problemu dualnego 4.11. Z twierdzenia4.2.1 wynika, że jest to rozwiązanie optymalne.

4.2.1 Przykład

Niech będzie dany problem prymalny−x1 + x2 ≤ 1x1 − 2x2 ≤ 0x1 + x2 ≤ 3

xj ≥ 0 (j = 1, 2, 3)z = x1 + 2x2 → max

(4.14)

Wykażemy, że x∗1 = 1, x∗2 = 2 jest rozwiązaniem optymalnym problemu (4.14).Problemem dualnym do (4.14) jest

−y1 + y2 + y3 ≥ 1y1 − 2y2 + y3 ≥ 2

yi ≥ 0 (i = 1, 2, 3)w = y1 + 3y3 → min

(4.15)

Oznaczmy przez y∗1 , y∗2 , y∗3 optymalne rozwiązania problemu (4.15).Zauważmy, że

– x∗1 = 1, x∗2 = 2 jest rozwiązaniem dopuszczalnym problemu (4.14).

– Spośród trzech pierwszych nierówności problemu (4.14) x∗1, x∗2 spełnia drugąjako nierówność silną (x∗1−2x∗2 = 1−4 = −3 < 0), a więc, na mocy twier-dzenia 4.2.2, y∗2 = 0.

– Ponieważ x∗1, x∗2 > 0, na mocy twierdzenia 4.2.2 obie nierówności w pro-blemie (4.15) są równościami, otrzymujemy więc{

−y∗1 + y∗3 = 1y∗1 + y∗3 = 2

i stąd y∗1 = 32 , y∗2 = 0, y∗3 = 1

2 . Ponieważ z∗ = x∗1 + 2x∗2 = y∗1 + 3y∗3 = w∗ =

5, x∗1, x∗2 jest rozwiązaniem optymalnym (4.14) zaś y∗1 , y∗2 , y∗3 rozwiązaniemoptymalnym (4.15).

Page 44: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

44 Dualizm

4.3 Interpretacja ekonomiczna zmiennychdualnych

Problemem praktycznym który modeluje PPL

zmaksymalizować∑nj=1 cjxj (j = 1, ..., n)

przy warunkach∑nj=1 aijxj ≤ bi (i = 1, ...,m)

xj ≥ 0 (j = 1, ..., n)jest następujące zagadnienie ekonomiczne.Firma F produkuje towary X1, ..., Xn. Do wyprodukowania tych towarów po-trzebne są materiały (surowce) Y1, ..., Ym w ilości aij jednostek materiału Yi najednostkę towaru Xj dla i = 1, ...,m, j = 1, ..., n. Firma dysponuje bi jednost-kami materiału Yi dla i = 1, ...,m. Zysk z produkcji jednej jednostki towaru Xj

wynosi cj (ten zysk jednostkowy może być ujemny co dla firmy oznacza oczy-wiście stratę).Ta ekonomiczna interpretacja problemu prymalnego jest dość oczywista. Inter-pretacja problemu dualnego

zminimalizować∑mi=1 biyi

przy ograniczeniach∑mi=1 aijyi ≥ cj (j = 1, ..., n)

yi ≥ 0 (i = 1, ...,m)

jest mniej jasna. Inspirująca jest tutaj kwestia zgodności jednostek fizycznych2

(p. [13]). W ograniczeniachm∑i=1

aijyi ≥ cj

po prawej stronie nierówności jednostką fizyczną jest wartość jednostki pro-duktu, jednostkowy zysk. Jednostkami aij są zaś ilości jednostek materiału Yipotrzebnego do wytworzenia jednostki produktu Xj , czyli

m∑i=1

(ilość jednostek materiału Yiilość jednostek produktu Xj

)yi ≥

(wartość

ilość jednostek produktu Xj

).

Stąd jednostką fizyczną zmiennej dualnej yi musi być(wartość

ilość jednostek materiału Yi

).

W problemie dualnym minimalizujemy dualną funkcję celum∑i=1

biyi.

Zmienne dualne y1, ..., ym interpretujemy jako koszty jednostki materiałow Y1, ..., Ym.W ten sposób dualna funkcja celu

∑mi=1 biyi jest sumą składników postaci biyi

2W tym fragmencie tekstu słowo jednostka występuje w dwóch zupełnie różnych znacze-niach.

Page 45: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

4.3 Interpretacja ekonomiczna 45

gdzie bi − jest ilością jednostek materiału (surowca) Yizaś yi − kosztem jednostkowym materiału (surowca)Yi.

Fakt, że w problemie dualnym poszukujemy minimum∑mi=1 biyj oznacza, że

szukamy wartości yi przy których nakład (koszt materiałów (surowców)) jestminimalny.W dualnych ograniczeniach lewa strona wzoru

m∑i=1

aijyi ≥ cj

oznacza wtedy koszty produkcji towaru Xj . Mamy tu bowiem sumę iloczynów

(ilość jednostek materiału Yi potrzebnych do wytworzenia jednostki Xj)·(koszt jednostkowy Yj)

która, jak zakładamy, jest co najmniej równa cj – jednostkowej wartości pro-duktu Xj .

Zmienne dualne yi, (i = 1, ...,m) nazywane są często cenami dualnymi.Zauważmy jednak, że cena dualna ma niewiele wspólnego z "prawdziwąćenąsurowca. Z twierdzenia o odstępach komplementarnych wynika, że gdy dla pew-nego i w rozwiązaniu optymalnym (x∗1, ..., x

∗n) zachodzi∑n

j=1 aijx∗j < ci, czyli surowca Yi jest zbyt dużo, to cena dualna tego surowca

jest równa zero.

Dodatkowym uzasadnieniem interpretacji zmiennych dualnych jest następującetwierdzenie (które podajemy tu bez dowodu).

Twierdzenie 4.3.1 Jeżeli problem prymalny∑nj=1 aijxj ≤ bi (i = 1, ...,m)∑nj=1 cjxj → max (4.16)

ma niezdegenerowane bazowe rozwiązanie optymalne, to istnieje ε > 0 takie, żejeśli | ti |≤ ε dla i = 1, ...,m, to problem∑n

j=1 aij ≤ bi + ti (i = 1, ...,m)∑nj=1 cjxj → max

ma rozwiązanie optymalne o wartości z∗ +∑mi=1 tiy

∗i , gdzie z∗ jest wartością

optymalną problemu (4.16), zaś y∗1 , ..., y∗m optymalnym rozwiązaniem dla pro-blemu dualnego.

Page 46: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

46 Dualizm

4.4 Dualność ogólniejJak zobaczymy w ustępie 7.3, czasami wygodnie będzie nam dysponowąć pro-blemem dualnym do PPL w następującej postaci:

zmaksymalizuj:∑nj=1 cjxj

przy ograniczeniach:∑nj=1 aijxj ≤ bi (i ∈ N)∑nj=1 aijxj = bi (i ∈ R)

xj ≥ 0 (j ∈ P )

(4.17)

W PPL postaci (4.17) tylko o części zmiennych (xj) zakładamy, że są nieujemne(dla j ∈ P ), pozostałe zmienne nazywamy wolnymi, a zbiór indeksów zmiennychwolnych oznaczamy przez W 3

Definicja 4.4.1 Problemem dualnym do (4.17) nazywamy problem progra-mowania liniowego następującej postaci:

zminimalizuj:∑mi=1 biyi

przy ograniczeniach:∑mi=1 aijyi ≥ cj dla j ∈ P∑mi=1 aijyi = cj dla j ∈W

yi ≥ 0 dla i ∈ N

(4.18)

Problem (4.17) nazywamy wtedy problemem prymalnym (względem (4.18)).

Przykład 4.4.1 Problemem dualnym do PPL

zmaksymalizuj: 3x1 + x2 + 2x3

przy warunkach: x1 + 2x2 − x3 ≤ 34x1 − 2x2 + x3 ≤ 2−x1 + 5x2 + x3 = 1

x2 ≥ 0

jest PPL

zminimalizuj: 3y1 + 2y2 + y3

przy warunkach: 2y1 − 2y2 + 5y3 ≥ 1y1 + 4y2 − y3 = 3−y1 + y2 + y3 = 2

y1, y2 ≥ 0

Rzeczywiście, w naszym przykładzie mamy N = {1, 2}, R = {3}, P = {2},W = {1, 3}.�

Wyniki jakie otrzymamy dla problemów (4.17) i (4.18) są uogólnieniami twier-dzeń ustępu 4.1 w tym sensie, że jeśli w problemach (4.17) i (4.18) położymyR = ∅ i W = ∅ (a więc P = 1, ..., n), to poniższe twierdzenia 4.4.1 i 4.4.2sprowadzają się do twierdzeń 4.1.2 i 4.1.4.

3Pozostałe zbiory indeksów też zostały nazwane tak, by było je można łatwiej zapamiętać:N od nierówność, R od równość, P od pozytywne (tu w znaczeniu: nieujemne).

Page 47: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

4.4 Dualność ogólniej 47

Twierdzenie 4.4.1 Jeżeli x1, ..., xn i y1, ..., ym są rozwiązaniami dopuszczal-nymi problemów, odpowiednio (4.17) i (4.18), to zachodzi nierówność

n∑j=1

cj xj ≤m∑i=1

biyi

Dowód twierdzenia 4.4.1 niewiele różni się od dowodu twierdzenia 4.1.2.Dla j ∈ P mamy

cj ≤m∑i=1

aij yi

co po wymnożeniu przez xj (pamiętamy, że wtedy xj ≥ 0) daje

cj xj ≤ (

m∑i=1

aijyi)xj

Z kolei dla j ∈W

cj =

m∑i=1

aij yi

i wobec tego

cj xj = (

m∑i=1

aij yi)xj

Sumując te wzory po wszystkich j = 1, ..., n otrzymamyn∑j=1

cj xj ≤n∑j=1

(

m∑i=1

aij yi)xj

co po łatwych przekształceniach dajen∑j=1

cj xj ≤n∑j=1

(

m∑i=1

aij yi)xj

Dla i ∈ N mamy∑nj=1 aij xj ≤ bi oraz yi ≥ 0, więc

(

n∑j=1

aij xj)yi ≤ biyi

Podobnie, dla i ∈ R

(

n∑j=1

aij xj)yi = biyi

Znowu sumując po i ∈ N ∪R = {1, ...,m} otrzymamy ostatecznie

m∑i=1

(

n∑j=1

aij xj)yi ≤m∑i=1

biyi

Page 48: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

48 Dualizm

i dowód twierdzenia 4.4.1 jest zakończony.Czytelnika który nie jest jeszcze znużony kolejnym wykorzystaniem metody

sympleksowej którą poznał w rozdziale 3, zachęcamy do samodzielnego udowod-nienia przedstawionej poniżej uogólnionej zasady dualności (lub do odszukaniadowodu w literaturze (np. w [4]).

Twierdzenie 4.4.2 (Ogólna zasada dualności) Jeżeli problem prymalny (4.17)ma rozwiązanie optymalne, to także problem dualny (4.18) ma rozwiązanie opty-malne i wartości funkcji celu obu tych rozwiązań są równe.

Uwaga. łatwo zauważyć, że jeśli wymnożymy w obu problemach (4.17)i (4.18) funkcje celu oraz nierówności w pierwszych linijkach ograniczeń przez−1, to otrzymamy sytuację w której problem (4.18) jest problemem w którymmaksymalizujemy funkcję celu i problemem do niego dualnym jest (4.17). Stądprawdziwy jest wniosek:

Wniosek 4.4.3 Jeśli (4.18) ma rozwiązanie optymalne, to także (4.17) ma roz-wiązanie optymalne i wartości tych rozwiązań są identyczne.

4.5 ćwiczenia

Ćwiczenie 4.5.1 Wskaż problemy dualne do poniższych problemów.

1. zmaksymalizuj x1 + 3x2 − 2x3

przy ograniczeniach: 2x1 − 3x2 − x3 ≥ 8x1 − x2 + x3 ≤ 6−x1 + x2 + 2x3 = 3

x2 ≥ 0

2. zminimalizuj −2x1 + x2 + 2x3

przy ograniczeniach: x1 − 3x2 − 4x3 ≤ 8x1 + 2x2 − 4x3 = 6−x1 − x2 + 3x3 = 5

x1 ≥ 0

Ćwiczenie 4.5.2 Dla PPL

2x1 + 2x2 − x3 ≥ 1x1 + 3x2 + 2x3 = 2

xi ≥ 0 i = 1, 2, 3

z = 8x1 + 4x2 − 2x3 − 3 → min

znajdź i rozwiąż zadanie dualne. Odczytaj rozwiązanie zadania prymalnego.

Page 49: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

4.5 ćwiczenia 49

Ćwiczenie 4.5.3 Sprawdź, że x1 = 2, 5, x2 = 1, 5, x3 = 0 jest optymalnymrozwiązaniem PPL

x1 + x2 + 2x3 ≤ 42x1 + 3x3 ≤ 52x1 + x2 + 3x3 ≤ 7x1, x2, x3 ≥ 03x1 + 2x2 + 4x3 → max

Napisz problem dualny i rozwiązanie problemu dualnego.

Ćwiczenie 4.5.4 Wykaż, że x∗1 = 107 , x

∗2 = 0, x∗3 = 1

7 jest rozwiązaniem opty-malnym problemu

(∗)

x1+ 2x2+ x3 ≤ 4

2x1+ x2+ x3 ≤ 3x1− x2+ 4x3 ≤ 2

xi ≥ 0 i = 1, 2, 3z = 3x1+ x2+ 2x3 → max

Napisz program dualny do (∗) i wskaż jego rozwiązanie optymalne.

Page 50: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

50 Dualizm

Page 51: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Rozdział 5

Zredukowana metodasympleksowa

W niniejszym rozdziale okaże się, że nie wszystkie obliczenia które wykonywa-liśmy w każdej iteracji są niezbędne. Więcej, większość z nich można pominąć.żeby to dostrzec, przyjrzymy się macierzowemu opisowi słownika.

5.1 Macierzowy opis słownika

Dla potrzeb niniejszego rozdziału słownik który do tej pory zapisywaliśmy jako

xi = b∗i −∑j /∈B aijxj (i ∈ B)

z = z∗ +∑j /∈B cjxj

(5.1)

gdzie B jest zbiorem indeksów bazowych, będzie nam wygodniej zapisywać wpostaci ∑

j /∈B aijxj + xi = b∗i (i ∈ B)

z = z∗+∑j /∈B cjxj

(5.2)

W szczególności pierwszy słownik jest postaci∑j /∈B aijxj +xi = bi (i ∈ B)

z = z∑j /∈B cjxj

(5.3)

ponieważ zaś w pierwszym słowniku zbiór indeksów bazowychB = {n+ 1, ..., n+m}, słownik ten wygląda następująco∑n

j=1 aijxj +xi = bi (i = n+ 1, ..., n+m)

z = z∗ +∑nj=1 cjxj

(5.4)

W zapisie macierzowym to oczywiście

51

Page 52: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

52 Zredukowana metoda sympleksowa

A∗x = bz = z∗ + cxN

(5.5)

gdzie

A∗ =

a11 ... a1n 1 0 ... 0a21 ... a2n 0 1 ... 0

... ...am1 ... amn 0 0 ... 1

,b =

b1...bm

,

c = [c1, ..., cn],x =

x1

.

.

.xnxn+1

.

.

.xn+m

xN =

x1

.

.

.xn

Ten sam słownik możemy zapisać także tak:

AxN + ImxB = bz = z∗ + cxN

(5.6)

gdzie Im jest macierzą jednostkową o m wierszach i m kolumnach, zaś

xB =

xn+1

.

.

.xn+m

Przykład 5.1.1 Czytelnik który rozwiązał ćwiczenie 3.7.5 stwierdził z pewno-ścią, że z pierwszego słownika

2x1− x2+ x3+ x4 = 12x1+ 2x2+ x3 + x5 = 10−x1− x2+ x3 + x6 = −4

z = 2x1+ x2+ x3 → max

(5.7)

w którym rozwiązanie bazowe x1 = x2 = x3 = 0, x4 = 12, x5 = 10,x6 = −4 nie jest rozwiązaniem dopuszczalnym, otrzymał słownik w którymrozwiązanie bazowe jest dopuszczalne, mianowicie

x1 = 4− x2+ x3+ x6

x4 = 4+ 3x2− 3x3− 2x6

x5 = 6− x2− 2x3− x6

z = 8− x2− x3+ 2x6

(5.8)

Page 53: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

5.1 Macierzowy opis słownika 53

Zmiennymi bazowymi słownika (5.8) są x1, x4 i x5. Macierzowo słownik (5.8)można zapisać następująco

xB = b∗ − PxNz = z∗ + c∗xN

(5.9)

gdzie P =

1 −1 −1−3 3 2

1 2 1

, b∗ =

446

, z∗ = 8, c∗ = [−1,−1, 2], zaś

xN =

x2

x3

x6

�.

Jak można wyrazić słownik (5.9) przy pomocy słownika (5.6) lub (5.5)? Wtym celu wystarczy zauważyć następujące fakty:

1. W macierzy A∗ zmiennym bazowym x1, x4, x5 odpowiadają pierwsza,czwarta i piąta kolumna.

2. Pierwszy wiersz słownika (5.5) (to znaczy wszystko co ponad kreską wtym wzorze), można zapisać w postaci

ABxB + ANxN = b (5.10)

gdzie macierz AB jest utworzona przez kolumny macierzy A∗ odpowiada-jące zmiennym bazowym, zaś AB powstaje z A∗ przez wybranie kolumnodpowiadających zmiennym niebazowym. Wtedy xB i xN są utworzone,odpowiednio, ze współrzędnych będących bazowymi i niebazowymi wspó-łrzędnymi wektora x.

Przykład 5.1.1 (c.d.) Dla zmiennych bazowych x1, x4, x5 mamy:

AB =

2 1 01 0 1−1 0 0

, AN =

−1 1 02 1 0−1 1 1

, xB =

x1

x4

x5

, xN =

x2

x3

x6

Ponieważ w naszym przykładzie macierz AB jest nieosobliwa, możemy z rów-nania (5.10) obliczyć xB

xB = A−1B (b−ANxN) (5.11)

Nieosobliwość macierzy AB w przykładzie 5.1.1 nie jest przypadkowa. Udo-wodnimy następujące twierdzenie.

Page 54: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

54 Zredukowana metoda sympleksowa

Twierdzenie 5.1.1 Jeśli dany jest słownik postaci

ABxB = b − ANxNz = cBxB + cNxN

(5.12)

gdzie xB = [xk]k∈B , xN = [xk]k/∈B, B – zbiór indeksów zmiennych bazowych,to macierz AB jest nieosobliwa.

Dowód. Dla wykazania naszego twierdzenia wystarczy udowodnić, że rów-nanie ABxB = b ma dokładnie jedno rozwiązanie.Niesprzeczność równania ABxB = b jest oczywista: niech x∗ będzie dopusz-czalnym rozwiązaniem bazowym – czyli takim, że x∗N = 0. Wstawiając x∗ do(5.12) otrzymamy ABx∗B = b. Przypuśćmy, że xB ∈ Rn także spełnia równa-nie ABxB = b. Kładąc xN = 0 otrzymamy Ax = ABxB + AN xN = b.Tak więc x jest rozwiązaniem dopuszczalnym, co więcej, skoro xN = 0, jestto dopuszczalne rozwiązanie bazowe (dla zmiennych bazowych (xk)k∈B), czylixB = x∗B .

Definicja 5.1.1 Macierz B = AB powstałą z A przez usunięcie kolumn odpo-wiadających zmiennym niebazowym nazywamy macierzą bazową 1.

Oznaczmy przez c wektor c = (c1, ..., cn, 0, ..., 0) = (c1, ..., cn+m). Niech cNoznacza wektor Rn którego współrzędne są współrzędnymi wektora c odpowia-dającymi zmiennym niebazowym, cN = (ci)i/∈B , zaś cB niech będzie wektoremRn którego współrzędne są współczynnikami przy zmiennych bazowych w funk-cji celu (w wyjściowej postaci). Inaczej:

cB = (cj)j∈B

We wzorze (5.6) możemy teraz zastąpić cxN przez

cBxB + cNxN

i otrzymamyz = cBxB + cNxN

Po zastąpieniu xB przez B−1(b−ANxN ) otrzymamy

z = cBB−1(b−ANxN ) + cNxN

z = cBB−1b + (cN − cBB−1AN )xN

(gdzie B jest macierzą bazową).Ostatecznie, postacią słownika przy bazie B jest

xB = B−1(b−ANxN )z = cBB−1b + (cN − cBB−1AN )xN

(5.13)

1Macierz bazową czasami wygodnie jest oznaczać przez AB (by podkreślić, że powstała zmacierzy A), a czasami przez B (bo krócej).

Page 55: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

5.1 Macierzowy opis słownika 55

Przykład 5.1.1 (dokończenie) W ostatnim słowniku naszego przykładu je-dynym współczynnikiem dodatnim funkcji celu jest współczynnik przy x6. Zmiennąwchodzącą będzie więc x6. Równie łatwo zauważyć, że zmienną wychodzącą jestx4. W nowym słowniku zmiennymi bazowymi będą więc x1, x5 i x6, zmiennyminiebazowymi x2, x3, x4. Wobec tego macierzą bazową B jest macierz złożona zpierwszej, piątej i szóstej kolumny macierzy

A =

2 −1 1 1 0 01 2 1 0 1 0−1 −1 1 0 0 1

czyli

B =

2 0 01 1 0−1 0 1

, AN =

−1 1 12 1 0−1 1 0

cB = [2, 0, 0], cN = [1, 1, 0].

Obliczmy najpierw wektory = cBB−1

z równania yB = cB

[y1, y2, y3]

2 0 01 1 0−1 0 1

= [2, 0, 0]

2y1 +y2 −y3 = 2y2 = 0

y3 = 0

y1 = 1, y2 = y3 = 0

cBB−1AN = [1, 0, 0]

−1 1 12 1 0−1 1 0

= [−1, 1, 1]

cN − cBB−1AN = [1, 1, 0]− [−1, 1, 1] = [2, 0,−1]

Stąd oczywiście zmienną wchodzącą jest koniecznie x2 (jedyną dodatnią współ-rzędną wektora [2, 0,−1] jest 2, współrzędna odpowiadająca zmiennej x2).żeby wyznaczyć zmienną wychodzącą, musimy w pierwszym równaniu (5.13)wyznaczyć wektor B−1b i pierwszą kolumnę (tę odpowiadającą zmiennej x2)macierzy B−1AN . 2a = 12

a +b = 10−a +c = −4

a = 6, b = 4, c = 2, a więc

B−1b =

642

Page 56: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

56 Zredukowana metoda sympleksowa

Z kolei pierwszą kolumną

k1

k2

k3

macierzy D = B−1AN wyznaczymy z rów-

nania BD = AN , a więc 2 0 01 1 0−1 0 1

k1

k2

k3

=

−12−1

(po lewej stronie tej równości jest iloczyn macierzy B przez pierwszą kolumnęmacierzy D = B−1AN , z prawej pierwsza kolumna AN ). 2k1 = −1

k1 +k2 = 2−k1 +k3 = −1

k1 = − 12 , k2 = 5

2 , k3 = − 32 .

Pomijając nieistotne dla nas zmienne niebazowe x3 i x4 równanie xB = B−1b−B−1ANxN słownika (5.13) oznacza w w naszym przypadku

x1 = 6 + 12x2 ...

x5 = 4− 52x2 ...

x6 = 2 + 32x2 ...

Jedynym współczynnikiem ujemnym przy x2 jest − 52 i zmienną wychodząca jest

x5.Tak więc nowymi zmiennmi bazowymi są

x1, x2, x6, a zmiennymi niebazowymi

x3, x4, x5. Nowe macierze i wektory B,AN , cB , cN to teraz

B =

2 −1 01 2 0−1 −1 1

,AN =

1 1 01 0 11 0 0

, cB = [2, 1, 0], cN = [1, 0, 0].

Znowu liczymy y = [y1, y2, y3] z równania y = cBB−1, czyli yB = cB .

[y1, y2, y3]

2 −1 01 2 0−1 −1 1

= [2, 1, 0]

2y1 +2y2 −y3 = 2−y1 +2y2 −y3 = 1

y3 = 0{−y1 +2y2 = 1

5y2 = 4

Page 57: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

5.2 Podsumowanie 57

y2 =4

5, y1 =

8

5− 1 =

3

5

Teraz liczymy cBB−1AN = yAN = [ 35 ,

45 , 0]

1 1 01 0 11 0 0

= [ 75 ,

35 ,

45 ]

i ostatecznie otrzymamy

cN − cBB−1AN = [1, 0, 0]− [7

5,

3

5,

4

5] = [−2

5,−3

5− 4

5]

Stąd oczywiście wniosek, że nasze rozwiązanie bazowe jest optymalne.W rozwiązaniu tym oczywiście x3 = x4 = x5 = 0. Czytelnik zechce spraw-dzić, że wartościami zmiennych bazowych x1, x2 i x6 z równania x1

x2

x6

= B−1b

są x1 = 345 , x2 = 8

5 , x6 = 0 i wartością optymalną funkcji celu jest

z = z∗ + cBB−1b = 0 + [ 35 ,

45 , 0]

1210−4

= 365 + 40

5 = 765 .

5.2 Podsumowanie

W zrewidowanej metodzie sympleksowej oszczędzamy – w porównaniu z meto-dąoryginalną przedstawioną w rozdziale trzecim – czas i pamięć (komputera).

Czas – bowiem nie liczymy iloczynu A−1B AN a tylko jego jedną kolumnę. To w

praktycznych zadaniach PL bardzo istotna oszczędność, bowiem na ogółzmiennych, a więc kolumn macierzy jest bardzo dużo.

Pamięć – ponieważ do kolejnych obliczeń w ogóle nie są nam potrzebne żadnesłowniki poprzednie, poza słownikiem pierwszym.

Każdą iterację w metodzie zredukowanej można opisać następująco:

Krok 1. Obliczamy y = cBB−1 (z równania yB = cB)2

Krok 2. Jeśli cN ≤ yAN to aktualne rozwiązanie bazowe jest optymalne. Jeślinie, to znaczy, że dla pewnej kolumny k macierzy AN zachodzi cj −yk >0, dla odpowiedniej współrzędnej cj wektora cN . Kolumna k wyznaczazmienną wychodzącą.

2Nigdy nie obliczamy y przez wyliczenie macierzy B−1 co jest wysiłkiem dużym i zupełniezbędnym. Szczególnie wtedy, gdybyśmy chcieli w tym celu wykorzystać zupełnie nieefektywnąmetodę wyznacznikową.

Page 58: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

58 Zredukowana metoda sympleksowa

Krok 3. Obliczamy kolumnę d macierzy D = B−1AN , odpowiadającą zmien-nej wchodzącej. Jeśli wszystkie jej współrzędne są ujemne, to problemjest nieograniczony. W przeciwnym przypadku jako zmienną wychodzącąwybieramy tę dla której iloraz

wartość w rozwiązaniu bazowymwartość współrzędnej w kolumnie d

jest minimalny (i nieujemny).

Krok 4. Ustalamy nowe zmienne bazowe i niebazowe i dla nich wartości ma-cierzy B,AN oraz wektorów cB i cN .

5.3 Programowanie liniowew liczbach całkowitych

Bardzo często w zadaniach praktycznych jest tak, że jedynymi interesującymirozwiązaniami problemów programowania matematycznego w ogólności, a linio-wego w szczególności, są rozwiązania całkowite.Dla przykładu, jeśli xi są zmiennymi decyzyjnymi, a więc mogącymi przyjmo-wać wartości 0 lub 1, to najczęściej rozwiązania niecałkowite nie mają żadnejsensownej interpretacji.

Przykład 5.3.1 W pewnym przedsiębiorstwie n osób ma wykonywać n czyn-ności, przy czym:

– każda osoba ma wykonywać jedną (i tylko jedną) czynność,

– koszt przystosowania i−tej osoby do wykonywania j−ej czynności wynosidij .

Zadanie polega na przyporządkowaniu każdej z osób zadania w taki sposób, bysuma kosztów była możliwie najmniejsza.Połóżmy

xij =

{1 jeśli i−tej osobie przydzielono j−te zadanie0 w przeciwnym przypadku.

Problem programowania liniowego jaki otrzymamy dla tego zadania jest nastę-pujący.Problem przydziału: ∑n

i=1 xij = 1 (j = 1, ..., n)∑nj=1 xij = 1 (i = 1, ..., n)

xij ∈ {0, 1}∑ni=1

∑nj=1 dijxij → min

Page 59: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

5.3 Programowanie całkowite 59

Okazuje się, że zadanie programowania liniowego w liczbach całkowitych jestproblemem trudnym, któremu jest poświęcona bardzo obszerna literatura. Zain-teresowanego czytelnika odsyłam do rozdziału osiemnastego [20], w którym pozawielu innymi rezultatami znajdzie twierdzenie mówiące, że jeśli współczynnikimacierzy A i wektora b są wymierne, to problem

Ax ≤ bx − wektor o współczynnikach całkowitych

cx → max

jest NP−zupełny.Ogólna postać programowania liniowego w liczbach całkowitych jest nastę-

pująca: Ax ≤ b

x ∈ Zn+cx → max

(5.14)

Przykład 5.3.2 Rozważmy PPL−3x1 + 4x2 ≤ 6

4x1 + 3x2 ≤ 163x1 − 4x2 ≤ 10x1 + x2 ∈ Z+

3x1 + 2x2 → max

(5.15)

Na rysunku 5.3.1 przedstawiono interpretację geometryczną zadania (5.15).

-

6

������SSSSSSSSpr

1

r1

��

x1

x1

JJJJJJJJJJJ

3x1 + 2x2 = c

r rr rr r

rr

Rys. 5.3.1

Page 60: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

60 Zredukowana metoda sympleksowa

łatwo zauważyć, że rozwiązaniem optymalnym problemu 5.15) jest x1 = 3, x2 =1, a więc punkt znajdujący sie wewnątrz zbioru rozwiązań dopuszczalnych pro-blemu powstałego z (5.15) przez usunięcie założeń o całkowitości zmiennych.Taki punkt jest oczywiście nie do wykrycia przez algorytm sympleks.�

W dalszym ciągu zajmiemy się sytuacją w której problem programowania li-niowego w liczbach całkowitych ma rozwiązanie które można otrzymać stosującmetodę sympleks. W rozdziale 8 okaże się, że z takimi właśnie sytuacjami mamydo czynienia częściej niż mogłoby się, na pierwszy rzut oka, wydawać.

Definicja 5.3.1 Mówimy, że macierz A jest totalnie unimodularna, jeżelidla każdej podmacierzy kwadratowej A′ macierzy A zachodzidet(A′) ∈ {0, 1,−1}.

Przykład 5.3.3 Z łatwością można sprawdzić, że macierz

A =

1 1 0 00 0 1 01 0 1 00 1 0 1

jest totalnie unimodularna.

Z definicji macierzy unimodularnych wynika natychmiast, że jej współrzędnesą równe 0, 1 lub −1.Udowodnimy następujące twierdzenie.

Twierdzenie 5.3.1 Niech będzie dany PPL{Ax = bcx → max

(5.16)

gdzie A ∈ Zm×n jest macierzą rzędu m i b ∈ Zm. Jeśli dla każdej macierzybazowej AB zachodzi det(A)B ∈ {1,−1}, to

1. A−1B ∈ Zm×m,

2. każde rozwiązanie bazowe xB jest całkowite.

Dowód. W podrozdziale 5.1 widzieliśmy, że ograniczenia w problemie (5.16)można zapisać w postaci

xB = A−1B (b−ANxN ), (5.17)

gdzie AB i AN są pewnymi podmacierzami macierzy A, zaś AB jest nieosobliwąmacierzą kwadratową rzędu m. Jeśli oznaczymy wyrazy macierzy A−1

B przezdij , i, j = 1, ...,m, to

dij =(−1)i+j det((AB)ij)

det(AB)

Page 61: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

5.3 Programowanie całkowite 61

gdzie (AB)ij jest macierzą powstałą z A przez skreślenie j−tego wiersza i i−tejkolumny. Jest więc zupełnie oczywiste, że dij ∈ Z dla wszystkich i, j = 1, ...,m.W rozwiązaniu bazowym x mamy xN = 0 i xB = A−1

B b (por. (5.17)). Ponieważb jest z założenia wektorem o współczynnikach całkowitych, także wektor xBma współczynniki całkowite.

Twierdzenie 5.3.1 pociąga natychmiast podany niżej ważny wniosek któryostatecznie wyjaśnia rolę macierzy totalnie unimodularnych w całkowitoliczbo-wym programowaniu liniowym.

Wniosek 5.3.2 Niech będzie dany PPL{Ax = bcx → max

(5.18)

gdzie A jest pewną macierzą totalnie unimodularną, zaś b wektorem o współ-czynnikach całkowitych.

1. Jeżeli (5.18) jest niesprzeczny, to jego rozwiązania bazowe mają wszystkiewspółrzędne całkowite.

2. Jeżeli istnieje rozwiązania optymalne problemu (5.18), to istnieją takierozwiązania optymalne których wszystkie współrzędne są całkowite.

3. Jeśli problem (5.18) jest niesprzeczny i ograniczony to algorytm sympleksznajduje takie rozwiązanie (5.18) którego wszystkie współrzędne są liczbamicałkowitymi.

Wobec wniosku 5.3.2 ważnym jest problem żozpoznania"macierzy totalnieunimodularnych. W rozdziale 8 okaże się jak ważnym warunkiem wystarczają-cym dla tych macierzy jest poniższe twierdzenie.

Twierdzenie 5.3.3 Niech A ∈ Rm×n będzie macierzą spełniającą następującewarunki:

1. każdy wyraz macierzy A jest równy 1,−1 lub 0,

2. każda kolumna macierzy A zawiera co najwyżej dwa wyrazy niezerowe,

3. istnieje taki podział zbioru wierszy na dwa podzbiory W1 i W2 takie, że:

a) jeśli istnieją dwa wyrazy tego samego znaku występujące w jednej ko-lumnie, to jeden z nich jest w wierszu zbioru W1 a drugi w wierszuzbioru W2,

b) jeśli w pewnej kolumnie występują dwa wyrazy niezerowe przeciwnychznaków, to oba wiersze w których występują należą albo do zbioru W1

albo do zbioru W2.

Wtedy A jest macierzą totalnie unimodularną.

Page 62: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

62 Zredukowana metoda sympleksowa

Przykład 5.3.4 Macierz

B =

1 0 −1 −1 0 00 1 0 0 −1 00 0 1 0 1 −1

W1

W1

W1

,

(podobnie jak macierz z przykładu 5.3.3) spełnia założenia twierdzenia 5.3.3, wwięc jest macierzą totalnie unimodularną.

Dowód twierdzenia 5.3.3. Wystarczy wykazać, że dla każdej macierzyA o n wierszach i n kolumnach spełniającej założenia twierdzenia 5.3.3 det(A) ∈{0, 1,−1}. Dowód przeprowadzimy przez indukcję ze względu na n.Dla n = 1 przwdziwość twierdzenia jest oczywista. Przypuśćmy, więc, że n > 1i twierdzenie jest prawdziwe dla macierzy o n− 1 wierszach i n− 1 kolumnach.Rozpatrzymy trzy przypadki:

Przypadek 1. Jedna z kolumn macierzy A ma wszystkie wyrazy równe 0.Wtedy oczywiście det(A) = 0.

Przypadek 2. W jednej z kolumn jest jeden wyraz różny od zera, powiedzmyże tym wyrazem jest ai0,j0 . Wtedy ai0,j0 ∈ {−1, 1}. Rozwijamy wyznacz-nik macierzyA względem kolumny j0 i otrzymujemy

det(A) = (−1)i+jai0,j0 det(Ai0j0), (5.19)

gdzie Ai0j0 jest macierzą powstałą przez skreślenie w A wiersza i0i kolumny j0. Zauważmy, że macierz Ai0j0 jest macierzą kwadratowąo n − 1 wierszach i kolumnach spełniającą warunki twierdzenia 5.3.3 iwobec tego det(Ai0j0) ∈ {0, 1,−1}. Stąd i (5.19) otrzymujemy det(A) ∈{0, 1,−1}.

Przypadek 3. Nie zachodzą przypadki 1 ani 2. Wtedy∑i∈W1

aij =∑i∈W2

aij (5.20)

dla każdego j = 1, ...,m. Udowodnienie, że w tym przypadkudet(A) = 0 jest bardzo prostym ćwiczeniem, które pozostawiam czytelni-kowi (p. ćwiczenie 5.4.2).

5.4 ćwiczeniaĆwiczenie 5.4.1 Niech będzie dany PPL:

x4 = 5 −x1 −2x2 +x3

x5 = 6 −x1 +2x2 −x3

x6 = 2 −2x1 −x2 +2x3

xi ≥ 0 (i = 1, ..., 6)z = x1 +x2 +x3 → max

Page 63: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

5.4 ćwiczenia 63

(a) Wykaż, że x2, x4, x5 są zmiennymi bazowymi pewnego słownika.

(b) Znajdź wartość funkcji celu dla tego słownika.

(c) Jakie są wtedy możliwe zmienna wchodzące?

Ćwiczenie 5.4.2 Wykaż, że jeśli zbiór wierszy macierzy A ∈ Rn×n możnapodzielić na dwa rozłączne podzbiory W1 i W2 takie, że dla każdego j = 1, ..., nspełniona jest równość (5.20), to detA = 0 (prawdziwe także gdy jeden zezbiorów W1,W2 jest pusty3).

Ćwiczenie 5.4.3 Niech będą dane macierz totalnie unimodularna A, układnierówności

Ax ≤ b (5.21)

oraz równoważny mu układAx = b (5.22)

powstały z (5.21) przez wprowadzenie zmiennych dodatkowych. Wykaż, że ma-cierz A jest totalnie unimodularna.

Ćwiczenie 5.4.4 Z twierdzenia 5.3.1 nie wynika, że jeśli są spełnione założeniatego twierdzenia, to wszystkie rozwiązania problemu (5.16) są całkowite. Skon-struuj przykład PPL w którym macierz ograniczeń A jest totalnie unimodularnai wektor b całkowity, dla którego istnieją optymalne rozwiązania niecałkowite.

3Na mocy definicji przyjmujemy∑

i∈∅ aij = 0.

Page 64: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

64 Zredukowana metoda sympleksowa

Page 65: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Rozdział 6

Zadanie ograniczone

W wielu praktycznych zagadnieniach obok ograniczeń

n∑j=1

aijxj ≤ bi (i = 1, ...,m)

występują indywidualne ograniczenia od góry na zmienne (wszystkie lub nie-które postaci

xj ≤ gj (j = 1, ..., n)

Zadanie PL z tak określonymi ograniczeniami jest wtedy oczywiście zadaniemw postaci standardowej

n∑j=1

aijxj ≤ bi (i = 1, ...,m)

xj ≤ gj (j = 1, ..., n)

xj ≥ 0 (j = 1, ..., n)

Jednak po dołączeniu zmiennych sztucznych otrzymujemy wtedy macierz ogra-niczeń o rozmiarze (m+ 2n)× (m+ 2n). Jeśli liczba zmiennych (a więc liczban) jest duża, wielkość problemu który należało będzie rozwiązać może być kło-potliwa. Stąd istotna może się okazać metoda zasugerowana po raz pierwszyprzez Dantziga w [5].Problem postawimy jeszcze ogólniej niż wspomniano wyżej, mianowicie bę-dziemy zakładać ograniczenia nie tylko górne ale i dolne i to na wszystkiezmienne, czyli

dj ≤ xj ≤ gj (j = 1, ..., n)

przy czym dopuszczać będziemy −∞ dla dolnego i +∞ dla górnego ogranicze-nia (co oczywiście oznacza, że odpowiednich ograniczeń nie ma) 1 Będziemy też

1Jeżeli dolne ograniczenia są skończone, to można zmienne xj zastąpić nowymi zmiennymiyj = xj−dj i przyjąć standardowe ograniczenia yj ≥ 0 (por. Gass [10]). Ograniczenia od góry

65

Page 66: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

66 Zadanie ograniczone

zakładali równości∑nj=1 aijxj = bi, (i = 1, ...,m), czyli sytuację którą mamy

po wprowadzeniu zmiennych sztucznych. Problem nasz będzie więc postaci

zmaksymalizować z =∑nj=1 cjxj

przy ograniczeniach∑nj=1 aijxj = bi (i = 1, ...,m)

dj ≤ xj ≤ gj (j = 1, ..., n)

lub w formie macierzowej zmaksymalizować z = cxprzy ograniczeniach Ax = b

d ≤ x ≤ g(6.1)

gdzie A ∈ Rn×n, b,d,g,x ∈ Rn×1, c ∈ R1×n.

6.1 Sympleks dla zadania ograniczonego

Różnica pomiędzy algorytmem dla zadań ograniczonych a poznanym wcześniejpolega, jak zobaczymy, na żądaniu, by w rozwiązaniach bazowych wartościzmiennych niebazowych były równe dolnym lub górnym ograniczeniom 2.

Definicja 6.1.1 Rozwiązanie x układu równań Ax = b nazywamy rozwiąza-niem bazowym jeżeli n współczynników wektora x można podzielić na

(a) m zmiennych bazowych oraz

(b) n−m zmiennych niebazowych

w ten sposób, że

1. kolumny macierzy A których elementy są współczynnikami przy zmiennychbazowych tworzą macierz (kwadratową o m wierszach i m kolumnach)nieosobliwą,

2. wartości zmiennych niebazowych w wektorze x równe są ich ograniczeniomgórnym lub dolnym.

Rozwiązanie bazowe x jest dopuszczalne jeżeli spełnia warunek

d ≤ x ≤ g

na poszczególne zmienne w praktyce występują prawie zawsze. Na przykład, jeśli zmienne xjoznaczają wielkość produktów Xj , j = 1, ..., n, to górne ograniczenia mogą oznaczać popyt naodpowiednie produkty.

2W metodzie sympleks z którą obcujemy od trzeciego rozdziału przyjmujemy wartość 0 dlazmiennych niebazowych, a więc także wartość indywidualnego ograniczenia (dolnego, innegonie bylo) na zmienne.

Page 67: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

6.1 Sympleks dla zadania ograniczonego 67

Przykład 6.1.1 Dla problemu

zmaksymalizuj x1+ x2+ x3+ x4+ x5+ x6

przy warunkach x1+ 2x2+ x3+ 3x4+ 5x5+ 7x6 = 392x1+ 3x2+ x3+ 4x4+ + x6 = 19

2 ≤ x1 ≤ 31 ≤ x2 ≤ 45 ≤ x3 ≤ 80 ≤ x4 ≤ 60 ≤ x5 ≤ 21 ≤ x6 ≤ 4

zmienne x2, x6 są3 bazowymi, zaś x1, x3, x4, x5 niebazowymi, a bazowym roz-wiązaniem dopuszczalnym jest x = [2, 2, 5, 0, 0, 4]T .

Oczywiście dla danego wyboru zmiennych bazowych może być więcej niż jednorozwiązanie bazowe (por. ćwiczenie 6.2.1).

Dalszy ciąg postępowania będzie w dużej mierze przypominał metodę sym-pleks: będziemy utrzymywać ograniczenie

Ax = b

starając sie wybierać nową bazę i nowe rozwiązania bazowe tak, by powiększaćwartość funkcji celu. Zacznijmy od przykładu.

Przykład 6.1.2

zmaksymalizuj x1+ 2x2+ 3x3+ 2x4

przy ograniczeniach: x1+ x2+ 2x3+ x4 = 110x1+ 3x2+ x3+ 2x4 = 1200 ≤ x1 ≤ 40

10 ≤ x2 ≤ 3020 ≤ x3 ≤ 300 ≤ x4 ≤ 20

Przyjmijmy jako zmienne bazowe x1, x2 i weźmy rozwiązanie bazowe

x1 = 30, x2 = 20, x3 = 30, x4 = 0

Wartość funkcji celu dla naszego rozwiązania bazowego wynosi z = 160.Będziemy, tak jak w metodzie sympleks, zmieniać wartości jednej ze zmiennychniebazowych tak, aby powiększała się wartość rozwiązania, przy zachowaniu wa-runków ograniczających, a w szczególności pierwszych dwóch równań warunkówograniczających.Wybierzmy zmienną x4 jako tę zmienną niebazową niebazową której powiększe-nie powoduje zwiększanie funkcji celu.

3właściwie mogą być

Page 68: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

68 Zadanie ograniczone

Zauważmy, że jeżeli podstawimy

x1 = 30 − 12 t

x2 = 20 − 12 t

x3 = 30x4 = t (t ≥ 0)

to także takie zmienne spełniają oba równania w ograniczeniach naszego zdaniaPL.t możemy zwiększyć do 20. Wtedy otrzymamy

x1 = 20x2 = 10x3 = 30x4 = 20

Przyjąć więc można: x1 oraz x4 jako zmienne bazowe oraz x2 i x3 jako zmienneniebazowe. Nowe rozwiązanie ma wartość z = 170. Teraz zmienną wchodzącąbędzie x2. Podobnie jak poprzednio zauważmy, że podstawiając

x1 = 20 + tx2 = 10 + tx3 = 30x4 = 20 − 2t

t możemy zwiększyć do 10 (rozpoczynając od t = 0), wtedy jednak funkcja celumaleje – a więc naszego rozwiązania nie da się już poprawić.

W ogólnym przypadku możemy napisać rozważany PPL postaci macierzo-wej, tak jak to zrobiliśmy w prezentacji zrewidowanej metodzie sympleks. Przyj-mijmy więc następujące oznaczenia:

AN – macierz otrzymana przez wybór z A kolumn o indeksach niebazowych,

B – macierz powstała z A przez wybór kolumn o indeksach bazowych,

xN ,xB , cN , cB – odpowiednie wektory otrzymane z x i c.

Wtedy ograniczenie Ax = b można zapisać w postaci

ANxN + BxB = b

ixB = B−1b−B−1ANxN

Funkcja celu będzie postaci

cx = cB(B−1b−B−1ANxN ) + cNxN

cx = cBB−1b + (cN − cBB−1AN )xN

Page 69: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

6.1 Sympleks dla zadania ograniczonego 69

lub krócejcx = yb + (cN − yAN )xN

gdziey = cBB−1

Niech teraz x będzie rozwiązaniem dopuszczalnym i bazowym problemu iniech

xj będzie pewną współrzędną niebazową wektora x, zaś

a = (AN)j – kolumną macierzy AN odpowiadającą współrzędnej xj wektorax (a więc j−tą kolumną macierzy A).

Wektor x spełnia równanie

xB = B−1b−B−1AN xN (6.2)

Utwórzmy teraz nowy wektor ¯x spełniający ograniczenia, czyli taki, że

¯x = B−1b−B−1AN¯xN

gdzie ¯xj+t, zaś pozostałe współrzędne niebazowe wektora ¯x nie ulegają zmianie(to znaczy ¯xk = xj dla niebazowych indeksów k 6= j). Będziemy wtedy mieli

¯xB = B−1b−B−1ANxN − tB−1a (6.3)

Ze wzorów (6.2) i (6.3)¯xB = xB − tB−1a

a oznaczając d = B−1a¯xB = xB − td

(d to wektor który w przykładzie 6.1.2 był równy d = [− 12 ,−

12 ]T ).

Wartość funkcji celu cx dla x = ¯x jest równa

c¯x = yb + (cN − yAN)xN + (cj − ya)t

(niebazową część wektora ¯x otrzymaliśmy z xN przez zastąpienie xj przez za-stąpienie j−tej współrzędnej xj przez xj + t, pozostawiając inne współrzędneniebazowe bez zmiany).Stąd wynika ważna obserwacja.

Obserwacja 6.1.1 Jeżeli w rozwiązaniu bazowym x zastąpimy xj przez ¯xj =xj + t, a pozostałe współrzędne niebazowe wektora x nie ulegną zmianie, to

¯xB = x− td

gdzie d = B−1a, a jest j−tą kolumną AN oraz

c¯x = cx + (cj − ya)t

Page 70: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

70 Zadanie ograniczone

Naszym celem jest zwiększenie wartości funkcji celu. Jest to możliwe w każdejz następujących sytuacji:

1. cj − ya > 0, xj < gjWartości funkcji celu można zwiększyć przyjmując pewne t > 0.

2. xj > dj , cj − ya < 0W tym przypadku wartość z można zwiększyć przyjmując ¯xj = xj + t dlapewnego t ujemnego.

Po tych objaśnieniach możemy przedstawić nasz algorytm następująco:

Algorytm sympleks dla PPL (6.1) (ze zmiennymi ograniczonymi)Niech x będzie rozwiązaniem bazowym dopuszczalnym.

Krok 1. Rozwiąż układ yB = cB .

Krok 2. Wybór zmiennej wchodzącej:Zmienną wchodzącą może byc zmienna niebazowa xj taka, że

Przypadek (a): xj < gj i cj > ya lub

Przypadek (b): xj > dj i cj < ya

gdzie a jest kolumną macierzy A odpowiadającą zmiennej xj .Jeśli ani przypadek (a) ani przypadek (b) nie zachodzi dla żadnej zmiennejniebazowej STOP: x jest rozwiązaniem optymalnym.

Krok 3. Rozwiąż układ Bd = a.Zdefiniujmy: xj(t) = xj + t, xB(t) = xB − td.

Krok 4. Przypadek (a). Jeśli dla dowolnego t dodatniego:

dj ≤ xj(t) ≤ gj i dB ≤ xB(t) ≤ gB

(gdzie dB i gB są wektorami powstałymi z wektorów d i g przezopuszczenie współrzędnych niebazowych) STOP: problem jest nie-ograniczony.

Przypadek (b). Jeśli dla dowolnego t < 0

dj ≤ xj(t) ≤ gj i dB ≤ xB(t) ≤ gB

STOP: problem jest nieograniczony.

Krok 5. Przypadek (a). Weźmy t0 maksymalne spełniające

dj ≤ xj(t0) ≤ gj i dB ≤ xB(t0) ≤ gB (6.4)

Page 71: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

6.2 Inicjalizacja 71

Przypadek (b). Niech t0 będzie minimalne spełniające

dj ≤ xj(t0) ≤ gj i dB ≤ xB(t0) ≤ gB (6.5)

Jeśli t0 jest takie, że

dj = xj(t0) lub gj = xj(t0)

to idź do Kroku 2 (xj pozostaje zmienną niebazową). W przeciw-nym przypadku wybierz indeks bazowy i0 dla którego zachodzi

xi0(t0) = di0 lub xi0(t0) = gi0

xi0 jest zmienną wychodzącą.

Czytelnikowi pozostawiam wykazanie poniższych twierdzeń: pierwszy dowódjest bardzo łatwy, drugi wymaga zaadaptowania dowodu twierdzenia 3.3.2.

Twierdzenie 6.1.2 Jeśli metoda sympleks dla problemu ograniczonego (6.1)nie doprowadza do rozwiązania w skończonej liczbie kroków, to algorytm wpadaw pętlę.

Twierdzenie 6.1.3 Jeśli do wyboru zmiennych wchodzących i wychodzących walgorytmie sympleks dla problemu ograniczonego (6.1) stosujemy regułę Blanda,to algorytm kończy się po skończonej liczbie iteracji.

6.2 InicjalizacjaPodobnie jak w przypadku standardowego PPL także w przypadku zadaniaograniczonego istnieje problem inicjalizacji, to znaczy znalezienia jakiegokolwiekbazowego rozwiązania dopuszczalnego czyli pierwszego dopuszczalnego słow-nika. Także w tym przypadku w poszukiwanie takiego słownika wprzęgniemymetodę sympleks.Z zadaniem

zmaksymalizuj∑nj=1 cjxj

przy ograniczeniach∑nj=1 aijxj = bi (i = 1, ...,m)

dj ≤ xj ≤ gj (j = 1, ..., n)

(6.6)

skojarzymy zadanie PL w którym ograniczenia będą postaci:{ ∑nj=1 aijxj + xn+i = bi (i = 1, ...,m)

dk ≤ xk ≤ gk (k = 1, ..., n+m)(6.7)

przy czym dla k > n dolne i górne ograniczenia we wzorze (6.7) są wyznaczanew sposób opisany poniżej.Niech x1, ..., xn+m będą dane następującymu wzorami:

xj = dj lub xj = gj dla j = 1, ..., n

Page 72: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

72 Zadanie ograniczone

xn+i = bi −n∑j=1

aij xj (i = 1, ...,m)

Jeśli xn+i ≥ 0 to w (6.7) przyjmujemy dn+i = 0, gn+i = +∞, jeśli zaś xn+i < 0to dn+i = −∞, gn+i = 0.Jest oczywiste, że (6.6) ma rozwiązanie dopuszczalne wtedy i tylko wtedy, gdy(6.7) ma rozwiązanie w którym xn+i = 0 (i = 1, ...,m). Problemem ograniczo-nym PL który wystarczy rozwiązać jest

∑mi=1 wn+ixn+i → max∑nj=1 aijxj + xn+i = bi (i = 1, ...,m)

dk ≤ xk ≤ gk (k = 1, ..., n+m)(6.8)

gdzie wn+i =

{1 gdy dn+i = 0−1 gdy gn+i = 0

. Problem (6.8) jest niesprzeczny,

x1, ..., xn+m jest jego rozwiązaniem dopuszczalnym. Jeśli (6.8) ma rozwiązanieoptymalne zerowe (xn+i = 0, i = 1, ...,m), to pierwszych n współrzędnych tegorozwiązania x1, ..., xn jest rozwiązaniem dopuszczalnym (6.6).

6.2.1 ćwiczeniaĆwiczenie 6.2.1 Znajdź wszystkie rozwiązania bazowe odpowiadające w przy-kładzie 6.1.1 zmiennym bazowym x2, x6. Znajdź inne zbiory zmiennych bazo-wych dla tego przykładu.

Ćwiczenie 6.2.2 Rozwiąż PPL

x1 − x2 + 2x3 ≤ 7x1 + 2x2 − x3 ≤ 6

−1 ≤ x1 ≤ 21 ≤ x2 ≤ 3

−∞ ≤ x3 ≤ 42x1 + 3x2 + x3 → max

Ćwiczenie 6.2.3 Dany jest PPL:

z = 5x1 + 2x2 − 3x3 + 3x4 + 6x5 + x6 → max3x1 + x2 − 4x3 + 2x4 + 5x5 + x6 ≤ 3

−5x1 + 4x2 + 2x3 − 3x4 + 2x5 + 3x6 ≤ 25x1 + x2 + 2x3 + x4 + x5 + 2x6 = 4

x1 ≥ 0, 2 ≤ x2 ≤ 10, x3 ≤ 0, −3 ≤ x4 ≤ 3

i jego pierwszy słownik

z = 5x1 + 2x2 − 3x3 + 3x4 + 6x5 + x6 → max3x1 + x2 − 4x3 + 2x4 + 5x5 + x6 + x7 = 3

−5x1 + 4x2 + 2x3 − 3x4 + 2x5 + 3x6 + x8 = 25x1 + x2 + 2x3 + x4 + x5 + 2x6 = 4

x1 ≥ 0, 2 ≤ x2 ≤ 10, x3 ≤ 0, −3 ≤ x4 ≤ 3

Page 73: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

6.2 Inicjalizacja 73

Przyjmując jako zmienne bazowe x1, x6, x8 i rozwiązanie bazowe

(x1, x2, x3, x4, x5, x6, x7, x8) = (9, 2, 0,−3,−4, 0, 0, 61)

wykonaj następną iterację biorąc jako zmienną wchodzącą x5.

Page 74: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

74 Zadanie ograniczone

Page 75: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Rozdział 7

Interpretacje i zastosowania

7.1 Interpretacja geometryczna

Naszej wyobraźni dostępnw jest interpretacja geometryczna przestrzeni Rn wprzypadkach n = 1, 2 i 3 (p. podrozdział 7.1.3). Przypadek n = 1 jest banalny,zajmiemy się więc tylko przypadkami kiedy n = 2 i n = 3.

7.1.1 n = 2

Przyjrzyjmy się poniższemu przykładowi.

Przykład 7.1.1

zmaksymalizuj x1 + x2

przy ograniczeniach x1 − x2 ≤ 2x1 + 3x2 ≤ 12x1 ≤ 3

x1, x2 ≥ 0

Zbiór punktów (x1, x2) płaszczyzny spełniających warunek x1 − x2 ≤ 2 towszystkie punkty płaszczyzny leżące nad prostą x1 − x2 = 2, punkty (x1, x2)spełniające x1 + 3x2 ≤ 12 to wszystkie punkty leżące poniżej prostej x1 + 3x2 =12, zbiór punktów (x1, x2) spełniających x1 ≤ 3 to punkty na lewo od prostejx1 = 3 (oczywiście w każdym przypadku włacznie z punktami leżącymi na od-powiedniej prostej. Ograniczenia x1, x2 ≥ 0 oznaczają, że chodzi nam o punktypierwszej ćwiartki.Tak więc szukać będziemy maksimum funkcji z = x1 + x2 dla (x1, x2) należą-cych do wielokąta ograniczonego prostymi: x1 − x2 = 2, x1 + 3x2 = 12, x1 =0, x1 = 3, x2 = 0 (rys. 7.1.1).

75

Page 76: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

76 Interpretacje i zastosowania

-

6

1u

2u

3u

1 u

4 u

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPPP

PPPPPPPPPPPP

PPPPPPPPPPPP

PPPPPPPPPPPP

PPPPPPPPPPPP

PPPPPPPPPPPP

PPPPPPPPPPP

PPPPPPPPPPP

PPPPPPPPPPP

PPPPPPPPPPP

PPPPPPPPPPP

PPPPPPPPPP

PPPPPPPPPP

PPPPPPPPPP

PPPPPPPPPP

PPPPPPPPP

PPPPPPPPP

PPPPPPPPP

PPPPPPPP

PPPPPPP

PPPPPP

PPPPPPPPPPPPPPPPPPPP

��������������������

PPPPPPPPPPPPPPPPPPPPPPPPPPPPP

@@@@@@@@@@@@@@@@@@@@@@@@@

x1 + x2 = 6 x1 = 3

x1 − x2 = 2

x1 + 3x2 = 12

Rys.6.1

Maksymalizacja funkcji z = x1+x2 oznacza, że powinniśmy znaleźć taką maksy-malną stała C, żeby prosta x1 + x2 = c miała co najmniej jeden punkt wspólnyz naszym wielobokiem. Inaczej mówiąc, musimy prostą x1 + x2 = 0 przesu-nąć równolegle najwyżej jak to możliwe, tak jednak aby miała z wielobokiemprzecięcie niepuste. Jest jasne, że optymalne położenie prostej będzie takie,w którym jedynym punktem wspólnym prostej i wieloboku będzie P = (3, 3).Prosta będzie miała równanie (x1 − 3) + (x2 − 3) = 0, a więc x1 + x2 = 6 iwartość maksymalna z = 6.�

Zauważmy przy okazji, że z sytuacją więcej niż jednego rozwiązania będziemymieli do czynienia w pewien sposób rzadko: odpowiedni bok wieloboku będziemusiał być równolegly do prostej reprezentującej funkcję celu. Zbiór rozwią-zań optymalnych będzie wtedy nie punktem jak w przykładzie 7.1.1, a zbiorempunktów pewnego odcinka (boku wieloboku).

Dla ograniczeń zadanych w przykładzie 7.1.1 będzie tak na przykład wtedy,gdy funkcja celu będzie zadana wzorem z = x1 +3x2. Wtedy zbiorem rozwiązańoptymalnych będzie odcinek łączący punkty (0, 4) i (3, 3), a wartością optymalnęz = 12.

Page 77: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

7.1 Interpretacja geometryczna 77

7.1.2 n=3

Studiowanie tego przypadku połączymy z badaniem przykładu Klee–Minty’egodla n = 3.

Przykład 7.1.2 Dla n = 3 przykład Klee–Minty’ego wygląda następująco:

zmaksymalizować z = 4x1 + 2x2 + x3

przy ograniczeniach x1 ≤ 54x1 + x2 ≤ 258x1 + 4x2 + x3 ≤ 125x1, x2, x3 ≥ 0

Czytelnik który wykonał ćwiczenie 3.7.8 otrzymał osiem słowników i tyleżrozwiązań bazowych:

x1 =

0005

25125

x2 =

50005

85

x3 =

55000

65

x4 =

0

25000

125

x5 =

0

2525500

x6 =

55

65000

x7 =

50

85050

x8 =

00

1255

250

(trzy współrzędne tych rozwiązań odpowiadają zmiennym decyzyjnym x1, x2, x3

podczas gdy trzy następne zmiennym sztucznym y1, y2, y3).

Page 78: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

78 Interpretacje i zastosowania

u

6

-��

���

���

���

����

x1

ux2

(5, 0, 0)

u�������

���

���

���

���

����

x3

(5, 5, 0)

ux4 (0, 25, 0)

u�����������������������

cc

cc

ccc

ccc

cc

ccc

x5

(5, 0, 25)

x2uAAAAAA

x6 (5, 5, 65)

u������������

x7 (5, 0, 85)

ux8 (0, 0, 125)

x1

Przykład Klee–Minty’ego (n = 3)Rys. 6.2

Przyjrzyjmy się tej sytuacji na rysunku (rys. 6.2) na którym oczywiścieuwzględniamy jedynie współrzędne x-owe rozwiązań zaś y1, y2, y3 ignorujemy (zoczywistych powodów rysunek jest przeskalowany – skala na każdej z osi jestinna).Zbiorem rozwiązań dopuszczalnych jest wielościan wypukły o wierzchołkachx1, ..., x8. ściany wielościanu odpowiadają równościom w ograniczeniach. Oddołu nasz wielobok jest ograniczony przez płaszczyznę x3 = 0, od góry przezpłaszczyznę 8x1 + 4x2 + x3 = 125. Krawędzie wyznaczone są przez przecię-cia płaszczyzn. Na przykład krawędź łacząca wierzchołki (5, 5, 65) i (0, 25, 25)zawarta jest w prostej {

8x1 + 4x2 + x3 = 1254x1 + x+ 2 = 25

Wierzchołki to oczywiście przecięcia trzech płaszczyzn – a więc nasze roz-wiązania bazowe! Teraz jasnym sie staje, jak bardzo jak bardzo pechowy dla

Page 79: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

7.2 Powłoki wypukłe zbiorów 79

algorytmu sympleks jest przykład Klee–Minty’ego. Sympleks wybiera wierz-chołki wielościanu, przechodząc kolejno od wierzchołka do wierzchołka sąsied-niego po kzawędzi, za każdym razem zwiększając (a raczej nie zmniejszając)wartość funkcji celu. W przykładzie Klee–Minty’ego zaczyna od najgorszegorozwiązania a następnie najgorszy możliwie wierzchołek sąsiedni. W ten spo-sób sympleks musi sprawdzić wszystkich osiem dla n = 3, a 2n w ogólnymprzypadku, wierzchołków (inaczej: rozwiązań bazowych) – a więc wszystkiemożliwe.

7.1.3 KomentarzWwiększości książek poświęconych programowaniu liniowemu interpretacja geo-metryczna prezentowana jest na samym początku, zaraz po przedstawieniu pro-blemu programowania liniowego lub algorytmu sympleks (por. [10], [17], [22]).Taka metoda dydaktyczna ma dużo zalet. Interpretacja geometryczna jest bo-wiem bardzo prosta i daje dobre intuicje. Niemniej, w tym bardzo pożytecznymgeometrycznym ujęciu kryje się pewna pułapka. Sugeruje ono, że wszystko jesttu bardzo proste i łatwe do zobaczenia i narysowania. Tymczasem wcale taknie jest. Narysować i wyobrazić sobie można jedynie przestrzenie 1−, 2− i3−wymiarowe. Próby – niewiedzieć czemu bardzo modne – wyobrażenia sobieprzestrzeni więcej niż 3−wymiarowych 1 są z góry skazane na niepowodzeniez prostego powodu: przestrzeń 4− (i więcej) wymiarowa nie ma swojej inter-pretacji geometrycznej w przestrzeniach mniej wymiarowych 2. 4−wymiarowaprzestrzeń w której czwartym wymiarem jest czasnie stanowi tu zadnej pomocy.Przestrzen n−wymiarowa jest dla n ≥ 4 pojęciem czysto algebraicznym. Fakt,że język tu używany jest zapożyczony z geometrii daje nam tyle, że w naszejwyobraźni jesteśmy w stanie kreować obrazy – interpretacje w przestrzeniachtej wyobraźni dostępnych, czyli 2− i 3−wymiarowych.

7.2 Powłoki wypukłe zbiorówDefinicja 7.2.1 Mówimy, że podzbiór W ⊂ Rn jest wypukły 3 jeżeli dla każ-dych dwóch elementów x ∈W i y ∈W odcinek je łączący:

[x, y] = {αx+ βy : α, β ≥ 0, α+ β = 1}

jest zawarty w W .

Przykład 7.2.1 Jest oczywistym, że jedynymi podzbiorami wypukłymi R saprzedziały.

1Chvatál w swojej książce [4] tak pisze na ten temat: ... do not try to visualizen−dimentional objects for n ≥ 4. Such an effort is not only doomed to failure – it maybe dangerous to your mantional health. (If you do succeed, then you are in trouble).

2Bardziej dobitnie i prosto: przestrzeń 4−wymiarowa nie jest 3−wymiarowa(bo 3 < 4).

3Zbiory wypukłe odgrywają ważną rolę w wielu działach matematyki, szczególnie w analiziefunkcjonalnej (por. [1]) i optymalizacji (por. [11]).

Page 80: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

80 Interpretacje i zastosowania

W R2 zbiory S1 i S2 przedstawione na rysunku 7.3.1 są wypukłe, zaś S3 nie jestzbiorem wypukłym.

'&

$%

� �S1 S2 S3

Rys. 7.3.1

Banalnie prosty do udowodnienia jest następujący wniosek którego dowódwobec tego pozostawiamy czytelnikowi.

Wniosek 7.2.1 Niech {Wi : i ∈ I} będzie rodziną zbiorów wypukłych. Wtedyprzecięcie

⋂i∈IWi jest także zbiorem wypukłym.�

Wniosek 7.2.1, jakkolwiek by nie był prosty do udowodnienia jest odpowie-dzialny za bardzo ważne pojęcie powłoki wypukłej zbioru.

Definicja 7.2.2 Niech X będzie dowolnym podzbiorem Rn. Powłoką wy-pukłą X nazywamy najmniejszy (w sensie zawierania zbiorów) zbiór wypukłyW ⊂ Rn zawierający X. Piszemy wtedy

W = conv(X)

Przykład 7.2.2 Dla zbioru S3 z rysunku 7.3.1 powłoka wypukła przedstawio-na jest na rysunku 7.3.2.

� �conv(S3)

Rys. 7.3.2

Wniosek 7.2.2 Niech X będzie dowolnym zbiorem zawartym w Rn i niech W

będzie rodziną wszystkich zbiorów wypukłych zawierających X. Wtedy

conv(X) =⋂

W∈W

W

Dowód. Ponieważ conv(X) ∈ W⋃W∈WW ⊂ conv(X). Z drugiej strony,

skoro conv(X) jest najmniejszym, w sensie zawierania zbiorów, zbiorem wypu-kłym zawierającym X, zachodzi conv(X) ⊂ W dla każdego W ∈ W. Stąd zaśconv(X) ⊂

⋂W∈WW .

Page 81: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

7.2 Powłoki wypukłe zbiorów 81

Wniosek 7.2.3 Dla dowolnego zbioru X ⊂ Rn zachodzi związek conv(X) ={α1v1 + ...+ αkvk : k ∈ N; v1, ...,vk ∈ X;α1, ..., αk ≥ 0;α1 + ...+ αk = 1} 4.

Dowód. Jest oczywiste, że zbiór A = {α1v1 + ... + αkvk : k ∈ N; v1, ...,vk ∈X;α1, ..., αk ≥ 0;α1 +...+αk = 1} zawiera X (aby otrzymać wszystkie elementyzbioru X wystarczy położyć we wzorze na A k = 1 i α1 = 1).łatwo także wykazać, że A jest zbiorem wypukłym. Rzeczywiście, weźmy u,v ∈A. Wykażemy, że dla wszystkich α, β ∈ R, α, β ≥ 0 i takich, że α + β = 1,αu + βv ∈ A.Skoro u,v ∈ A, to istnieją k, l ∈ N oraz α1, ..., αk, β1, ..., βl ≥ 0 oraz u1, ...,uk,v1, ...,vl ∈X takie, że α1 + ... + αk = β1 + ... + βl = 1 i u = α1u1 + ... + αkuk, v =β1v1 + ...+ βlvl.Wtedy

αu + βv = α(α1u1 + ...+ αkuk) + β(β1v1 + ...+ βlvl)= αα1u1 + ...+ ααkuk + ββ1v1 + ...+ ββlvl

Tak więc αu+βv jest kombinacją wektorów u1, ...,uk,v1, ...,vl ∈ X. Co więcej,współczynniki tej kombinacji są oczywiście nieujemne i αα1 + ...+ααk +ββ1 +...+ ββl = α(α1 + ...+ αk) + β(β1 + ...βl) = α+ β = 1. Czyli αu + βv ∈ A.

Dla udowodnienia prawdziwości wniosku 7.2.3 pozostaje jeszcze wykazać, żeA jest najmniejszym zbiorem wypukłym zawierającym X czyli, że dla każdegozbioru wypukłego W zawierającego X zachodzi A ⊂W .Niech W będzie zbiorem wypukłym, W ⊃ X i niech u ∈ A. Istnieją wobectego k ≥ 1(k ∈ N),u1, ...,uk ∈ X,α1, ..., αk ≥ 0, takie, że α1 + ... + αk = 1 iu = α1u1 + ...+ αkuk. Korzystając z indukcji matematycznej ze względu na kwykażemy, że u ∈W .Dla k = 1 zachodzi uczywiście u ∈ X i wobec W ⊃ X zachodzi także u ∈ W .Przypuśćmy, że k > 1 i nasza teza jest prawdą dla k−1, to znaczy że każda kom-binacja β1v1 + ... + βk−1vk−1 w której v1, ...,vk−1 ∈ X,β1, ..., βk−1 ≥ 0, β1 + ...+ βk−1 = 1, należy do W .Rozważmy teraz kombinację wypukłą k elementów: u = α1v1 + ... + αkvk,α1, ..., αk ≥ 0,v1, ...,vk ∈ X,α1 + ...+ αk = 1. Wykażemy, że u ∈W .Możemy założyć, że αk 6= 1 (w przeciwnym przypadku u = 1uk = uk ∈ X).Mamy

u = α1u1 + ...+ αk−1uk−1 + αkuk =

(1− αk)(α1

1− αku1 + ...+

αk−1

1− αkuk−1) + αkuk

Oczywiście αi

1−αk≥ 0 dla i = 1, ..., k − 1. Co więcej,

α1

1− αk+ ...+

αk−1

1− αk=α1 + ...+ αk−1

1− αk=

1− αk1− αk

= 1

4Kombinację α1v1+...+αkvk, gdzie α1, ..., αk ≥ 0, α1+...+αk = 1 nazywamy kombinacjąwypukłą v1, ..., vk.

Page 82: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

82 Interpretacje i zastosowania

Stąd i z założenia indukcyjnego v = α1

1−αku1 + ...+ αk−1

1−αkuk−1 ∈W .

Ponieważ W jest z założenia zbiorem wypukłym

u = (1− αk)v + αkuk ∈W

co kończy dowód wniosku 7.2.3.Wniosek 7.2.3 posłuży nam do wykazania poniżej twierdzenia Carathéodo-

ry’ego które mówi, że w przestrzeni n wymiarowej k we wniosku 7.2.3 możnazastąpić przez n+ 1.

Twierdzenie 7.2.4 (Carathéodory) Dla dowolnego zbioru X ⊂ Rn zachodzizwiązek

conv(X) = {α1v1 + ...+ αkvk : k ≤ n+ 1,v1, ...,vk ∈ X,

α1, ..., αk > 0, α1 + ...+ αk = 1}

Dowód. Z wniosku 7.2.3 wynika, że jeśli istnieją k, α1, ..., αk orazv1, ...,vk ∈ X spełniające αi ≥ 0 (i = 1..., k),

∑ki=1 αi = 1, takie, że u =

α1v1 + ...αkvk to u ∈ conv(X) (w szczególności wtedy gdy k ≤ n+ 1).Wystarczy więc wykazać, że jeśli u ∈ conv(X), to istnieje nie więcej niż n + 1

wektorów u1, ...,uk i skalarów α1, ..., αk, αi > 0 (i = 1, ..., k),∑ki=1 αi = 1,

takich, że u = α1u1 + ...αkuk. Dzięki wnioskowi 7.2.3 wiemy, że istnieje l, wek-tory v1, ...,vl ∈ X oraz współczynniki βj > 0, j = 1, ..., l, β1 + ...+βl = 1 takie,że u = β1v1 + ...+ βlvl.Zauważmy teraz, że równania{ ∑l

i=1 βivi = u∑li=1 βi = 1

(7.1)

dają nam układ k + 1 równań rzeczywistych liniowych, których zmiennymi sąβ1, ..., βl a współczynnikami współrzędne wektorów v1, ...,vl (i jedynki w ostat-nim równaniu), zaś wyrazami wolnymi są współrzędne wektora u (i jedynka wostatnim równaniu).Nasz nieoceniony wniosek 7.2.3 zapewnia nam, że układ (7.1) jest niesprzeczny.Z twierdzenia 3.3.1 wynika więc, że ma nieujemne (!) rozwiązanie w którymzmiennych bazowych jest n+ 1 (tyle ile równań). Pamiętamy także, że zmienneniebazowe w rozwiązaniu bazowym przyjmują wartość zero. To kończy dowódtwierdzenia 7.2.4.

7.3 Układy nierówności i równań liniowych

Niniejszy ustęp poświęcimy twierdzeniu Kuhna dotyczącemu układów nierówno-ści i równań liniowych które udowodnimy metodami programowania liniowego.Już w następnym ustępie będziemy z tego twierdzenia korzystać w dowodzie

Page 83: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

7.3 Układy nierówności i równań liniowych 83

twierdzenia o rozdzielaniu (twierdzenie 7.4.1).Układem równań i nierówności liniowych będziemy nazywać układ postaci{ ∑n

j=1 aijxj ≤ bi (i ∈ N)∑nj=1 aijxj = bi (i ∈ R)

(7.2)

gdzie N ∪R = {1, ...,m}.Z tej postaci nierównościami zetknęliśmy się już w ustępie 4.4 z tą niewielką róż-nicą, że tym razem nie wyróżniamy specjalnie nierówności postacixj ≥ 0, które mogą występować jako specjalne przypadki nierówności postaci∑nj=1 aijxj ≤ bi.

Tak jak już to robiliśmy wielokrotnie, możemy i tym razem wymnożyć każdą znierówności

∑nj=1 aijxj ≤ bi przez nieujemne yi otrzymując

(∑nj=1 aijxj)yi ≤ yibi (i ∈ N)

oraz każdą z równości∑nj=1 aijxj = bi przez, tym razem dowolne yi otrzymując

(∑nj=1 aijxj)yi = yibi (i ∈ R)

by po zsumowaniu po i = 1, ...,m a następnie zmienieniu kolejności sumowaniapo prawej stronie nierówności otrzymać∑n

j=1(∑mi=1 aijyi)xj ≤

∑mi=1 yibi (7.3)

Zwróćmy uwagę, że w ten prosty sposób otrzymaliśmy pewne kryterium nie-sprzeczności układu (7.2). Nim kryterium to sformułujemy w postaci ogólnej,przyjrzymy się jak funkcjonuje ono na przykładzie.

Przykład 7.3.1 Niech będzie dany następujący układ nierówności i równańliniowych:

2x1 − 7x2 + x3 ≤ 1−x1 + 3x2 + 2x3 + x4 ≤ 2x1 + x2 − x3 ≤ 0

3x1 + 2x2 + 2x3 + 2x4 = 6

(7.4)

Jeśli w nierówności (7.3) podstawimy y1 = 1, y2 = 2, y3 = 3 i y4 = −1, wtedyotrzymamy 0x1 + 0x2 + 0x3 − 0x4 ≤ −1 (a więc sprzeczność), przy czym tylkozmienna odpowiadająca równości (y4) przyjmuje wartość ujemną (y4 = −1).Stąd wniosek, że nasz układ (7.4) jest sprzeczny.

Definicja 7.3.1 Mówimy, że układ 7.2 jest niezgodny jeśli istnieją liczby y1, ..., ymspełniające następujące warunki yi ≥ 0 dla i ∈ N∑m

i=1 aijyi = 0 dla j = 1, ..., n∑mi=1 biyi < 0

(7.5)

Page 84: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

84 Interpretacje i zastosowania

Wobec tego co powiedziano wyżej jest zupełnie oczywiste, że jeśli układ jestniezgodny, to jest sprzeczny. Okazuje się, że zależność pomiędzy niezgodnością asprzecznością układu jest znacznie głębsza i niebanalna. Prawdziwe jest bowiemnastępujące twierdzenie, udowodnione przez H.W. Kuhna w 1956 roku.

Twierdzenie 7.3.1 (Kuhn) Układ nierówności i równań liniowych (7.2) jestsprzeczny wtedy i tylko wtedy, jeżeli jest niezgodny.

Dowód. Po tym co już zostało powiedziane, wystarczy udowodnić, że jeżeliukład 7.2 jest sprzeczny, to jest także niezgodny.Rozważmy następujący problem programowania liniowego

zminimalizuj∑mi=1 xn+i

przy ograniczeniach:∑nj=1 aijxj + wixn+i ≤ bi i ∈ N∑nj=1 aijxj + wixn+i = bi i ∈ R

xn+i ≥ 0 (i = 1, ...,m)

(7.6)

gdzie

wn+i =

{1 gdy bi ≥ 0−1 gdy bi < 0

Jest oczywiste, że układ (7.2) jest niesprzeczny wtedy i tylko wtedy, gdy (7.6)posiada rozwiązanie optymalne które ma wartość zero (co może mieć miejscejedynie jeśli xn+1 = ... = xn+m = 0). Nasz problem (7.6) jest oczywiścieniesprzeczny (xi = 0, xn+i =| bi | dla i = 1, ...,m są rozwiązaniem) i ograniczony(nie ma rozwiązania o wartości mniejszej niż zero). Rozwiązanie optymalneistnieje więc na mocy twierdzenia 3.3.1. Zauważmy, że minimalizacja funkcji∑mi=1 xn+i jest równoważna maksymalizacji

∑mi=1(−xn+i). Tak więc problemem

dualnym do (7.6) jestzminimalizuj

∑mi=1 biyi

przy ograniczeniach∑mi=1 aijyi = 0 j = 1, ..., n

wiyi ≥ −1 i = 1, ...,myi ≥ 0 i ∈ N

(7.7)

Jeżeli układ nierówności i rownań liniowych (7.2) jest sprzeczny, to optymalnawartość funkcji celu

∑mi=1(−xn+i) jest ściśle ujemna, a stąd na mocy ogólnej

zasady dualności (twierdzenie 4.4.2)

m∑i=1

biyi < 0

Ta ostatnia nierówność łącznie z ograniczeniami problemu (7.7) oznacza, żesystem (7.2) jest niezgodny.

Page 85: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

7.4 Wielościany i półprzestrzenie 85

7.4 Wielościany i półprzestrzenie

Definicja 7.4.1 Niech a1, ..., an będą liczbami rzeczywistymi nie równymi rów-nocześnie zero (inaczej: a2

1 + ...+a2n > 0). Zbiór wektorów x ∈ Rn o współrzęd-

nych x1, ..., xn spełniających a1x1 + ... + anxn ≥ c (gdzie c jest pewną liczbąrzeczywistą nazywamy półprzestrzenią. Wielościanem w Rn nazywamyprzecięcie skończonej liczby półprzestrzeni.

Czytelnik zechce samodzielnie sprawdzić, że każdy wielościan (w sensie powyż-szej definicji) jest zbiorem wypukłym (por ćwiczenie 7.6.8).

Celem niniejszego podrozdziału jest pokazanie jak z twierdzenia 7.3.1 wynikapodane niżej twierdzenie o rozdzielaniu wielościanów.

Twierdzenie 7.4.1 (O rozdzielaniu wielościanów) Dla dowolnych wielościa-nów W1 i W2 rozłącznych i niepustych, istnieją rozłączne półprzestrzenie P1 iP2 takie, że W1 ⊂ P1 i W2 ⊂ P2.

Dowód. Przypuśćmy, że wielościanyW1 iW2 dane są w następujący sposób:

W1 = {x ∈ Rn : A1x ≤ b1}

W2 = {x ∈ Rn : A2x ≤ b2}

Skoro W1 ∩W2 = ∅, to układ nierówności:{A1x ≤ b1

A2x ≤ b2

jest sprzeczny, a więc, na mocy twierdzenia 7.3.1 istnieją wektory y1 ∈ Rm1 ,y2 ∈Rm2 o współrzędnych nieujemnych (gdzie mi jest liczbą wierszy macierzy Ai,i = 1, 2) takie, że

y1A1 + y2A2 = 0 (7.8)

y1b1 + y2b2 < 0 (7.9)

Z drugiego z powyższych związków wynika, że y1b1 < 0 lub y2b2 < 0. Bezstraty ogólności możemy założyć, że y1b1 < 0. Stąd zaś wynika, że y1A1 6=0, w przeciwnym bowiem przypadku układ A1x ≤ b1 byłby niezgodny, czyliwielościan P1 pusty, a to jest sprzeczne z założeniami. Zbiory {x : y1A1x ≤ c}oraz {x : y1A1x ≥ c} są więc niepuste i różne od całej przestrzeni dla dowolnegoc ∈ R, czyli są półprzestrzeniami. W szczególności półprzestrzeniami są

H1 = {x : y1A1x ≤ y1b1}

iH2 = {x : y1A1x ≥ −y2b2}

Page 86: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

86 Interpretacje i zastosowania

Z (7.9) wynika, że H1∩H2 = ∅. Ponieważ współrzędne wektora y1 są nieujemne,dla każdego wektora x ∈ W1, czyli takiego, że A1x ≤ b1, spełniona jest nie-równość y1A1x ≤ y1b1, a więc x ∈ H1, Stąd oczywiście W1 ⊂ H1. Wzór (7.8)implikuje z kolei równość

y1A1 = −y2A2

Każdy x należący do W2, czyli taki, że A2x ≤ b2 spełnia więc y1A1x =−y2A2x. Z drugiej strony A2x ≤ b2, a ponieważ współrzędne wektora y2 sąnieujemne, zachodzi y2A2x ≤ y2b i w konsekwencji −y2b ≤ −y2A2x = y1A1xWykazaliśmy więc, że W2 ⊂ H2, co kończy dowód twierdzenia.

7.5 Metoda Fouriera–Motzkinaredukcji układów nierówności

Niech będzie dany układ nierówności

n∑j=1

aijxj ≤ bi i = 1, ...,m (7.10)

Metoda Fouriera–Motzkina polega na stopniowej redukcji zmiennych tak, by wkońcu otrzymać jedną zmienną niezależną, a więc układ trywialny. Powiedzmyod razu, że to zmniejszanie liczby zmiennych będzie sie odbywało kosztem bar-dzo szybkiego wzrostu liczby nierówności.bez straty ogólności można przyjąć, że w układzie (7.10)

– pierwszych m1 zmiennych ma przy x1 współczynnik dodatni,

– następne m2 nierówności mają przy x1 współczynnik ujemny, zaś

– w pozostałych m − (m1 + m2) nierównościach współczynnik przy x1 jestrówny zero.

Dzieląc każdą zm1+m2 nierówności przez | ai1 | (i = 1, ...,m1+m2) otrzymamyz (7.10) równoważny mu układ postaci

x1+∑nj=2 a

′ijxj ≤ b′i i = 1, ...,m1

−x1+∑nj=2 a

′ijxj ≤ b′i i = m1 + 1, ...,m1 +m2∑n

j=2 a′ijxj ≤ b′i i = m1 +m2 + 1, ...,m

(7.11)

czyli x1+

∑nj=2 a

′′ijxj ≤ b′′i i = 1, ...,m1

x1+∑nj=2 a

′′ijxj ≥ b′′i i = m1 + 1, ...,m1 +m2∑n

j=2 a′′ijxj ≤ b′′i i = m1 +m2 + 1, ...,m

(7.12)

gdzie a′′ij = a′ij i b′′i = b′i dla i = 1, ...,m1 i i = m1 +m2 +1, ...,m oraz a′′ij = −a′iji b′′i = −b′i dla i = m1 + 1, ...,m1 +m2.

Page 87: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

7.5 Metoda Fouriera–Motzkina 87

Układ (7.12) jest z kolei równoważnyb′′i1 −

∑nj=2 a

′′i1jxj ≤ x1 ≤ b′′i2 −

∑nj=2 a

′′i2jxj ,

( dla i1 = m1 + 1, ...,m2; i2 = 1, ...,m1)∑nj=2 a

′′ijxj ≤ b′′j , i = m1 +m2 + 1, ...,m

(7.13)

Zredukowane zadanie będzie następującym układem nierówności:∑nj=2(a′′i2j − a

′′i1j

)xj ≤ b′′i2 − b′′i1

i1 = m1 + 1, ...,m2,

i2 = 1, ...,m1∑nj=2 a

′′ijxj ≤ b′′i i = m1 +m2 + 1, ...,m

(7.14)

Sprzeczność układu (7.14) oznacza sprzeczność układu (7.10). Natomiast jeśliukład (7.14) jest niesprzeczny to każde rozwiązanie x2, ..., xn można rozszerzyćdo rozwiązania x1, x2, ..., xn dołączając dowolne x1 spełniające (7.13).Zobaczymy jak opisana metoda funkcjonuje na przykładzie.

Przykład 7.5.1 Niech będzie danu układ równań2x1+ 4x2− 6x3 ≤ 8x1− 2x2+ x3 ≤ 5−x1+ x2+ x3 ≤ 3

3x2− 4x3 ≤ 12

Zastosujmy do tego układu kolejne etapy metody Fouriera–Motzkina. Po pierw-sze, doprowadzamy do sytuacji w której współczynniki przy x1 są równe 1, −1lub 0

x1+ 2x2− 3x3 ≤ 4x1− 2x2+ x3 ≤ 5−x1+ x2+ x3 ≤ 3

3x2− 4x3 ≤ 12

Stąd −3 + x2 + x3 ≤ x1 ≤ 4− 2x2 + x3

−3 + x2 + x3 ≤ x1 ≤ 5 + 2x2 − x3

3x2 − 4x3 ≤ 12(7.15)

i zredukowany układ nierówności −3 + x2 + x3 ≤ 4− 2x2 + 3x3

−3 + x2 + x3 ≤ 5 + 2x2 − x3

3x2 − 4x3 ≤ 12

który po zredukowaniu przyjmie postać 3x2 − 2x3 ≤ 7−x2 + 2x3 ≤ 83x2 − 4x3 ≤ 12

a więc

x2 − 23x3 ≤ 7

3−x2 + 2x3 ≤ 8x2 − 4

3x3 ≤ 4

Page 88: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

88 Interpretacje i zastosowania

Teraz redukujemy zmienną x2:{−8 + 2x3 ≤ x2 ≤ 7

3 + 23x3

−8 + 2x3 ≤ x2 ≤ 4 + 43x3

(7.16)

{43x3 ≤ 31

323x3 ≤ 12

i ostatecznie x3 ≤ 314 . Ten wynik zaś oznacza, że dla każdego x3 ≤ 31

4 możemydzieki (7.16) i (7.15) znaleźć odpowiednie wartości x2 i x3.

Zauważmy, że przy układzie co najwyżej trzech nierówności liczba nierów-ności przy kolejnych redukcjach nie zwiększa się (tak właśnie było w naszymprzykładzie). Rozwiązując samodzielnie następne ćwiczenia czytelnik zauważy,że liczba nierówności na ogół rośnie bardzo szybko w miarę kolejnych redukcji.Więcej o redukcji układów nierówności w [20].

Metoda eliminacji Fouriera–Motzkina daje nam inny algorytm rozwiązywa-nia PPL. Rzeczywiście, niech będzie dany PPL

Ax ≤ b

cx→ max(7.17)

W celu znalezienia rozwiązania optymalnego dla (7.17) zastosujmy metodę re-dukcji do układu {

Ax ≤ bλ− cx ≤ 0

(7.18)

gdzie λ jest nową zmienną. Redukować będziemy kolejne współrzędne wektorax tak, że w końcu pozostanie nam tylko zmienna λ. Teraz wystarczy przyjąć λnajwiększą możliwą, by otrzymać rozwiązanie optymalne problemu (7.17).Zauważmy na koniec, że metodę Fouriera–Motzkina można stosować także doredukowania układów w których występują także silne nierówności.

7.6 ćwiczeniaĆwiczenie 7.6.1 Niech będzie dany PPL

−x1 + x2 ≤ 3−x1 + 2x2 ≤ 7x1 + 2x2 ≤ 132x1 + x2 ≤ 14−4x1 + x2 ≥ −19−x1 + 3x2 ≥ −2

x1, x2 ≥ 0z = 4x1 + 5x2 → max

Page 89: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

7.6 ćwiczenia 89

(a) Napisz postać standardową i kanoniczną tego problemu.

(b) Podaj jego interpretację geometryczną (wykonaj rysunek).

Nie stosując algorytmu sympleks:

(c) Znajdź rozwiązanie optymalne. Czy istnieje tylko jedno optymalne rozwią-zanie tego problemu?

(d) Zakładając, że wybór zmiennej wchodzący dokonowany jest tak jak zazwy-czaj (tj. zmienną wchodzącą jest ta której dodatni współczynnik w funkcjicelu jest największy). podaj rozwiązania bazowe każdej iteracji.

(e) To samo pytanie przy wyborze zmiennej wchodzącej regułą Blanda.

W (d) i (e) zakładamy, że pierwszym rozwiązaniem bazowym jestx1 = x2 = z = 0 (w rozwiązaniach bazowych należy podać wartości x1, x2 i z).

Ćwiczenie 7.6.2 Znajdź powłokę wypukłą zbiorów:

(a) X = {(x, y) ∈ R2 : x2 + y2 ≤ 1, 0 ≤ y, | x |}

(b) X = {(1, 1), (1, 0), (0, 1)}

(c) Podaj przykład zbioru X ⊂ Rn takiego, że jego powłoka wypukła jest wy-pukłą kombinacją mniej niż n+1 elementów zbioru X, oraz taki przykładby we wzorze

conv(X) = {αu1 + ...+ αn+1 : αi ≥ 0 dla i = 1, ..., n;

n∑i=1

αi = 1}

n+ 1 nie dała się zastąpić przez nic mniejszego.

Ćwiczenie 7.6.3 Zbadaj niesprzeczność poniższych układów.

1. x1 − 3x2 + x3 − x4 ≤ 1

−2x1 + x2 − x3 + x4 ≤ 2x1 − x2 − 2x3 + x4 ≤ −3

2x1 + 3x2 + x3 − x4 = 1

2. x1 + x2 − x3 = 3−x1 + x2 − 2x3 ≤ −13x1 + x2 ≤ 2

3. 3x1 − 2x2 + 4x3 ≤ 12x1 + x2 − 3x3 ≤ 3x1 − 2x2 + x3 ≥ 3x1 + 7x2 − 3x3 ≥ 2

Page 90: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

90 Interpretacje i zastosowania

Ćwiczenie 7.6.4 Metodą Fouriera–Motzkina zredukuj układy nierówności zćwiczeń 7.6.1 i 7.6.3 niniejszego rozdziału.

Ćwiczenie 7.6.5 Wykorzystując metodę Fouriera-Motzkina znajdź maksymalnąwartość x∗2 zmiennej x2 dla której spełniony jest układ nierówności

x1 − x2 + 3x3 ≤ 4−x1 − x2 + 2x3 ≤ 6x1 + x2 + 5x3 ≥ 1x1 + 3x2 − x3 ≤ 3

Ćwiczenie 7.6.6 Korzystając z metody Fouriera–Motzkina znajdź optymalnerozwiązania problemów:

2x1 + 3x2 + x3 ≤ 3x1 + x2 − x3 ≤ 2x1 + 2x2 + x3 ≤ 3x1 + 2x2 − x3 ≥ −4x1, x2, x3 ≥ 0

2x1 + x2 + 4x3 → max

x1 − x2 ≤ 3x1 + x2 ≤ 62x1 − x2 ≤ −4x1, x2 ≥ 0

2x1 + x2 → max

Ćwiczenie 7.6.7 Wykaż, że dla każdego zbioru skończonego X ⊂ Rn powłokąwypukłą jest przedział domknięty.

Ćwiczenie 7.6.8 Udowodnij, że każdy wielościan jest zbiorem wypukłym.

Ćwiczenie 7.6.9 Wskaż przykłady dowodzące, że w twierdzeniu 7.4.1 wielo-ścianów nie da się zastąpić zbiorami wypukłymi.

Ćwiczenie 7.6.10 Niech będą dane dwa wielościany w R4:

W1 :

x1 +2x2 −x3 +x4 ≤ 2−x1 −x2 +2x3 −x4 ≤ 33x1 +x2 −2x3 +x4 ≥ 4

W2 :

2x1 −x2 +3x3 −x4 ≤ 23x1 −2x2 +x3 +2x4 ≤ 15x1 −8x2 +15x3 +2x4 ≥ 4

(a) Wykaż, że W1 6= ∅,W2 6= ∅ i W1 ∩W2 = ∅.

(b) Posługując się metodą dowodu twierdzenia 7.4.1 wskaż rozłączne półprze-strzenie P1 i P2 w R4 takie, że W1 ⊂ P1 i W2 ⊂ P2.

Page 91: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Rozdział 8

Metody sieciowe

Problemy które będziemy rozwiązywali przy pomocy metod sieciowych są w rze-czywistości specjalnymi problemami programowania liniowego. Powstać możewięc pytanie: czy przypadkiem nie wyważamy otwartych drzwi? Po co szukaćspecjalnych metod do rozwiązywania specjalnych przypadków, skoro umiemyrozwiązywać przypadek ogólny?Jest kilka ważnych powodów zajmowania się metodami sieciowymi. Wspo-mnijmy kilka z nich.

1. Sieci i grafy są wyjątkowo wdzięcznym i działającym na wyobraźnię na-rzędziem pozwalającym łatwo modelować wiele zagadnień. Jeśli mamyobliczyć sprawność – czyli przepustowość – sieci komunikacyjnej, wodocią-gowej czy kanalizacyjnej (por. [16]), to wygodniej nam i łatwiej w językui modelu sieci pozostać niż przechodzić na język równań i nierówności.

2. Algorytmy sieciowe (grafowe) dotyczące omawianych zagadnień są szyb-sze (o co nietrudno, skoro sympleks – przynajmniej teoretycznie jest, jakwidzieliśmy w ustępie 3.5, beznadziejny1).

3. Wiele bardzo ważnych twierdzeń teorii grafów można łatwo udowodnić ko-rzystając ze słynnego twierdzenia o maksymalnym przepływie i minimal-nym przekroju (twierdzenie 8.3.4). Niektóre z tych twierdzeń poznamy wpodrozdziale 8.7.

Pierwszy z powyższych argumentów ma charakter estetyczny i poznawczy.Zobaczymy, że wspomniane już twierdzenie o maksymalnym przepływie i mi-nimalnym przekroju jest, w pewien sposób, konsekwencją zasady dualności po-znanej w rozdziale 4 (twierdzenie 4.1.4).Drugi argument ma charakter praktyczny, osłabiony przez wspomniane dobrespisywanie się sympleksu w praktyce.

1Jeszcze raz podkreślmy, co znaczy to teoretycznie: sympleks jest algorytmem niewielo-mianowym jak wykazuje przykład Klee–Minty’ego, w praktycznych zaś przykładach spisujesię bardzo dobrze.

91

Page 92: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

92 Metody sieciowe

8.1 Grafy i sieci

Grafem zorientowanym nazywać będziemy parę G = (V,A), gdzie V jest dowol-nym skończonym zbiorem niepustym, nazywanym zbioremwierzchołków, zaś A pewnym podzbiorem zbioru dwuelementowych par (x, y) ∈V ×V takich, że x 6= y. x jest wtedy początkiem zaś y końcem łuku e = (x, y). xi y nazywamy 2 końcami łuku (x, y). Jeśli (x, y) ∈ A to mówimy, że wierzchołkix i y są połączone w G. łuk (x, y) jest wtedy incydentny z wierzchołkami x i y.Rzędemarzďż˝d grafu grafu G nazywamy liczbę |V |, zaś rozmiarem G liczbę |A|. Ele-menty zbioru A nazywamy łukami.Dla wierzchołka x ∈ V przez N+

G (x) nazywamy zbiór tych wierzchołków y dlaktórych (x, y) ∈ A, zaś N−G (x) = {y : (y, x) ∈ A}.

Graf zorientowany (będziemy, dla wygody, mówili czasami po prostu graf)ma bardzo prostą interpretację graficzną: elementy zbioru V (a więc wierzchołkigrafu) będziemy przedstawiali jako punkty płaszczyzny, zaś łuki jako zakończonestrzałkami linie łaczące odpowiednie wierzchołki.

Przykład 8.1.1 GrafG = ({v1, v2, v3}, {e1 = (v1, v3), e2 = (v3, v1), e3 = (v1, v2), e4 =(v3, v2)}) interpretujemy tak, jak to zostało przedstawione na rysunku 8.1.

����

v1

����

���

��*e3

e2

e1

e4

����

v2

����

v3

HHHH

HHHHHHjHH

HHH

HHHHY

6

Rys. 8.1

Z każdym grafem zorientowanym można skojarzyć wzajemnie jednoznaczniedwie macierze: macierz sąsiedztw i macierz incydencji.

2Niekonsekwentnie...

Page 93: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8.1 Grafy i sieci 93

8.1.1 Macierz sąsiedztw grafu zorientowanego

Niech G = (V,A) będzie pewnym grafem zorientowanym o n wierzchołkach{v1, ..., vn}. Wtedy macierz T ∈ Rn×n = (aij)i,j=1,...,n zdefiniowaną wzorami

sij =

{1 jeśli (vi, vj) ∈ A0 jeśli (vi, vj) /∈ A

Przykład 8.1.1 (c.d.) Dla grafu z rysunku 8.1 macierz sąsiedztw jest postaci

T =

0 1 10 0 01 1 0

Zauważmy, że skoro założyliśmy, że dla dowolnego łuku (x, y) zachodzix 6= y, macierz sąsiedztw ma same zera na przekątnej głównej.

8.1.2 Macierz incydencji

Macierzą incydencji grafu zorientowanego G = (V,A) o zbiorze wierzchołkówV = {v1, ..., vn} i zbiorze łuków A = {e1, ..., em}, nazywamy macierz N =(bij) i = 1, ..., n

j = 1, ...,m

taką, że

bij =

1 jeśli vi jest początkiem łuku ej−1 jeśli vi jest końcem łuku ej

0 jeśli vi i ej nie są incydentne

Przykład 8.1.1 Dla grafu z rysunku 8.1 macierzą incydencji jest

N =

1 −1 1 00 0 −1 −1−1 1 0 1

Wobec tego co wiemy z podrozdziału 5.3 o macierzach totalnie unimodularnych(wniosek 5.3.2) ważne będą konsekwencje poniższego twierdzenia.

Twierdzenie 8.1.1 Macierz incydencji grafu zorientowanego jest totalnie uni-modularna.

Dowód. Wykorzystamy twierdzenie 5.3.3. Zauważmy, że w macierzy incy-dencji dowolnego grafu zorientowanego każdej kolumnie odpowiada pewien łukgrafu i są w niej dwa wyrazy różne od zera: −1 i 1 w wierszach odpowiadają-cych początkowi i końcowi łuku. Wystarczy więc przyjąć jako zbiory W1 i W2

występujące w założeniach twierdzenia 5.3.3 zbiór wszystkich wierszy macierzyincydencji grafu i zbiór pusty.

Page 94: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

94 Metody sieciowe

8.1.3 ścieżki i cykleścieżką o długości k w grafie G = (V,A) nazywamy ciąg wierzchołkówi łuków

P = (v1, e1, v2, e2, ..., vi, ei, vi+1, ..., ek, vk+1) (8.1)

takich, że vi ∈ V dla i = 1, ..., k + 1, ei jest łukiem o końcach vi, vi+1 dlai = 1, ..., k, oraz vi 6= vj dla i 6= j.

����

v1 -����

v2e1 ��

��v3�

e2 ����

v4-e3

Rys.8.2

O łuku ei = (vi, vi+1) mówimy, że jest zgodny ze ścieżką P , zaś jeśli ei =(vi+1, vi) mówimy, że ei jest niezgodny z P .Na rysunku 8.2 łuki e1 i e3 są zgodne, zaś łuk e2 niezgodny ze ścieżką P =(v1, e1, v2, e2, v3, e3, v4), o łukach e1 = (v1, v2), e2 = (v3, v2), e3 = (v3, v4).

Jeśli, dodatkowo, założymy, że v1 = vn (przy zachowaniu vi 6= vj dla wszyst-kich pozostałych przypadków), to ścieżkę (8.1) nazywamy cyklem.

8.2 SieciGraf G = (V,A) nazywali będziemy siecią S, jeżeli zdefiniowana jest pewnafunkcja

c : A→ R

Pisali będziemy wtedy S = (V,A, c).

W zależności od sytuacji, funkcję c będziemy nazywali przepustowością łuków3

lub długością łuków4, czy wreszcie kosztem łuków5. Z interpretacji sieci wynika,że na ogół nie będzie kłopotliwym założenie nieujemności funkcji c.

8.3 Przepływy w sieciachW sieci S może być wyróżniony pewien wierzchołek s, nazywany źródłem i innywierzchołek, powiedzmy t, który nazywać będziemy odpływem.

3Na przykład gdy będziemy myśleli o sieciach wodociągowych, kanalizacyjnych – ale także,czasami, drogowych.

4Na przykład dla sieci komunikacyjnej.5W sieci komunikacyjnej: gdy myślimy raczej o cenie biletu niż odległości.

Page 95: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8.3 Przepływy w sieciach 95

Niech S = (V,A, c) będzie siecią o źródla s i odpływie t oraz nieujemnejfunkcji przepustowości c. O nieujemnej funkcji f : A → R mówimy, że jestprzepływem z s do t w S jeżeli spełnia następujące warunki:

f(x, y) ≤ c(x, y) dla każdego (x, y) ∈ A (8.2)∑y∈N+(x)

f(x, y)−∑

z∈N−(x)

f(z, x) = 0 dla każdego x 6= s, t (8.3)

Liczbęw(f) =

∑y∈N+(s)

f(s, y)−∑

z∈N−(s)

f(z, s)

nazywamy wartością przepływu f .

Przykład 8.3.1 Niech S będzie siecią jak na rysunku 8.3. Liczby wypisaneobok łuków w kwadracikach oznaczają przepustowości łuków, a te bez kwadra-cików przepływy. Jest bardzo łatwym sprawdzenie, że na rysunku poprawniezdefiniowany jest przepływ (spełnia warunki (8.2) i (8.3)), a wartość tego prze-pływu wynosi 5. �

����

s

����

a

�����

2 2

����

b-1 1

����

t

@@@@R

4 3

����

QQQQQQQQs

CCCCCCCCCCWc�����������

��������3

4 3

2 1 3 2

2 2

Rys. 8.3

Problem optymalizacyjny narzuca się teraz sam.

Problem maksymalnego przepływu.Dla danej sieci S = (V,A; c) o źródle s i odpływie t znaleźć przepływ o maksy-malnej wartości.

W dalszym ciągu będzie nam wygodnie będzie nam przyjąć zamiast (x, y) /∈ A,c(x, y) = 0 i istnienie wszystkich możliwych łuków w sieci. Interpretacja takiej

Page 96: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

96 Metody sieciowe

umowy jest oczywista: nie ma przepływu (a raczej jest przepływ zerowy) na nieistniejących łukach6. Wtedy warunki (8.2) i (8.3) można zapisać, odpowiednio,

f(x, y) ≤ c(x, y) dla wszystkich x, y ∈ V (8.4)∑y∈V

f(x, y)−∑z∈V

f(z, x) = 0 dla każdego x 6= s, t (8.5)

a wzór na wartość przepływu

w(f) =∑y∈V

f(s, y)−∑z∈V

f(z, s) (8.6)

Zauważmy, że przepływ w przykładzie 8.3.1 nie jest maksymalny. Zwię-kszając przepływ na łukach: (s, a), (a, c), (c, b) i (c, t) o 1 otrzymamy przepływ(warunki (8.2) i (8.3) są dalej spełnione) i wartość tego przepływu wynosi 6.Okaże się, że ten prosty pomysł znajdowania ścieżki prowadzącej z s do t wzdłóżktórej można zwiększyć przepływ na poszczególnych łukach o stałą wartość, jestkluczową ideą prowadzącą do rozwiązania problemu maksymalnego przepływuw sieciach.Jest najzupełniej oczywiste, że problem maksymalnego przepływu jest pro-blemem programowania liniowego. Wierzchołki sieci nazwiemy v0, v1, ..., vn, zv0 = s, vn = t, przepływ na łuku (vi, vj) oznaczymy przez xij (zamiast f(vi, vj)a przepustowość łuku (vi, vj) przez cij . Nasz problem maksymalnego przepływujest PPL:

zmaksymalizuj z =∑i:(v0,vi)∈A x0i −

∑j:(vj ,vs)∈A xj0

przy warunkach:∑(vi0 ,vj)∈A xi0j −

∑(vj ,vi0 )∈A xji0 = 0 (i0 = 1, ..., n− 1)

0 ≤ xij ≤ cij , i, j : (vi, vj) ∈ A

(8.7)

Zauważmy, że jeśli przepustowości łuków są liczbami skończonymi, to problem(8.7) jest ograniczony, posiada więc rozwiązanie optymalne. Z powyższego oraztwierdzenia 8.1.1 wynika następujący wniosek.

Wniosek 8.3.1 Jeśli funkcja przepustowości łuków przyjmuje wartości całko-wite, to problem maksymalnego przepływu w tej sieci ma całkowite rozwiązanieoptymalne.

Ważnym pojęciem dla problemu maksymalnego przepływu są przekrój i jegowartość.

Niech będzie dana sieć S = (V,A, c) ze źródłem s i odpływem t i niechW będzietakim podzbiorem V , że s ∈W i t /∈W . Zbiór V −W oznaczmy przeż W . Zbiórłuków

(W, W ) = {(x, y) : x ∈W, y ∈ W}6W praktyce oznacza to, że woda nie płynie jak nie ma rury.

Page 97: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8.3 Przepływy w sieciach 97

nazywamy przekrojem rozdzielającym s od t lub krótko przekrojem. Liczbę

c(W, W ) =∑

(x,y)∈(W,W )

c(x, y)

nazywamy przepustowością przekroju (W, W ).

Twierdzenie 8.3.2 Niech S = (V,A, c) będzie siecią o źródle s i odpływie t.Dla dowolnego przepływu f i dla dowolnego przekroju (W, W ) zachodzi nierów-ność

w(f) ≤ c(W, W )

Dowód. Sumując odpowiednio wzory (8.6) i (8.5) po wszystkich x ∈ W ipamiętając, że s ∈W,W ∩ W = ∅,W ∪ W = V , otrzymamy

w(f) =∑u∈V

f(s, u)−∑v∈V

f(v, s) +∑

x∈W,x 6=s

∑y∈V

f(x, y)−∑z∈V

f(z, x)

=

=∑

x∈W,y∈Vf(x, y)−

∑x∈W,z∈V

f(z, x) =

=

∑x∈W,y∈W

f(x, y) +∑

x∈W,y∈W

f(x, y)

∑x∈W,z∈W

f(z, x) +∑

x∈W,z∈W

f(z, x)

Zauważmy, że

∑x∈W,y∈W f(x, y) =

∑x∈W,z∈W f(z, x), a wobec tego

w(f) =∑

x∈W,y∈W

f(x, y)−∑

x∈W,z∈W

f(z, x) (8.8)

Wartości f(z, x) są nieujemne, uwzględniając więc nierówności (8.4) otrzy-mujemy

w(f) ≤∑

x∈W,y∈W

f(x, y) ≤∑

x∈W,y∈W

c(x, y) = c(W, W ) (8.9)

co kończy dowód.

Uwaga 8.1 Jeżeli przepływ f i przekrój (W, W ) spełniają warunek

w(f) = c(W, W )

to na mocy twierdzenia 8.3.2 f jest przepływem maksymalnym (a przekrój (W, W )ma minimalną przepustowość).

Page 98: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

98 Metody sieciowe

W trakcie dowodu twierdzenia 8.3.2 otrzymaliśmy następującą ważną rów-ność (8.8).

Uwaga 8.2 Dla każdego przepływu f i przekroju (W, W ) zachodzi wzór

w(f) =∑

x∈W,v∈W

f(x, v)−∑

y∈W,w∈W

f(w, y) (8.10)

Wniosek 8.3.3 Dla każdego przepływu f zachodzi wzór∑x∈V

f(x, t)−∑x∈V

f(t, x) = w(f)

Wniosek 8.3.3 oznacza, że w przyrodzie nic nie ginie, to co wypłynęło ze źródławpływa do odpływu!

Dowód wniosku 8.3.3. Wystarczy zastosować wzór (8.10) do W = {t}.Twierdzenie 8.3.2 da nam możliwość udowodnienia twierdzenia o maksymalnymprzepływie i minimalnym przekroju, odkrytego niezależnie przez Forda i Fulker-sona [8] oraz Eliasa, Feinsteina i Shannona [7].

Twierdzenie 8.3.4 (Max flow min cut theorem) Maksymalna wartośćprzepływu ze źródła s do odpływu t w sieci jest równa wartości minimalnegoprzekroju rozdzielającego s od t:

max{w(f)|f – przepływ z s do t } = min{c(W, W )|s ∈W, t ∈ W}

Dowód twierdzenia 8.3.4 polega de facto na wskazaniu algorytmu pozwala-jącego znależć maksymalny przepływ w sieci, tzw. algorytm ścieżki powiększa-jącej Forda–Fulkersona (p. [9]). Formalnie algorytm ten zostanie przedstawionypóźniej.Niech f będzie przepływem maksymalnym w sieci G = (V,A, c) ze źródła s doodpływu t. Utwórzmy rekurencjnie zbiór W w następujący sposób:

1. s ∈W

2. jeśli x ∈W, (x, y) ∈ A, f(x, y) < c(x, y) to y ∈W

3. jeśli x ∈W, (y, x) ∈ A i f(y, x) > 0 to y ∈W .

Kluczową ideą dowodu jest obserwacja, że dla każdego wierzchołka x ∈ Wistnieje ścieżka

P = (x0, e1, x1, ..., xk−1, ek, xk)

taka, że x0 = s, xk = x i dla każdego ei zachodzi albo

ei = (xi−1, xi) i f(ei) < c(ei) (8.11)

alboei = (xi, xi−1) i f(ei) > 0 (8.12)

Page 99: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8.3 Przepływy w sieciach 99

Inaczej mówiąc: wartość przepływu jest mniejsza od przepustowości na wszyst-kich łukach zgodnych i dodatnia na niezgodnych łukach ścieżki P .Gdyby t należało do W , to istniałaby ścieżka P z s do t (tj. taka, że x0 = s ixk = t) spełniająca warunki (8.11)–(8.12). Niech

ε1 = min{c(ei)− f(ei)|ei − łuk zgodny P}

ε2 = min{f(ei)|ei − łuk niezgodny P}

orazε = min{ε1, ε2}

Jest oczywistym, że ε > 0, i że dodając ε do funkcji przepływu na łukach ścieżkiP zgodnych i odejmując ε na łukach ścieżki P niezgodnych, inaczej mówiąc:definiując funkcję

f(e) =

f(e) jeśli e nie jest łukiem Pf(e) + ε jeśli e jest łukiem zgodnym Pf(e)− ε jeśli e jest łukiem niezgodnym P

otrzymalibyśmy nową funkcję przepływu której wartość wynosiłaby w(f) =w(f) + ε > w(f) co byłoby sprzeczne z maksymalnościa przepływu f .Stąd wynika, że t nie jest elementem zbioru W i zbiór W ma następujące wła-sności:

1. s ∈W

2. t /∈W

3. jeśli (x, y) ∈ A, x ∈W, y ∈ W to f(x, t) = c(x, y)

4. jeśli (x, y) ∈ A, x ∈ W , y ∈W to f(x, y) = 0

Wobec (1) i (2) (W, W ) jest przekrojem rozdzielającym s i t. łuki spełniające(3) nazywają sie nasyconymi , a takie które spełniają (4) wyschniętymi. Wobec(3) i (4) mamy

c(W, W ) =∑

x∈W,y∈W

c(x, y) =∑

x∈W,y∈W

f(x, y)

=∑

x∈W,y∈W

f(x, y)−∑

x∈W ,y∈W

f(x, y) = w(f)

co wobec twierdzenia 8.3.2 dowodzi, że (W, W ) jest przekrojem o przepustowościminimalnej.

Page 100: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

100 Metody sieciowe

8.4 Maksymalny przepływ a dualnośćW tym podrozdziale okaże się, że twierdzenie o maksymalnym przepływie i mi-nimalnym przekroju jest – w pewien sposób – zasadą dualności dla problemumaksymalnego przepływu.

Zapiszmy problem maksymalnego przepływu (8.4) – (8.6) w nieco innej postaci.Niech będzie dana sieć S = (V,A; c). Przepływem w S jest funkcja f : A → Rspełniająca następujące warunki:

∑y:(x,y)∈A f(x, y)−

∑z:(z,x)∈A f(z, x) =

0 dla x 6= s, tw dla x = s−w dla x = t

f(x, y) ≤ c(x, y) dla (x, y) ∈ Af(x, y) ≥ 0 dla (x, y) ∈ A

(8.13)Wartością przepływu f jest wtedy liczba w którą w naszym problemie maksy-malizujemy:

w → max (8.14)

Problemem dualnym do problemu (8.13) – (8.14) jest problem następujący7

(por. podrozdział 4.4):λ(y)− λ(x) + γ(x, y) ≥ 0 dla (x, y) ∈ Aγ(x, y) ≥ 0 dla (x, y) ∈ Aλ(s)− λ(t) ≥ 1z =

∑(x,y)∈A c(x, y)γ(x, y)→ max

(8.15)

Zauważmy, że w problemie dualnym (8.15) nie ma ograniczeń na znak zmien-nych dualnych λ(v) (dla v ∈ V ). Zmienne dualne odpowiadają poszczególnymograniczeniom w problemie prymalnym. Tak więc

λ(x) − są zmiennymi odpowiadającymi ograniczeniom

∑(x,y)∈A

f(x, y)−∑

(z,x)∈A

f(z, x) =

0 dla x 6= s, t−w dla x = sw dla x = t

(8.16)

Każdemu wierzchołkowi x sieci S odpowiada zmienna dualna która niema ograniczenia na znak gdyż we wzorze (8.16) jest równość.

γ(x, y) − są zmiennymi dualnymi odpowiadającymi ograniczeniu

f(x, y) ≤ c(x, y) (8.17)

stąd w problemie dualnym występuje ograniczenie na znak tej zmiennej8.7Fakt, że postać problemu dualnego wyraża wzór (8.15) łatwiej zrozumiemy przypomi-

nając sobie, że macierzą problemu prymalnego jest macierz incydencji grafu (plus wierszeodpowiadające ograniczeniom na przepustowości).

8Doradzam rozwiązanie ćwiczenia 8.9.1 właśnie teraz!

Page 101: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8.5 Algorytm Forda–Fulkersona 101

Dowolny przekrój (W,W ) rozdzielający s od t w sieci S definiuje pewne rozwią-zanie dopuszczalne problemu (8.15) w następujący sposób:

λ(x) =

{1 jeśli x ∈W0 jeśli x /∈W (8.18)

γ(x, y) =

{1 jeśli x ∈W, y ∈W0 w przeciwnym przypadku (8.19)

Słaba zasada dualności w ogólnej postaci (twierdzenie 4.4.1) daje nam natych-miast inny dowód twierdzenia 8.3.2. Rzeczywiście, funkcje λ i γ zdefiniowanewzorami (8.18) i (8.19) przez dowolny przekrój rozdzielający s od t dają pewnerozwiązanie problemu (8.15).Z kolei cała reszta dowodu twierdzenia 8.3.4 sprowadza się do wykazania, że pe-wien przekrój określa nam przy pomocy (8.18) i (8.19) rozwiązanie optymalne(8.13) (zrobili to Dantzig i Fulkerson w [6]).

8.5 Algorytm Forda–FulkersonaNiech S = (V,A; c) będzie siecią a f przepływem w S – jeśli nie mamy lep-szego, może to być przepływ zerowy, tj. przepływ równy zero na wszystkichłukach sieci. Algorytm – wykorzystujący ideę dowodu twierdzenia 8.3.4 polegana cechowaniu wierzchołków sieci cechami postaci (x−, ε) lub (x+, ε) oraz mo-dyfikacji przepływu jeśli f okazał się przepływem który nie jest maksymalny lubznalezieniu przekroju o przepustowości równej wartości przepływu f .Cechowanie. Wierzchołkowi s nadajemy cechę (−,∞).Niech x będzie wierzchołkiem ocechowanym. Z wierzchołka x cechujemy nie-ocechowane jeszcze wierzchołki w jednej z dwóch sytuacji:

(a) jeśli istnieje wierzchołek nieocechowany y taki, że (x, y) ∈ A i f(x, y) <c(x, y) to wierzchołkowi y nadajemy cechę (x+, ε(y)), gdzie ε(y) = min{ε(x), c(x, y)−f(x, y)},

(b) jeśli istnieje nieocechowany wierzchołek y taki, że (y, x) ∈ A i f(y, x) > 0to wierzchołkowi y nadajemy cechę (x−, ε(y)), gdzieε(y) = min{ε(x), f(y, x)}

Postępowanie cechowania kończy się jeżeli został ocechowany odpływ t lub nieocechowano t, lecz procesu cechowania nie da się kontynuować (żadnego jeszczenieocechowanego wierzchołka nie da się już ocechować).

(i) Jeżeli ocechowaliśmy wierzchołek t to t otrzymał cechę postaci (x+, ε) lub(x−, ε) (dla pewnego x ∈ V ).W pierwszym przypadku modyfikujemy przepływ na łuku (x, y) wzoremf(x, t) = f(x, t) = ε, w drugim f(t, x) = f(t, x)− ε.Wierzchołek x jest ocechowany. Jeżeli pierwszy element jego cechy jestpostaci y+ to do przepływu na łuku (y, x) dodajemy ε, jeżeli jest to y−

Page 102: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

102 Metody sieciowe

od przepływu na łuku (x, y) odejmujemy ε.Powtarzając tę czynność odpowiednią liczbę razy dojdziemy w końcu doźródła s. Dojdziemy wzdłóż wskazanej przez pierwsze elementy cech wierz-chołków ścieżkę zwaną ścieżką powiększającą 9. Oczywiście wartość no-wego przepływu f wynosi w(f) + ε > w(f). Proces cechowania rozpoczy-namy od nowa przyjmując jako wyjściowy przepływ f .

(ii) Przypuśćmy, że w procesie cechowania nie udało się ocechować wierzchołkat, a żadnego nowego wierzchołka nie da się już ocechować. Jest oczywi-stym, że jeżeli przez W oznaczymy zbiór wierzchołków ocechowanych to(W, W ) jest przekrojem rozdzielającym s od t. Co więcej, dla wszystkichx ∈W i y ∈ W spełniających (x, y) ∈ A zachodzi f(x, y) = c(x, y), a jeśli(y, x) ∈ A to f(y, x) = 0. Na podstawie uwagi 8.2 otrzymamy

w(f) =∑

x∈Wy∈W

f(x, y)−∑

x∈W,y∈W

f(y, x)

=∑

x∈W,y∈W

c(x, y) = c(W, W )

Na mocy uwagi 8.1 oznacza to, że przepływ f jest przepływem maksymal-nym.

8.6 Przepływ całkowity.Zbieżność algorytmu Forda–Fulkersona

Macierzą ograniczeń problemu (8.7) jest macierz incydencji grafu zorientowa-nego. Z twierdzenia 8.1.1 i wniosku 5.3.2 wynika, że istnieje taki przepływmaksymalny którego wartości na wszystkich łukach są całkowite. Co więcej,łatwo zauważyć, że całkowite rozwiązanie problemu maksymalnego przepływumożna znależć przy pomocy algorytmu Forda–Fulkersona. W rzeczy samej, je-śli tylko przepływ początkowy jest całkowity10 każda iteracja zwiększa wartośćprzepływu o liczbę całkowitą (liczba ε o którą zwiększa sie przepływ jest wtedycałkowita). Ponieważ wartość przepływu jest ograniczona przez przepustowośćdowolnego przekroju, wszystkich iteracji będzie co najwyżej tyle ile wynosi prze-pustowość (jakiegokolwiek) przekroju.W sieci w której przepustowości są liczbami wymiernymi, problem można łatwosprowadzić do przypadku całkowitego. Wystarczy przemnożyć wszystkie prze-pustowości przez ich wspólny mianownik m. W otrzymanej sieci znajdujemymnaksymalny przepływ a następnie wynik (t.j. zarówno wartość przepływuv(f) jak i przepływy na wszystkich łukach) dzielimy przez m i otrzymujemy wten sposób optymalne rozwiązanie problemu wyjściowego.

9Dokładniej ścieżka powiększająca (z którą zetknęliśmy się już w dowodzie twierdzenia8.3.4) to ścieżka z s do t – właśnie przeszliśmy po niej pod prąd.

10Jako pierwszy przepływ można przyjąć przepływ zerowy.

Page 103: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8.6 Przepływ całkowity. Zbieżność Algorytmu F–F 103

Ze względu na ważne zastosowania rozwiązań całkowitych problemu maksymal-nego przepływu które poznamy w dalszych podrozdziałach, zapiszmy następu-jący wniosek.

Wniosek 8.6.1 Jeśli wszystkie ograniczenia przepustowości łuków w problemie(8.7) są całkowite, to istnieje rozwiązanie optymalne tego problemu, którego war-tości na wszystkich łukach są całkowite. Co więcej, rozwiązanie o tej własnościmożna otrzymać stosując algorytm Forda–Fulkersona.

Niestety powyższe własności algorytmu Forda–Fulkersona nie przenoszą sięna przypadek rzeczywisty11. Okazuje się, że można skonstruować prosty przy-kład sieci o przepustowościach rzeczywistych niewymiernych taki, że algorytmForda–Fulkersona nie tylko nie dostarcza rozwiązania optymalnego w skończo-nej liczbie kroków, ale daję nieskończony ciąg przepływów których ciąg wartościnie jest zbieżny do rozwiązania optymalnego! Przykład takiej sieci podajemyza [9].

Przykład 8.6.1 Zauważmy wpierw, że rozwiązaniem równania rekurencyjnego

an+2 = an − an+1, a0 = 1, a1 =−1 +

√5

2

jest an =(−1+

√5

2

)n. Oznaczmy przez S sumę szeregu

∑+∞n=0 an,

S =

+∞∑n=0

(−1 +

√5

2

)n

(oczywiście szereg∑+∞n=0 an jest szeregiem geometrycznym zbieżnym).

Skonstruujmy sieć (V,A; c) w której V = {s, x1, ..., x4, y1, ..., y4, t}, A = {(s, xi) :i = 1, ..., 4} ∪ {(xi, yj) : i, j = 1, ..., 4} ∪ {(yi, xj) : i, j = 1, ..., 4} ∪ {(yi, yi) : i 6=j, i, j = 1, ...4} ∪ {(yi, t) : i = 1, ..., 4}. Przepustowości łuków zdefiniowane sązaś następująco. Dla łuków ei = (xi, yi)(i = 1, ..., 4):

c(x1, y1) = a0

c(x2, y2) = a1

c(x3, y3) = a2

c(x4, y4) = a2

zaś dla pozostałych łuków przepustowości są równe S. Jest jasne, że maksy-malny przepływ z s do tma wartość 4S. Tymczasem algorytm Forda–Fulkersonamoże postępować następująco:Początkowym przepływem jest przepływ równy zero na wszystkich łukach.Oznaczmy przez cn(e) = c(e)− fn(e) rezydualną przepustowość łuku e, gdzie fn

11Kłopot tylko teoretyczny. Dość trudno sobie wyobrazić zadanie praktyczne w którymniezbędne byłoby uwzględnianie ograniczeń niewymiernych na przepustowość łuków.

Page 104: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

104 Metody sieciowe

jest funkcją przepływu wyznaczoną po n−tej iteracji.Pierwszą ścieżką zwiększającą niech będzie

P1 = (s, x1, y1, t)

Wtedy

c1(x1, y1) = 0, c1(x2, y2) = a1, c1(x3, y3) = a2, c1(x4, y4) = a2

Następne iteracje definiujemy indukcyjnie. Przypuśćmy, że

cn(e′1) = 0, cn(e′2) = an, cn(e′3) = an+1, cn(e′4) = an+1

gdzie e′1, e′2, e′3, e′4 są pewnym przenumerowaniem łuków e1, e2, e3, e4. Jakonową ścieżkę powiększającą przyjmiemy

s, x′2, y′2, x′3, y′3, t

Wtedy ε = an+1 i o tę wartość możemy zwiększyć przepływ wzdłóż ścieżkipowiększającej. Otrzymamy

cn+1(e′1) = 0, cn+1(e′2) = an+2, cn+1(e′3) = 0, cn+1(e′4) = an+1

W następnym kroku bierzemy ścieżkę powiększającą

s, x′2, y′2, y′1, x′1, y′3, x′3, y′4t

W tej ostatniej ścieżce łuki (x′1, y′1) i (x′3, y

′3) są niezgodne (wszystkie pozostałe

łuki są zgodne). Zwiększyć przepływ należy teraz o an+2 i otrzymamy

cn+2(e′1) = an+2, cn+2(e′2) = 0, cn+2(e′3) = an+2, cn+1(e′4) = an+1

Po takim, przeprowadzonym w dwóch etapach, kroku algorytmu w dwóch eta-pach wartość przepływu zwiększa się o an+1 + an+2 = an. Nie tylko więcopisane operacje zwiększania przepływu możemy powtarzać w nieskończoność,ale wartość przepływu jest zbieżna do S, podczas gdy wartość przepływu mak-symalnego jest równa 4S.

8.7 Wnioski i zastosowania

Twierdzenie o maksymalnym przepływie i minimalnym przekroju i algorytmForda–Fulkersona są źródłem wielu ważnych wniosków i prostych dowodów waż-nych twierdzeń – także takich które znane były znacznie wcześniej. W bardzowielu przypadkach kluczową rolę odgrywa tu wniosek 8.6.1.

Page 105: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8.7 Wnioski i zastosowania 105

Zastosowania w teorii grafów

Do tej pory mowa była jedynie o grafach zorientowanych. Teraz potrzebowaćbędziemy grafu zwykłego i grafu dwudzielnego. Grafem zwykłym nazywamy paręG = (V ;E), gdzie V jest dowolnym zbiorem zwanym zbiorem wierzchołków grafuG, zaś E jest pewnym podzbiorem zbioru dwuelementowych podzbiorów zbioruV , czyli

E ⊂ {{x, y} : x, y ∈ V, x 6= y}nazywanym zbiorem krawędzi grafu. Krawędź {x, y} grafu G, zapisujemykrócej xy. x i y nazywamy jej końcami. Jeśli x, y ∈ E to mówimy, że x i ysą wierzchołkami sąsiednimi lub połączonymi . Zbiór sąsiadów wierzchołkax w grafie G znaczamy przez NG(x) = {y ∈ V : xy ∈ E}.Grafy zwykłe mają swoją – bardzo wygodną i sugestywną – interpretację gra-ficzną: wierzchołki w tej reprezentacji są przedstawiane jako punkty płaszczyznya krawędzie jako łączące je krzywe (p. rys. 8.5.1).Zbiór krawędzi F ⊂ E jest niezależny jeżeli dla dowolnych różnych krawędzie, f ∈ F zachodzi e ∩ f = ∅. Zbiory niezalężne krawędzi grafu G nazywać bę-dziemy skojarzeniami w grafie G.Graf G nazywamy dwudzielnym jeżeli istnieje podział12 zbioru V = X ∪ Ytaki, że dla każdej krawędzi xy ∈ E jeden z wierzchołków x, y należy do zbioruX podczas gdy drugi należy do zbioru Y . Piszemy wtedy G = (X,Y ;E).Problem znajdowania skojarzeń w grafach – na przykład pełnych skojarzeńczyli takich zbiorów M niezależnych krawędzi, że

⋃e∈M e = V , lub skojarzeń

o maksymalnej liczbie krawędzi, są bardzo ważnymi problemami teorii grafów,posiadającymi także zastosowania (czy też interpretacje) praktyczne.

Przykład 8.7.1 W pewnym zakładzie pracy zatrudnieni są pracownicyp1, ..., pk. W zakładzie tym są też stanowiska pracy s1, ..., sl, przy czym niekażdy pracownik może pracować przy każdym stanowisku. Dla dobrego funkcjo-nowania zakładu istotny jest problem jak przydzielić stanowiska pracy wszyst-kim zatrudnionym, by optymalnie wykorzystać pracowników i obsadzić stano-wiska pracy.Taka sytuacja łatwo daje się opisać przy pomocy grafu dwudzielnego G =(X,Y ;E), gdzie X = {p1, ..., pk}, Y = {s1, ..., sl}, E = {pisj : pi możeobsługiwać stanowisko j}.Nasz problem w języku teorii grafów można sformułować tak: znajdź w G skoja-rzenie M o maksymalnej liczbie krawędzi. Sytuacja będzie oczywiście najlepszawtedy, gdy takie skojarzenie będzie pełnym skojarzeniem X w Y grafu dwu-dzielnego G = (X,Y ;E), t.j. wtedy gdy dla każdego x ∈ X istnieje krawędźe ∈ E taka, że x ∈ e13.

W związku z powyższym przykładem powstaje naturalny problem: kiedy wgrafie dwudzielnym G = (X,Y ;E) istnieje pełne skojarzenie X w Y ?Na pytanie to odpowiada ważne twierdzenie Halla z 1935 roku.

12Przypomnijmy, że zbiory X i Y są podziałem V jeżeli X ∪ Y = V i X ∩ y = ∅.13Zwrócić tu anleży uwagę na subtelną różnicę pomiędzy pełnym skojarzeniem w grafie

zwykłym i pełnym skojarzeniem X w Y w grafie dwudzielnym (X,Y ;E).

Page 106: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

106 Metody sieciowe

Twierdzenie 8.7.1 (P. Hall) Niech G = (X,Y ;E) będzie grafem dwudziel-nym. W G istnieje skojarzenie pełne X w Y wtedy i tylko wtedy, jeśli dlakażdego podzbioru A ⊂ X zachodzi | A |≤| NG(A) |.

Dowód. Zacznijmy od skojarzenia z grafem dwudzielnym G = (X,Y ;E) sieciS = (X ′ ∪ Y ′;A, c) w sposób następujący (por. rys. 8.5.1).

– zbiorem wierzchołków sieci S jest V = X ′ ∪ Y ′, gdzie

X ′ = X ∪ {s}Y ′ = Y ∪ {t}

– s jest źródłem,

– t odpływem,

przy czym o wierzchołkach s i t zakładamy, że nie należą do X ∪ Y i sąmiędzy sobą różne.

– Zbiorem łuków sieci S jest A = {(x, y) : x = s, y ∈ X lub x ∈ X,xy ∈E, lub x ∈ Y, y = t}.

– Funkcja przepustowości c : A→ R dana jest wzorem

c(x, y) =

{∞ gdy x ∈ X i y ∈ Y1 gdy x = s i y ∈ X lub x ∈ Y i y = t

up3

up2

up1@@@@@@

���

���

����

��

G

us1

us2

us3

us ����3-QQQQs

-

-@@@@@@R

-���

���*

-����

��* uuu

1

1

1

uuu

∞∞∞∞∞

uQQQQs-

����3

t

11

1

S

Rys. 8.5.1

Oczywistym jest, że maksymalny przepływ całkowitoliczbowy w sieci Swyznacza maksymalne skojarzenie w G i na odwrót: maksymalne skojarzenie wG definiuje całkowitoliczbowy przepływ w sieci S. Z wniosku 8.3.1 (lub 8.6.1)wynika, że istnieje maksymalny przepływ w S przyjmujący wartości całkowitena wszystkich łukach sieci14.

Przypuśćmy wpierw, że dla każdego podzbioru A ⊂ X zachodzi |NG(A) |≥| A |. Wykażemy, że wtedy istnieje w S przepływ f o wartości

14Zauważmy, że +∞ w definicji przepustowości łuków sieci S można zastąpić wystarczającodużymi liczbami całkowitymi (na przykład | X |).

Page 107: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8.7 Wnioski i zastosowania 107

w(f) ≥| X |.Rzeczywiście niech f będzie całkowitoliczbowym przepływem maksymalnym wS i niech (W, W ) będzie przekrojem o przepustowości minimalnej rozdzielającyms od T (na przykład wyznaczonym przez algorytm Forda–Fulkersona).Oznaczmy A = X ∩W oraz B = Y ∩W (p. rys. 8.5.2).

#

"

!

#

"

!s

A

uu

uqqq

����

��*

JJJJJJJJJ

HHHH

HHj

t

B

u

uu

qqq

'

&

$

%

'

&

$

%X −A

u

uqqq Y −B

u

uqqq

-HHH

HHHHHHH

HHj-���

����

���

��*

-HHH

HHHHHH

HHHj-����

���

���

��*

JJJJJJJJJ

HHHHHHj

������*

W

W

Rys. 8.5.2

Zauważmy, że nia ma łuków o początku w A i końcu w Y−B, w przeciwnym raziemielibyśmy c(W, W ) = +∞, a więc istnieje przekrój o mniejszej przepustowości,n.p. W = {s}15.Stąd B ⊃ NG(A) i

c(W, W ) =| X −A | + | B |=| X | − | A | + | B |≥

≥| X | − | A | + | NG(A) |≥| X |Tak więc istnieje przepływ w S o wartości w(f) ≥| X |, a skoro żaden przepływnie może mieć wartości większej niż | X |, w(f) =| X |.łuki o niezeroeym przepływie z X do Y w S wyznaczają oczywiście krawędziepełnego skojarzenia X w Y w grafie G.

Przypuśćmy teraz, że w G istnieje pełne skojarzenie X w Y . Wy-każemy, że wtedy dla każdego A ⊂ X zachodzi | A |≤| NG(A) |.Rzeczywiście, gdyby istnił zbiór A ⊂ X taki, że | A |>| NG(A) | wtedy wsieci S moglibyśmy wziąć przekrój (W, W ) ze zbiorem W = {s} ∪ A ∪ NG(A).Przepustowość tego przekroju wynosi

c(W, W ) =| X | − | A | + | NG(A) |<| X |15c({s}, X′ ∪ Y ′ − {s}) =| X |< +∞.

Page 108: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

108 Metody sieciowe

Skoro istnieje przekrój rozdzielający o przepustowości mniejszej niż | X |, to wS nie ma przepływu o wartości | X |, czyli w G nie istnieje skojarzenie pełne Xw Y – ta sprzeczność kończy dowód twierdzenia 8.7.1Dla grafów dwudzielnych prawdziwe jest następujące twierdzenie.

Zbiór różnych reprezentantów

Niech będzie dany zbiór X i pewna rodzina podzbiorów X tego zbioru. Kiedyistnieje zbiór Y ⊂ X taki, że istnieje różnowartościowa funkcja g : X → Y?Jeśli taki zbiór Y istnieje, nazywamy go zbiorem różnych reprezentantów rodzinyX.

Przykład 8.7.2 W sejmie, senacie16 istnieją różne komisje zajmujące się róż-nymi problemami 17.

Komisje te kędziemy traktowali jako podzbioru zbioru posłów (lub senato-rów). Każda komisja ma swojego przewodniczącego. Wygodnie jest by prze-wodniczącymi róznych komisji były różne osoby. Powstaje więc problem: jakpowinny być dobrane komisje by mogło tak być?

Problem istnienia zbioru różnych reprezentantów można przetłumaczyć najęzyk teorii grafów następująco:Niech każdemu zbiorowi Xi ∈ X odpowiada wierzchołek xi i niech A = {xi :Xi ∈ X}, oraz B = X. Niech teraz G bedzie grafem dwudzielnym G = (A,B;E)takim, że E = {Xix : x ∈ Xi}. Problem istnienia zbioru różnych reprezentantówrodziny X jest równoważny istnieniu w G skojarzenia pełnego zbioru A. Stąd iz twierdzenia 8.7.1 wynika bardzo łatwo następujący wniosek.

Wniosek 8.7.2 (Hall) [12] Niech X będzie rodziną n podzbiorów zbioru X.Zbiór różnych reprezentantów rodziny X istnieje wtedy i tylko wtedy, gdy uniadowolnych k ≤ n zbiorów rodziny X zawiera co najmniej k elementów.

Następne, słynne twierdzenie Königa-Egerváry’ego, zostało opublikowane w książceKöniga [15] której ukazanie się w 1936 roku stało się, jak się powszechnie uważa,źaczynem"trwającego do dziś bardzo intensywnego rozwoju teorii grafów18.

Twierdzenie 8.7.3 (Königa-Egerváry’ego) W grafie dwudzielnym G = (X,Y ;E)minimalna liczba wierzchołkow w zbiorze rozdzielającym X i Y jest równa liczbiekrawędzi w maksymalnym skojarzeniu.

Przykład 8.7.3 Na rysunku 8.5.3 przedstawiono graf dwudzielny. Sprawdź, żewierzchołki wyróżnione tworzą w nim zbiór rozdzielający i wskaż skojarzenie o trzechkrawędziach.

16Także Senacie Akademii Górniczo–Hutniczej.17W Senacie AGH są to Komisje do Spraw Kształcenia, Naukowa, Budżetowa i inne.18Z pewnością powodów gwałtownego rozwoju teorii grafów było z pewnością wiele (np.

znany problem czterech kolorów, liczne zastosowania (w tym w informatyce)). Niewątpliwiejednak książka Königa odegrała w tym rozwoju dużą rolę.

Page 109: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8.8 Przepustowość wierzchołków 109

uugugu

uu

u ugu

���

���

���

���

XXXXXXXXXXXX

������

������

�����

���

����

XXXXXXXXXXXX

������

������XXXXXXXXXXXX

Rys. 8.5.3

Dowód twierdzenia 8.7.3 jest podobny do dowodu twierdzenia 8.7.1. Z grafemG kojarzymy sieć S = (X ′, Y ′;E′) w identyczny co w dowodzie twierdzenia8.7.1 sposób i zauważamy, że każdemu przekrojowi (W, W ) z W = A∪B ∪ {s},A ⊂ X,B ⊂ Y, o przepustowości w S równej, jak widzieliśmy, | X − A | +| B |, odpowiada zbiór rozdzielający (X −A)∪B który też ma | X −A | + | B |wierzchołków.

8.8 Przepustowość wierzchołkówZanim powiemy jak powiemy jak uogólnić twierdzenie 8.7.3 dla dowolnych gra-fów (niekoniecznie dwudzielnych), powiedzmy jak poradzić sobie z problememmaksymalnego przepływu w sieci w której poza ograniczeniami na przepusto-wości łuków dane są także przepustowości wierzchołków.Mamy wtedy następujący problem:Dla danej sieci S = (X,A; c, c), gdzie c : A → R+ c : X → R+ o źródle s iodpływie t znaleźć funkcję f : A→ R spełniającą∑

(x,y)∈A

f(x, y)−∑

(z,x)∈A

f(z, x) = 0 dla każdego x ∈ V − {s, t}

∑(z,x)∈A

f(z, x) ≤ c(x) dla każdego x ∈ V

0 ≤ f(x, y) ≤ c(x, y) dla wszystkich (x, y) ∈ Azmaksymalizować ∑

(s,x)∈A

f(s, x)−∑

(y,s)∈A

f(y, s)

Page 110: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

110 Metody sieciowe

Rozwiązanie powyższego problemu19 otrzymujemy bardzo łatwo korzystając zpoznanej już metody dla sieci bez ograniczeń przepustowości wierzchołków.Tworzymy nową sieć S′, A′, c′) w której każdy wierzchołek x zastępujemy dwomawierzchołkami x′ i x′′.Zbiór łuków A′ i przepustowości definiujemy następująco:

1. A′ = {(x′, x′′) : x ∈ V } ∪ {(y′′, x′) : (y, x) ∈ A},

2. c′(x′, x′′) = c(x) dla każdego x ∈ V ,

3. c′(y′′, x′) = c(x, y) jeśli (y, x) ∈ A

Jest oczywiste, że wartość maksymalnego przepływu f w sieci S ze źródła s doodpływu t jest równa wartości maksymalnego f ′ przepływu w S′ ze źródła s′do odpływu t′′.Oczywistym jest także, że f ′ można znaleźć przy pomocy algorytmu Forda–Fulkersona i w łatwy sposób sprowadzić potem do przepływu f w sieci S.

8.9 Twierdzenie Mengera

W niniejszym podrozdziale będzie mowa o spójności grafu i parametrze κ(G)który jest w pewien sposób miarą spójności grafu G. Zarówno spójność jakparametr κ są podstawowymi, bardzo ważnymi pojęciami teorii grafów.Dla grafu G = (V ;E) i podzbioru S ⊂ V przez G − S oznaczamy graf G′ =(V − S;E′), gdzie E′ = {e ∈ E : e ⊂ V − S}. Inaczej mówiąc, zbiór krawędzigrafu G− S to te krawędzie grafu G których żaden z końców nie jest w S.ścieżką z x do y w grafie G = (V ;E) nazywamy ciąg wierzchołków i krawędzi

P = (x1, e1, x2, e2, ..., xk, ek, xk+1)

(xi ∈ V, i = 1, ..., k + 1, ej ∈ E, j = 1, ..., k) taki, że ei = xixi+1.Mówimy, że graf G jest spójny jeśli dla dowolnych wierzchołków x i y grafu Gistnieje ścieżka z x do y (mówimy także ścieżka łącząca x z y).Minimalną liczbę k taką, że w grafie G istnieje zbiór wierzchołków S spełniającywarunki

1. | S |= k

2. G− S nie jest grafem spójnym lub ma tylko jeden wierzchołek

nazywamy liczbą spójności grafu G , lub spójnością grafu i oznaczamyprzez κ(G).

19Zauważmy, że ograniczenia przepustowości wierzchołków mogą występować w zagadnie-niach praktycznych. W sieciach komunikacyjnych często wierzchołki oznaczają skrzyżowaniaulic. Jest oczywiste, że możliwość wprowadzenia ograniczeń przepustowości wierzchołków –skrzyżowań jest tu bardzo istotna.

Page 111: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8.9 Twierdzenie Mengera 111

Przykład 8.9.1 Czytelnik zechce sprawdzić, że graf G przedstawiony na rysunku8.5.1 ma liczbę spójności równą 2 (κ(G) = 2).

O grafie G dla którego κ(G) = k mówimy, że jest l−spójny, dla każdego l ≤κ(G).

Przykład 8.9.2 Graf G z rysunku 8.5.1 jest 1−spójny i 2−spójny.

Oczywiście grafy spójne są 1−spójne.Niech G będzie grafem spójnym (κ(G) ≥ 1). Zbiór S taki, że G − S nie jestspójny nazywamy separatorem grafu G. Separator S o minimalnej liczbiewierzchołków (a więc taki, że | S |= κ(G)) nazywamy separatorem minimalnym.Niech P i P ′ będą dwoma ścieżkami łączącymi dwa różne wierzchołki x i y.Mówimy, że P i P ′ są wewnętrznie rozłączne jeżeli jedynymi wspólnymiwierzchołkami tych ścieżek są x i y.

Twierdzenie 8.9.1 Maksymalna liczba ścieżek wewnętrznie rozłącznych łączą-cych dwa wierzchołki x i x grafu G jest równa liczności minimalnego separatorarozdzielającego x i y.

Dowód. Z grafem G = (V ;E) skojarzmy sieć S o zbiorze wierzchołków V , orazźródle, odpływie, zbiorze łuków A i funkcjami przepustowości łuków i wierz-chołków zdefiniowanymi w sposób następujący:

1. x jest źródłem sieci S,

2. y jest odpływem S,

3. każdej krawędzi ab w grafie G odpowiadają dwa łuki w S: (a, b) i (b, a),

4. przepustowość każdego łuku wynosi +∞,

5. przepustowości wszystkich wierzchołków różnych od x i y wynoszą 1,

6. przepustowości x i y wynoszą +∞.

Maksymalny całkowitoliczbowy przepływ z x do y wyznaczy nam oczywiściemaksymalną liczbę ścieżek wewnątrznie rozłącznych z x do y. Przekrój o mi-nimalnej przepustowości w sieci S wyznaczy z kolei minimalny separator x ody. Z twierdzenia o maksymalnym przepływie i minimalnym przekroju wynikateraz twierdzenie 8.9.1.Z twierdzenia 8.9.1 wynika natychmiast twierdzenie Mengera:

Wniosek 8.9.2 (Twierdzenie Mengera) W dowolnym grafie G każde dwawierzchołki są połączone κ(G) ścieżkami wewnętrznie rozłącznymi.

Czytelnik zechce samodzielnie zastanowić się jak udowodnić następny wniosek,który jest uogólnieniem twierdzenia Mengera (por. ćwiczenie 8.9.4).

Wniosek 8.9.3 Niech A i B będą dwoma rozłącznymi zbiorami wierzchołkówgrafu G takimi, że | A |, | B |≥ κ(G). Wtedy istnieje w G κ(G) wierzchołkoworozłącznych ścieżek z A do B.

Page 112: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

112 Metody sieciowe

8.9.1 ćwiczenia

Ćwiczenie 8.9.1 Napisz problem prymalny i dualny dla znajdowania maksy-malnego przepływu w sieci przedstawionej na poniższym rysunku (dla dowolnejfunkcji przepustowości c : A→ R).

����

s ����

t

����

QQQQQQQQs b �

�������3

����

a

��������3 Q

QQQQQQQs

?

Ćwiczenie 8.9.2 Metodą Forda-Fulkersona znajdź maksymalny przepływ i mi-nimalny przekrój w poniższej sieci.

����

s

4

�����

3

@@@@R

����

2

6

a

4@@@@R

2-����

b

5@@@@R

����

c

3�����

1-����

d

4�����

3

6

����

e

1

�����

2

@@@@R

����

p

Ćwiczenie 8.9.3 Skorzystaj z algorytmu Forda-Fulkersona by znaleźć maksy-malne skojarzenie w grafie dwudzielnym G = (X,Y ;E), gdzie:

X = {u, v, w, x, y, z}

Y = {a, b, c, d, e, f}

E = {ub, ud, va, vb, vc, xb, xd, yb, yd, za, ze, zf, wd,we, wf}

Skomentuj otrzymany wynik.

Page 113: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

8.9 Twierdzenie Mengera 113

Ćwiczenie 8.9.4 Wykaż, że jeśli graf jest k spójny to dla dowolnych rozłącz-nych zbiorów wierzchołków A i B takich, że |A|, |B| ≥ k istnieje k ścieżekP1, ..., Pk o rozłącznych zbiorach wierzchołków takich, że początkowy wierzcho-łek każdej ze ścieżek jest w zbiorze A a końcowy w B.

Page 114: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

114 Metody sieciowe

Page 115: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Rozdział 9

Problem transportowy

W problemie transportowym zajmujemy się przepływami, podobnie jak w przy-padku problemu maksymalnego przepływu. Tym razem jednak zakładamy, żeprzepustowości łuków są nieograniczone, natomiast z przepływem związane sąkoszty. Mamy więc pewną liczbę magazynów o określonych zasobach, pewnąliczbę odbiorców o określonych ptrzebach a także węzły pośrednie (stacje prze-ładunkowe) do których wpływa tyle samo transportowanych dóbr, co i wypływa.Mamy też łączące węzły łuki przez które odbywa się przepływ dóbr, który jestzwiązany z pewnymi kosztami. Celem jest dostarczenie dóbr do odbiorców pojak najmniejszym koszcie.Także tym razem będziemy musieli podać pewną ilość informacji z teorii grafów,konkretnie informacje o grafach zwanych drzewami, które będą nam niezbędnew dalszej części algorytmu zwanego simpleksem sieciowym.

9.1 Drzewa

Trasą w grafie nieskierowanym G = (V ;E) nazywamy ciąg wierzchołków Pk =(v0, v1, ..., vk−1) taki, że dowolne dwa kolejne wierzchłki trasy vi, vi+1 są połą-czone krawędzią. Droga to taka trasa (v0, v1, ..., vk−1), w której vi 6= vi+1 dlai = 0, ..., k − 2. Jeśli dodatkowo vk−1 = v0, wówczas drogę nazywamy cyklem(piszemy wtedy Ck = (v0, v1, ..., vk−1, v0)). O grafie G mówimy, że jest spójnyjeżeli dowolne dwa wierzchołki tego grafu są połączone drogą.

Długością drogi (cyklu) nazywamy liczbę tworzących je krawędzi.Oczywiście grafy P5 i C4 (przedstawione na rysunku 9.1) są spójne natomiast

graf, który jest sumą P5 i C4, czyli całym grafem przedstawionym na tym ry-sunku jest niespójny. Maksymalny podgraf spójny grafu nazywamy składową.Graf przedstawiony na rysunku 9.1 ma dwie składowe: P5 i C4.

Drzewem nazywamy graf spójny nie zawierający cykli (p. rysunek 9.2).Dla grafu G = (V ;E) i dwóch niepołączonych wierzchołków u, v ∈ V przez

G + uv oznaczamy graf powstały przez połączenie w G wierzchołków u i vkrawędzią. Inaczej G+ uv = (V ;E ∪ {uv}).

115

Page 116: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

116 Problem transportowy

uv3

e2

uv2

e1

uv1

e3

uv4

e4

uv5

P5

u u

u u

C4

Rysunek 9.1: Dwa grafy spójne

uuu

���

@@@u u

���

@@@

���

@@@uuu

u u u

u u u u u

@@@

@@@

@@@

JJJJJJJJJ

BBBBBBBBB

BBBBBBBBB

���������

Rysunek 9.2: Drzewa

Twierdzenie 9.1.1 Graf G = (V ;E) rzędu n = |V | > 2, niepełny, jest drze-wem wtedy i tylko wtedy gdy dla dowolnych dwóch niepołączonych wierzchołkówu, v ∈ V graf G+ uv zawiera dokładnie jeden cykl.

Dow"od.

• Przypuśćmy, że G jest drzewem a u i v są niepołączonymi wierzchołkamitego grafu. Skoro G jest spójny, istnieje w G droga łącząca u z v, po-wiedzmy (u = v1, v2, ..., vk = v). Oczywiście (v1, v2, ..., vk, v1) jest cyklemgrafu G+ uv. Co więcej, cykl ten jest jedynym cyklem w G+ uv. Gdybybowiem istniały dwa cykle w G + uv, oba musiałyby zawierać krawędźuv, bowiem G jako drzewo żadnego cyklu nie zawiera. Mielibyśmy, po-wiedzmy, cykle (u = u1, u2, ..., ul = v, u) oraz (u = w1, w2, ..., wm = v, u).Wtedy jednak C = (u1, u2, ..., ul = wm, wm−1, ..., w1 = u) byłby cyklemw G1.

• Przypuśćmy, że graf G jest taki, że po połączeniu dowolnych dwóch nie-połączonych wierzchołków istnieje w nim dokładnie jeden cykl.

1Zwracam uwagę na lukę w dowodzie. Zgodnie z definicją cyklu przyjętą w tym rozdziale,wierzchołki w cyklu występują co najwyżej jeden raz. W konstrukcji podanej w dowodzieotrzymujemy cykl, w którym wierzchołki mogą się powtarzać. łatwo jednak tę trudność po-konać.

Page 117: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

9.1 Drzewa 117

G jest grafem spójnym. Rzeczywiście, jeśli u, v ∈ V to albo te dwa wierz-chołki są połączone krawędzią (drogą długości 1), albo nie, lecz wtedy wgrafie G + uv krawędź uv jest zawarta w cyklu, skąd łatwo wynika, że ujest w G połączone ścieżką z v. Co więcej, skoro dla dowolnych niepo-łączonych w G wierzchołków u, v graf Guv zawiera dokładnie jeden cykl,graf G nie może zawierać cyklu.

Twierdzenie 9.1.2 Niech T = (V ;E) będzie drzewem rzędu n i niech v bę-dzie dowolnym wierzchołkiem drzewa T . Wówczas istnieje takie uporządkowa-nie v1, v2, ..., vn wierzchołków grafu T , że v = v1 i każdy wierzchołek vi jestpołączony z dokładnie jednym wierzchołkiem ze zbioru {v1, v2, ..., vi−1}.

Dow"od. Dla dowodu twierdzenia 9.1.2 podamy rekurencyjnie sposób upo-rządkowania v1, v2, ..., vn wierzchołków spełniający warunki twierdzenia.Oczywiście musimy mieć v1 = v.Przypuśćmy teraz, że mamy uporządkowaniem wierzchołków v1, v2, ..., vm drzewaT spełniające warunki twierdzenia i na dodatek takie, że podgraf drzewa Tindukowany przez te wierzchołki jest spójny (oczywiście wynika stąd, że pod-graf ten jest drzewem). Jeśli m = n wówczas nasza konstrukcja jest zakoń-czona. Jeśli nie, wówczas ze spójności T wynika, że istnieje wierzchołek x ∈V − {v1, v2, ..., vm} połączony z jednym z wierzchołków zbioru {v1, v2, ..., vm}.Gdyby x był połączony z dwoma wierzchołkami spośród {v1, ..., vm}, na przy-kład gdyby ux ∈ E,wx ∈ E, gdzie u,w ∈ {v1, ..., vm}, u 6= w, wówczas istnia-łaby droga P łącząca u z w w podgrafie indukowanym przez {v1, ..., vm} (wiemy,że ten podgraf jest spójny) i (xPx) byłby cyklem zawartym w T , a taki cykl nieistnieje, bowiem T jest drzewem. Stąd wynika, że x może być połączony tylko zjednym wierzchołkiem zbioru {v1, ..., vm}. Możemy więc przyjąc vm+1 = x.

Dla dowolnego grafu G = (V ;E) liczbę jego wierzchołków nazywamy rzę-dem grafu G i oznaczamy przez |G|. Liczbę krawędzi G nazywamy rozmiaremgrafu G i oznaczamy przez ‖ G ‖.

Dla dowolnego grafu G o zbiorze wierzchołków V = {u1, ..., un} i zbiorzekrawędzi E = {e1, ..., em} macierz incydencji M = M(G) zdefiniowana jestwzorem

Mvi,ej =

{1 jeśli krawędź ej jest incydentna z wierzchołkiem vi0 w przeciwnym przypadku

W sytuacji takiej jak powyżej mówimy, że macierz M ma wiersze indeksowanewierzchołkami, a kolumny krawędziamu grafu G.

Przykład 9.1.1 Przykładowe uporządkowanie wierzchołków P5 spełniające wa-runki twierdzenia 9.1.2 zaznaczono na rysunku 9.1. Na tym samym rysunkuprzez ei oznaczono jedyną krawędź. która łączy wierzchołek vi z jedynym wierz-chołkiem o indeksie mniejszym niż i. Dla takich oznaczeń macierz incydencji

Page 118: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

118 Problem transportowy

jest równa

M(P5) =

e1 e2 e3 e4

v1 1 0 1 0v2 1 1 0 0v3 0 1 0 0v4 0 0 1 0v5 0 0 0 1

(9.1)

(we wzorze (9.1) zaznaczono także wierzchołki i krawędzie indeksujące poszcze-gólne wiersze i kolumny macierzy).

Wniosek 9.1.3 .

1. Dla dowolnego drzewa T prawdziwy jest wzór ‖ T ‖= |T | − 1.

2. Rząd macierzy incydencji dowolnego drzewa rzędu n jest równy n− 1.

Dow"od. Niech wierzchołkami drzewa T będą v1, v2, ..., vn uporządkowanetak, jak w twierdzeniu 9.1.2.

Dow. 1. Dowód pierwszej części wniosku jest oczywisty: dodając do drzewa kolejnywierzchołek vi dodajemy dokładnie jedną krawędź poza i = 1 kiedy to niemamy jeszcze żadnej krawędzi.

Dow. 2. Macierz incydencji drzewa rzędu n ma n − 1 kolumn (tyle jest bowiemkrawędzi, którymi kolumny są indeksowane). Stąd rząd macierzyM jest conajwyżej równy n−1. Zauważmy także, że po usunięciu pierwszego wierszaotrzymamy macierz o rozmiarze (n − 1) × (n − 1), które na przekątnejma jedynki, natomiast pod przekątną zera. Wyznacznik tak otrzymanejmacierzy kwadratowej jest równy 1, stąd jej rząd jest równy n−1. Wobectego rząd macierzy incydencji drzewa jest równy n− 1.

9.2 Drzewa skierowaneNiech G = (V ;E) będzie grafem skierowanym. Szkieletem grafu G nazywamygraf nieskierowany o zbiorze wierzchołków V (a więc tym samym, co zbiór wierz-chołków grafu G, w którym każdy łuk grafu G zastępujemy krawędzią powstałąz tego łuku przez pominięcie jego orientacji. Zauważmy, że szkieletem grafuskierowanego może być graf, który nie jest grafem zwykłym, bowiem niektórejego wierzchołki mogą być połączone krawędziami wielokrotnymi. Tak jest naprzykład dla grafów przedstawionych na rysunku 9.3. Graf G′ jest szkieletemgrafu skierowanego G i nie jest grafem zwykłym gdyż dwa jego wierzchołki sąpołączone krawędzią podwójną (w ten sposób w G′ istnieje cykl długości 2, cow grafach nieskierowanych zwykłych nie jest możliwe).

Drzewem skierowanym nazywamy graf skierowany, którego szkielet jestdrzewem. Następujący wniosek jest dość oczywistą konsekwencją wcześniejszychtwierdzeń dla drzew nieskierowanych. Przypomnijmy, że cyklem w grafie skie-rowanym jest ciągiem wierzchołków Ck = (u1, u2, ..., uk, u1) takich, że ui 6= uj

Page 119: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

9.3 Problem transportowy - simpleks sieciowy 119

u u u-

� u u uG G′

Rysunek 9.3:

dla i 6= j i każde dwa kolejne wierzchołki na cyklu są połączone (przy czym nieprecyzujemy, czy (ui, ui+1) ∈ E(Ck) czy też (ui+1, ui) ∈ E(Ck)).

Wniosek 9.2.1 1. Graf skierowany G = (V ;E) rzędu n = |V | > 2, nie-pełny, jest drzewem wtedy i tylko wtedy gdy dla dowolnych dwóch niepo-łączonych wierzchołków u, v ∈ V graf G + (u, v) zawiera dokładnie jedencykl.

2. Niech T będzie drzewem skierowanym rzędu n i niech v będzie dowol-nym wierzchołkiem drzewa T . Wówczas istnieje takie uporządkowaniev1, v2, ..., vn wierzchołków grafu T , że v = v1 i każdy wierzchołek vi jest po-łączony, powiedzmy łukiem ei, z dokładnie jednym wierzchołkiem ze zbioru{v1, v2, ..., vi−1}.

3. Rozmiar dowolnego drzewa skierowanego rzędu n jest równy n− 1.

4. Rząd macierzy incydencji dowolnego grafu skierowanego rzędu n wynosin− 1.

9.3 Problem transportowy - simpleks sieciowyCelem naszych rozważań będzie przypisanie przepływów łukom zadanej sieci(zwanej siecią transportową) w taki sposób aby spełnione były oczekiwania od-biorców (potrzeby). Transport tych dóbr odbywa się ze zbioru magazynów,których zapasy nie mogą zostać przekroczone i odpywa się w sieci, w którejznany jest koszt jednostkowego (jednostki dóbr) przepływu przez każdy łuk.Przepustowość łuków nie jest ograniczona. Tym razem podejście do problemujest takie, żeprzez każdy łuk da się przetransportować dowolną ilość dóbr, na-tomiast istotne są koszty, które minimalizujemy.Nasza sieć jest więc grafem skierowanym G = (V,A), przy czym V = M ∪O∪P ,gdzie

• M - to magazyny,

• O - odbiorcy,

• P - węzły pośrednie (możemy też interpretować te wierzchołki grafu Gjako stacje przeładunkowe).

Page 120: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

120 Problem transportowy

- Funkcjac : E → R+

jest funkcją kosztów - interpretujemy ja tak, że przepływ przez łuk e αjednostek dóbr kosztuje α · c(e).

- W każdym magazynie m ∈ M mamy określony zapas (powiedzmy) su-rowca. Podobnie, każdy odbiorca o ∈ O ma pewne zapotrzebowanie natransportowany w sieci surowiec. Dla naszego problemu wygodniej jednakbędzie nam mówić wyłącznie o zapotrzebowaniach w wierzchołkach.Zapotrzebowania w wierzchołkach, które nazwaliśmy odbiorcami będądodatnie, zapotrzebowania w wierzchołkach pośrednich będą równe zeru,natomiast w wierzchołkach, które nazwaliśmy magazynami zapotrzebo-wania będą ujemne. W takiej konwencji funkcję f : V → R będziemynazywali przepływem dopuszczalnym jeżeli dla każdego wierzchołkav ∈ V prawdziwa jest równość∑

x:(x,v)∈A

f(x, v)−∑

x:(v,x)∈A

f(v, x) = b(v) (9.2)

przy czym pamiętamy, że

b(v)

< 0 jeśli v ∈M= 0 jeśli v ∈ P> 0 jeśli v ∈ O

- Będziemy zakładać, jakkolwiek by to było nieralne, że suma wszystkichzapotrzebowań jest równa sumie wszystkich zapasów2, czyli∑

v∈Vb(v) = 0 (9.3)

- Funkcją celu, którą będziemy minimalizować jest koszt całkowity trans-portu, czyli

k(f) =∑e∈A

c(e) · f(e)→ min (9.4)

Z przepływem f można skojarzyć wektor x o |E| współrzędnych xe = f(e), gdziee ∈ E. Jeśli f jest przepływem dopuszczalnym (spełniającym (9.2) to x takżebędziemy nazywać przeplywem dopuszczalnym. Podobnie, koszty jednostkoweprzepływów przez łuki e ∈ E tworzą wektor c o współrzędnych ce, zwany wek-torem kosztów jednostkowych. Oznaczmy przez A macierz incydencji grafu

2To jest oczywiście założenie zupełnie nierealne, taka sytuacja nigdy nie zdarza się wrzeczywistości. Później jednak zobaczymy, że z sytuacją kiedy suma zapasów jest większa odsumy zapotrzebowań (to znaczy gdy −

∑v∈M b(v) ≥

∑v∈O b(v)) bardzo łatwo sobie poradzić.

W przypadku przeciwnym, to znaczy gdy suma zapasów jest mniejsza od sumy zapotrzebowań,sytuacja jest beznadziejna: tego nie da się rozwiązać. Potrzebna rewolucja.

Page 121: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

9.3 Problem transportowy - simpleks sieciowy 121

G i przez b wektor o współrzędnych bv = b(v). Nasz problem możemy terazzapisać w postaci wektorowej

zminimalizuj c · xprzy warunku: Ax = b

(9.5)

Oczywiście i tym razem mamy do czynienia z problemem programowania linio-wego.

Dla tak postawionego zadania pokażemy metodę, znacznie lepiej dopasowanądo tego zagadnienia niż poznany już simpleks, zwaną simpleksem sieciowym.Na metodę simpleksu siecioweg składają się dwa elementy: inicjalizacja i itera-cje.

1. Inicjalizacja. Będziemy musieli znaleźć jakiekolwiek rozwiązanie dopu-szczalne, to znaczy funkcję f : E → R+ spełniającą układ równań (9.2)lub, co na jedno wychodzi, wektor x spełniający równanie Ax = b. Otrzy-mane na etapie inicjalizacji rozwiązanie będziemy w następnym etapiealgorytmu polepszać aż do momentu, kiedy otrzymamy rozwiązanie opty-malne.

2. Iteracje. Będziemy polepszać kolejno otrzymywane rozwiązania dopu-szczalne aż do momentu kiedy rozważane rozwiązanie będzie optymalne.

W dalszym ciągu opisu metody wykażemy, że jeśli aktualnego rozwiązania do-puszczalnego nie da się polepszyć metodą simpleksu sieciowego, to rozwiązanieto jest optymalne oraz pokażemy jak rozwiązać problem, który nie spełnia nie-realistycznego założenia (9.3).

9.3.1 IteracjePrzypuśćmy, że mamy rozwiązanie dopuszczalne f . Co więcej, przypuśćmy, żeto rozwiązanie jest generowane przez pewne drzewo zawierające wszystkie wierz-chołki grafu G (to znaczy, że wszystkie łuki dla których przepływ dopuszczalnyf jest niezerowy tworzą pewne drzewo zawarte w G3).To drzewo nazywać będziemy krótko drzewem dopuszczalnym.Wykażemy, że albo funkcja przepływu dopuszczalnego f jest optymalna, alboistnieje inne rozwiązanie dopuszczalne f ′ takie, że

• k(f ′) ≤ k(f) oraz

• f ′ także jest generowana przez pewne drzewo.

Oznaczmy przez T drzewo dopuszczalne generowane przez rozwiązanie do-puszczalne f .

3W rzeczywistości będzie mogło być tak, że podgraf grafu G generowany przez łuki naktórych dopuszczalna funkcja przepływu f jest niezerowa nie jest drzewem, lecz nie posiadacykli. To już nam wystarczy. łatwo bowiem sprawdzić, że wtedy można zawsze dodać ta-kie łuki na których jest przepływ zerowy, dodanie ich do rozwiązania niewiele zmienia, a wrezultacie otrzymamy drzewo.

Page 122: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

122 Problem transportowy

Krok 1. Uporządkujmy wierzchołki zbioru V wszystkich wierzchołków grafuG w taki sposób, by wierzchołek vi+1 był połączony ze zbiorem {v1, ..., vi}dokładnie jednym łukiem ei.Kluczową rolę w metodzie odgrywają tak zwane uczciwe ceny w wierz-chołkach.Liczby y1, y2, ..., yn ∈ R nazywamy uczciwymi cenami jeśli spełniająukład równań

yi + c(vi, vj) = yj dla (vi, vj) ∈ A(T ) (9.6)

Nazwa uczciwe ceny jest w pełni uzasadniona. Wiadomo bowiem skąd sięte ceny biorą: w wierzchołku vj na cenę uczciwą składają się ceny dojściado tego wierzchołka (przy czym pamiętamy, że używamy wyłącznie łukównaszego drzewa T ).Macierz układu |V | − 1 = n − 1 (rozmiar drzewa) równań (9.6) jest ma-cierzą incydencji drzewa T , a więc jest rzędu n − 1 (na mocy wniosku9.2.1). Skoro zaś zmiennych jest n układ ten jest niesprzeczny i jego zbiórrozwiązań zależy od jednego parametru, oznaczmy go przez d.Co więcej, łatwo zauważyć, że jeśli y1, ..., yn jest rozwiązaniem układu(9.6), wówczas także y1 + d, ..., yn + d jest rozwiązaniem (9.6). Tak więczawsze można znaleźć rozwiązanie (9.6), w którym wszystkie uczciwe cenysą nieujemne (co prawda ceny ujemne nie przeszkadzałyby nam w popraw-nych rachunkach, ale byłoby to mało realistyczne4).

Od tego momentu prezentacji algorytmu będzie towarzyszył przykład.

Przykład 9.3.1 Niech graf G będzie taki, jak na rysunku 9.4. Numerkiprzy wierzchołkach oznaczają ich początkowe etykiety, których będziemyużywać także w przyszłości).

u uuu uu

-����

BBBBBMPPPPq

�����3

?QQ

QQQk

�����) ����� 9

4 5

2

3

1

6

Rysunek 9.4: G

Wierzchołki 1 i 2 są magazynami o zapotrzebowaniach 6 (każdy z nich),4Uczciwość też musi mieć jakieś granice. Na przykład rozsądek.

Page 123: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

9.3 Problem transportowy - simpleks sieciowy 123

odbiorcami są wierzchołki 5 i 6, zapotrzebowanie Te informacje wygodniejzapisć w postaci tabelek.magazyn zapas

1 62 6

odbiorca zapotrzebowanie5 46 8

Równania układu (9.2) przyjmą postaci następujące:

x41 − x13 − x16 = −6−x23 − x24 − x25 − x26 = −6x36 − x13 − x23 = 0x41 + x45 + x46 − x24 = 0x25 + x45 = 4x16 + x26 + x36 + x46 = 8

gdzie, dla wygody, przepływ z i do j oznaczono przez xij (zamiast f(i, j)).Koszty jednostkowe przewozu przez poszczególne łuki obrazuje poniższatabelka.

łuk (1, 3) (1, 6) (2, 3) (2, 4) (2, 5) (2, 6) (3, 6) (4, 1) (4, 5) (4, 6)koszt 4 3 3 1 1 3 5 2 1 1

Na rysunku następnym (9.5) przedstawiono drzewo i rozwiązanie dopu-szczalne f . Liczby wpisane obok łuków są wielkościami przepływów natych łukach natomiast obok wierzchołków są teraz wpisane etykiety wierz-chołków spełniające warunek drugi wniosku 9.2.1. Obok łuków wpisanotakże ich etykiety nadane jak o tym mówi druga część wniosku 9.2.1. Przy-pomnijmy, że magazynami są wierzchołki oznaczone teraz przez v2, v3, obao zapasie 6, natomiast odbiorcami v4 i v5 o zapotrzebowaniach, odpowied-nio 8 i 4.

u uuu uu

�����36e1

?8e3 QQ

QQQk

2e2

�����

4e40

e59

v6 v5

v3

v1

v2

v4

Rysunek 9.5: Pierwsze dopuszczalne drzewo i przepływ: f(v2, v1) =6, f(v3, v1) = 2, f(v1, v4) = 8, f(v3, v5) = 4, f(v3, v6) = 0

Koszt przepływu wynosi

k(f) = 6 · 4 + 2 · 3 + 8 · 5 + 4 · 1 + 0 · 1 = 74

Page 124: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

124 Problem transportowy

Macierz incydencji jest postaci

M1 =

e1 e2 e3 e4 e5

v1 −1 −1 1 0 0v2 1 0 0 0 0v3 0 1 0 1 1v4 0 0 −1 0 0v5 0 0 0 −1 0v6 0 0 0 0 −1

Układ równań definiujący uczciwe ceny jest następujący (z lewej stronyzaznaczono łuki indeksujące kolejne równania).

e1 : y2 + 4 = y1

e2 : y3 + 3 = y1

e3 : y1 + 5 = y4

e4 : y3 + 1 = y5

e5 : y3 + 1 = y6

Rozwiązaniem tego układu (na dodatek takim, w którym wszystkie uczciweceny są nieujemne) jest na przykład

y1 = 4, y2 = 0, y3 = 1, y4 = 9, y5 = 2, y6 = 2

Do przykładu wrócimy, teraz następny krok algorytmu.

Krok 2. Zauważmy teraz, że jeśli w sieci istnieje łuk (vk, vl) ∈ A(G) taki, którynie należy do drzewa dopuszczalnego T oraz

yk + c(vk, vl) < yl (9.7)

wówczas możemy zaopatrzyć wierzchołek vl w przesyłane dobra po niższejcenie5 wykorzystując łuk (vk, vl) (ten łuk nie jest w rozwiązaniu dopusz-czalnym f wykorzystywany, bo nie należy do drzewa dopuszczalnego).łuk (vk, vl) nazywamy łukiem wchodzącym.

Krok 3. Do grafu T dodajemy łuk (vk, vl) (graf otrzymany z grafu T przezdodanie łuku (vk, vl) oznaczamu przez T + (vk, vl)).Na mocy wniosku 9.2.1 w grafie grafu T + (vk, vl) zawarty jest dokładniejeden cykl C.łuk (vk, vl) wyznacza pewną orientację cyklu C (por. rys. 9.6). Wszystkiełuki cyklu C są albo zgodne albo niezgodne z tą orientacją.Modyfikujemy przepływ f

dodając t na łukach zgodnych orazodejmując t na łukach niezgodnych (na pozostałych łukach, tych, które

nie nałeżą do cyklu C przepływ nie ulega zmianie).5Formalnie udowodnimy ten fakt w twierdzeniach 9.3.1 i 9.3.2.

Page 125: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

9.3 Problem transportowy - simpleks sieciowy 125

uuuuu

����3

BBBBBN - �

�����

QQQQs

� 6vi

vj

t

−t−t

+t

+t

Rysunek 9.6: Krok 2: dodajemy t na łukach zgodnych cyklu C i odejmujemyna niezgodnych

Zdefiniujmy nową funkcję ft wzorem

ft =

f(vi, vj) jeśli (vi, vj) nie jest łukiem cyklu C,f(vi, vj) + t jeśli (vi, vj) jest łukiem

zgodnym cyklu C,f(vi, vj)− t jeśli (vi, vj) jest łukiem

niezgodnym cyklu C

(9.8)

Twierdzenie 9.3.1 Jeśli f jest przepływem dopuszczalnym generowanym przezdrzewo T , y1, ..., yn są uczciwymi cenami wyznaczonymi z układu równań (9.6),istnieje łuk (vk, vl) spełniający nierówność (9.7), C jest cyklem grafu G+(vk, vl)oraz

t0 = min{f(vi, vj) : (vi, vj) jest łukiem niezgodnym cyklu C}

wówczas funkcja ft0 jest także przepływem dopuszczalnym. Co więcej, ft0 jesttakże przepływem generowanym przez pewne drzewo T ′.

Twierdzenie 9.3.1 w zasadzie nie wymaga dowodu. Rzeczywiście, przepływnetto przez wierzchołki nie zmienia się wraz ze zmianą funkcji f na ft dokładnietak jak to miało miejsce dla ścieżek powiększających w dowodzie twierdzenia8.3.4, tak więc ft jest przepływem dopuszczalnym, skoro f jest przepływemdopuszczalnym. Co więcej, skoro na pewnym łuku niezgodnym cyklu6 C wartośćprzepływu f jest równa t0 (minimum wartości przepływu na łukach niezgodnychcyklu C jest przyjęta dla pewnego łuku), funkcja przepływu f0 przyjmuje natym łuku wartość zero. Usuwając z grafu T+(vi, vj) ten właśnie łuk7 niszczymyw tym grafie jedyny cykl i otrzymujemy drzewo T ′.

Pozostaje nam teraz udowodnić, że drzewo T ′ otrzymane w wyniku iteracjijest lepsze od poprzedniego drzewa T w tym sensie, że koszt przekływu ft0 ge-nerowanego przez drzewo T ′ jest mniejsze niż koszt przepływu f .

6Wykażemy później, w twierdzeniu 9.3.2, że łuk niezgodny w cyklu C istnieje7Oczywiście może być więcej niż jeden łuk, na którym wartość przepływu f jest równa t0.

Wtedy wybieramy jeden z nich, dowolnie.

Page 126: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

126 Problem transportowy

Udowodnimy nieco więcej mianowicie nie tylko, że gdy istnieje łuk (vk, vl) nie-należący do drzewa T taki, że

yk + c(vk, vl) < yl (9.9)

to istnieje przepływ lepszy (a przynajmniej nie gorszy8) od f od przepływu f ,natomiast jeśli łuk (vk, vl) spełniający (9.17), nie istnieje to rozwiązanie dopu-szczalne f jest optymalne.

Twierdzenie 9.3.2 1. Jeśli nie istnieje łuk (vk, vl) nie należący do drzewaT dla którego spełniona jest nierówność (9.17) wówczas rozwiązanie do-puszczalne f jest optymalne.

2. Jeżeli (vk, vl) jest łukiem nie należącym do drzewa dopuszczalnego T ta-kim, że spełniona jest nierówność (9.17), wtedy dla rozwiązania dopusz-czalnego ft0 spełniona jest nierówność k(ft0) ≤ k(f).

Dow"od. Pamiętamy, że y1, ..., yn są rozwiązaniami układu równań (9.6),które nazwaliśmy uczciwymi cenami w wierzchołkach v1, ..., vn ponumerowanymidla drzewa T tak, jak we wniosku 9.2.1. Przez y oznaczmy wektor o współrzęd-nych y1, ..., y.Niech x będzie rozwiązaniem dopuszczalnym generowanym przez T a więc ta-kim, że

Ax = b

oraz xij = 0 dla wszystkich i, j takich, że (vi, vj) /∈ E(T ) i niech x będziedowolnym rozwiązaniem dopuszczalnym czyli takim wektorem, że

Ax = b

Zdefiniujmy wektorc = c− yA (9.10)

Mamy wtedyc(vi, vj) = c(vi, vj) + yi − yj

ic(vi, vj) = 0 gdy (vi, vj) ∈ E(T )

orazxij = 0 dla i, j takich, że (vi, vj) /∈ E(T )

Stądcx = 0

Z równości (9.10) definiującej c wynika, że c = c + yA i w konsekwencji

cx = cx + yAx

8Problemem, kiedy k(ft0 ) = k(f) zajmiemy się później. A problem jest poważny bo dlasimpleksu sieciowego, podobnie jak dla simpleksu, może w takiej sytuacji wystąpić zjawiskocykliczności.

Page 127: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

9.3 Problem transportowy - simpleks sieciowy 127

a wobec tegocx = cx + yb (9.11)

Równość (9.11) jest spełniona dla każdego rozwiązania dopuszczalnego x, a więctakże dla x = x, czyli

cx = cx + yb = yb

Korzystając z ostatniej równości i z (9.11) otrzymujemy

cx = cx + cx (9.12)

(przypomnijmy: równość (9.12) spełniona jest dla każdego rozwiązania dopusz-czalnego x generowanego przez drzewo T i dla dowolnego rozwiązania dopusz-czalnego x).

1. Jeśli nie istnieje łuk (vk, vl) /∈ E(T ) taki, że yk+c(vk, vl) < yl to oczywiściemamy

c(vk, vl) = c(vk, vl) + yk − yl ≥ 0

dla wszystkich (vk, vl) ∈ E(G). Skoro na dodatek x ≥ 0, mamy cx ≥ 0 iwobec tego (biorąc pod uwagę (9.12))

cx ≥ cx (9.13)

dla dowolnego rozwiązania dopuszczalnego x, co oznacza, że rozwiązaniex jest optymalne. Dowód pierwszej cząści twierdzenia jest zakończony.

2. Przypuśćmy teraz, że dla pewnego łuku vk, vl) mamy

yk + c(vk, vl) < yl

Niech x będzie teraz rozwiązaniem dopuszczalnym wyznaczonym przezfunkcję przepływu ft (zdefiniowaną wzorem (9.8). łuk (vk, vl) jest jedynymdla którego równocześnie zachodzą związki

c(vk, vl) 6= 0 i xvkvl 6= 0

Stąd cx = c(vk, vl)xvkvl = c(vk, vl) · t.Co więcej, c(vk, vl) < 0 a więc dla t ≥ 0 mamy k(ft) = cx ≤ cx. Taostatnia nierówność kończy dowód twierdzenia.

Przykład 9.3.1 c.d. W naszym przykładzie (str. 123) mamy

y3 + c(v3, v4) = 1 + 3 = 4 < 9 = y4

Po dodaniu do drzewa dopuszczalnego łuku (v3, v4) otrzymujemy cykl (trójkąt)przedstawiony na rysunku 9.7.

Page 128: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

128 Problem transportowy

uu

u

?

HHHH

HHY

����

���t

2− t

8− t

v4

v3

v1

Rysunek 9.7: Krok 2: Cykl w T + (v3, v4)

Modyfikujemy funkcję przepływu otrzymując nowe wartości dla łuków znaj-dujących się na cyklu dodając lub odejmując największe t możliwe, to znaczynie dające przepływów ujemnych na łukach niezgodnych (w naszym przypadkut0 = 2).:

f(v3, v4) = 2f(v3, v4) = 0f(v1, v4) = 6

Wartości przepływu na pozostałych łukach pozostawiamy bez zmian.Po powrocie do wyjściowych oznaczeń dla wierzchołków (z rysunku 9.4) otrzy-mujemy przepływ f(1, 3) = 6, f(3, 6) = 6, f(2, 6) = 2, f(2, 4) = 0, f(2, 5) = 4.Koszt nowego przepływu wynosi k = 6 · 4 + 0 · 1 + 4 · 1 + 2 · 3 + 6 · 5 = 70.Teraz tworzymy nowe drzewo dopuszczalne T ′ = T−(v3, v1)+(v3, v4). To nowo-otrzymane drzewo jest teraz na następnym rysunku 9.8, w którym wierzchołkisą oznaczone tak, jak na rysunku 9.4.

u uuu uu

�����3

?�����) ����� 9

4 5

2

3

1

6

Rysunek 9.8: Drugie drzewo dopuszczalne

Etykiety wierzchołków i łuków spełniające warunki wniosku 9.2.1 zaznaczonona rysunku 9.10

Page 129: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

9.3 Problem transportowy - simpleks sieciowy 129

u uuu uu

�����3

e14

?

e2 3�����)

e33�����

e4 1

9e5

1

v6 v5

v4

v1

v2

v3

Rysunek 9.9: Drugie drzewo dopuszczalne z nowymi etykietami wierzchołków iłuków

Układ równań dla uczciwych cen w wierzchołkach przyjmie postać

e1 : y2 + 4 = y1

e2 : y1 + 3 = y3

e3 : y4 + 3 = y3

e4 : y4 + 1 = y5

e5 : y2 + 1 = y6

Jednym z rozwiązań tego układu (o cenach nieujemnych) jest y1 = 4, y2 =0, y3 = 7, y4 = 4, y5 = 5, y6 = 1.Teraz szukamy takich k, l, żeby yk + c(vk, vl) < yl. Można przyjąć k = 6, l = 3io wtedy otrzymamy y6 + c(v6, v3) = 2 < 7 = y3.W grafie T+(v6, v3) (gdzie T jest teraz drzewem z rysunku 9.10 jedynym cyklemjest cykl utworzony przez łuki (v6, v3), (v4, v3) i (v4, v6). Modyfikujemy funkcjęprzepływu otrzymując

f(v6, v3) = f(4, 6) = 2f(v4, v3) = f(2, 6) = 0f(v4, v6) = f(2, 4) = 2f(v2, v1) = f(1, 3) = 6f(v1, v3) = f(3, 6) = 6f(v4, v5) = f(2, 5) = 4

Wartości nowego przepływu na pozostałych łukach pozostają nie zmienione (isą równe zeru). Można sprawdzić, że koszt nowego rozwiązania dopuszczalnegowynosi 62.Nowym drzewem jest powstałe z poprzedniego przez dodanie łuku (1, 6) i usu-nięcie (3, 6).Powtarzamy kolejny raz iterację by w kolejnej otrzymać rozwiązanie o warto-ściach przepływów

f(1, 3) = 0, f(1, 6) = 6, f(4, 6) = 2, f(2, 4) = 2, f(2, 5) = 4

Page 130: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

130 Problem transportowy

i koszcie całkowitym równym 26. Wykorzystujemy teraz twierdzenie 9.3.2 bywykazać, że to rozwiązanie jest już optymalne.

9.3.2 InicjalizacjaZnalezienie jakiegokolwiek rozwiązania dopuszczalnego generowanego przez pewnedrzewo nie jest problemem banalnym. Można go jednak rozwiÄ. . . zać wykorzy-stując samą metodę simpleksu sieciowego.Powiedzmy, że dany jest graf G i w nim określony problem transportowy tak,jak na stronie 120. Chcemy znaleźć rozwiązanie dopuszczalne, na dodatek ge-nerowane przez pewne drzewo. Problem znalezienia takiego rozwiązania (czyliinicjalizacji algorytmu) można rozwiązać następująco.

Wpierw zdefiniujmy nowy graf G′.Wybierzmy w zbiorze wierzchołków grafu G wierzchołek w. Wierzchołek tenbędzie od tego momentu do końca działania algorytmu wierzchołkiem wyróż-nionym (taki wierzchołek w grafie nazywamy korzeniem).Zbiorem wierzchoł-ków grafu G′ jest zbiór V wierzchołków grafu G. Zbiorem łuków G′ jest zbiórwszystkich łuków grafu G oraz zbiór łuków postaci

• (m,w) jeśli m ∈M i (m,w) /∈ E(G),

• (p, w) jeśli p ∈ P i (p, w) /∈ E(G),

• (w, o) jeśli o ∈ O i (w, o) /∈ E(G).

Każdy z łuków postaci (w, x) lub (x,w), który należy do E(G′) a nie należydo E(G), a więc jest nowym łukiem dodanym do grafu na potrzebę inicjalizacjialgorytmu nazywamy łukiem sztucznym (dla odróżnienia łuki grafu G bę-dziemy nazywać łukami oryginalnymi).W tak skonstruowanym grafie będziemy poszukiwali funkcji f : E(G′) 3 ij → Rspełniającej warunki ∑

i:ik∈E(G′)

f(ik)−∑

i:ki∈E(G′)

f(ki) = bk

dla dowolnego k ∈ V . W zapisie wektorowym, chodzić będzie o wyznaczeniewektora x spełniającego ∑

i:ik∈E(G′)

xik −∑

i:ki∈E(G′)

xki = bk

przy czym spełniony jest warunek zgodności∑k

bk = 0

Ceny jednostkowe przepływu przez krawędzie definiujemy wzorem

pij =

{1 gdy ij jest łukiem sztucznym,0 gdy ij jest łukiem grafu G

Page 131: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

9.3 Problem transportowy - simpleks sieciowy 131

Funkcją kosztów jest więc∑ij∈E(G′) pijxij .

W tak zdefiniowanej sieci znajdujemy przepływ o minimalnym koszcie, przypomocy simpleksu sieciowego i przyjmując jako pierwsze drzewo dopuszczalneT drzewo o zbiorze łuków

E(T ) = {xw : x ∈M ∪ P} ∪ {wo : o ∈ O}

przy czym przepływ generowany przez T jest równy

• −bk na każdym łuku postaci kw, gdy k ∈M ,

• 0 na łukach postaci kw, gdy k ∈ P ,

• bk gdy k ∈ O.

Ten nowy problem transportowy nazwiemy pomocniczym (z problemem ory-ginalnym Przypuśćmy, że rozwiązanie optymalne tak sformułowanego problemutransportowego jest generowane przez pewne drzewo T ′. Moż się zdarzyć jedenz trzech przypadków.

1. W T ′ jeden (lub więcej) z łuków jest sztuczny i przepływ przez ten łukjest niezerowy. Wówczas rozwiązanie dopuszczalne problemu ory-ginalnego nie istnieje.Rzeczywiście, gdyby istniało, to miałoby koszt zerowy (w problemie po-mocniczym), tymczasem rozwiązanie generowane przez T ′ ma oczywiściekoszt dodatni, bowiem zawiera łuk sztuczny z przepływem niezerowym).

2. T ′ nie zawiera sztucznych łuków. Wtedy T ′ jest drzewem dopuszczal-nym problemu oryginalnego, a rozwiązanie optymalne problemupomocniczego jest rozwiązaniem dopuszczalnym problemu ory-ginalnego. To rozwiązanie możemy więc przyjąć jako pierwsze w seriiiteracji dla tego problemu.

3. T ′ zawiera sztuczne łuki, ale na każdym z nich jest zerowy przepływ (wrozwiązaniu optymalnym problemu pomocniczego).Ten przypadek jest nieco bardziej skomplikowany i musimy się mu przyj-rzeć nieco dłużej.

9.3.3 Dekompozycja problemu transportowegoZauważmy wpierw, że dla dowolnego rozwiązania x = (xij) i podzbioru S ⊂V (G) zachodzi następująca tożsamość∑

i/∈S,j∈S

xij −∑

i∈S,j /∈S

xij =∑k∈S

bk (9.14)

Formalny dowód tożsamości (9.14) jest prosty: po jej lewej i prawej stroniesą te równania które w postaci macierzowej Ax = b odnoszą się do wierzchołkówzbioru S. Interpretacją ekonomiczną tożsamości (??) jet następująca:

Page 132: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

132 Problem transportowy

import − eksport dóbr = zapotrzebowanie zbioru S

Oznaczmy przez R dopełnienie zbioru S do V (G), czyli R = V (G)−S. Jeślizbiory R i S są niepuste i w grafie G spełnione są dwa warunki:

(W1) Nie ma łuków ze zbioru R do zbioru S oraz

(W2)∑k∈S bk = 0

to zbiór S niczego nie importuje, swoje potrzeby zaspokaja własnymi zapasami.W związku zaś z warunkiem (W2) zbiór S niczego nie może eksportować.W takiej sytuacji mówimy, że problem ma podział lub dekompozycję.Oczywiście jeśli istnieje dekompozycja problemu transportowego wówczas ozna-cza to, że problem rozpada się na dwa mniejsze problemy, które można rozwią-zywać niezależnie.

Lemat 9.3.3 W przypadku 3, a więc gdy w optymalnym rozwiązaniu problemupomocniczego optymalne drzewo T ′ zawiera sztuczne łuki, lecz dla każdego ta-kiego łuku przepływ jest zerowy, istnieje dekompozycja problemu oryginalnego.

Dow"od. Niech y1, ..., yn będą uczciwymi cenami w wierzchołkach wyznaczo-nymi dla optymalnego drzewa T ′ problemu pomocniczego zaś x∗ rozwiązaniemoptymalnym tego problemu.Niech uv będzie dowolnie wybranym łukiem sztucznym tego drzewa (wtedy,zgodnie z założeniem lematu, x∗uv = 0). Zdefiniujmy teraz następujące dwazbiory wierzchołków.

• R = {k : yk ≤ yu}

• S = {k : yk > yu}

Zbiory R i S dają pewien podział zbioru V (G), bowiem

• R ∩ S = ∅

• Mamy także u ∈ R oraz yv = yu + puv = yu + 1, a więc v ∈ S skąd wynikaże i zbiór S jest niepusty.

• Prawdą jest także, że R ∪ S = V (G).

Pozostaje więc do wykazania, że∑k∈S bk = 0.

Dla łuków oryginalnych ij nie możemy mieć i ∈ R, j ∈ S bo wtedy mielibyśmy

yi + pij = yj > yu ≥ yi

czyli yi > yi, a więc sprzeczność. Nie ma więc oryginalnych łuków skierowanychze zbioru R do zbioru S (czyli o początku w R i końcu w S).Pamiętamy (na mocy (9.14)), że∑

i∈R,j∈Sx∗ij −

∑i∈S,j∈R

x∗ij =∑k∈S

bk (9.15)

Page 133: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

9.3 Problem transportowy - simpleks sieciowy 133

Jeśli teraz wiemy, na mocy założenia, że dla rozwiązania x∗ problemu pomoc-niczego x∗ij = 0 dla wszystkich łuków sztucznych, zaś łuków oryginalnych ij zi ∈ R, j ∈ S w ogóle nie ma, z równości (9.15) wynika, że

−∑

i∈S,j∈Rx∗ij =

∑k∈S

bk (9.16)

żaden z łuków oryginalnych ij takich, że i ∈ S, j ∈ R nie należy do drzewaT ′ (w przeciwnym przypadku mielibyśmy yj = yi + pij=yi (pij = 0 dla łukóworyginalnych) podczas gdy yi > yu ≥ yj , skoro i ∈ S, j ∈ R). Stą zaś i z (refjuzblisko) wynika, że ∑

k∈S

bk = 0

a więc spełnione są warunki dekompozycji (W1) i (W2), co było do okazania.

9.3.4 Modyfikacja uczciwych cen w wierzchołkach.

Przypomnijmy, że dla danego drzewa T o zbiorze wierzchołków V , |V | = n,uczciwymi cenami w wierzchołkach są liczby yi, ..., yn spełniające układ równań

yi + cij = yj dla ij ∈ E(T ) (9.17)

Układ równań (9.17) jest rzędu n− 1 i dowolne jego dwa rozwiązania różnią sięo stałą. Przekonamy się, że przechodząc w procesie iteracji simpleksu siecio-wego od drzewa dopuszczalnego T do drzewa T + e − f nowe uczciwe ceny wwierzchołkach (ceny uczciwe dla drzewa T + e − f) można łatwo obliczyć bezrozwiązywania układu równań typu (9.17) dla nowego drzewa.

Dla łuku wchodzącego e = uv i wychodzącego f oznaczmy przez Tu skła-dową lasu T − f zawierającą wierzchołek u zaś przez Tv składową zawierającąwierzchołek v.

Twierdzenie 9.3.4 Liczby y1, ..., yn postaci

yk =

{yk gdy k ∈ Tuyk + ce gdy k ∈ Tv

(9.18)

gdzie ce = ce+yu−yv spełniają równanie (9.17) dla drzewa T +e−f (to znaczyspełniają układ równań yi + cij = yj dla ij ∈ E(T + e− f)).

Dow"od. Dla dowolnego ij ∈ E(Tu) ∪ E(Tv) bardzo łatwo sprawdzić, żeyi+ cij = yj , stąd jedyne co pozostaje, to sprawdzenie równości odpowiadającejłukowi e = uv. Wtedy

yu + cuv = yu + cuv = yu + (cuv − yu + yv) = yv + cuv = yv

.

Page 134: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

134 Problem transportowy

9.3.5 Procedura unikania zapętleniaJak już zostało zasygnalizowane wcześniej, w pewnych sytuacjach simpleks sie-ciowy może się zapętlić. Może tak się zdarzyć, gdy dla kolejnych drzew do-puszczalnych otrzymanych w procesie iteracji Ti, Ti+1, ..., Ti+l wartości funkcjicelu są równe. Wtedy mogłoby się zdarzyć, że Ti = Ti+l, czyli mamy zapętle-nie algorytmu. W niniejszym podrozdziale pokażemy procedurę Cunninghamapozwalającą zapętlenia uniknąć9.

Dla danego drzewa T , łuku uv ∈ E(T ) i korzenia w ∈ V (T ) mówimy, że

• łuk uv jest skierowany do korzenia w jeśli w ∈ V (Tv),

• uv jest skierowany od korzenia w jeśli w ∈ V (Tu).

Korzeń w to dowolnie ustalony na cały proces optymalizacji wierzchołekgrafu G, ten sam, który wybraliśmy już podczas inicjalizacji algorytmu.

Krok iteracji polegający na przejściu od drzewa dopuszczalnego Ti do drzewadopuszczalnego Ti+1 nazywamy zdegenerowanym jeżeli wartość funkcji celudla obu tych drzew jest taka sama.

Twierdzenie 9.3.5 Jeśli dla każdego zdegenerowanego kroku iteracji simpleksusieciowego prowadzącego od drzewa T do drzewa T + e− f łuk wchodzący e jestskierowany od korzenia w drzewa T + e − f , to algorytm simpleksu sieciowegonie zapętla się.

Dow"od. Dla danego dopuszczalnego drzewa T zdefiniujmy dwie funkcje.

g(T ) = c · x

gdzie x jest rozwiązaniem zdeterminowanym przez drzewo T 10, oraz

h(T ) =

n∑k=1

(yk − yw)

Ze względu na wspomniane wyżej własności uczciwych cen w wierzchołkachwiemy, że nie są one wyznaczone jednoznacznie, jednak każde dwa rozwiązaniaróżnią się o stałą. Stąd wartość funkcji h dla drzewa T jest już wyznaczonajednoznacznie.

Niech T1, T2, ... będzie ciągiem kolejnych drzew dopuszczalnych otrzymanychw wyniku iteracji i przypuśćmy, że g(Ti) = g(Ti+1), czyli przejście od drzewa Tido Ti+1 jest zdegenerowane. Powiedzmy, że Ti+1 = Ti + e− f . Z założenia łuke jest skierowany od korzenia w w drzewie Ti+1, to znaczy w ∈ (Ti+1)u. Mamywtedy

n∑k=1

(yl − yw) =

n∑k=1

(yk − yw) + ce · |(Ti+1)v|

9Jak niemal we wszystkich zgadnieniach przedstawionych tutaj, opiera/lem się na książceChvátala [4]. W przypadku unikania zapętlenia wykorzystałem także pracę magisterską Elż-biety Pelczar [18]

10Funkcja g to oczywiście koszt rozwiązania dopuszczalnego generowanego przez drzewo T .

Page 135: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

9.3 Problem transportowy - simpleks sieciowy 135

gdzie ce = ce + yu − yv. Ponieważ ce < 0 jako, że e jest łukiem wchodzącym,prawdziwa jest nierówność

h(Ti) > h(Ti+1)

Stąd już wynika twierdzenie. Jeśli bowiem ciąg kroków o drzewach Ti, Ti+1, ...jest zdegenerowany, to znaczy g(Ti) = g(Ti+1) dla pewnego i, to wówczash(Ti) > h(Ti+1) a stąd już wynika, że żadne dwa drzewa w ciągu T1, T2, ...nie powtarzają się11.

Pozostaje nam teraz wykazanie, że dla dowolnego przejścia zdegenerowanegoalgorytmu istnieje łuk uv skierowany od korzenia.

Definicja 9.3.1 Drzewo T nazywamy silnie dopuszczalnym jeśli każdy łukuv ∈ E(T ), dla którego xuv = 0 jest skierowany od korzenia (czyli w ∈ V (Tu)).

Zauważmy, że jeżeli wszystkie drzewa T1, T2, ... otrzymane w kolejnych ite-racjach są silnie dopuszczalne, to spełnione są założenia twierdzenia 9.3.5 i wkonsekwencji algorytm simpleksu sieciowego nie zapętla się.

Drzewo początkowe T = T1 utworzone podczas inicjalizacji algorytmu jestdrzewem silnie dopuszczalnym bowiem wszystkie łuki postaci tego drzewa to:

• łuki postaci mw gdzie m ∈M . Dla tych łuków xmw = −bm 6= 0.

• Pozostałe łuki, które są postaci wx, gdzie x ∈ P ∪O, a więc skierowaneod korzenia w. To wśród tych łuków będą łuki wchodzące o przepływiezero.

Wystarczy więc udowodnić, że da się wybierać łuki wchodzące i wychodzące tak,by z drzewa silnie dopuszczalnego otrzymywać inne silne dopuszczalne drzewolub dekompozycję problemu na mniejsze, dla których da się przeprowadzić po-dobną manipulację.

Definicja 9.3.2 łuk uv ∈ E(T ) nazywamy złym jeśli

• jest skierowany do korzenia oraz

• xuv = 0.

Inaczej mówiąc, zły łuk to taki, którego istnienie powoduje, że drzewo T nie jestsilnie dopuszczalne.

Przypuśćmy, że uv jest złym łukiem drzewa T . Oznaczmy przez R = V (Tv)i przez S = V (Tu). Oczywiście nie ma łuków w drzewie T , o jednym końcu wR a drugim w S. Z wykorzystywanej już wcześniej tożsamości∑

i∈R,j∈Sxij −

∑i∈S,j∈R

xij =∑k∈S

bk

11Warto sobie zdać sprawę dlaczego rzeczywiście tak jest. Jeśli w ciągu (Ti) nie ma przejśćzdegenerowanych sprawa jest oczywista. Jeśli dla pewnych i, l mamy g(Ti) = g(Ti+1) = ... =g(Ti+l) wówczas h(Ti) > h(Ti+1) > ... > h(Ti+l), drzewa Tj , dla 1 ≤ j ≤ i + l są międzysobą różne. Ważne jednak jest i to, że funkcja g jest słabo malejąca, dzięki czemu Tp 6= Tqdla dowolnych p 6= q.

Page 136: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

136 Problem transportowy

wynika więc, że ∑k∈S

bk = 0

(bowiem na wszystkich łukach ij takich, że i ∈ R, j ∈ S lub i ∈ S, j ∈ R mamyxij = 0). Jeśli więc nie istnieje w grafie G żaden łuk ij: i ∈ R, j ∈ S to spełnionesą warunki (W1) i (W2) i problem dekomponuje się na dwa mniejsze.

Jeśli zaś istnieje łuk ij : i ∈ R, j ∈ S to drzewo T możemy zastąpić drzewemT + ij−uv, które ma mniej złych łuków niż drzewo T (rzeczywiście, T + ij−uvpowstaje przez zastąpienia złego łuku uv łukiem ij, który jest skierowany odw, a więc nie jest łukiem złym).

Aby mieć pewność, że w każdym przejściu otrzymujemy z drzewa silnie do-puszczalnego inne drzewo silnie dopuszczalne (dzięki czemu algorytm nie będziesię zapętlał) przyjmiemy specjalną zasadę wyboru łuków wychodzących, nato-miast zachowamy dowolność wyboru łuków wchodzących.

Definicja 9.3.3 Niech T będzie drzewem, podgrafem grafu G, e = uv ∈ V (G)−V (T ). Pierwszy wierzchołek, w którym spotykają się ścieżki

• z u do korzeniaze ścieżką

• z v do korzenia

nazywamy spinaczem.

u uu v

uxuu

C u

u w

-

Rysunek 9.10: Cykl C ze spinaczem x

Page 137: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

9.4 Zapotrzebowanie mniejsze od zasobów 137

Niech C będzie jedynym cyklem w grafie T + uv uv = e.Zasada Cunninghama

• Jako łuk wychodzący przyjmij pierwszego kandydata napotkanego na cy-klu C podczas przechodzenia po cyklu zgodnie z orientacją wyznaczonąprzez łuk e, począwszy od spinacza.

Zauważmy, że wszystkie łuki - kandydaci na łuki wychodzące na cyklu Cdalej będą mieć orientację od korzenia. Prawdziwe jest więc twierdzenie nastę-pujące.

Twierdzenie 9.3.6 Jeśli wybór łuku wychodzącego jest dokonywany według za-sady Cunninghama, wówczas simpleks sieciowy nie zapętla się.

9.4 Zapotrzebowanie mniejsze od zasobówNierealistycznego w praktyce założenia, że∑

v∈Mb(v) =

∑v∈O

b(v)

czyli, że suma zapasów magazynów jest dokładnie równa zapotrzebowań odbior-ców można się pozbyć bardzo łatwo. Oczywiście, tak jak wspomniane zostałowcześniej, zakładać będziemy spełnienie warunku∑

v∈Mb(v) ≥

∑v∈O

b(v)

Dodajmy do naszej sieci, dla której zakładamy spełnienie warunków

∑v:(v,x)∈E

f(v, x)−∑

x:(x,v)∈E

f(x, v) =

−b(x) jeśli x ∈M0 jeśli x ∈ Pb(x) jeśli x ∈ O

dodatkowy wierzchołek, powiedzmy w, oraz wszystkie łuki postaci (m,w), gdziem ∈ M . Koszty tych wszystkich nowych łuków będą równe zeru. Inaczej mó-wiąc, do sieci dodajemy dodatkowego, fikcyjnego odbiorcę i fikcyjne łuki łączącego z magazynami, który będzie miał zapotrzebowanie równe sumie wszystkichnadwyżek, czyli

b(w) =∑v∈M

b(v)−∑v∈O

b(v)

Optymalne rozwiązanie w tak otrzymanej sieci jest równe optymalnemu rozwią-zaniu w sieci wyjściowej (wystarczy pominąć przepływy na fikcyjnych łukach).

Page 138: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

138 Problem transportowy

Page 139: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Bibliografia

[1] Aleksiewicz A., Analiza funkcjonalna, PWN, Warszawa 1969.

[2] Bland R.G., New finite pivoting rule for the simplex method, Mathema-tics of Operations Research 2 (1977) 103-107.

[3] Charon I., Germa A. i Hudry O., Méthodes d’optimisation combina-toire, Masson, Paris 1996.

[4] Chvátal V., Linear Programming, W.H. Freeman and Comp., N. Y. 1984.

[5] Dantzig G.B, Upper bounds, secondary constrains and block triangularityin linear programming, Econometrica 23, str. 174-183, 1955.

[6] Dantzig G.B. i Fulkerson D.R., On the max-flow min-cut theoremof networks, w: Linear Inequalities and Related Systems, Princeton, NewJersey 1956 (215-221).

[7] Elias P., Feinstein A. i Shannon C.A., A note on the maximum flowthrough a network, IRE Transactions on Information Theory IT 2 (1956)117-119.

[8] Ford Jr. L.R. i Fulkerson D.R., Maximal flow through network, Ca-nadian Journal of Mathematics 8 (1956) 399-404.

[9] Ford Jr. L.R. i Fulkerson D.R., Przepływy w sieciach, PWN, War-szawa 1969.

[10] Gass S.I., Programowanie liniowe, PWN, Warszawa 1973.

[11] Grabowski W., Programowanie matematyczne, PWE, Warszawa 1980.

[12] Hall P., On representatives sets, J. London Math. Soc. 10 (1935) 26-30.

[13] Harrison, Jr. J.O. Programming and Operations Research, w: Researchfor Menagement, wyd. J.F. McCloskey i F.N. Trefethen, vol. 1, str. 217 –337, Baltimore, Md., 1954.

[14] Karloff H., Linear Programming, Birghäuser, Boston 1991.

139

Page 140: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

140 BIBLIOGRAFIA

[15] König D., Theorie der Endlichen und Unendlichen Graphen, New York1950.

[16] Ligęza E., Wodociągi dawnego Krakowa - do połowy XVII wieku, To-warzystwo Miłośników Historii i Zabytków Krakowa, red. J. Mitkowski,Kraków 1971.

[17] Nykowski I., Programowanie liniowe, PWE, Warszawa 1984.

[18] Pelczar E., Metoda simpleksu sieciowego, praca magisterska, WydziałMatematyki Stosowanej AGH, Kraków, 2013.

[19] Simmonard M., Programowanie liniowe, PWN, Warszawa 1969.

[20] Schrijvers A., Theory of linear and integer programming, Wiley 1998.

[21] Sysło M.M., Deo N. i J.S. Kowalik, Algorytmy optymalizacji dyskret-nej, PWN, Warszawa 1999.

[22] Wagner H.M., Badania operacyjne, PWE, Warszawa 1980.

[23] Zawistowska Z., żywienie dietetyczne, PZWL, Warszawa 1973.

Page 141: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

Indeks

G− S, 110NG(x), 105κ(G), 110źródło, 94ścieźki wewnetrznie rozłaczne, 111ścieżka powiekszajaca, 102ścieżka w grafie, 110łuk, 92łuk nasycony, 99łuk skierowany do korzenia, 134łuk skierowany od korzenia, 134łuk wyschniety, 99

Bland R.G., 26

cena dualna, 45cykl, 115

dekompozycja, 131dekompozycja problemu transportowego,

132dlugosc cyklu, 115dlugosc drogi, 115drzewo, 115drzewo dopuszczalne, 121drzewo silnie dopuszczalne, 135dwudzielny graf, 105

funkcja celu, 8

graf, 92l−spójny, 111dwudzielny, 105spójny, 110zwykły, 105

graf zorientowany, 92

Hall P., 105

incydentny, 92inicjalizacja simpleksu sieciowego, 130

Klee V., 31końce łuku, 92koniec krawedzi, 105koniec łuku, 92korzeń, 130krawedź, 105krawedzie niezależne, 105

liczba spójności grafu, 110luk oryginalny, 130luk sztuczny, 130

macierz incydencji grafu nieskierowa-nego, 117

macierz totalnie unimodularna, 60magazyn, 120Minty G.J., 31modyfikacja cen, 133

niezależne krawedzie, 105

obwiednia wypukła, 35odbiorca, 120odpływ, 94ograniczenia, 8

poczatek łuku, 92podział zbioru, 105podział, 105postać standardowa PPL, 9PPL, 8problem diety, 11problem dualny, 37problem nieograniczony, 10problem pomocniczy, 131

141

Page 142: Wykłady z programowania liniowegowms.mat.agh.edu.pl/~wojda/Pl3.pdf · Wykłady z programowania liniowego ... programowania liniowego w przypadkach dwu- i trzy-wymiarowym, ... j=1

142 INDEKS

problem programowania liniowego, 8problem prymalny, 37problem przydziału, 58problem sprzeczny, 10programowanie liniowe, 6programowanie matematyczne, 5przekrój rozdzielajacy, 97przeplyw dopuszczalny, 120przepustowość przekroju, 97przepustowość, 94przepływ, 95przepływ zerowy, 101przykład Klee-Minty’ego, 31

reguła Blanda, 26reguła najmniejszego indeksu, 26rezydualna przepustowość, 103rozmiar grafu, 92, 117rozwiazanie bazowe, 16rozwiazanie bazowe zdegenerowane, 25rozwiazanie dopuszczalne PPL, 10rozwiazanie optymalne PPL, 10rzad grafu, 117

separator grafu, 111separator minimalny, 111sieć, 94simpleks sieciowy, 121skladowa, 115skojarzenie, 105skojarzenie pełne, 105spójnośćgrafu, 110spinacz, 136sympleks, 35sympleks sieciowy, 115szkielet grafu skierowanego, 118słaba zasada dualności, 38słownik, 16słownik dopuszczalny, 16słownik zdegenerowany, 25

tabele sympleksowe, 19trasa, 115twierdzenie Blanda, 27twierdzenie Halla, 105twierdzenie o odstepach, 42

uczciwe ceny, 122uczciwe ceny w wierzchołkach, 133

wartość przepływu, 95wektor kosztow, 120wierzcholki posrednie, 120wierzchołek, 105wierzchołek grafu, 92wierzchołki połaczone, 92, 105wierzchołki sasiednie, 105

zapetlanie, 26zapetlenie simpleksu sieciowego, 134zapotrzebowania, 120zbiór róźnych reprezentantow, 108zdegenerowany krok iteracji, 134zmienna wchodzaca, 17zmienna wychodzaca, 17zmienne bazowe, 16zmienne decyzyjne, 8zmienne dodatkowe, 13zmienne niebazowe, 16zły łuk drzewa, 135