Processing math: 100%

Programowanie liniowe 3: Dualność

Motywacja: certyfikat optymalności

Dla niektórych problemów znane są algorytmy, które wraz z rozwiązaniem generują tzw. certyfikat poprawności, czyli dodatkową informację z pomocą której możemy łatwo (tzn. algorytmem, który jest nie tylko wielomianowy, ale również istotnie prostszy od algorytmu generującego rozwiązanie) sprawdzić, czy
zwrócone rozwiązanie jest poprawne (lub optymalne w przypadku problemów optymalizacyjnych). Algorytmy te określane są mianem algorytmów certyfikujących. Oto kilka przykładów:

  • Algorytm sprawdzający, czy dany graf jest dwudzielny może zwracać 2-kolorowanie takiego grafu lub cykl nieparzysty.
  • Algorytm znajdowania maksymalnego przepływu wraz z przepływem może zwracać minimalny przekrój.
  • Istnieje algorytm testujący planarność grafów, który zwraca rysunek na płaszczyźnie bez przecięć krawędzi lub podgraf homeomorficzny z K3,3 lub K5.

Algorytmy certyfikujące oprócz znaczenia teoretycznego (aby generować takie certyfikaty należy dobrze zrozumieć problem) mają dużą wartość praktyczną: pomyślmy choćby o testowaniu poprawności kodu.

Czy dla programowania liniowego istnieją certyfikaty poprawności? Rozważmy decyzyjną wersję problemu programowania liniowego: mając dany (minimalizacyjny) PL i liczbę δ rozstrzygnąć, czy istnieje dopuszczalny x taki, że cTxδ. Załóżmy dla uproszczenia, że nasz program jest ograniczony. Wraz z odpowiedzią TAK algorytm certyfikujący może zwrócić współrzędne x (można nawet pokazać, że te współrzędne można reprezentować w pamięci wielomianowej względem rozmiaru danych). A więc istnieje certyfikat pozytywny. Z punktu widzenia teorii złożoności, dowodzi to, że problem jest w klasie NP. W dodatku algorytm weryfikacji certyfikatu jest banalny: po prostu sprawdzamy odpowiednie nierówności. Czy możemy podać certyfikat negatywny, tzn. certyfikat poprawności dla odpowiedzi NIE? Gdyby ten certyfikat był również krótki, mielibyśmy dowód, że programowanie liniowe jest w klasie co-NP.

W tym rozdziale przedstawimy pojęcie dualności programowania liniowego, które dostarcza odpowiedzi na powyższe pytania. Jak zobaczymy w kolejnych wykładach, dualność programowania liniowego ma dużo więcej konsekwencji w matematyce i informatyce.

Poszukiwanie ograniczenia na wartość rozwiązania optymalnego

Rozważmy następujący PL w postaci standardowej:

Program (P1)
zmaksymalizuj3x1x2+2x3z zachowaniem warunkówx1x2+12x344x1+2x2+3x320x1,x2,x30

Łatwo sprawdzić, że punkt (x1=2,x2=0,x3=4) jest rozwiązaniem dopuszczalnym o wartości funkcji celu 14.

Zauważmy, że skoro x1,x2,x30, to 3x14x1, a także x22x2 oraz 2x33x3. Stąd, 3x1x2+2x34x1+2x2+3x320. Dostaliśmy górne ograniczenie! W tym przypadku możemy zauważyć nawet więcej. Ponieważ 31+124, 11+122 oraz 212+123, więc
3x1x2+2x3x1x2+12x3+12(4x1+2x2+3x3)4+1220=14.

Udowodniliśmy (choć, trzeba przyznać, dość fartownie), że wartość funkcji celu nigdy nie przekracza 14, a więc mamy certyfikat optymalności, w dodatku bardzo krotki (kilka nierówności) i prosty do sprawdzenia.
Możemy to rozumowanie uogólnić: można brać dowolne kombinacje liniowe nierówności t.ż.:

  • współczynniki kombinacji liniowej są nieujemne (bo inaczej odwrócą się kierunki nierówności),
  • dla dowolnego i, współczynnik funkcji celu przy xi jest ograniczony z góry przez odpowiednią kombinację liniową współczynników przy xi w nierównościach.

Można to zapisać za pomocą programu liniowego:

Program (D1)
zminimalizuj4y1+20y2z zachowaniem warunkówy1+4y23y1+2y2112y1+3y22y1,y20.

Powyższy program będziemy nazywać programem dualnym do programu (P1). Ogólnie, dla programu (będziemy go nazywać programem prymalnym)

Program (P2)
zmaksymalizujnj=1cjxjz zachowaniem warunkównj=1aijxjbii=1,,mxj0j=1,,n

program dualny ma postać:

Program (D2)
zminimalizujmi=1biyiz zachowaniem warunkówmi=1aijyicjj=1,,nyi0i=1,,m.

