Programowanie liniowe - Linear programming

Obrazowa reprezentacja prostego programu liniowego z dwiema zmiennymi i sześcioma nierównościami. Zbiór możliwych rozwiązań jest przedstawiony na żółto i tworzy wielokąt , dwuwymiarowy politop . Liniowa funkcja kosztu jest reprezentowana przez czerwoną linię i strzałkę: Czerwona linia to zestaw poziomów funkcji kosztu, a strzałka wskazuje kierunek, w którym optymalizujemy.
Zamknięty obszar dopuszczalny problemu z trzema zmiennymi jest wielościanem wypukłym . Powierzchnie dające stałą wartość funkcji celu są płaszczyznami (nie pokazano). Problem programowania liniowego polega na znalezieniu punktu na wielościanie, który znajduje się na płaszczyźnie o największej możliwej wartości.

Programowanie liniowe ( LP , zwane również optymalizacją liniową ) to metoda pozwalająca na osiągnięcie najlepszego wyniku (takiego jak maksymalny zysk lub najniższy koszt) w modelu matematycznym, którego wymagania są reprezentowane przez zależności liniowe . Programowanie liniowe to szczególny przypadek programowania matematycznego (znanego również jako optymalizacja matematyczna ).

Bardziej formalnie, programowanie liniowe jest techniką dla optymalizacji o liniowej funkcji celu , z zastrzeżeniem równości liniowego i liniowych nierówności ograniczeń . Jest możliwe, obszar jest Polytope wypukły , który to zespół definiuje się jako przecięcie skończenie wielu półprzestrzeni , z których każdy jest zdefiniowany przez nierówności liniowej. Jego celem jest funkcją rzeczywistego -valued afiniczne (liniowy) Funkcja określona w tej bryły. Algorytm programowania liniowego znajduje w politopie punkt, w którym ta funkcja ma najmniejszą (lub największą) wartość, jeśli taki punkt istnieje.

Programy liniowe to problemy, które można wyrazić w formie kanonicznej jako:

Tutaj składowe x są zmiennymi do określenia, c i b są danymi wektorami (ze wskazaniem, że współczynniki c są używane jako macierz jednowierszowa w celu utworzenia iloczynu macierzy), a A jest daną macierzą . Funkcja, której wartość ma zostać zmaksymalizowana lub zminimalizowana ( w tym przypadku) nazywana jest funkcją celu . Nierówności A x  ≤  b i x0 są ograniczeniami, które określają wypukły politop, na którym ma być optymalizowana funkcja celu. W tym kontekście dwa wektory są porównywalne, gdy mają te same wymiary. Jeśli każdy wpis w pierwszym jest mniejszy lub równy odpowiadającemu wpisowi w drugim, to można powiedzieć, że pierwszy wektor jest mniejszy lub równy drugiemu wektorowi.

Programowanie liniowe może być stosowane na różnych kierunkach studiów. Jest szeroko stosowany w matematyce, w mniejszym stopniu w biznesie, ekonomii i niektórych problemach inżynierskich. Branże wykorzystujące modele programowania liniowego obejmują transport, energetykę, telekomunikację i produkcję. Okazał się przydatny w modelowaniu różnego rodzaju problemów w planowaniu , wyznaczaniu tras , harmonogramowaniu , przydzielaniu i projektowaniu.

Historia

Problem rozwiązywania układu nierówności liniowych sięga co najmniej od Fouriera , który w 1827 r. opublikował metodę ich rozwiązywania i od którego pochodzi nazwa metody eliminacji Fouriera-Motzkina .

W 1939 r. sformułowanie problemu programowania liniowego, który jest równoważny z ogólnym problemem programowania liniowego, podał sowiecki matematyk i ekonomista Leonid Kantorowicz , który również zaproponował metodę jego rozwiązania. W ten sposób rozwinął w czasie II wojny światowej planowanie wydatków i zwrotów w celu obniżenia kosztów wojska i zwiększenia strat nałożonych na wroga. Dzieło Kantorowicza było początkowo zaniedbane w ZSRR . Mniej więcej w tym samym czasie co Kantorovich, holendersko-amerykański ekonomista TC Koopmans sformułował klasyczne problemy ekonomiczne jako programy liniowe. Kantorovich i Koopmans podzielili później nagrodę Nobla w dziedzinie ekonomii z 1975 roku . W 1941 roku Frank Lauren Hitchcock sformułował również problemy transportowe jako programy liniowe i podał rozwiązanie bardzo podobne do późniejszej metody simplex . Hitchcock zmarł w 1957 roku, a nagroda Nobla nie jest przyznawana pośmiertnie.

W latach 1946-1947 George B. Dantzig niezależnie opracował ogólną formułę programowania liniowego do wykorzystania w problemach planowania w US Air Force. W 1947 r. Dantzig wynalazł również metodę simpleks, która po raz pierwszy skutecznie rozwiązała problem programowania liniowego w większości przypadków. Kiedy Dantzig zaaranżował spotkanie z Johnem von Neumannem, aby omówić jego metodę simpleks, Neumann natychmiast domyślił się teorii dualności , zdając sobie sprawę, że problem, nad którym pracował w teorii gier, jest równoważny. Dantzig dostarczył formalnego dowodu w niepublikowanym raporcie „Twierdzenie o nierównościach liniowych” z 5 stycznia 1948 r. Praca Dantziga została udostępniona opinii publicznej w 1951 r. W latach powojennych wiele branż stosowało je w swoim codziennym planowaniu.

