Problem wykonalności programowania liniowego ze ścisłymi ograniczeniami dodatnimi

15

Istnieje system więzów liniowych . Chciałbym znaleźć ściśle dodatni wektor x > 0, który spełnia te ograniczenia. Oznacza to, że x i > 0 jest wymagane dla każdego składnika x i z x . Jak mogę użyć solwera LP, aby znaleźć tak ściśle dodatni wektor x (lub potwierdzić, że nie istnieje x )? Nie mogę po prostu wprowadzić innego systemu ograniczeń x i > 0Axbx>0xi>0xixxxxi>0, ponieważ równość musi być zawsze dozwolona w LP - ale mogę używać solvera LP kilka razy, ze zmieniającymi się funkcjami celu. Myślę, że powinienem użyć metody zmiennej luzu, ale nie wiem jak.

sara
źródło

Odpowiedzi:

15

Możesz obejść problem wyboru małej ϵ>0 , będąc nieco bardziej ambitnym: spróbuj znaleźć x tak, że Axb i że najmniejszy wpis w x jest największy z możliwych.

W tym celu wprowadź nową zmienną

y=[xϵ]Rn+1
(jeśli x było w Rn ) i rozwiąż następujący problem za pomocą solwera LP
maxy[00 1]ys.t.[A 0]yband0[10010101011]y.

Jest to przeformułowanie następującego problemu:

maxϵs.tAxbandxϵ1.

Sztylet
źródło
dobrze zrobione, jest to odpowiednik sztuczki, którą współautorem użyłem właśnie w niedawnym artykule i zdecydowanie przewyższa podejście, które zasugerowałem.
Aron Ahmadia
Zgoda. Dobra gra, proszę pana.
Geoff Oxberry
Przeformułowany problem może mieć nieograniczony cel w przypadkach, w których odpowiedź na pierwotny problem jest trywialna. Na przykład, jeśli system ograniczeń jest tylko . Jest to w porządku, o ile sprawdzasz, czy jest to wykonalne, optymalne lub nieograniczone w statusie zwracanym twojego solvera lp, lub wyraźnie przypisujesz ϵ . x1ϵ
David Nehme
@DavidNehme: Można dodać ograniczenie aby uzyskać ograniczony cel. yn+11
Arnold Neumaier
5

W przypadku problemu z wykonalnością LP nie użyłbym standardowego simpleksu. Standardowe pierwotne (lub podwójne) algorytmy simpleksowe odwiedzą tylko wierzchołki możliwego zestawu pierwotnych (lub podwójnych) problemów.

Niech wykonalnym zestawem problemu, który faktycznie chcesz rozwiązać, będzie , i załóżmy, że zamiast tego rozwiązałeś problem ( F ε ):F={x:Axb,x>0}Fε

minx0s.t.Axbxε1.