Zauważmy, że macierz współczynników ograniczeń programu (D2) jest transpozycją macierzy dla programu (P2) (porównaj też dla programów (P1) i (D1)). Daje to niezwykle prosty, mechaniczny sposób konstruowania programu dualnego. Mianowicie dla programu

zmaksymalizujcTxz zachowaniem warunkówAxbx0

program dualny ma postać:

zminimalizujbTyz zachowaniem warunkówATycy0

Dualność jest relacją symetryczną, tzn. mówimy także, że (P2) jest dualny do (D2). Innymi słowy, program dualny do programu dualnego to program prymalny.

Słaba dualność i komplementarne warunki swobody

Pozostańmy przy programach w postaci standardowej. Z konstrukcji programu dualnego wynika następujący fakt (dla porządku podamy jednak dowód).

Twierdzenie 1 [o słabej dualności]
Niech x i y będą dowolnymi rozwiązaniami dopuszczalnymi odpowiednio programów (P2) i (D2). Wówczas cTxbTy.

Dowód
Ponieważ dla każdego j=1,,n, mamy xj0 oraz mi=1aijyicj, więc
()cjxj(mi=1aijyi)xjj=1,,n.
Podobnie, ponieważ dla każdego i=1,,m, mamy yi0 oraz nj=1aijxjbi, więc
()(nj=1aijxj)yibiyii=1,,m.
Stąd,
()cTx=nj=1cjxjnj=1(mi=1aijyi)xj=mi=1(nj=1aijxj)yimi=1biyi=bTy.

Zastanówmy się, kiedy rozwiązania optymalne programu prymalnego (P2) i dualnego (D2) spotykają się, czyli cTx=bTy. Z dowodu twierdzenia o słabej dualności widzimy, że jest tak wtedy i tylko wtedy gdy obie nierówności w (***) są równościami. Tak może się wydarzyć tylko wtedy, gdy gdy wszystkie nierówności w (*) i (**) są równościami. To dowodzi następującego twierdzenia:

Twierdzenie (o komplementarnych warunkach swobody)
Niech x i y będą rozwiązaniami dopuszczalnymi odpowiednio dla zadania prymalnego i dualnego w postaci standardowej. Rozwiązania x i y są oba optymalne wtedy i tylko wtedy gdy

  • prymalne komplementarne warunki swobody: dla każdego j=1,,n albo xj=0 albo mi=1aijyi=cj.
    (tzn. albo xj=0 albo j-ta nierówność programu dualnego jest spełniona z równością.)
  • dualne komplementarne warunki swobody dla każdego i=1,,m albo yi=0 albo nj=1aijxj=bi.
    (tzn. albo yi=0 albo i-ta nierówność programu prymalnego jest spełniona z równością.)

Programy dualne do ogólnych programów liniowych

Nawet gdy program nie jest w postaci standardowej możemy napisać program dualny, kierując się tą samą zasadą: poszukujemy jak najlepszego górnego ograniczenia na wartość funkcji celu. Zobaczmy np. co się dzieje, gdy program zawiera równość:

zmaksymalizuj3x1x2+2x3z zachowaniem warunkówx1x2+12x344x12x23x3=20x1,x2,x30

Podobnie jak poprzednio, dodając pierwszy warunek pomnożony przez y1=1 do drugiego warunku pomnożonego przez y2=12 dostajemy ograniczenie górne równe 14. Zauważmy, że w kombinacji liniowej warunków, współczynniki dla nierówności muszą być nieujemne, natomiast dla równości mogą być dowolne (w tym przypadku wybraliśmy ujemny). Program dualny wygląda następująco:

zminimalizuj4y1+20y2z zachowaniem warunkówy1+4y23y1+2y2112y1+3y22y10.

A co by się stało, gdyby w programie prymalnym dodatkowo mogły się pojawiać zmienne bez warunku nieujemności? Rozważmy np.

zmaksymalizuj3x1x2+2x3z zachowaniem warunkówx1x2+12x344x1+2x2+3x3=20x1,x30
Wówczas nie możemy już napisać, że 3x1x2+2x34x1+2x2+3x3, gdyż niekoniecznie x22x2. Jeśli jednak pomnożymy pierwszą nierówność przez 3 i dodamy do drugiej, dostaniemy:

3x1x2+2x33(x1x2+12x3)+4x1+2x2+3x312+20=32,
gdyż 3x17x1, x2=x2 oraz 2x33x3. Znalezienie najlepszej kombinacji liniowej warunków odpowiada programowi:

zminimalizuj4y1+20y2z zachowaniem warunkówy1+4y23y1+2y2=112y1+3y22y10.

Ogólnie, program dualny konstruujemy zgodnie z poniższą zasadą:

Tworzenie programów dualnych

