Processing math: 46%

Programowanie liniowe 1: Podstawowe pojęcia i geometria programów liniowych

Wstęp i podstawowe pojęcia

 

Co to jest programowanie liniowe?

Program liniowy (w skrócie PL) jest to problem minimalizacji/maksymalizacji liniowej funkcji celu o n argumentach x1,x2,,xn przy zachowaniu pewnej liczby równości lub nierówności liniowych (będziemy je nazywać ograniczeniami) zawierających zmienne xi.

Przykład 1: prosty program liniowy

zminimalizujx1+2x2z zachowaniem warunkówx2x1+22x1+x242x2+x10x20

Za pomocą programów liniowych można wyrazić bardzo wiele naturalnych problemów optymalizacyjnych. Dla przykładu, problem maksymalnego przepływu w sieci o n wierzchołkach, źródle s, ujściu t, i funkcji przepustowości c:V2R można wyrazić za pomocą następującego programu liniowego o |V|2 zmiennych (dla każdej pary wierzchołków v,w mamy zmienne fvw i fwv odpowiadające przepływowi od v do w i odwrotnie) i 2|V|2+|V|2 ograniczeniach:

Przykład 2: program liniowy dla problemu maksymalnego przepływu
zmaksymalizujvVfsvz zachowaniem warunkówfvwc(v,w)v,wVfvw=fwvv,wVwVfvw=0vV{s,t}

Inny przykład: znajdowanie długości najkrótszej ścieżki od s do t w grafie G=(V,E) z funkcją w:ER opisującą długości krawędzi. Tu dla każdego wierzchołka v mamy zmienną dv. Dla wierzchołków na najkrótszej ścieżce od s do t zmienna dv będzie odpowiadać odległości od s do v.

zmaksymalizujdtz zachowaniem warunkówdvdu+w(u,v)(u,v)Eds=0

Zadanie. Udowodnij, że ten program faktycznie jest równoważny problemowi najkrótszej ścieżki.

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.

  • xRn jest rozwiązaniem dopuszczalnym PL gdy x spełnia wszystkie ograniczenia.
  • xRn jest rozwiązaniem optymalnym PL gdy x jest rozwiązaniem dopuszczalnym i optymalizuje funkcję celu, tzn. jeśli dla dowolnego dopuszczalnego yRn jest cTxcTy w przypadku gdy PL jest minimalizacyjny (cTxcTy 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:

zmaksymalizujnj=1cjxjz zachowaniem warunkównj=1aijxjbii=1,,m
gdzie {aij,bi,cj} są dane. Wygodniej będzie nam używać zapisu macierzowego:

zmaksymalizujcTxz zachowaniem warunkówAxb

gdzie cRn,bRm,AMm×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ę aTixbi, aTixbi. Nierówności aTixbi zamieniamy na (ai)Txbi. ♦

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ówAxbx0

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 xi i każde wystąpienie xi w PL (także w funkcji celu) zastępujemy przez x+ixi. Dodajemy też x+i0 i xi0. ♦

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ówAxbx0

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=bi=1,,mx0
gdzie cRn,bRm,AMm×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 aTixbi wprowadzamy ,,zmienną dopełnieniową'' si i nierówność zastępujemy przez aTixsi=bi oraz si0. ♦

Geometria programów liniowych

Przypomnijmy:

  • zbiór punktów spełniających aTx=b, aRn,bR to hiperpłaszczyzna,
  • zbiór punktów spełniających aTxb to półprzestrzeń,
  • zbiór rozwiązań dopuszczalnych PL w postaci kanonicznej Axb 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 xP, który jest jedynym rozwiązaniem optymalnym dla pewnej funkcji celu c.
  • Punktem ekstremalnym wielościanu P nazywamy dowolny punkt xP, który nie jest wypukłą kombinacją dwóch innych punktów y,zP. (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 xRn takie, że istnieje n liniowo niezależnych ograniczeń (w sensie wektorów współczynników przy xi, tzn. x1+2x21 i x1+2x22 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.