Najbliższym przybliżeniem problemu, który chcesz rozwiązać, jest , który przyznaje nieco za dużo punktów. Problem polega na tym, że granica dodatniej ortant (tj. Zbiór B = { x : x0 , i : x i = 0 } może stanowić część granicy możliwego zestawu F 0 . jak wykluczyć te punkty. Jednym ze sposobów jest zrobienie tego, co sugerował Aron, czyli ustawienie εF0B={x:x0,i:xi=0}F0εdo niewielkiej dodatniej wartości, a następnie użyj dowolnego standardowego algorytmu LP. Ta strategia jest dobra i prawdopodobnie będzie działać w wielu różnych sytuacjach. Jednak zawiedzie, jeśli jest nieosiągalny. Wiemy, że F 0F F ε dla wszystkich ε > 0 (do nadużywania notacji i odwoływania się do możliwego zestawu przez odpowiadający jej problem), i możliwe jest, że nawet jeśli wybierzesz małe dodatnie wartości ε , solver LP wskaże że twoje LP jest niemożliwe.FεF0FFεε>0ε

Dla solver LP, chciałbym użyć dowolnego algorytmu punkt wewnętrzny do płyt, które rozpoczyna się możliwym momencie i pozostaje wykonalne, co jest kolejnym sposobem, aby wykluczyć punkty . Nie musisz przedstawiać wykonalnego algorytmu; standardowe solwery zrobią to za Ciebie. Metody takie jak skalowanie afiniczne, redukcja potencjału i metody barierowe tworzą pomocnicze LP, które znajdą możliwe rozwiązania, a iteracje tych algorytmów przemierzają wnętrze wykonalnego regionu. Musisz tylko zlokalizować jeden punkt w twoim możliwym regionie, więc dopóki problemy pomocnicze używane przez solwery LP zlokalizują wykonalny punkt dla twojego problemu, a ten wykonalny punkt jest ściśle pozytywny, powinieneś być w porządku. Jeśli rozwiązanie F ε nie powiedzie się dla małych dodatnich wartości εBFεε, nadal możesz być w stanie użyć tych metod do zlokalizowania ściśle pozytywnego możliwego punktu w obrębie .F0

Nie używaj simpleksu, ponieważ będzie on badał tylko wierzchołki , co jest dokładnie tym, czego chcesz uniknąć.Fε

Geoff Oxberry
źródło
4

Problemy wykonalności są nieco trudniejszą grą niż ogólne problemy liniowe, które zauważyłeś. Jeśli rozwiązujesz w przybliżeniu (używając reprezentacji zmiennoprzecinkowej układu równań i ograniczeń), uzasadnione jest wymaganie , gdzie ϵ jest bardzo małą wartością liczbową, wystarczająco dużą, aby zapewnić, że x i faktycznie mieszka w + , ale na tyle mały, że rozwiązanie na granicy nie jest brane pod uwagę.xi>=ϵϵxi+

Być może będziesz musiał dostosować , a twoje rozwiązanie zostanie zakwalifikowane do „w granicach ϵ ”, ale jest to wystarczające w wielu sytuacjach.ϵϵ

Aron Ahmadia
źródło
2

Odpowiedź udzielona przez eeismail należy przeczytać uważnie, patrz pp

max(x1+x2)

św

x1+x21

x1,x20

Ma rozwiązania i ( 0 , 1 ), a także inne (zdegenerowane). Ogólny charakter tego pytania sugeruje, że te przypadki również muszą być traktowane.(1,0)(0,1)

Ponieważ możesz wybrać funkcję celu, możesz spróbować iteracyjnie ją zmodyfikować. Np. Zacznij od wszystkich współczynników dla wszystkich zmiennych równych jedności, sprawdź, czy uzyskasz odpowiednie rozwiązanie. Jeśli jedna zmienna ma wartość zero, zwiększ jej współczynnik i zacznij od nowa ...

Chociaż nie mogę dać matematycznego dowodu, że to działa (lub dobrze zdefiniowana procedura modyfikowania funkcji celu). Mam nadzieję, że to pomoże :)

Dan
źródło
Jeśli jednak masz dużą liczbę zdegenerowanych rozwiązań, jak poradziłbyś sobie z tym liczbowo? Czy prawie żaden numeryczny solver nie wyśle ​​ostrzeżenia (lub gorzej) o rozwiązaniu tego problemu?
aeismail
Nie zrobią tego; zwrócą tylko pierwsze napotkane optymalne rozwiązanie. Generowanie rozwiązań polega na dodawaniu płaszczyzn cięcia (lub innych ograniczeń), które wykluczają wcześniej obliczone optymalne rozwiązania. W takim przypadku dodanie takich płaszczyzn cięcia umożliwi zwrócenie dyskretnego przybliżenia nieskończonego zestawu optymalnych rozwiązań.
Geoff Oxberry
Uważałbym to za dziwną decyzję programową; dlaczego nie chcesz powiedzieć użytkownikowi, że funkcja celu działała dziwnie w sąsiedztwie zgłaszanego rozwiązania? W przypadku rozwiązania nieliniowego widziałem problem z ustaleniem, co się dzieje; ale czy nie powinno to być łatwiejsze do odróżnienia w przypadku systemu liniowego?
aeismail
Musiałbym pomyśleć o tym, jak można wykryć zwyrodnienie, faktycznie konstruując problemy, ale zazwyczaj użytkownicy chcą optymalnego rozwiązania, więc najważniejszą informacją dla LP jest zwrot, jeśli rozwiązanie jest optymalne, wykonalne (ale nie optymalne), niemożliwy lub nieograniczony. (Te statusy są w rzeczywistości tym, co powróciłby solver taki jak CPLEX.) Degeneracja jest przede wszystkim zagadnieniem teoretycznym; jedynym powodem, dla którego zostanie to omówione w kontekście liczbowym, jest albo projektowanie algorytmu, albo w praktyce, aby zauważyć, że degeneracja zwykle spowalnia solver.
Geoff Oxberry