Można łatwo sprawdzić, że program dualny zbudowany zgodnie z powyższymi wytycznymi również spełnia twierdzenie o słabej dualności (a także twierdzenie o silnej dualności, które udowodnimy w kolejnym punkcie).

Silna dualność

Twierdzenie o słabej dualności można również wyrazić w następujący sposób:

Wniosek
Jeśli z jest wartością funkcji celu rozwiązania optymalnego prymalnego minimalizacyjnego PL, natomiast w jest wartością funkcji celu rozwiązania optymalnego programu dualnego, to zw.

Wynika stąd w szczególności, że gdy z=w, to rozwiązanie optymalne programu dualnego jest certyfikatem optymalności naszego rozwiązania programu prymalnego. Okazuje się, że tak jest zawsze!

Twierdzenie (o silnej dualności)
Jeśli z jest wartością funkcji celu rozwiązania optymalnego prymalnego PL, natomiast w jest wartością funkcji celu rozwiązania optymalnego programu dualnego, to z=w.

Dowód
Dla uproszczenia przeprowadzimy dowód dla przypadku programu w maksymalizacyjnej postaci standardowej (dowód dla ogólnej postaci jest analogiczny). Oto program prymalny:

Program (P3)
zmaksymalizujcTxz zachowaniem warunkówAxbx0,

oraz program dualny:

Program (D3)
zminimalizujbTyz zachowaniem warunkówATycy0.

Niech x będzie rozwiązaniem optymalnym programu prymalnego (P3). Ze słabej dualności, wystarczy pokazać rozwiązanie dopuszczalne y programu dualnego (D3) t.ż. cTx=bTy. Uruchamiamy algorytm simplex (patrz poprzedni wykład) na programie (P3).
W pierwszej iteracji algorytm simplex buduje program

Program (P3-start)
zmaksymalizujzz zachowaniem warunkówz=nj=1cjxjxn+i=binj=1aijxji=1,,mxj0j=1,,n+m.

Rozważmy program z ostatniej iteracji algorytmu simplex.

Program (P3-stop)
zmaksymalizujzz zachowaniem warunkówz=v+jNcjxjxi=bijNaijxjiBxj0j=1,,n+m.

Ponieważ program prymalny jest ograniczony, więc dla każdego jN, cj0 oraz algorytm simplex zwraca rozwiązanie optymalne x takie, że
xi={0gdy iNbigdy iB.

Określimy teraz pewne rozwiązanie programu dualnego (D3):
yi:={cn+igdy n+iN0w p. p.

Pokażemy teraz, że y jest dopuszczalny o wartości funkcji celu równej cTx. Określamy cj:=0 dla jB. Wówczas pierwszy warunek programu (P3-stop) możemy zapisać jako z=v+n+mj=1cjxj.

Weźmy dowolne (x1,,xn)Rn. Określmy xn+i=bini=1aijxj oraz z=ni=1aijxj. Wówczas (z,x1,,xn+m) jest rozwiązaniem dopuszczalnym programu (P3-start). Ponieważ program (P3-stop) jest równoważny (P3-start), tzn. powstaje z (P3-start) na drodze ciągu operacji elementarnych, więc (z,x1,,xn+m) jest również rozwiązaniem dopuszczalnym programu (P3-stop). Z faktu, iż w obu programach spełnione są warunki zawierające zmienną z mamy, iż:
nj=1cjxj=v+n+mj=1cjxj=v+nj=1cjxj+mi=1cn+ixn+i=v+nj=1cjxj+mi=1(yi)(binj=1aijxj).
Po przegrupowaniu dostajemy, że dla dowolnego (x1,,xn)Rn,
nj=1cjxj=(vmi=1yibi)+nj=1(cj+mi=1yiaij)xj.

Podstawiamy (x1,,xn)=(0,,0) i mamy v=mi=1yibi. Ponieważ cTx=v, więc cTx=bTy. Pozostaje pokazać dopuszczalność y. W tym celu rozważmy dowolne k{1,,n}. Podstawiamy xj=[j=k] dla każdego j=1,,n. Otrzymujemy
ck=(vmi=1yibi)=0+ck0+mi=1yiaik,
co implikuje mi=1yiaikck dla każdego k, czyli ATyc. Zauważmy, że ponieważ cj0 dla każdego j, więc y0. Pokazaliśmy zatem, że y jest rozwiązaniem dopuszczalnym programu (D3) o wartości funkcji celu cTx, co kończy dowód. ♦

Z powyższego dowodu wynika, że algorytm simplex znajduje równocześnie rozwiązania optymalne programu prymalnego i dualnego. W niektórych sytuacjach możemy uzyskać skrócenie czasu działania algorytmu stosując tzw. dualny algorytm simplex, tzn. uruchamiać algorytm simplex dla programu dualnego.