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