Mam rodzinę problemów z programowaniem liniowym: maksymalizuj z zastrzeżeniem , . Elementy, , i są liczbami całkowitymi nieujemnymi, ściśle pozytywne. ( powinien być również integralny, ale będę się tym martwić później).
W mojej aplikacji często zdarza się, że współczynniki i są takie, że uproszczony algorytm jednoprzebiegowy zapewnia optymalne rozwiązanie dla każdego wyboru : algorytm jednoprzebiegowy określa elementy po kolei, wybierając każdy być największą możliwą wartością zgodną z już ustalonymi wartościami . W języku simpleks sekwencja wprowadzania zmiennych jest po prostu do i kończy się po kroki. To oszczędza dużo czasu w porównaniu do full-on simplex.
Ten algorytm działa, gdy kolumny i elementy zostały posortowane od „taniego” do „drogiego”. „Tania” zmienna to kolumna z ogólnie małymi wartościami, dla których odpowiedni element jest duży: dla tego elementu otrzymujesz dużą wydajność przy niewielkim zapotrzebowaniu na ograniczenie . Algorytm mówi więc „najpierw wykonaj proste czynności”.
Moje pytanie brzmi: jaką właściwość i zapewniłby nas, że ten uproszczony algorytm działa dla wszystkich ? Moje początkowe przypuszczenie było takie, że niezerowe elementy powinna rosnąć w każdym rzędzie, ale to nie jest poprawne.
Oto kilka przykładów : , , , . Dla wszystkich tych algorytm sekwencyjny zapewnia optymalne rozwiązanie dla wszystkich wartości (przez eksperymenty numeryczne). jest jedynym, dla którego działają również wszystkie permutacje kolumn. i są szczególnie zaskakujące, ponieważ wygląda drożej niż i droższe niż .
Byłbym niezmiernie wdzięczny za wszelkie wskazówki do literatury, za wszelkie podobne problemy lub sugestie. Musiały istnieć inne przypadki, w których niektóre zmienne można określić jako „tańsze” niż inne i można je bezpiecznie wykonać jako pierwsze. Po całej pracy nad programowaniem liniowym na przestrzeni lat wydaje się, że coś podobnego musiało się wydarzyć, ale nie udało mi się go znaleźć.