Pierwotnym przykładem Dantziga było znalezienie najlepszego przydziału 70 osób do 70 miejsc pracy. Moc obliczeniowa wymagana do przetestowania wszystkich permutacji w celu wybrania najlepszego przypisania jest ogromna; liczba możliwych konfiguracji przewyższa liczbę cząstek w obserwowalnym wszechświecie . Jednak znalezienie optymalnego rozwiązania zajmuje tylko chwilę, przedstawiając problem jako program liniowy i stosując algorytm simpleks . Teoria stojąca za programowaniem liniowym drastycznie zmniejsza liczbę możliwych rozwiązań, które należy sprawdzić.

Leonid Khachiyan po raz pierwszy wykazał, że problem programowania liniowego można rozwiązać w czasie wielomianowym w 1979 roku, ale większy teoretyczny i praktyczny przełom w tej dziedzinie nastąpił w 1984 roku, kiedy Narendra Karmarkar wprowadził nową metodę punktu wewnętrznego do rozwiązywania problemów programowania liniowego.

Zastosowania

Programowanie liniowe jest szeroko stosowaną dziedziną optymalizacji z kilku powodów. Wiele praktycznych problemów w badaniach operacyjnych można wyrazić jako problemy programowania liniowego. Pewne szczególne przypadki programowania liniowego, takie jak problemy z przepływem sieciowym i problemy z przepływem wielu towarów , są uważane za wystarczająco ważne, aby wygenerować wiele badań nad wyspecjalizowanymi algorytmami ich rozwiązywania. Szereg algorytmów dla innych typów problemów optymalizacyjnych działa poprzez rozwiązywanie problemów LP jako podproblemów. Historycznie, idee programowania liniowego zainspirowały wiele głównych koncepcji teorii optymalizacji, takich jak dualność, dekompozycja oraz znaczenie wypukłości i jej uogólnień. Podobnie programowanie liniowe było intensywnie wykorzystywane we wczesnym tworzeniu mikroekonomii i jest obecnie wykorzystywane w zarządzaniu przedsiębiorstwem, takim jak planowanie, produkcja, transport, technologia i inne zagadnienia. Chociaż kwestie nowoczesnego zarządzania ciągle się zmieniają, większość firm chciałaby maksymalizować zyski i minimalizować koszty przy ograniczonych zasobach. Google używa programowania liniowego do stabilizacji filmów z YouTube. Dlatego wiele zagadnień można scharakteryzować jako problemy programowania liniowego.

Forma standardowa

Postać standardowa jest zwykłą i najbardziej intuicyjną formą opisu problemu programowania liniowego. Składa się z następujących trzech części:

  • Funkcja liniowa do maksymalizacji
np
  • Ograniczenia problemowe o następującej postaci
np
  • Zmienne nieujemne
np

Problem jest zwykle wyrażany w postaci macierzowej , a następnie staje się:

Inne formy, takie jak problemy minimalizacji, problemy z ograniczeniami dotyczącymi form alternatywnych, a także problemy dotyczące zmiennych ujemnych, zawsze można przepisać na równoważny problem w postaci standardowej.

Przykład

Załóżmy, że rolnik posiada kawałek ziemi rolniczych, powiedzmy l km 2 , które mają być obsadzone zarówno pszenicy lub jęczmienia lub jakiejś kombinacji obu. Rolnik ma ograniczoną ilość nawozu, kilogramów F i pestycydów, kilogramów P. Każdy kilometr kwadratowy pszenicy wymaga kilogramów F 1 nawozu i kilogramów pestycydów P 1 , podczas gdy każdy kilometr kwadratowy jęczmienia wymaga kilogramów F 2 nawozu i kilogramów pestycydu P 2 . Niech S 1 będzie ceną sprzedaży pszenicy na kilometr kwadratowy, a S 2 będzie ceną sprzedaży jęczmienia. Jeżeli powierzchnię ziemi obsadzonej pszenicą i jęczmieniem oznaczymy odpowiednio przez x 1 i x 2 , to zysk można maksymalizować wybierając optymalne wartości dla x 1 i x 2 . Problem ten można wyrazić następującym problemem programowania liniowego w postaci standardowej:

Wyolbrzymiać: (maksymalizacja przychodów – przychody to „funkcja celu”)
Z zastrzeżeniem: (limit całkowitej powierzchni)
(limit nawozu)
(limit pestycydów)
(nie można zasadzić obszaru ujemnego).

W formie macierzowej staje się to:

Wyolbrzymiać
podlega

Forma rozszerzona (forma luźna)

Problemy programowania liniowego mogą być przekształcone do postaci rozszerzonej w celu zastosowania wspólnej postaci algorytmu simpleks . Ta forma wprowadza nieujemne zmienne typu luz w celu zastąpienia nierówności równościami w ograniczeniach. Problemy można następnie zapisać w następującej postaci macierzy blokowej :

Maksymalizuj :

gdzie są nowo wprowadzone zmienne luzu, są zmiennymi decyzyjnymi i jest zmienną do maksymalizacji.

Przykład

Powyższy przykład został przekształcony w następującą postać rozszerzoną:

Wyolbrzymiać: (funkcja celu)
z zastrzeżeniem: (rozszerzone ograniczenie)
(rozszerzone ograniczenie)
(rozszerzone ograniczenie)

gdzie są (nieujemne) zmienne luzu, reprezentujące w tym przykładzie niewykorzystany obszar, ilość niewykorzystanego nawozu i ilość niewykorzystanego pestycydu.

W formie macierzowej staje się to:

Maksymalizuj :

Dwoistość

Każdy problem programowania liniowego, określany jako problem pierwotny , może zostać przekształcony w problem dualny , który zapewnia górną granicę optymalnej wartości problemu pierwotnego. W postaci macierzowej możemy wyrazić problem pierwotny jako:

Maksymalizuj c T x z zastrzeżeniem A xb , x ≥ 0;
z odpowiednim symetrycznym problemem dualnym,
Zminimalizuj b T y z zastrzeżeniem A T yc , y ≥ 0.

Alternatywną formułą pierwotną jest:

