Panuje powszechna, jak się wydaje, zgoda co do tego, że sympleks jest praktycznie
bardzo skutecznym i szybkim algorytmem, pozwalającym rozwiązywać problemy w
których występują setki czy nawet tysiące zmiennych. Także różnego rodzaje testy
tego dowodzą (por. [3,8,12,14,16,18]). A jednak. Okazuje się,
że jeśli dobrać wystarczająco złośliwie przykład, to okazuje się, że ilośc
iteracji może wynosić nawet , gdzie oznacza ilość zmiennych. Oznacza to
konieczność utworzenia słowników. To zaś z kolei, znaczy, że sympleks jest
teoretycznie beznadziejny: licząc mikrosekundę na utworzenie słownika
(przy dużej liczbie zmiennych to kompletnie nierealne, nawet przy bardzo szybkim komputerze),
oznaczałoby to konieczność oczekiwania trudno wyobrażalnej liczby lat na obliczenie zadania
o 1000 zmiennych3.7.
Takim złośliwym przykładem jest zadanie Klee-Minty'ego
(por. [3,16]). Przedstawimy je w formie
następującego twierdzenia.
Twierdzenie 3.4
Algorytm sympleks nie jest algorytmem wielomianowym.
Dowód lematu . Udowodnijmy najpierw dwa proste fakty.
Fakt 1.
jest wartością optymalną, zaś
(3.37)
rozwiązaniem optymalnym problemu ().
Rzeczywiście, pierwszy słownik problemu () można zapisać następująco3.8:
(3.38)
Słownikiem w którym zmiennymi niebazowymi są
, zaś zmiennymi bazowymi
jest
(3.39)
gdzie
dla każdego .
Jest oczywistym, że słownik () jest ostatnim słownikiem algorytmu sympleks
dla (), zaś () optymalnym rozwiązaniem (współczynniki
są oczywiście ujemne).
Fakt 2.
W każdym słowniku problemu (), dla każdego
dokładnie jedna ze zmiennych jest
zmienną bazową.
Gdyby tak nie było, to w w pewnym słowniku dla pewnego zarówno jak i byłyby zmiennymi niebazowymi. Dla odpowiadającego temu słownikowi bazowego rozwiązania dopuszczalnego
mamy oczywiście
i
. Napiszmy równania i słownika ().
(3.40)
(3.41)
Dla naszego rozwiązania bazowego w którym i mamy więc
z ()
Z drugiej zaś strony, korzystając z (), (), nierówności
wynikającej w sposób banalny
z () i pamiętając, że
wszystkie współrzędne rozwiązania są nieujemne, otrzymamy
- sprzeczność która kończy dowód faktu 2.
Reszta dowodu lematu przez indukcję ze względu na .
Dla problem jest banalny: ma postać
i rozwiązuje się w 2 słownikach:
,
Pierwszy słownik dla () jest postaci
(3.42)
a ostatni (o rozwiązaniu bazowym
)
Napiszmy teraz pierwszy słownik dla
Słownik ten różni się od () tym, że dodaliśmy do niego jeden wiersz ograniczeń,
a funkcję celu najpierw pomnożyliśmy przez , a potem dodaliśmy do niej .
Wszystkie współczynniki (a także wyrazy wolne) we wszystkich słownikach są całkowite.
Rzeczywiście: skoro, jak stwierdziliśmy wyżej, dla każdego dokładnie jedna ze
zmiennych jest bazowa, za każdym razem zmienna wchodząca ( lub )
jest obliczana z tego równania w którym występuje zawsze ze współczynnikiem
. Tak więc, dopóki we wzorze na funkcję któregokolwiek słownika problemu
występuje któraś ze zmiennych , , ze współczynnikiem dodatnim, zmienną wchodzącą jest jedna z nich (ta której współczynnik w funkcji jest największy).
Tak więc algorytm sympleks będzie funkcjonował na pierwszych wierszach ograniczeń
dopóty, dopóki wszystkie współczynniki przy zmiennych
nie będą ujemne. W ostatnim z tych słowników podstawiamy
do
i do
otrzymując
Zmienną wchodzącą teraz jest
. Tak więc następnym, szym słownikiem jest
słownik następujący
Otrzymaliśmy problem w którym następne iteracje będą polegały na minimalizacji
funkcji
(3.43)
Operacje na wierszach ograniczeń dotyczyć będą wyłącznie pierwszych wierszy.
Funkcja dana wzorem () równa jest stałej plus
razy funkcja celu , potrzebować będziemy więc jeszcze słowników, czyli
w sumie
słowników, co należało udowodnić.
Ćwiczenie 3.1
Algorytmem sympleks rozwiąż zadanie Klee-Minty'ego dla (a jeśli masz cierpliwość i potrzebę lepszego zrozumienia dowodu twierdzenia to dla ). Ile otrzymasz
iteracji a ile słowników w każdym z tych przypadków?