Zadanie 4: Programowanie liniowe
Transkrypt
Zadanie 4: Programowanie liniowe
Informatyka, studia dzienne, mgr II st. semestr I Metody obliczeniowe optymalizacji 2011/2012 Prowadzący: dr inż. Jan Stolarek grupa środy, 10:15 Data oddania: Ocena: Andrzej Stasiak 178736 Grzegorz Graczyk 178717 Zadanie 4: Programowanie liniowe∗ 1. Cel Napisać program implementujący rozwiązywanie zagadnienia programowania liniowego za pomocą dwufazowej metody sympleksu. Program powinien wykrywać sytuacje patologiczne (brak rozwiązań, nieskończenie wiele rozwiązań). Dodatkowym atutem programu będzie wyświetlanie tablicy sympleksowej. 2. Opis rozwiązania Implementacji dokonano dla środowiska Octave. Dane wejściowe programu to początkowa postać tablicy sympleksowej. Ze wzglęgu na skomplikowaną postać danych wejściowych (zbiór nierówności), jest ona zapisana w pierwszych linijkach kodu programu, co pozwala na jej wygodne edytowanie. Użytkownik musi podać zbiór ograniczeń w bazowej postaci kanonicznej (ze zmiennymi swobodnymi i zmiennymi sztucznymi). Rozwiązanie zadania wykorzystuje operacje na tablicy sympleksowej do określenia optymalnego zbioru zmiennych bazowych. W trakcie kolejnych operacji wszystkie pośrednie tablice sympleksowe wyświetlane są na ekranie. Wyświetlana jest również liczba kroków, które doprowadziły do rozwiązania. Program rozpoznaje sytuacje patologiczne: brak rozwiązań, nieograniczoność funkcji celu i niejednoznaczność rozwiązania. Brak rozwiązań występuje, gdy układ nierówności jest sprzeczny. Sytuacja ta objawia się pozostaniem wśród zmiennych bazowych zmiennej sztucz∗ SVN: zadanie4 https://serce.ics.p.lodz.pl/svn/labs/moo/js_sr1015/idgrupy/ 1 nej. Nieograniczoność funkcji celu rozpoznawana jest, gdy kolumna zmiennej wchodzącej do bazy w danym kroku zawiera same niedodatnie wartości. Niejednoznaczność rozwiązania widoczna jest, gdy w znalezionym rozwiązaniu występują zerowe wartości wskaźników optymalności dla zmiennych niebazowych. 3. Wyniki Przy użyciu programu przeanalaziowano działanie metody dla 4 przypadków: układu z jednym rozwiązaniem, układu z nieskończenie wieloma rozwiązania, układu sprzecznego i układu z nieograniczoną funkcją celu. Tabela 1. Tablica sympleksowa układu z jednym rozwiązaniem. Funkcja celu x3 x4 x6 x1 x2 −6 −5 9 7 1 1 3 2 x3 0 1 0 0 x4 0 0 1 0 x5 x 6 0 Inf 0 0 0 0 −1 1 b 0 63 8 6 Dla przypadku 1. program znalazł prawidłowe rozwiązanie: x1 = 3.5, x2 = 4.5, x5 = 13.5. Poszukiwanie zajęło 3 kroki. Tabela 2. Tablica sympleksowa układu sprzecznego. Funkcja celu x4 x5 x1 x2 −6 −5 1 1 3 2 x3 x4 x5 0 Inf 0 −1 1 0 0 0 1 b 0 8 6 Dla przypadku 2. program prawidłowo stwierdził, że układ nie ma żadnych rozwiązań po 2 krokach. Tabela 3. Tablica sympleksowa układu z nieograniczoną funkcją celu. Funkcja celu x4 x5 x1 x2 −2 −3 1 1 1 0 x3 x4 x5 0 Inf 0 −1 1 0 0 0 1 b 0 6 7 Dla przypadku 3. program prawidłowo stwierdził, że funkcja celu nie jest ograniczona i zakończył pracę po 2 krokach. Tabela 4. Tablica sympleksowa układu z nieskończoną liczbą rozwiązań. Funkcja celu x3 x5 x1 x2 −2 −2 1 1 3 2 x3 0 1 0 x4 x5 0 Inf 0 0 −1 1 b 0 8 6 Dla przypadku 4. program po 3 krokach stwierdził, że zadanie ma nieskończenie wiele rozwiązań, i znalazł jedno z nich: x2 = 8, x4 = 10 2 4. Wnioski Wyniki wskazują, że metoda sympleksu pozwala bardzo szybko znaleźć rozwiązanie lub stwierdzić jego brak. Daje też możliwość łatwego określenia wystąpnienia sytuacji szczególnej. Jest to bardzo dobra metoda rozwiązywania problemów programowania liniowego, lecz jednocześnie jej zastosowanie ogranicza się tylko do tego typu zadań, gdyż opiera się na założeniu liniowości funkcji celu. Literatura Arkadiusz Tomczyk, materiały do wykładu Metody obliczeniowe optymalizacji. http://simplex.republika.pl/ 3