Maksymalizuj c T x z zastrzeżeniem A xb ;
z odpowiednim asymetrycznym problemem dualnym,
Zminimalizuj b T y z zastrzeżeniem A T y = c , y ≥ 0.

Istnieją dwie idee fundamentalne dla teorii dualności. Jednym z nich jest fakt, że (dla symetrycznego duala) dualem dualnego programu liniowego jest pierwotny pierwotny program liniowy. Dodatkowo każde możliwe rozwiązanie dla programu liniowego wyznacza granicę optymalnej wartości funkcji celu jego dualności. Twierdzenie o słabej dwoistości mówi, że wartość funkcji celu liczby dualnej w dowolnym możliwym rozwiązaniu jest zawsze większa lub równa wartości funkcji celu liczby pierwotnej w dowolnym możliwym rozwiązaniu. Twierdzenie o silnej dualności mówi, że jeśli liczba podstawowa ma optymalne rozwiązanie, x * , to układ dualny również ma optymalne rozwiązanie, y * , i c T x * = b T y * .

Program liniowy może być również nieograniczony lub niewykonalny. Teoria dualności mówi nam, że jeśli liczba podstawowa jest nieograniczona, to dualność jest niewykonalna przez twierdzenie o słabej dualności. Podobnie, jeśli liczba dualna jest nieograniczona, to element pierwotny musi być niewykonalny. Jednak możliwe jest, aby zarówno dualność, jak i pierwotna były niewykonalne. Zobacz podwójny program liniowy, aby uzyskać szczegółowe informacje i kilka innych przykładów.

Wariacje

Dwoistości krycia/pakowania

Obejmujące PR jest liniowy program w postaci:

Zminimalizuj: b T y ,
z zastrzeżeniem: A T yc , y ≥ 0 ,

tak, że macierz A i wektory b i c są nieujemne.

Dualem pokrywającego LP jest pakujący LP , liniowy program postaci:

Maksymalizacja: C T x ,
z zastrzeżeniem: A xb , x ≥ 0 ,

tak, że macierz A i wektory b i c są nieujemne.

Przykłady

Pokrywanie i pakowanie LPs zwykle powstają jako rozluźnienie programowania liniowego problemu kombinatorycznego i są ważne w badaniu algorytmów aproksymacyjnych . Na przykład, złagodzenie LP o zadanej problemu pakowania , z niezależnym problemu zadanej , a problemu z dopasowaniem pakują LPS. Na złagodzenie LP z problemem zestaw pokrywy , z problemem tytułowej wierzchołek oraz ustawionej wyróżniającym się problemem są również pokrycie LPS.

Znalezienie ułamkową zabarwienie o wykresie jest kolejnym przykładem przykrywającej LP. W tym przypadku istnieje jedno ograniczenie dla każdego wierzchołka wykresu i jedna zmienna dla każdego niezależnego zestawu wykresu.

luz uzupełniający

Możliwe jest uzyskanie optymalnego rozwiązania liczby podwójnej, gdy znane jest tylko optymalne rozwiązanie liczby pierwotnej przy użyciu komplementarnego twierdzenia o luzie. Twierdzenie mówi:

Załóżmy, że x  = ( x 1x 2 , ... ,  x n ) jest pierwotnie wykonalne i że y  = ( y 1y 2 , ... ,  y m ) jest podwójnie wykonalne. Niech ( w 1w 2 , ...,  w m ) oznaczają odpowiednie zmienne pierwotne luzu, a ( z 1z 2 , ... ,  z n ) oznaczają odpowiadające im zmienne o podwójnym luzie. Wtedy x i y są optymalne dla ich odpowiednich problemów wtedy i tylko wtedy, gdy

  • x j z j  = 0, dla j  = 1, 2, ... ,  n , i
  • w i y i  = 0, dla i  = 1, 2, ... ,  m .

Więc jeśli i -ta zmienna luzu liczby podstawowej nie jest równa zeru, to i -ta zmienna liczby dualnej jest równa zeru. Podobnie, jeśli j -ta zmienna luzu liczby dualnej nie jest równa zeru, to j -ta zmienna liczby podstawowej jest równa zeru.

Ten konieczny warunek optymalności wyraża dość prostą zasadę ekonomiczną. W standardowej formie (przy maksymalizacji), jeśli w ograniczonym zasobie pierwotnym jest luz (tj. są „resztki”), dodatkowe ilości tego zasobu nie mogą mieć żadnej wartości. Podobnie, jeśli występuje luka w wymogach ograniczenia nieujemności ceny podwójnej (ukrytej), tj. cena nie jest równa zeru, wówczas musi być ograniczona podaż (brak „resztek”).

Teoria

Istnienie optymalnych rozwiązań

Geometrycznie ograniczenia liniowe definiują obszar dopuszczalny , który jest wielościanem wypukłym . Funkcja liniowa jest funkcją wypukłą , co oznacza, że ​​każde minimum lokalne jest minimum globalnym ; podobnie funkcja liniowa jest funkcją wklęsłą , co oznacza, że ​​każde maksimum lokalne jest maksimum globalnym .

Optymalne rozwiązanie nie musi istnieć z dwóch powodów. Po pierwsze, jeśli ograniczenia są niespójne, to nie istnieje rozwiązanie możliwe do zrealizowania: Na przykład ograniczenia x  ≥ 2 i x  ≤ 1 nie mogą być spełnione łącznie; w tym przypadku mówimy, że LP jest niewykonalne . Po drugie, gdy politop jest nieograniczony w kierunku gradientu funkcji celu (gdzie gradient funkcji celu jest wektorem współczynników funkcji celu), wówczas nie zostanie osiągnięta optymalna wartość, ponieważ zawsze jest to możliwe lepsze niż jakakolwiek skończona wartość funkcji celu.

