Podręcznik
1. Metoda generacji kolumn
Wprowadzenie
Wiele zagadnień związanych z badaniami operacyjnymi jest formułowanych w sposób ścisły lub przybliżony przy pomocy modeli programowania liniowego. Opracowanie algorytmu sympleks pozwoliło na stosunkowo łatwe wyznaczanie rozwiązań optymalnych takich zadań. Pomimo, że w najgorszym przypadku złożoność obliczeniowa tego algorytmu rośnie wykładniczo, to jednak przeciętnie zadania są rozwiązywane bardzo efektywnie.
Istnieje jednak grupa problemów, które choć formalnie zaliczają się do zadań programowania liniowego, to jednak rozwiązanie ich klasycznymi metodami jest nieopłacalne, głównie ze względu na wielkość zajmowanej pamięci, ale także ze względu na czas obliczeń. Cechą charakterystyczną tych zadań jest występowanie bardzo dużej liczby zmiennych, przy stosunkowo niewielkiej liczbie ograniczeń. W niektórych przypadkach liczba zmiennych może być nieskończona lub trudna do wyznaczenia. Oczywiste jest, że przechowywanie w pamięci całej macierzy ograniczeń takiego zadania oraz wykonywanie przekształceń na wszystkich jej elementach jest niemożliwe, a w najlepszym razie nieefektywne.
Rozwiązaniem jest zastosowanie metody generacji kolumn. Jest ona oparta na skorygowanej metodzie sympleks, w której przechowuje się tylko aktualną macierz bazową. Różnica między obydwiema metodami polega na tym, że w metodzie generacji kolumn nowe kolumny wprowadzane do bazy w każdej iteracji nie są bezpośrednio wyszukiwane w macierzy ograniczeń, lecz są wyznaczane w oddzielnym zadaniu optymalizacji.
Skorygowana metoda prymalna sympleks
Rozważmy następujące zadanie programowania liniowego:
Zmaksymalizować
Przy ograniczeniach

