Badania operacyjne. Wykład 2
PROGRAMOWANIE LINIOWE Istnieje wiele sytuacji decyzyjnych, które można opisać za pomocą programu liniowego, tzn. modelu, w którym zarówno warunki ograniczające jak i funkcja celu są funkcjami liniowymi. Uniwersalną metodą rozwiązywania zadań programowania liniowego jest algorytm simpleks – procedura iteracyjna. W sytuacji, gdy w zadaniu występują dwie zmienne decyzyjne, zadanie można rozwiązać metodą geometryczną. W szczególnym przypadku, gdy w modelu występują więcej niż dwie zmienne decyzyjne, lecz tylko dwa ograniczenia, zadanie można rozwiązać wykorzystując zależność pomiędzy programem pierwotnym i dualnym (w programie dualnym będą wtedy dwie zmienne decyzyjne i można go rozwiązać metodą geometryczną).
POSTACIE ZADAŃ PROGRAMOWAIA LINIOWEGO Każde zadanie programowania liniowego jest szczególnym przypadkiem zadań programowania matematycznego. Ogólna postać zadania programowania matematycznego jest następująca: (max) z = f(x) przy warunkach ograniczających: gi(x) = 0 (i = 1, 2 ..., m) gdzie zR, a x RN jest wektorem zmiennych decyzyjnych. Jest to zatem zagadnienie poszukiwania ekstremum warunkowego funkcji. Funkcja f nosi nazwę funkcji celu.
Dowolne rozwiązanie x RN spełniające układ równań i nierówności: gi(x) = 0 (i = 1, 2 ..., m) nosi nazwę rozwiązania dopuszczalnego. Zbiór wszystkich rozwiązań dopuszczalnych, będziemy oznaczać przez X. Jeżeli zbiór rozwiązań dopuszczalnych jest zbiorem pustym (x = ), to zadanie nazywamy sprzecznym. Rozwiązanie jest rozwiązaniem optymalnym zadania programowania matematycznego: (max) z = f(x) p.o jeżeli dla dowolnego xX spełniony jest warunek
W przypadku, gdy zadanie nie jest sprzeczne i przy tym nie istnieje spełniające powyższy warunek, to mówimy, że zadanie nie ma skończonego rozwiązania optymalnego. Zadanie może mieć również więcej niż jedno rozwiązanie optymalne, jeżeli warunek: spełniony jest dla więcej niż jednego rozwiązania. Dla dowolnej funkcji z = f(x) spełnione są równości (min) f(x) = - (max) [-f(x)] (max) f(x) = - (min) [-f(x)] Równości przedstawione wyżej pozwalają przekształcić dowolne zdanie programowania matematycznego do zdania równoważnego z przeciwnym rodzajem ekstremum.
Przykład (min) z = przy warunkach ograniczających: jest równoważne zadaniu z tym samym warunkiem ograniczającym. (max)
Jeżeli w zadaniu: (max) z = f(x) p.o gi (x) = 0 (i = 1, 2 ..., m) funkcja celu oraz warunki ograniczające są liniowe, to zadanie takie nazywamy zadaniem programowania liniowego. Jego postać ogólna jest następująca (min lub max) z = p. o Ax = b gdzie jest wektorem współczynników kosztu funkcji celu, jest wektorem zmiennych zadania, A = jest macierzą ograniczeń o rozmiarach mn, b = (
Postać ta nie jest wygodna dla określania różnych własności zadań Postać ta nie jest wygodna dla określania różnych własności zadań. Dlatego sformułujemy dwie inne postacie zadań programowania liniowego (będące szczególnym przypadkiem postaci ogólnej): Zadanie o postaci standardowej: (max)z = przy ograniczeniach: Ax = b (b 0) x 0 postać standardowa wymaga aby zadanie było zadaniem na maksimum a warunki ograniczające miały postać równości z nieujemnym wyrazem wolnym oraz wektor x był nie ujemny. Zadanie o postaci klasycznej: Ax b
Zadanie o postaci ogólnej można przekształcić do postaci standardowej lub mieszanej za pomocą następujących czynności: Zmiana rodzaju ekstremum Zamiana zmiennych dowolnych co do znaku na zmienne nieujemne. Jeżeli zmienna x jest dowolna co do znaku, to podstawiając x = x+ - x- gdzie x+ = max {0, x}, x- = max{0, -x} otrzymujemy przedstawienie tej zmiennej za pomocą nieujemnych zmiennych x+ i x-. Zamiana nierówności na równość. Nierówność można zastąpić równościami: nowo wprowadzona zmienna xd nosi nazwę zmiennej dodatkowej. Zamiana równości na nierówność. Równanie aTx = b jest równoważne dwóm nierównościom: aTx ≤ b -aTx ≤ -b Dowolna postać wyjściowa zadania oraz postać otrzymana z niej w wyniku zastosowania powyższych czynności są sobie równoważne.
Interpretacja graficzna zadań programowania liniowego Interpretacja graficzna zadania programowania liniowego polega na geometrycznym wyznaczaniu zbioru rozwiązań dopuszczalnych X, co sprowadza się do graficznego rozwiązania układu nierówności i równań stanowiących warunki ograniczające. Rozwiązanie optymalne można wyznaczyć znając warstwicę funkcji celu, odpowiadającą największej wartości tej funkcji w zbiorze X dla maksimum.
Przykład Dane jest zadanie (max)z = p.o Rozwiązanie: rozwiązaniem nierówności: jest prosta przechodząca przez punkty [-2, 0], [0,2] rozwiązaniem nierówności: jest prosta przechodząca przez punkty [0, 3], [4, 0]. Zadanie to ma jedno rozwiązanie optymalne przy którym funkcja celu osiąga wartość
Jeżeli zbiór X rozwiązań dopuszczalnych zadania programowania liniowego nie jest pusty (zadanie nie jest sprzeczne), to: albo zadanie ma skończone rozwiązanie optymalne, albo nie ma skończonego rozwiązania optymalnego.
Właściwości rozwiązań zadań programowania liniowego Rozwiązaniem bazowym układu równań Ax = b nazywamy rozwiązanie układu powstałego z układu Ax = b przez przyrównanie do zera n - m zmiennych przy założeniu, że wyznacznik współczynników tych m zmiennych jest niezerowy. Te m zmiennych nazywamy zmiennymi bazowymi. Rozwiązaniem bazowym dopuszczalnym nazywamy rozwiązanie bazowe, spełniające warunek x 0. Niesprzeczny układ równań liniowych ma co najmniej jedno rozwiązanie bazowe. Jeżeli zbiór rozwiązań dopuszczalnych X nie jest pusty, to ma co najmniej jeden punkt wierzchołkowy. Ponadto liczba punktów wierzchołkowych zbioru X jest skończona, ponieważ układ równań Ax = b (b 0) ma skończoną liczbę rozwiązań bazowych. Każdemu wierzchołkowi zbioru X odpowiada pewna baza utworzona z kolumn macierzy A.
Rozwiązań optymalnych zadania programowania liniowego należy szukać wśród dopuszczalnych rozwiązań bazowych układu ograniczeń Ax = b (b 0). Gdy zadanie ma nieskończenie wiele rozwiązań optymalnych, tylko niektóre z nich są rozwiązaniami bazowymi. Znajdując bazowe rozwiązania optymalne można określić cały zbiór rozwiązań optymalnych. Jeżeli zadanie ma tylko jedno rozwiązanie optymalne, to jest ono jednym z rozwiązań bazowych układu Ax = b. Z własności tych wynika, że aby rozwiązać zadanie programowania liniowego wystarczy ograniczyć się do przebadania bazowych rozwiązań dopuszczalnych, tzn. znaleźć rozwiązanie bazowe dopuszczalne, któremu odpowiada największa wartość funkcji celu.