Optymalne wierzchołki (i promienie) wielościanów

W przeciwnym razie, jeśli istnieje rozwiązanie dopuszczalne i jeśli zbiór więzów jest ograniczony, to na granicy zbioru więzów zawsze osiągana jest wartość optymalna przez zasadę maksimum dla funkcji wypukłych (alternatywnie przez zasadę minimum dla funkcji wklęsłych ), ponieważ liniowa funkcje są zarówno wypukłe, jak i wklęsłe. Jednak niektóre problemy mają odrębne optymalne rozwiązania; na przykład problem ze znalezieniem możliwego rozwiązania układu nierówności liniowych jest problemem programowania liniowego, w którym funkcją celu jest funkcja zerowa (to znaczy stała funkcja przyjmująca wszędzie wartość zero). W przypadku tego problemu wykonalności z funkcją zerową dla funkcji celu, jeśli istnieją dwa różne rozwiązania, to każda wypukła kombinacja rozwiązań jest rozwiązaniem.

Wierzchołki politopu nazywane są również podstawowymi możliwymi rozwiązaniami . Powód takiego wyboru nazwy jest następujący. Niech d oznacza liczbę zmiennych. Wtedy podstawowe twierdzenie o nierównościach liniowych implikuje (dla możliwych problemów), że dla każdego wierzchołka x * możliwego obszaru LP istnieje zestaw ograniczeń nierówności d (lub mniej) z LP, tak że gdy traktujemy te ograniczenia d jako równości, unikalnym rozwiązaniem jest x * . W ten sposób możemy badać te wierzchołki, patrząc na pewne podzbiory zbioru wszystkich ograniczeń (zbiór dyskretny), a nie na kontinuum rozwiązań LP. Ta zasada leży u podstaw algorytmu simpleks rozwiązywania programów liniowych.

Algorytmy

W problemie programowania liniowego, seria ograniczeń liniowych tworzy wypukły, dopuszczalny obszar możliwych wartości dla tych zmiennych. W przypadku dwóch zmiennych obszar ten ma kształt wypukłego wielokąta prostego .

Algorytmy wymiany baz

Algorytm simpleksowy Dantzig

Simplex algorytm , opracowany przez George Gdańska 1947 rozwiązuje LP problemy konstruowania rozwiązanie dopuszczalne w wierzchołku Polytope a następnie idzie wzdłuż ścieżki na krawędziach Polytope na wierzchołki bez zmniejszania wartości funkcji celu dopóki na pewno osiągnięto optymalne. W wielu praktycznych problemach pojawia się „ przeciąganie ”: wykonuje się wiele punktów obrotu bez zwiększania funkcji celu. W rzadkich praktycznych problemach zwykłe wersje algorytmu simpleks mogą faktycznie „cyklować”. Aby uniknąć cykli, naukowcy opracowali nowe zasady obrotu.

W praktyce algorytm simpleks jest dość wydajny i można zagwarantować, że znajdzie globalne optimum, jeśli zostaną podjęte pewne środki ostrożności zapobiegające jeździe rowerem . Udowodniono, że algorytm simpleks skutecznie rozwiązuje problemy „losowe”, tj. w sześciennej liczbie kroków, co jest podobne do jego zachowania w przypadku problemów praktycznych.

Jednak algorytm simpleks ma słabe zachowanie w najgorszym przypadku: Klee i Minty skonstruowali rodzinę problemów programowania liniowego, dla których metoda simpleks wykonuje szereg kroków wykładniczych w rozmiarze problemu. W rzeczywistości przez pewien czas nie było wiadomo, czy problem programowania liniowego jest rozwiązywalny w czasie wielomianowym , czyli w klasie złożoności P .

Algorytm krzyżowy

Podobnie jak algorytm simpleks Dantziga, algorytm krzyżowy jest algorytmem wymiany baz, który obraca się między bazami. Algorytm krzyżowy nie musi jednak zachowywać wykonalności, ale może raczej zmieniać się od wykonalnej podstawy do niewykonalnej podstawy. Algorytm krzyżowy nie ma wielomianowej złożoności czasowej dla programowania liniowego. Oba algorytmy odwiedzić wszystkie 2 D narożniki (zaburzony) kostki w wymiarze  D , na kostce Klee-Minty , w najgorszym przypadku .

Punkt wewnętrzny

W przeciwieństwie do algorytmu simpleks, który znajduje optymalne rozwiązanie poprzez przechodzenie krawędzi między wierzchołkami na zbiorze wielościennym, metody punktów wewnętrznych poruszają się po wnętrzu obszaru dopuszczalnego.

Algorytm elipsoidalny, zgodnie z Khachiyan

Jest to pierwszy najgorszy przypadek algorytmu czasu wielomianowego , jaki kiedykolwiek znaleziono dla programowania liniowego. Aby rozwiązać problem, który ma n zmiennych i może być zakodowany w L bitach wejściowych, ten algorytm działa w czasie. Leonid Khachiyan rozwiązał ten długotrwały problem złożoności w 1979 roku, wprowadzając metodę elipsoidy . Analiza zbieżności ma poprzedników (w liczbach rzeczywistych), w szczególności metody iteracyjne opracowane przez Nauma Z. Shora oraz algorytmy aproksymacyjne Arkadi Nemirovskiego i D. Yudina.

Algorytm projekcyjny Karmarkara

Algorytm Chaczijana miał przełomowe znaczenie dla ustalenia możliwości rozwiązywania programów liniowych w czasie wielomianowym. Algorytm nie stanowił przełomu obliczeniowego, ponieważ metoda simpleks jest bardziej wydajna dla wszystkich poza specjalnie skonstruowanymi rodzinami programów liniowych.