Załóżmy, że kolumny macierzy zostały przedstawione w taki sposób, że
, gdzie
jest macierzą bazową o wymiarach
×
(det
),
jest macierzą utworzoną z pozostałych kolumn macierzy
. Niech ponadto
, gdzie
jest wektorem zmiennych bazowych odpowiadających kolumnom macierzy
, natomiast
jest wektorem zmiennych niebazowych odpowiadających kolumnom macierzy
. Warunek
możemy teraz zapisać następująco:
Ponieważ jest macierzą nieosobliwą, zatem istnieje macierz odwrotna
. Możemy więc wyrazić
w zależności od
:
Rozwiązanie bazowe otrzymujemy, gdy zmienne niebazowe
są na swoich dolnych ograniczeniach, czyli
. Twierdzenie mówiące, że jeśli zadanie programowania liniowego ma rozwiązanie optymalne, to ma również rozwiązanie bazowe optymalne, pozwala nam, przy poszukiwaniu rozwiązania optymalnego, ograniczyć się tylko do przeszukiwania rozwiązań bazowych dopuszczalnych.
W algorytmie skorygowanej metody prymalnej sympleks, wychodząc od dowolnego dopuszczalnego rozwiązania bazowego, znajdujemy kolejno inne dopuszczalne rozwiązania bazowe polepszające wartość fukcji celu . Przejście pomiędzy dwoma kolejnymi dopuszczalnymi rozwiązaniami bazowymi odbywa się poprzez wprowadzenie do bazy jednej ze zmiennych niebazowych.
Załóżmy, że mamy wyjściowe rozwiązanie bazowe określone wzorem (5). Chcemy teraz znaleźć inne dopuszczalne rozwiązanie bazowe dające większą wartość funkcji celu . Niech
, wtedy
wykorzystując równanie (5) eliminujemy i otrzymujemy
Po podstawieniu w powyższym równaniu otrzymujemy wartość rozwiązania bazowego równą
. Zapiszmy równania (5) i (7) w następujący sposób
Oznaczmy przez wartość funkcji celu
, a przez
elementy wektora xB . Niech N będzie zbiorem indeksów kolumn macierzy N , a ponadto
oraz
gdzie , jest kolumną macierzy
. Możemy teraz równania (5) i (7) zapisać następująco:
Zadaniem naszym jest wybór takiej zmiennej niebazowej, aby, po wprowadzeniu jej do bazy, nowe rozwiązanie było lepsze od poprzedniego. Załóżmy, że do bazy chcemy wprowadzić jedną ze zmiennych niebazowych . Spróbujmy więc stopniowo zwiększać wartość zmiennej
, która do tej pory była na swym dolnym ograniczeniu. Z równania (8) widzimy, że wartość funkcji celu
będzie się zwiększała tylko wtedy, gdy
będzie mniejsze od zera. Oznacza to, że zmienną wprowadzaną do bazy możemy wybrać tylko spośród tych zmiennych niebazowych
, dla których parametry
nazywane cenami zredukowanymi są ujemne (
. Zauważmy, że zwiększaniu się zmiennej
towarzyszy także zmiana wartości zmiennych bazowych
. Ponieważ wartość żadnej z nich nie może być ujemna, to, jeśli któryś ze współczynników
w równaniach (8) jest dodatni, wtedy określa on maksymalną wartość, którą może przyjąć zmienna
bez naruszenia ograniczenia
:
Ponieważ ograniczenie to musi być spełnione dla wszystkich zmiennych bazowych , to
Po osiągnięciu przez wybraną zmienną niebazową wartości
max jedna lub kilka zmiennych bazowych znajdzie się na swym dolnym ograniczeniu; spośród nich wybieramy zmienną, która zostanie usunięta z bazy.
Zmienną niebazową wprowadzaną do bazy może być dowolna zmienna , dla której
. Na ogół jednak, w celu polepszenia szybkości zbieżności, wybiera się taką zmienną
dla której
Algorytm skorygowanej metody prymalnej sympleks
W algorytmie skorygowanej metody prymalnej sympleks nie operuje się tzw. macierzą sympleksową, lecz macierzą bazową oraz całą macierzą ograniczeń. W każdej iteracji przegląda się wszystkie kolumny aj odpowiadające zmiennym niebazowym. Poszczególne kroki algorytmu przedstawiają się następująco:
Należy pamiętać o tym, że, tak jak w zwykłej metodzie sympleksowej, wyłącznie zmienne bazowe mogą przyjmować wartości niezerowe i, wraz z odpowiadającymi im kolumnami, stanowią pełne rozwiązanie zadania (1)–(3).
Wykrywanie nieograniczoności



k-tej nie jest większy od zera, wtedy możliwy jest nieograniczony wzrost zmiennej niebazowej



Sytuacja taka oznacza, że rozwiązywane przez nas zadanie jest nieograniczone i algorytm powinien zostać w tym momencie przerwany.
Wyznaczanie początkowego dopuszczalnego rozwiązania bazowego
Rozpoczęcie obliczeń metodą sympleksową jest uwarunkowane znajomością początkowego dopuszczalnego rozwiązania bazowego. Jeśli początkowe dopuszczalne rozwiązanie bazowe nie jest łatwo dostępne, wtedy trzeba je wygenerować rozwiązując skorygowaną prymalną metodą sympleksową następujące zadanie pomocnicze:
Zmaksymalizować
przy ograniczeniach
gdzie , a
jest m-wymiarowym wektorem tzw. zmiennych sztucznych.
Dla zadania tego można z łatwością określić początkowe dopuszczalne rozwiązanie bazowe . Po zakończeniu rozwiązywania tego zadania mogą wystąpić następujące przypadki:
- 1) min ŵ = w < 0 – zbiór rozwiązań dopuszczalnych zadania wyjściowego jest pusty (zadanie wyjściowe jest sprzeczne).
- 2) ŵ = 0 i wśród zmiennych bazowych nie występują zmienne sztuczne – wyznaczono początkowe dopuszczalne rozwiązanie bazowe.
- 3) ŵ = 0 i wśród zmiennych bazowych występują zmienne sztuczne. Możliwe są wówczas dwa warianty:
- a) Zmienna bazowa
jest zmienną sztuczną oraz
dla każdego
– w zadaniu wyjściowym występuje redundancja.
- b) Zmienna bazowa
jest zmienną sztuczną oraz istnieje
takie, że
– należy zastąpić zmienną
zmienną
, a otrzymane początkowe dopuszczalne rozwiązanie bazowe jest zdegenerowane (istnieją zmienne bazowe równe 0).
- a) Zmienna bazowa
Metoda generacji kolumn
W skorygowanej metodzie prymalnej sympleks posługujemy się w sposób jawny całą macierzą ograniczeń – z góry znamy liczbę kolumn oraz jej zawartość. Możemy jednak łatwo dojść do wniosku, że znajomość całej macierzy ograniczeń nie jest konieczna. W każdym kroku wstawiamy do macierzy bazowej nową kolumnę odpowiadającą zmiennej niebazowej, nie jest jednak istotne czy nowa kolumna została wybrana z podanej ‘explicite’ macierzy ograniczeń, czy też została wyliczona w jakiś inny sposób. Najważniejsze jest aby odpowiadająca tej kolumnie cena zredukowana była jak najmniejsza, a jeśli jest przy tym ujemna, to wprowadzenie nowej kolumny spowoduje poprawienie poprzedniego rozwiązania. Zadanie wyznaczenia nowej kolumny możemy więc w sposób ogólny zapisać następująco:
gdzie jest szukanym wektorem zmiennych minimalizującym cenę zredukowaną
, który jako nowa kolumna zostanie wprowadzony do macierzy bazowej (indeks
ma tylko znaczenie symboliczne),
– wektor cen dualnych,
– cena w funkcji celu odpowiadająca znalezionej kolumnie.
Zauważmy, że jeśli w wyniku rozwiązania tego zadania otrzymamy kolumnę, która już znajduje się w bazie, to wartość ceny zredukowanej odpowiadającej tej kolumnie będzie wynosiła 0, czyli nastąpi zakończenie algorytmu.
Metoda generacji kolumn działa analogicznie do skorygowanej metody prymalnej sympleks z tą tylko różnicą, że nowe kolumny wstawiane w każdym kroku do macierzy bazowej są wyznaczane w oddzielnym zadaniu optymalizacji. Takie podejście pozwala na rozwiązywanie zadań z macierzą ograniczeń o potencjalnie nieskończonej liczbie kolumn. Nie jest bowiem konieczne pamiętanie całej tej macierzy; do znalezienia kolejnego dopuszczalnego rozwiązania bazowego wystarczy znajomość aktualnej macierzy bazowej.
Na poniższym rysunku przedstawiono schemat działania metody generacji kolumn. Możemy wyróżnić zadanie nadrzędne, będące głównym zadaniem optymalizacji oraz zadanie podrzędne. W każdej iteracji do zadania podrzędnego przekazywany jest wektor cen dualnych , który służy do obliczenia nowej kolumny
. Kolumna ta jest następnie zwracana do zadania nadrzędnego.
Zadanie podrzędne
W zadaniu podrzędnym wyznaczane są kolumny z macierzy ograniczeń o najmniejszych wartościach ceny zredukowanej . Aby zadanie to miało sens, na kolumnę
muszą zostać nałożone pewne ograniczenia. Na przykład można ograniczyć zakres wartości jakie mogą przyjmować poszczególne elementy kolumny
:
. Ograniczenia nałożone na rozwiązanie zadania podrzędnego zawężają zbiór kolumn, które mogą być wstawione do macierzy bazowej zadania nadrzędnego, czyli – zbiór wszystkich rozwiązań dopuszczalnych zadania podrzędnego określa wszystkie możliwe kolumny występujące w macierzy ograniczeń zadania nadrzędnego. Jeżeli na przykład do ograniczenia
dodamy warunek całkowitoliczbowości, wtedy macierz ograniczeń zadania nadrzędnego będzie składała się ze skończonej liczby kolumn, w których każdy element musi należeć do przedziału [d, e] i być liczbą całkowitą. Bardziej złożone ograniczenia nakładane na kolumny wyznaczane w zadaniu podrzędnym zostały przedstawione w przykładach w dalszej części tej pracy.
W metodzie generacji kolumn, poza wyznaczeniem w kolejnej iteracji nowej kolumny wstawianej do macierzy bazowej, konieczne jest określenie wartości ceny cj w funkcji celu odpowiadającej tej kolumnie. Cena ta na ogół nie jest podana w sposób jawny, lecz zależy od wyznaczanego wektora :
. Skutkiem tego może być poważne zwiększenie złożoności funkcji celu zadania podrzędnego