/ / Ustalenie, czy program całkowitoliczbowy jest niewykonalny - optymalizacja matematyczna, programowanie całkowite, programowanie liczb całkowitych mieszanych

Ustalenie, czy program integer jest niemożliwy - optymalizacja matematyczna, programowanie całkowite, programowanie mieszane

Załóżmy, że mamy program liczb całkowitych lub liczb całkowitych z kilkoma tysiącami ograniczeń.

Jak możemy ustalić, czy ten IP / MIP jest wykonalny?

Odpowiedzi:

3 dla odpowiedzi № 1

Załóżmy, że mamy problem z programowaniem całkowitoliczbowym lub całkowitym z kilkoma tysiącami ograniczeń.

The liczba ograniczeń nie trzeba skalować z nieefektywnością: zwykle ograniczenia ograniczają liczbę możliwości, które należy wyliczyć. Inny związany z tym problem losowy 3-SAT, gdzie na przykład najtrudniejsze problemy to te, w których liczba ograniczeń skala się w przybliżeniu ze współczynnikiem cztery w porównaniu z liczbą zmiennych.

W jaki sposób możemy zrealizować ten problem w ogóle?

Istnieje dobre (mieszane) programowanie całkowite Solvers dostępne, które mogą rozwiązać niektóre (trudne) problemy w rozsądnym czasie. Niemniej jednak znane są ogólne problemy z programowaniem całkowitoliczbowym NP-trudny. Oznacza to, że prawdopodobnie nie znajdziealgorytm, który rozwiązuje te problemy ogólnie w rozsądnym czasie. Czasami mamy szczęście i problem z programowaniem całkowitym ma jakąś strukturę, którą możemy wykorzystać, aby efektywnie znaleźć rozwiązanie, ale jak już powiedziano: ogólnie jest to trudny problem.

Solvers zwykle pracują z rozgałęzione i powiązane gdzie przez relaks domenyzmienne są ograniczone, aż do osiągnięcia stabilnego warunku. Następnie solver wybiera wartość jednej ze zmiennych (która zmienna i jaka wartość najpierw jest mocno badana, ponieważ mają one duży wpływ na znalezienie rozwiązania). Następnie problem zostaje złagodzony, dopóki nie zostanie udowodnione, że nie ma rozwiązania z tą wartością lub system musi przypisać nową wartość. Jeśli okazuje się, że model jest niezadowalający w danym zestawie przypisanych zmiennych, system ślady: cofa niektóre przypisane zmienne iponownie przypisuje wartości do nich i kontynuuje wyszukiwanie. Ostatecznie zostanie znalezione rozwiązanie (ale może to zająć bardzo dużo czasu) lub solver może udowodnić, że problem jest niezadowalający (nie istnieje rozwiązanie). W przypadku znalezienia rozwiązania nie jesteśmy jeszcze skończeni: ponieważ zazwyczaj jesteśmy zainteresowani optymalny rozwiązanie w zakresie optymalizacjifunkcjonować. W takim przypadku dodajemy ograniczenie, które od teraz szukamy rozwiązań, które są lepsze niż dotychczas założone. Robimy to, dopóki nie zabraknie nowych rozwiązań, w którym to przypadku udowodniliśmy optymalność.

W przypadku, gdy łatwo jest znaleźć właściwe rozwiązania (w odniesieniu do twardych ograniczeń), ale trudno jest uzyskać najlepsze rozwiązanie, można użyć metaheurystyka do przybliżony najlepszym rozwiązaniem. Tutaj rozważa się „przestrzeń rozwiązania„rozwiązań, które spełniają twarde ograniczenia. Konstruując szereg „funkcji mutacji”, które przyjmują poprawne rozwiązanie i przekształcają je w inne rozwiązanie, można wygenerować algorytm, który szuka najlepszego rozwiązania, iteracyjnie manipulując rozwiązaniem. Jeśli zabraknie nam czasu, zwracamy najlepsze rozwiązanie. Chociaż nigdy nie mamy gwarancji, że mamy optymalny rozwiązanie, zazwyczaj metaheurystyka działa całkiem dobrze i zwraca a blisko optymalnego rozwiązanie. Niektóre takie metaheurystyki Symulowanego wyżarzania może zapewnić gwarancje statystyczne w odniesieniu do jakości rozwiązania.


3 dla odpowiedzi № 2

Jedną rzeczą, którą możesz powiedzieć na pewno, jest to, że jeśli liniowe rozluźnienie problemu jest już niemożliwe, to jest problem z programowaniem całkowitym.