Jednak algorytm Khachiyan zainspirował nowe kierunki badań w programowaniu liniowym. W 1984 roku N. Karmarkar zaproponował metodę projekcyjną programowania liniowego. Algorytm Karmarkara poprawił się na najgorszym przypadku wiązania wielomianowego Chaczijana (dawanie ). Karmarkar twierdził, że jego algorytm był znacznie szybszy w praktycznym LP niż metoda simplex, co wywołało duże zainteresowanie metodami punktów wewnętrznych. Od czasu odkrycia Karmarkara zaproponowano i przeanalizowano wiele metod punktu wewnętrznego.

87 algorytm Vaidyi

W 1987 roku Vaidya zaproponował algorytm działający w czasie.

Algorytm Vaidyi 89

W 1989 Vaidya opracował algorytm działający w czasie. Formalnie rzecz biorąc, algorytm wykonuje operacje arytmetyczne w najgorszym przypadku, gdzie to liczba ograniczeń, to liczba zmiennych, a to liczba bitów.

Wprowadź algorytmy czasu rzadkości

W 2015 roku Lee i Sidford pokazali, że można go rozwiązać w czasie, gdzie reprezentuje liczbę elementów niezerowych, a w najgorszym przypadku nadal przyjmuje .

Aktualny algorytm mnożenia macierzy

W 2019 r. Cohen, Lee i Song poprawiali od czasu do czasu czas działania, jest wykładnikiem mnożenia macierzy i jest podwójnym wykładnikiem mnożenia macierzy . jest (z grubsza) definiowana jako największa liczba, taka, że ​​można pomnożyć macierz przez macierz w czasie. W dalszej pracy Lee, Song i Zhang odwzorowują ten sam wynik inną metodą. Te dwa algorytmy pozostają, gdy i . Wynik dzięki Jiangowi, Songowi, Weinsteinowi i Zhangowi poprawił się do .

Porównanie metod punktów wewnętrznych i algorytmów simpleks

Obecna opinia jest taka, że ​​wydajność dobrych implementacji metod opartych na simpleksie i metod punktów wewnętrznych jest podobna w przypadku rutynowych zastosowań programowania liniowego. Jednak w przypadku określonych typów problemów LP może się zdarzyć, że jeden typ solwera jest lepszy od drugiego (czasem znacznie lepszy), a struktura rozwiązań generowanych przez metody punktów wewnętrznych w porównaniu z metodami opartymi na simpleksie znacznie różni się przy wsparciu zestaw aktywnych zmiennych jest zazwyczaj mniejszy dla tej ostatniej.

Otwarte problemy i ostatnie prace

Nierozwiązany problem w informatyce :

Czy programowanie liniowe dopuszcza algorytm silnie wielomianowy?

W teorii programowania liniowego istnieje kilka otwartych problemów, których rozwiązanie oznaczałoby fundamentalny przełom w matematyce i potencjalnie duży postęp w naszej zdolności do rozwiązywania wielkoskalowych programów liniowych.

  • Czy LP dopuszcza algorytm silnie wielomianowy ?
  • Czy LP dopuszcza algorytm silnie wielomianowy do znalezienia rozwiązania ściśle komplementarnego?
  • Czy LP dopuszcza algorytm wielomianowy w modelu obliczeń liczb rzeczywistych (koszt jednostkowy)?

Ten ściśle powiązany zestaw problemów został wymieniony przez Stephena Smale jako jeden z 18 największych nierozwiązanych problemów XXI wieku. Mówiąc słowami Smale, trzecia wersja problemu „jest głównym nierozwiązanym problemem teorii programowania liniowego”. Chociaż istnieją algorytmy do rozwiązywania programowania liniowego w słabo wielomianowym czasie, takie jak metody elipsoidalne i techniki punktu wewnętrznego , nie znaleziono jeszcze algorytmów, które umożliwiłyby działanie silnie wielomianowe w liczbie ograniczeń i liczbie zmiennych. Rozwój takich algorytmów byłby bardzo interesujący teoretycznie i być może umożliwiłby także praktyczne korzyści w rozwiązywaniu dużych LP.

Chociaż hipoteza Hirscha została niedawno odrzucona dla wyższych wymiarów, nadal pozostawia otwarte następujące pytania.

  • Czy istnieją reguły przestawne, które prowadzą do wariantów simpleks w czasie wielomianowym?
  • Czy wszystkie grafy politopowe mają średnicę ograniczoną wielomianem?

Pytania te dotyczą analizy wydajności i rozwoju metod simpleksowych. Ogromna wydajność algorytmu simpleks w praktyce, pomimo jego teoretycznej wydajności w czasie wykładniczym, wskazuje, że mogą istnieć odmiany simpleksu działające w czasie wielomianowym lub nawet silnie wielomianowym. Wiedza o istnieniu takich wariantów miałaby ogromne znaczenie praktyczne i teoretyczne, szczególnie jako podejście do decydowania, czy LP można rozwiązać w czasie silnie wielomianowym.

Algorytm simpleks i jego warianty należą do rodziny algorytmów podążania za krawędzią, nazwanych tak, ponieważ rozwiązują problemy programowania liniowego, przechodząc od wierzchołka do wierzchołka wzdłuż krawędzi wielotopu. Oznacza to, że ich teoretyczna wydajność jest ograniczona przez maksymalną liczbę krawędzi między dowolnymi dwoma wierzchołkami politopu LP. W rezultacie interesuje nas poznanie maksymalnej teoretycznej średnicy grafów grafów politopalnych . Udowodniono, że wszystkie politopy mają średnicę podwykładniczą. Niedawne obalenie hipotezy Hirscha jest pierwszym krokiem do udowodnienia, czy jakikolwiek wielotop ma średnicę superwielomianów. Jeśli takie politopy istnieją, żaden wariant podążający za krawędzią nie może działać w czasie wielomianowym. Pytania dotyczące średnicy politopu są przedmiotem niezależnego zainteresowania matematycznego.

