Generowanie kolumn

Generowanie kolumn lub opóźnione generowanie kolumn jest wydajnym algorytmem rozwiązywania dużych programów liniowych .

Nadrzędną ideą jest to, że wiele programów liniowych jest zbyt dużych, aby jawnie uwzględnić wszystkie zmienne. Chodzi o to, aby zacząć od rozwiązania rozważanego programu tylko z podzbiorem jego zmiennych. do programu dodawane są zmienne, które mogą poprawić funkcję celu . Gdy można wykazać, że dodanie nowych zmiennych nie poprawiłoby już wartości funkcji celu, procedura zostaje zatrzymana. Podczas stosowania algorytmu generowania kolumn istnieje nadzieja, że ​​zostanie wygenerowany tylko bardzo mały ułamek zmiennych. Nadzieję tę potwierdza fakt, że w rozwiązaniu optymalnym większość zmiennych będzie niepodstawowa i przyjmie wartość zero, więc rozwiązanie optymalne można znaleźć bez nich.

W wielu przypadkach ta metoda pozwala rozwiązywać duże programy liniowe, które w innym przypadku byłyby trudne. Klasycznym przykładem problemu, w którym jest on z powodzeniem stosowany, jest problem materiału do cięcia . Jedną szczególną techniką programowania liniowego, która wykorzystuje tego rodzaju podejście, jest dekompozycji Dantziga-Wolfe'a . Ponadto generowanie kolumn zostało zastosowane do wielu problemów, takich jak planowanie załogi , wyznaczanie tras pojazdów i problem pojemnościowej p-mediany.

Algorytm

Algorytm uwzględnia dwa problemy: problem główny i problem podrzędny. Problem główny jest pierwotnym problemem, w którym rozważany jest tylko podzbiór zmiennych. Podproblem to nowy problem stworzony w celu zidentyfikowania poprawiającej się zmiennej ( tj. takiej , która może poprawić funkcję celu problemu głównego).

Algorytm następnie przebiega w następujący sposób:

  1. Zainicjuj problem główny i podproblem
  2. Rozwiąż główny problem
  3. Wyszukaj poprawiającą się zmienną z podproblemem
  4. Jeśli zostanie znaleziona poprawiająca się zmienna: dodaj ją do problemu głównego, a następnie przejdź do kroku 2
  5. Inaczej: Rozwiązanie problemu głównego jest optymalne. Zatrzymywać się.

Znalezienie poprawiającej się zmiennej

Najtrudniejszą częścią tej procedury jest znalezienie zmiennej, która może poprawić funkcję celu głównego problemu. Można to zrobić, znajdując zmienną o najbardziej ujemnym koszcie zredukowanym (zakładając bez utraty ogólności , że problem jest problemem minimalizacji). Jeśli żadna zmienna nie ma ujemnego kosztu zredukowanego, to aktualne rozwiązanie problemu głównego jest optymalne.

Kiedy liczba zmiennych jest bardzo duża, nie jest możliwe znalezienie poprawiającej się zmiennej poprzez obliczenie wszystkich kosztów zredukowanych i wybranie zmiennej o ujemnym koszcie zredukowanym. Zatem pomysł polega na obliczeniu tylko zmiennej o minimalnym obniżonym koszcie. Można to zrobić za pomocą problemu optymalizacyjnego zwanego podproblemem cenowym, który silnie zależy od struktury pierwotnego problemu. Funkcją celu podproblemu jest zredukowany koszt poszukiwanej zmiennej w stosunku do bieżących zmiennych dualnych, a ograniczenia wymagają, aby zmienna była zgodna z naturalnie występującymi ograniczeniami. Metoda generowania kolumn jest szczególnie wydajna, gdy ta struktura umożliwia rozwiązanie podproblemu za pomocą wydajnego algorytmu, zazwyczaj dedykowanego algorytmu kombinatorycznego .

Wyjaśnimy teraz szczegółowo, jak i dlaczego obliczać obniżony koszt zmiennych. Rozważ następujący program liniowy w postaci standardowej:

który będziemy nazywać problemem pierwotnym oraz jego dualnym programem liniowym :

, niech będą optymalnymi rozwiązaniami tych dwóch problemów, które może zapewnić dowolny Rozwiązania te weryfikują ograniczenia ich programu liniowego i dzięki dwoistości mają tę samą wartość funkcji celu ( ), które będziemy nazywać . Ta optymalna wartość jest funkcją różnych współczynników pierwotnego problemu: . Zauważ że istnieje podwójna zmienna pierwotnego modelu liniowego Można pokazać, że optymalną zmienną dualną można interpretować jako cząstkową wartości optymalnej celu funkcja w odniesieniu do współczynnika prawej stronie ograniczeń: ou bis . prościej, wskazuje o ile lokalnie wzrasta optymalna wartość funkcji celu, gdy jedną

że zmienna nie była dotąd brana pod uwagę w pierwotnym problemie. Zauważ, że jest to ze stwierdzeniem, że zmienna obecna w modelu, ale przyjęła wartość zerową. Zaobserwujemy teraz wpływ na pierwotny problem zmiany wartości { \ . Jeśli odpowiednio związanymi ze zmienną w funkcji celu i ograniczeniach, to program liniowy jest modyfikowany do następująco:

Aby wiedzieć, czy dodanie zmiennej do problemu (tj. przyjęcie wartości niezerowej) jest interesujące chcemy wiedzieć , czy wartość funkcji celu tego nowego problemu maleje wraz ze wzrostem wartości zmiennej . Innymi słowy, chcemy wiedzieć . Aby to zrobić, zauważ, że zgodnie z wartością funkcji celu początkowego . Możemy wtedy obliczyć interesującą nas pochodną:

słowy, wpływ zmiany wartości na wartość na dwa terminy . Po pierwsze, zmiana ta bezpośrednio wpływa na funkcję celu, a po drugie, prawa strona ograniczeń jest modyfikowana, co ma wpływ na optymalne zmienne, których wielkość jest mierzona za pomocą zmiennych dualnych u. . re nazywany obniżonym kosztem zmienna będzie oznaczana dalej przez