ZASTOSOWANIE PROGRAMOWANIA LINIOWEGO W

Transkrypt

ZASTOSOWANIE PROGRAMOWANIA LINIOWEGO W
ZASTOSOWANIE PROGRAMOWANIA LINIOWEGO W ZAGADNIENIACH
WSPOMAGANIA PROCESU PODEJMOWANIA DECYZJI
Wstęp
Problem podejmowania decyzji jest jednym z zagadnień sterowania nadrzędnego. Proces
podejmowania decyzji obejmuje trzy podstawowe fazy:
- rozpoznanie celu problemu,
- zbudowanie modelu sytuacji decyzyjnej,
- wybór decyzji.
Budowa modeli ujmujących złożoność problemów decyzyjnych w logiczne ramy stanowi istotę
podejścia charakterystycznego dla badań operacyjnych. Modele takie powinny jak najlepiej
odzwierciedlać badany system produkcyjny (ekonomiczny), a jego zachowanie powinno być na
tyle analogiczne do zachowania rzeczywistego systemu, aby na jego postawie móc badać i
zmieniać w pożądany sposób dany system. W większości modele badań operacyjnych
wykorzystywane są do wyznaczania działań optymalnych, dlatego nazywa się je modelami
optymalizacyjnymi.
Spośród różnych analitycznych metod stosowanych do rozwiązywania takich problemów do
najefektowniejszych zaliczane jest programowanie liniowe (linear programming). Zadanie
programowania liniowego zawierające tylko dwie zmienne decyzyjne można prosto rozwiązać
w sposób graficzny. Zagadnienia o większej liczbie zmiennych efektywnie można rozwiązać za
pomocą programów służących do obliczeń numerycznych np. MATLAB-a.
Najczęściej stosowanymi problemami rozwiązywanymi za pomocą programowania liniowego
są zagadnienia transportowe i problem optymalnych mieszanek:
1. Modele transportowe
Problem transportowy w praktyce najogólniej określany jest jako problem optymalnej
dystrybucji towarów. Rozwiązanie problemu transportowego daje odpowiedź na pytanie, jak
przy najmniejszych kosztach zorganizować przewozy masy towarowej od dostawców do
odbiorców. Z problemami transportowymi wiążą się również takie zagadnienia jak:
transportowo-produkcyjne, lokalizacji obiektów, problem obsady, problem pustych
przebiegów itd.
2. Problem mieszanek
W zagadnieniu optymalnego składu mieszaniny podejmujący decyzję pragnie określić jakie
ilości surowców mineralnych należy użyć do przerobienia na gotowe do sprzedaży wyroby.
Przykład 1
Dwa gatunki węgla A i B zawierają zanieczyszczenia fosforem i popiołem. W pewnym
procesie przemysłowym potrzeba co najmniej 90 ton żeliwa zawierającego nie więcej niż
0.03% fosforu i nie więcej niż 4% popiołu. Procent zanieczyszczeń i ceny zakupu
poszczególnych gatunków węgla (w jednostkach względnych) podaje tablica 1.
Tablica 1
Gatunek
Węgla
A
B
Procentowe zawartości
fosforu
0,02
0,05
zanieczyszczeń
popiołu
3
5
Cena zakupu
1 tony węgla (j. wzg)
500
400
Problem:
Jak zmieszać wymienione dwa gatunki węgla, aby uzyskać paliwo o możliwie najniższym
koszcie, spełniające wyżej wymienione wymagania ?
Rozwiązanie:
Należy zbudować model matematyczny opisujący przedstawioną sytuację. Niech X1 oznacza
gatunek węgla A, a X2 gatunek węgla B.
Pierwsze równanie dotyczy minimalnej ilości węgla (w tonach) potrzebnej w rozpatrywanym
procesie przemysłowym:
X1 + X2 >= 90
Ograniczenia jakościowe są następujące:
0,02*X1 + 0,05*X2 <= 0,03*(X1 + X2 )
3*X1 + 5*X2 <= 4*(X1 + X2 )
Funkcja celu jest następująca:
F(X1, X2) = 500*X1 + 400*X2 --> min
W sytuacji gdy mamy do czynienia tylko z dwiema zmiennymi decyzyjnymi problem
optymalizacji możemy rozwiązać metodą geometryczną.
2
Metoda geometryczna
Polega na wykreśleniu funkcji opisujących poszczególne zmienne na wykresie X1-0-X2.
Otrzymamy w ten sposób obszar możliwych rozwiązań (rys.1). Tylko punkty przecięcia
ograniczające poszczególne obszary mogą być rozwiązaniem zagadnienia.
W celu określenia minimum funkcji celu wartości współrzędnych poszczególnych punktów
przecięcia wstawiamy do równania funkcji celu i obliczamy jej wartość. Wartość minimalna
funkcji celu w jednym z punktów przecięcia określi poszukiwane wartości zmiennych
decyzyjnych X1, X2.
90
80
70
60
50
X2
0.02x1+0.05x2<=0.03*90
3x1+5x2<=4*90
x1+x2>=90
40
30
20
10
0
0
5
10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135
X1
Rys.1 Obszary ograniczeń
W naszym przykładzie obszar ograniczający to: ABCD
Punkty przecięcia to: A(60,30); B(90,18); C(120,0); D(90,0);
Funkcja celu w tych punktach ma wartość:
F(X1A, X2A) =42000 --> minimum
F(X1B, X2B) =52200
F(X1C, X2C) =60000
F(X1D, X2D) =45000
Rozwiązanie: X1=60 ton, X2=30 ton
Innym sposobem określenia punktu przecięcia wyznaczającego minimalną wartości funkcji celu
jest wykreślenie tzw. linii śladowej.
Ślad tworzymy z funkcji minimalnej przyjmując jako minimalną - dowolną wartość liczbową
(najprościej wielokrotność X1 i X2): np. 500X1+400X2=20000. Tworzymy prostą odcinkową
(punkty X1=0,X2=50 ; X1=40, X2=0). Równolegle do tej prostej przesuwamy się do obszaru
rozwiązań i pierwszy (zaczynając od początkowego obszaru rozwiązań-jak w przykładzie) lub
ostatni (zaczynając od końcowego obszaru rozwiązań) punkt przecięcia (wierzchołek obszaru
ograniczającego) jest rozwiązaniem. Dla naszego zadania jest to punkt A.
3
Programowanie liniowe w MATLAB-ie
Problem programowania liniowego definiuje się w postaci :
min f ' x
przy ograniczeniach liniowych
Ax ≤ b
oraz więzach nakładanych na zmienne
v lb ≤ x ≤ v ub
gdzie:
x jest wektorem zmiennych optymalizowanych,
f, b są danymi wektorami współczynników liczbowych,
A jest macierzą,
vlb , vub są wektorami ograniczającymi zakres zmiennych optymalizowanych.
Przy wystąpieniu ograniczeń równościowych powinny być one umieszczone w pierwszych
wierszach macierzy A i wektora b.
Dla naszego przykładu macierz A i pozostałe wektory mają postać:
− 1
A = − 0,01
− 1
500 
f =
,
 400