Metody obrotu simplex zachowują pierwotną (lub podwójną) wykonalność. Z drugiej strony, metody przechyłu krzyżowego nie zachowują (pierwotnej lub podwójnej) wykonalności – mogą odwiedzać podstawy pierwotne wykonalne, podwójne wykonalne lub pierwotne i podwójne niewykonalne w dowolnej kolejności. Tego typu metody obrotowe badane są od lat 70. XX wieku. Zasadniczo metody te mają na celu znalezienie najkrótszej ścieżki obrotu na politopie ułożenia w ramach problemu programowania liniowego. Wiadomo, że w przeciwieństwie do grafów politopalnych, grafy ułożenia politopów mają małą średnicę, co pozwala na zastosowanie silnie wielomianowego algorytmu przestawnego krzyżowego bez rozwiązywania pytań o średnicę ogólnych politopów.

Niewiadome całkowite

Jeśli wszystkie nieznane zmienne muszą być liczbami całkowitymi, problem nazywa się programowaniem całkowitoliczbowym (IP) lub programowaniem liniowym całkowitoliczbowym (ILP). W przeciwieństwie do programowania liniowego, które można skutecznie rozwiązać w najgorszym przypadku, problemy programowania całkowitoliczbowego są w wielu praktycznych sytuacjach (tych ze zmiennymi ograniczonymi) NP-trudne . Programowanie liczb całkowitych 0–1 lub programowanie liczb całkowitych binarnych (BIP) to szczególny przypadek programowania liczb całkowitych, w którym zmienne muszą mieć wartość 0 lub 1 (zamiast arbitralnych liczb całkowitych). Problem ten jest również klasyfikowany jako NP-trudny, aw rzeczywistości wersja decyzyjna była jednym z 21 problemów NP-zupełnych Karpa .

Jeśli tylko niektóre z nieznanych zmiennych muszą być liczbami całkowitymi, to problem nazywa się problemem programowania mieszanych liczb całkowitych (MIP). Są one na ogół również NP-trudne, ponieważ są jeszcze bardziej ogólne niż programy ILP.

Istnieje jednak kilka ważnych podklas problemów IP i MIP, które można skutecznie rozwiązać, w szczególności problemy, w których macierz ograniczeń jest całkowicie jednomodułowa, a prawe strony ograniczeń są liczbami całkowitymi lub – ogólniej – gdy system ma całkowitą podwójną integralność (TDI).

Zaawansowane algorytmy rozwiązywania programów liniowych całkowitoliczbowych obejmują:

Takie algorytmy programowania całkowitoliczbowego omawiają Padberg i Beasley.

Całkowe programy liniowe

O programie liniowym w zmiennych rzeczywistych mówimy, że jest całkowy, jeśli ma co najmniej jedno optymalne rozwiązanie, które jest całkowe. Podobnie mówi się , że wielościan jest całkowy, jeśli dla wszystkich ograniczonych wykonalnych funkcji celu c , program liniowy ma optimum ze współrzędnymi całkowitymi. Jak zaobserwowali Edmonds i Giles w 1977, można równoważnie powiedzieć, że wielościan jest całkowy, jeśli dla każdej ograniczonej możliwej do wykonania całkowej funkcji celu c optymalna wartość programu liniowego jest liczbą całkowitą.

Całkowe programy liniowe mają kluczowe znaczenie w wielościennym aspekcie optymalizacji kombinatorycznej, ponieważ zapewniają alternatywną charakterystykę problemu. W szczególności, dla każdego problemu, wypukły kadłub rozwiązań jest integralnym wielościanem; jeśli ten wielościan ma ładny/zwarty opis, to możemy efektywnie znaleźć optymalne, możliwe do zrealizowania rozwiązanie dla dowolnego celu liniowego. I odwrotnie, jeśli możemy udowodnić, że relaksacja programowania liniowego jest całkowa, to jest to pożądany opis wypukłej powłoki możliwych (całkowych) rozwiązań.

Terminologia nie jest spójna w całej literaturze, dlatego należy uważać na rozróżnienie następujących dwóch pojęć:

  • w programie całkowitoliczbowym liniowym, opisanym w poprzedniej sekcji, zmienne są siłą ograniczone do liczb całkowitych, a problem ten jest ogólnie NP-trudny,
  • w całkowym programie liniowym, opisanym w tej sekcji, zmienne nie są ograniczone do liczb całkowitych, ale raczej udowodniono w jakiś sposób, że problem ciągły zawsze ma całkowitą wartość optymalną (zakładając, że c jest całką), a tę optymalną wartość można znaleźć efektywnie, ponieważ wszystkie programy liniowe o rozmiarze wielomianowym można rozwiązać w czasie wielomianowym.

Jednym z powszechnych sposobów udowodnienia, że ​​wielościan jest integralny, jest pokazanie, że jest on całkowicie jednomodułowy . Istnieją inne ogólne metody, w tym własność dekompozycji liczb całkowitych i całkowita podwójna integralność . Inne dobrze znane integralne LP obejmują pasujący polytope, sieciowy polyhedra, submodular flow polyhedra i przecięcie dwóch uogólnionych polymatroids/ g- polimatroids – np. patrz Schrijver 2003.

Solvery i języki skryptowe (programowania)

Licencje zezwalające :

Nazwa Licencja Krótka informacja
GLOP Apache v2 Open-source'owy rozwiązywacz programowania liniowego Google
Pyomo BSD Język modelowania typu open source do optymalizacji liniowej, mieszanej i nieliniowej na dużą skalę
SuanShu Apache v2 pakiet algorytmów optymalizacyjnych typu open source do rozwiązywania LP, QP , SOCP , SDP , SQP w Javie

