Terminologia i notacja
Rozważmy PL o n zmiennych x1,…,xn. Wartości zmiennych możemy utożsamiać z wektorem x=(x1,…,xn)∈Rn. Zauważmy też, że liniową funkcję celu ∑nj=1cjxj możemy zapisać krócej jako cTx dla wektora c=(c1,…,cn). Będziemy utożsamiać tę funkcję z wektorem c.
- x∈Rn jest rozwiązaniem dopuszczalnym PL gdy x spełnia wszystkie ograniczenia.
- x∈Rn jest rozwiązaniem optymalnym PL gdy x jest rozwiązaniem dopuszczalnym i optymalizuje funkcję celu, tzn. jeśli dla dowolnego dopuszczalnego y∈Rn jest cTx≤cTy w przypadku gdy PL jest minimalizacyjny (cTx≥cTy gdy maksymalizacyjny).
- PL jest dopuszczalny gdy istnieje rozwiązanie dopuszczalne, w przeciwnym przypadku jest sprzeczny.
- PL jest nieograniczony gdy jest dopuszczalny ale nie ma rozwiązań optymalnych, tzn. dla PL minimalizacyjnego dla dowolnego λ∈R istnieje rozwiązanie dopuszczalne x takie, że cTx<λ.
Będziemy posługiwać się trzema wygodnymi postaciami programów liniowych: kanoniczną, standardową i dopełnieniową.
Postać kanoniczna
Postać kanoniczna jest najbardziej ogólna z trzech rozważanych tu postaci. Program w postaci kanonicznej wygląda następująco:
zmaksymalizuj∑nj=1cjxjz zachowaniem warunków∑nj=1aijxj≤bi∀i=1,…,m
gdzie {aij,bi,cj} są dane. Wygodniej będzie nam używać zapisu macierzowego:
zmaksymalizujcTxz zachowaniem warunkówAx≤b
gdzie c∈Rn,b∈Rm,A∈Mm×n[R].
Lemat 1
Każdy PL można sprowadzić do postaci kanonicznej.
Dowód
Zadanie min cTx zamieniamy na max (−c)Tx. Równości aTix=bi zamieniamy na parę aTix≤bi, aTix≥bi. Nierówności aTix≥bi zamieniamy na (−ai)Tx≤−bi. ♦
Postać standardowa
Programy liniowe modelujące problemy algorytmiczne bardzo często są w następującej postaci (jest to szczególny przypadek postaci kanonicznej):
zmaksymalizujcTxz zachowaniem warunkówAx≤bx≥0
Lemat 2
Każdy PL można sprowadzić do postaci standardowej.
Dowód
Możemy założyć, że mamy już PL w postaci kanonicznej. Aby zapewnić nieujemność każdej zmiennej, dla każdej zmiennej xi wprowadzamy parę zmiennych x+i i x−i i każde wystąpienie xi w PL (także w funkcji celu) zastępujemy przez x+i−x−i. Dodajemy też x+i≥0 i x−i≥0. ♦
Czasem nie chcemy sztucznie zamieniać problemu minimalizacji na maksymalizację przez odwrócenie funkcji celu. Postać standardowa w wersji minimalizacyjnej wygląda następująco:
zminimalizujcTxz zachowaniem warunkówAx≥bx≥0
Postać dopełnieniowa
Postać dopełnieniowa jest najczęściej używana w algorytmach rozwiązujących problem programowania liniowego. Program w tej postaci (w wersji minimalizacyjnej) wygląda następująco:
zminimalizujcTxz zachowaniem warunkówAx=b∀i=1,…,mx≥0
gdzie c∈Rn,b∈Rm,A∈Mm×n[R].
Zauważmy, że z dokładnością do zamiany równości na pary nierówności możemy powiedzieć, że PL w postaci dopełnieniowej jest w postaci standardowej.
Lemat 3
Każdy PL można sprowadzić do postaci dopełnieniowej.
Dowód
Możemy założyć, że mamy już PL w postaci standardowej. Dla każdej nierówności aTix≤bi wprowadzamy ,,zmienną dopełnieniową'' si i nierówność zastępujemy przez aTix−si=bi oraz si≥0. ♦
Geometria programów liniowych
Przypomnijmy:
- zbiór punktów spełniających aTx=b, a∈Rn,b∈R to hiperpłaszczyzna,
- zbiór punktów spełniających aTx≥b to półprzestrzeń,
- zbiór rozwiązań dopuszczalnych PL w postaci kanonicznej Ax≤b to przecięcie półprzestrzeni, czyli wielościan.
Dla przykładu, zbiór rozwiązań dopuszczalnych PL z Przykładu 1 jest czworokątem (w 2 wymiarach hiperpłaszczyzny to proste, półprzestrzenie to półpłaszczyzny, a wielościany to wielokąty). Zauważmy, że rozwiązanie optymalne to najdalszy punkt wielościanu w kierunku wektora funkcji celu (dla problemu maksymalizacyjnego; dla minimalizacyjnego w kierunku wektora odwrotnego).
Zauważmy, że zbiór rozwiązań PL jest przecięciem zbiorów wypukłych (półprzestrzeni, hiperpłaszczyzn) a więc jest wypukły.
Struktura rozwiązań optymalnych
Zdefiniujemy teraz trzy naturalne pojęcia związane z programami liniowymi i ich geometryczną interpretacją. Za chwilę pokażemy, że są one równoważne.
- Wierzchołkiem wielościanu P nazywamy dowolny punkt x∈P, który jest jedynym rozwiązaniem optymalnym dla pewnej funkcji celu c.
- Punktem ekstremalnym wielościanu P nazywamy dowolny punkt x∈P, który nie jest wypukłą kombinacją dwóch innych punktów y,z∈P. (Przypomnijmy, że wypukła kombinacja y i z to dowolny punkt postaci λy+(1−λ)z dla pewnego λ∈[0,1].)
- Bazowe rozwiązanie dopuszczalne (brd) PL o n zmiennych to rozwiązanie dopuszczalne x∈Rn takie, że istnieje n liniowo niezależnych ograniczeń (w sensie wektorów współczynników przy xi, tzn. x1+2x2≥1 i x1+2x2≤2 są liniowo zależne), które dla x są spełnione z równością. Na przykład (0,0) i (23,83) są brd programu z Przykładu 1.
W poniższych lematach rozważamy dowolny program liniowy oznaczamy przez P wielościan jego rozwiązań dopuszczalnych. Zakładamy, że jest on dany w postaci max, \mathbf{A}\mathbf{x}\le \mathbf{b} (sprowadzenie dowolnego programu do takiej postaci nie zmienia wielościanu rozwiązań dopuszczalnych).
Lemat 4
Jeśli \mathbf{x} jest wierzchołkiem \mathcal{P} to \mathbf{x} jest punktem ekstremalnym.
Dowód
Niech \mathbf{c} będzie funkcją celu taką, że \mathbf{x} jest jedynym rozwiązaniem optymalnym LP dla funkcji celu \mathbf{c}.
Załóżmy, że \mathbf{x} = \lambda \mathbf{y} + (1-\lambda)\mathbf{z} dla pewnych \mathbf{y},\mathbf{z}\in\mathcal{P} oraz \lambda\in[0,1]. Ponieważ \mathbf{x} jest jedyny optymalny więc \mathbf{c}^T\mathbf{y},\mathbf{c}^T\mathbf{z} < \mathbf{c}^T\mathbf{x}.
Ale wówczas, z liniowości \mathbf{c}
\mathbf{c}^T\mathbf{x}=\lambda\mathbf{c}^T\mathbf{y} + (1-\lambda)\mathbf{c}^T\mathbf{z} < \lambda\mathbf{c}^T\mathbf{x} + (1-\lambda)\mathbf{c}^T\mathbf{x} = \mathbf{c}^T\mathbf{x}.
♦
Lemat 5
Jeśli \mathbf{x} jest punktem ekstremalnym \mathcal{P} to \mathbf{x} jest bazowym rozwiązaniem dopuszczalnym.
Dowód
Z definicji punktu ekstremalnego \mathbf{x} jest dopuszczalny. Załóżmy, że nie jest brd, tzn. że nie istnieje n liniowo niezależnych ograniczeń spełnionych z równością dla \mathbf{x}. Intuicyjnie, oznacza to, że wokół \mathbf{x} jest nieco ,,luzu'', tzn. jest pewien wektor \mathbf{d} (liniowo niezależny od wektorów ograniczeń spełnionych z równością), wzdłuż którego możemy się przemieszczać z \mathbf{x} w przód i w tył pozostając w \mathcal{P}. Istotnie, pokażemy, że \mathbf{x} jest kombinacją wypukłą dwóch punktów w \mathcal{P}.
Niech T=\{i\ |\ \mathbf{a}_i^T\mathbf{x}=b_i\}. Wiemy, że \{\mathbf{a}_i\ |\ i\in T\} nie rozpina \mathbb{R}^n, tzn. \mathrm{rank}[a_i, i\in T]0, x\pm \epsilon \mathbf{d}\in \mathcal{P}, czyli będzie sprzeczność (bo \mathbf{x} jest ekstremalny). Istotnie, jeśli i\in T to dla dowolnego \epsilon, \mathbf{a}_i^T(\mathbf{x}\pm \epsilon \mathbf{d})=b_i. Dla i\not \in T mamy \mathbf{a}_i^T\mathbf{x}>b_i, a więc na pewno można wybrać dostatecznie małe \epsilon, żeby \mathbf{a}_i^T(\mathbf{x}\pm\epsilon\mathbf{d})\ge b_i dla każdego i\not \in T. ♦
Lemat 6
Jeśli \mathbf{x} jest bazowym rozwiązaniem dopuszczalnym PL to \mathbf{x} jest wierzchołkiem \mathcal{P}.
Dowód
Niech T=\{i\ |\ \mathbf{a}_i^T\mathbf{x}=b_i\}. Podamy funkcję celu \mathbf{c}, przy której \mathbf{x} jest jedynym rozwiązaniem optymalnym: \mathbf{c}=\sum_{i\in T}\mathbf{a}_i. Dla dowolnego \mathbf{y}\in\mathcal{P} mamy
\mathbf{c}^T\mathbf{y}=\sum_{i\in T}\mathbf{a}_i^T\mathbf{y} \le \sum_{i\in T}b_i = \mathbf{c}^T\mathbf{x},
(czyli \mathbf{x} jest rozwiązaniem optymalnym) przy czym równość zachodzi tylko gdy dla każdego i\in T, \mathbf{a}_i^T\mathbf{y}=b_i, a to jest układ którego jedynym rozwiązaniem jest x (bo \mathrm{rank}[\mathbf{a}_i\ |\ i\in T] = n). ♦
Wniosek 7
Dla dowolnego programu liniowego są równoważne:
- \mathbf{x} jest wierzchołkiem,
- \mathbf{x} jest punktem ekstremalnym,
- \mathbf{x} jest bazowym rozwiązaniem dopuszczalnym.
Twierdzenie 8
Każdy ograniczony PL w postaci standardowej \max \mathbf{c}^T\mathbf{x}, \mathbf{A}\mathbf{x}\le\mathbf{b}, \mathbf{x}\ge\mathbf{0} ma rozwiązanie optymalne, które jest punktem ekstremalnym.
Dowód
Niech \mathbf{x} będzie rozwiązaniem optymalnym PL. Jeśli \mathbf{x} jest ekstremalny -- koniec. W przeciwnym przypadku pokażemy jak przejść od \mathbf{x} do punktu ekstremalnego o tej samej wartości funkcji celu (używając analogii trójwymiarowej, przesuniemy się z \mathbf{x} wewnątrz wielościanu do ściany wielościanu, następnie ze środka ściany do krawędzi, a z krawędzi do wierzchołka).
Oznaczmy przez \mathcal{P} wielościan rozwiązań dopuszczalnych. Skoro \mathbf{x} nie jest punktem ekstremalnym, to istnieje \mathbf{y}\ne \mathbf{0} taki że \mathbf{x}+\mathbf{y},\mathbf{x}-\mathbf{y}\in\mathcal{P}.
Po pierwsze zauważmy, że przesuwając się wzdłuż wektora \mathbf{y} nie zmieniamy wartości funkcji celu. Istotnie, gdyby \mathbf{c}^T \mathbf{y} > \mathbf{0} to \mathbf{c}^T (\mathbf{x}+\mathbf{y}) > \mathbf{c}^T \mathbf{x}, natomiast gdyby \mathbf{c}^T \mathbf{y} < \mathbf{0} to \mathbf{c}^T (\mathbf{x}-\mathbf{y}) > \mathbf{c}^T \mathbf{x}, czyli w obu przypadkach dostajemy sprzeczność z założeniem że \mathbf{x} jest ekstremalny (a więc jest wierzchołkiem). Skoro \mathbf{c}^T\mathbf{y} = \mathbf{0} to dla dowolnego \alpha, \mathbf{c}^T(\mathbf{x}+\alpha\mathbf{y})=\mathbf{c}^T\mathbf{x}.
Rozważmy teraz dowolne ograniczenie spełnione z równością, czyli (\mathbf{a}_i)^T\mathbf{x} = \mathbf{b}_i. Teraz zauważmy, że skoro (\mathbf{a}_i)^T (\mathbf{x}+\mathbf{y}) \le \mathbf{b} to (\mathbf{a}_i)^T \mathbf{y} \le 0. Podobnie skoro (\mathbf{a}_i)^T (\mathbf{x}-\mathbf{y}) \le \mathbf{b} to (\mathbf{a}_i)^T \mathbf{y} \ge 0. Stąd (\mathbf{a}_i)^T\mathbf{y} = \mathbf{0} a nawet (\mathbf{a}_i)^T(\alpha\mathbf{y}) = \mathbf{0} dla dowolnego \alpha\in\mathbb{R}. Czyli jeśli i-te ograniczenie jest spełnione z równością, to po przesunięciu się wzdłuż \mathbf{y} dalej tak będzie, tzn.\ (\mathbf{a}_i)^T(\mathbf{x}+\alpha \mathbf{y}) = \mathbf{b}_i.
Geometrycznie, odpowiada to spostrzeżeniu, że jeśli \mathbf{x} jest na krawędzi (ścianie, ...), to posuwając się wzdłuż \mathbf{y} dalej pozostajemy na krawędzi (ścianie, ...).
Niech teraz \lambda = \max\{\alpha\ |\ \mathbf{x} + \alpha \mathbf{y} \in \mathcal{P} \text{ oraz } \mathbf{x} - \alpha \mathbf{y} \in \mathcal{P} \}. Weźmy j takie, że y_j \ne 0. Zauważmy, że jeśli x_j = 0 to y_j = 0 (wpp. x_j+y_j<0 lub x_j-y_j<0, czyli \mathbf{x}+\mathbf{y}\not\in\mathcal{P} lub \mathbf{x}-\mathbf{y}\not\in\mathcal{P}), a więc musi być x_j \ne 0. Oznacza to, że dla dostatecznie dużego \alpha, x_j + \alpha y_j = 0 lub x_j - \alpha y_j = 0, czyli \lambda jest dobrze określone. Zauważmy, że w rozwiązaniu dopuszczalnym \mathbf{x}+\lambda \mathbf{y} rośnie liczba ograniczeń spełnionych z równością. To implikuje, że powyższą operację wykonamy co najwyżej n+m razy zanim dojdziemy do punktu ekstremalnego. ♦
Wniosek 9
Istnieje algorytm (siłowy), który rozwiązuje PL w postaci standardowej o n zmiennych i m ograniczeniach w czasie O({m\choose n}n^3).
Dowód
Żeby rozwiązać LP w postaci standardowej wystarczy sprawdzić wszystkie wierzchołki wielościanu i wybrać wierzchołek o najmniejszej wartości funkcji celu. Wierzchołków jest tyle co bazowych rozwiązań dopuszczalnych, czyli m\choose n. Aby znaleźć taki wierzchołek wystarczy rozwiązać układ odpowiednich n liniowo niezależnych równań. ♦
(Uwaga. W powyższym twierdzeniu m oznacza liczbę ograniczeń, a nie liczbę wierszy macierzy \mathbf{A}. Jeśli tę liczbę wierszy oznaczymy przez r to m=r+n).
Podsumowując, nasze rozważania geometryczne pozwoliły nam zmienić ,,naturę problemu'': w pewnym sensie przeszliśmy od problemu o charakterze ciągłym (continuum rozwiązań dopuszczalnych) do problemu dyskretnego.