−1

− 90

0,02 , b = 0  ,

0 
1
0
100
v lb =   , v ub =  
0
100
Instrukcje w MATLABie:
A=[-1 -1; -0.01 0.02; -1;1];
b=[-90 0 0]';
f=[500 400]';
vlb=[0 0]';
vub=[100 100]';
x0=[0 0]';
Rozwiązanie problemu optymalizacyjnego za pomocą polecenia:
x=lp(f,A,b,vlb,vub,x0,1)
przy założonych dowolnych wartościach x0 uzyskuje się rozwiązanie optymalne:
x=
60.0000
30.0000
4
Przykład 2
Należy znaleźć min -> -5x1+4x2-10x3
przy ograniczeniach liniowych:
x1+x2=0
x1 - x2 +x3 <= 30
x1 - 2x2 -5x3 <= 50
3x1-x2 <= 10
oraz więzach nakładanych na zmienne
-10<= x1 <=10,
-5<= x2 <=15,
0<= x3 <=5,
Rozwiązanie:
W programie MATLAB należy przygotować poszczególne wektory i macierze w następującej
postaci:
1 1 0 
0 
1 − 1 1 
 
 , b =  30 ,
A= 
1 2 − 5
50


 
 3 − 1 0
10 
 −5 
−10
10




f =  4  , v lb = −5  , v ub = 15
 −10
 0 
5 
Instrukcje w MATLABie:
A=[1 1 0; 1 -1 1;2 1 5; 1 -1 1];
b=[0 30 50 0]';
f=[-5 4 -10]';
vlb=[-10 -5 0]';
vub=[10 15 5]';
x0=[0 0 0]';
Rozwiązanie problemu optymalizacyjnego za pomocą polecenia:
x=lp(f,A,b,vlb,vub,x0,1)
przy założonych dowolnych wartościach x0 uzyskuje się rozwiązanie optymalne:
x=
2.5000
5
-2.5000
5.0000
Rozwiązanie:
x1= 2.5
x2= -2.5
x3= 5.0
6