Licencje typu copyleft (wzajemne) :

Nazwa Licencja Krótka informacja
Rozwiązywanie kazuarów LGPL zestaw narzędzi do przyrostowego rozwiązywania ograniczeń, który skutecznie rozwiązuje układy liniowych równości i nierówności
CLP CPL solver LP firmy COIN-OR
glpk GPL GNU Linear Programming Kit, solver LP/MILP z natywnym API C i licznymi (15) zewnętrznymi wrapperami dla innych języków. Specjalistyczne wsparcie dla sieci przepływowych . Zawiera język modelowania GNU MathProg i tłumacz podobny do AMPL .
Qoca GPL biblioteka do przyrostowego rozwiązywania układów równań liniowych z różnymi funkcjami celu
Projekt R GPL język programowania i środowisko oprogramowania do obliczeń statystycznych i grafiki

MINTO (Mixed Integer Optimizer, solwer programowania liczb całkowitych, który wykorzystuje algorytm branch and bound) ma publicznie dostępny kod źródłowy, ale nie jest oprogramowaniem typu open source.

Licencje własne :

Nazwa Krótka informacja
CELE Język modelowania pozwalający na modelowanie liniowych, mieszanych całkowitych i nieliniowych modeli optymalizacji. Oferuje również narzędzie do programowania z ograniczeniami. Algorytm, w postaci heurystyk lub metod dokładnych, takich jak generowanie rozgałęzień i wycinania, może być również zaimplementowany. Narzędzie wywołuje odpowiedni solver, taki jak CPLEX, Gurobi lub podobny, w celu rozwiązania problemu optymalizacji. Licencje akademickie są bezpłatne.
AMPL Popularny język modelowania do optymalizacji liniowej, mieszanej i nieliniowej na dużą skalę. Dostępna jest bezpłatna, limitowana wersja dla studentów (500 zmiennych i 500 ograniczeń).
APMonitor API do MATLAB i Pythona. Rozwiąż przykładowe problemy z programowaniem liniowym (LP) za pomocą MATLAB, Pythona lub interfejsu internetowego.
CPLEX Popularny solver z interfejsem API dla kilku języków programowania, a także ma język modelowania i współpracuje z AIMMS, AMPL, GAMS , MPL, OpenOpt, OPL Development Studio i TOMLAB . Darmowy do użytku akademickiego.
Funkcja rozwiązywania Excela Solver nieliniowy dostosowany do arkuszy kalkulacyjnych, w których oceny funkcji są oparte na przeliczanych komórkach. Wersja podstawowa dostępna jako standardowy dodatek do Excela.
FortMP
GAMS
Gurobi Solver z algorytmami równoległymi dla wielkoskalowych programów liniowych, programów kwadratowych i programów z mieszanymi liczbami całkowitymi. Darmowy do użytku akademickiego.
Biblioteki numeryczne IMSL Kolekcje algorytmów matematycznych i statystycznych dostępne w C/C++, Fortran, Java i C#/.NET. Procedury optymalizacji w bibliotekach IMSL obejmują nieograniczoną, liniowo i nieliniowo ograniczoną minimalizację oraz algorytmy programowania liniowego.
LINDO Solver z API do optymalizacji na dużą skalę programów liniowych, całkowitych, kwadratowych, stożkowych i ogólnie nieliniowych z rozszerzeniami programowania stochastycznego. Oferuje procedurę globalnej optymalizacji w celu znalezienia gwarantowanego globalnie optymalnego rozwiązania dla ogólnych programów nieliniowych ze zmiennymi ciągłymi i dyskretnymi. Posiada również interfejs API próbkowania statystycznego do integracji symulacji Monte-Carlo w ramach optymalizacji. Posiada język modelowania algebraicznego ( LINGO ) i umożliwia modelowanie w arkuszu kalkulacyjnym ( What'sBest ).
Klon Język programowania ogólnego przeznaczenia do obliczeń symbolicznych i numerycznych.
MATLAB Język programowania ogólnego przeznaczenia i zorientowany na macierz do obliczeń numerycznych. Programowanie liniowe w MATLAB wymaga Optimization Toolbox oprócz podstawowego produktu MATLAB; dostępne procedury obejmują INTLINPROG i LINPROG
Mathcad Edytor matematyczny WYSIWYG. Posiada funkcje do rozwiązywania zarówno liniowych, jak i nieliniowych problemów optymalizacji.
Matematyka Język programowania ogólnego przeznaczenia dla matematyki, w tym możliwości symboliczne i numeryczne.
MOSEK Solver do optymalizacji na dużą skalę z API dla kilku języków (C++,java,.net, Matlab i python).
Biblioteka numeryczna NAG Zbiór procedur matematycznych i statystycznych opracowanych przez Numerical Algorithms Group dla wielu języków programowania (C, C++, Fortran, Visual Basic, Java i C#) oraz pakietów (MATLAB, Excel, R, LabVIEW). Rozdział Optymalizacja Biblioteki NAG zawiera procedury rozwiązywania problemów programowania liniowego z rzadkimi i nierozrzedzonymi macierzami ograniczeń liniowych, wraz z procedurami optymalizacji kwadratów, nieliniowych, sum kwadratów funkcji liniowych lub nieliniowych z nieliniowymi, ograniczonymi lub bez ograniczeń . Biblioteka NAG zawiera procedury do optymalizacji lokalnej i globalnej oraz do rozwiązywania problemów ciągłych lub całkowitych.
OptimJ Język modelowania oparty na Javie do optymalizacji z dostępną bezpłatną wersją.
SAS /LUB Zestaw solwerów do optymalizacji liniowej, całkowitej, nieliniowej, bezpochodnej, sieciowej, kombinatorycznej i z ograniczeniami; algebraiczne modelowanie język OPTMODEL ; oraz różnorodne rozwiązania wertykalne ukierunkowane na konkretne problemy/rynki, z których wszystkie są w pełni zintegrowane z Systemem SAS .
SCIP Uniwersalny solwer programowania liczb całkowitych z ograniczeniami z naciskiem na MIP. Kompatybilny z językiem modelowania Zimpl . Bezpłatne do użytku akademickiego i dostępne w kodzie źródłowym.
XPRESS Solver dla wielkoskalowych programów liniowych, programów kwadratowych, ogólnych programów nieliniowych i mieszanych. Posiada API dla kilku języków programowania, posiada również język modelowania Mosel oraz współpracuje z AMPL, GAMS . Darmowy do użytku akademickiego.
VisSim Język wizualnych diagramów blokowych do symulacji układów dynamicznych .

Zobacz też

Uwagi

Bibliografia

  • Kantorowicz, LV (1940). "Об одном эффективном методе решения некоторых классов экстремальных проблем" [Nowa metoda rozwiązywania niektórych klas problemów ekstremalnych]. Doklady Akad Sci SSSR . 28 : 211–214.
  • FL Hitchcock: Dystrybucja produktu z kilku źródeł do wielu lokalizacji , Journal of Mathematics and Physics, 20, 1941, 224-230.
  • GB Dantzig: Maksymalizacja funkcji liniowej zmiennych podlegających nierównościom liniowym , 1947. Opublikowane s. 339-347 w TC Koopmans (red.): Activity Analysis of Production and Allocation , New York-London 1951 (Wiley & Chapman-Hall)
  • JE Beasley, redaktor. Postępy w programowaniu liniowym i całkowitym . Oxford Science, 1996. (Zbiór ankiet)
  • Mdły, Robert G. (1977). „Nowe skończone reguły obrotowe dla metody Simplex”. Matematyka badań operacyjnych . 2 (2): 103–107. doi : 10.1287/moor 2.2.103 . JSTOR  3689647 .
  • Karl-Heinz Borgwardt, Algorytm Simplex: analiza probabilistyczna , Algorytmy i kombinatoryka, tom 1, Springer-Verlag, 1987. (Średnie zachowanie w przypadku problemów losowych)
  • Richard W. Cottle, wyd. Podstawowe George B. Dantzig . Stanford Business Books, Stanford University Press, Stanford, Kalifornia, 2003. (Wybrane artykuły George B. Dantzig )
  • George B. Dantzig i Mukund N. Thapa. 1997. Programowanie liniowe 1: Wprowadzenie . Springer-Verlag.
  • George B. Dantzig i Mukund N. Thapa. 2003. Programowanie liniowe 2: Teoria i rozszerzenia . Springer-Verlag. (Kompleksowe, obejmujące m.in. algorytmy obrotu i punktu wewnętrznego, problemy wielkoskalowe, dekompozycję według Dantzig-Wolfe i Benders oraz wprowadzenie programowania stochastycznego .)
  • Edmonds, Jack; Giles, Rick (1977). „Relacja Min-Max dla funkcji submodularnych na wykresach”. Studia z programowania całkowitoliczbowego . Roczniki Matematyki Dyskretnej. 1 . s. 185–204. doi : 10.1016/S0167-5060(08)70734-9 . Numer ISBN 978-0-7204-0765-5.
  • Fukuda, Komei; Terlaky, Tamás (1997). Thomasa M. Lieblinga; Dominique de Werra (wyd.). „Metody krzyżowe: świeże spojrzenie na algorytmy przestawne”. Programowanie matematyczne, seria B . 79 (1–3): 369–395. CiteSeerX  10.1.1.36.9373 . doi : 10.1007/BF02614325 . MR  1464775 . S2CID  2794181 .
  • Gondzio, Jacek; Terlaky, Tamás (1996). „3 Obliczeniowy widok metod punktów wewnętrznych” . W JE Beasley (red.). Postępy w programowaniu liniowym i całkowitym . Oxford Lecture Series in Mathematics and its Applications. 4 . Nowy Jork: Oxford University Press. s. 103–144. MR  1438311 . Plik postscriptowy na stronie Gondzio oraz na stronie McMaster University Terlaky .
  • Murty, Katta G. (1983). Programowanie liniowe . Nowy Jork: John Wiley & Sons, Inc. s. xix+482. Numer ISBN 978-0-471-09725-9. MR  0720547 . (kompleksowe odniesienie do podejść klasycznych).
  • Evar D. Nering i Albert W. Tucker , 1993, Linear Programs and Related Problems , Academic Press. (podstawowy)
  • M. Padberg, Linear Optimization and Extensions , Second Edition, Springer-Verlag, 1999. (starannie napisany opis pierwotnych i dualnych algorytmów simpleksowych oraz algorytmów projekcyjnych, ze wstępem do programowania liniowego całkowitoliczbowego – opisujący problem komiwojażera dla Odyseusza .)
  • Christos H. Papadimitriou i Kenneth Steiglitz, Optymalizacja kombinatoryczna: algorytmy i złożoność , Poprawiona publikacja z nową przedmową, Dover. (Informatyka)
  • Michael J. Todd (luty 2002). „Wiele aspektów programowania liniowego”. Programowanie matematyczne . 91 (3): 417–436. doi : 10.1007/s101070100261 . S2CID  6464735 . (Ankieta na zaproszenie, z Międzynarodowego Sympozjum Programowania Matematycznego.)
  • Vanderbei, Robert J. (2001). Programowanie liniowe: podstawy i rozszerzenia . Springer Verlag.
  • Vazirani, Vijay V. (2001). Algorytmy aproksymacyjne . Springer-Verlag. Numer ISBN 978-3-540-65367-7. (Informatyka)

Dalsza lektura

Zewnętrzne linki