Wybrane elementy badań
operacyjnych
Przykład 1. GWOŹDZIE
.Pewna fabryczka może produkować dwa gatunki gwoździ II i I. Do wy- produkowania tony gwoździ II gatunku potrzeba 1,2 tony stali oraz 1 robo- czogodzinę pracy, do wyprodukowania 1 tony I gatunku gwoździ potrzeba 1,3 tony stali oraz 1,2 roboczogodziny. Minimalne dostawy wynoszą dla drugiego gatunku 50 ton, a dla pierwszego 30 ton. Zysk z 1 tony II gatunku wynosi 200 złotych, a zysk z jednej tony I gatunku 250 złotych. Tygodniowe zasoby stali wynoszą 180 ton, a tygodniowa moc przerobowa 200 roboczogodzin. Ile ton gwoździ I i II gatunku należy wyprodukować w ciągu tygodnia, aby zysk był największy.
MODEL MATEMATYCZNY
x1 - tygodniowa produkcja gwoździ I gatunku x2 - tygodniowa produkcja gwoździ II gatunku FUNKCJA CELU (ZYSKU)
f = 250x1+ 200x2
OGRANICZENIA
x1 30 x2 50 1, 3x1+ 1, 2x2 ¬ 180
1, 2x1+ x2 ¬ 200.
Przykład 2. POŚREDNIK (ZAGADNIENIE TRANS- PORTOWE)
Pewien pośrednik kupuje ten sam towar u 2 dostawców i dostarcza go trzem odbiorcom. Znamy cenę zakupu u każdego dostawcy i cenę zbytu u każdego odbiorcy. Znamy też maksymalne i minimalne ilości towaru sprzeda- wanego przez poszczególnych dostawców i kupowanego przez poszczególnych odbiorców. Zbuduj model matematyczny.
MODEL 1, bardziej skomplikowany, ale narzucający się Wprowadzamy oznaczenia:
i - numer dostawcy, i = 1, 2 j - numer odbiorcy, j = 1, 2, 3
ai - minimalna ilość towaru sprzedawanego przez i-tego dostawcę bi - maksymalna ilość towaru sprzedawanego przez i-tego dostawcę cj - minimalna ilość towaru kupowanego przez j-tego odbiorcę dj - maksymalna ilość towaru kupowanego przez j-tego odbiorcę ki - cena zakupu towaru u i-tego dostawcy
pj - cena sprzedaży towaru j-temu odbiorcy
aij - koszt jednostkowy transportu od i-tego dostawcy do j-tego odbiorcy
ZMIENNE DECYZYJNE
zi - ilość towaru zakupionego u i-tego dostawcy yj - ilość towaru sprzedanego j-temu odbiorcy
xij - ilość towaru przewiezionego od i-tego dostawcy do j-tego odbiorcy Razem 11 zmiennych.
FUNKCJA CELU (ZYSK)
f =
3
X
j=1
pjyj −
2
X
i=1
kizi−
2
X
i=1 3
X
j=1
aijxij.
WARUNKI OGRANICZAJĄCE
3
X
j=1
xij = zi, i = 1, 2 (∗)
2
X
i=1
xij = yj, j = 1, 2, 3 (∗∗) ai ¬ zi ¬ bi, i = 1, 2 cj ¬ yj ¬ dj, j = 1, 2, 3
zi 0, i = 1, 2, yj 0, j = 1, 2, 3, xij 0, i = 1, 2; j = 1, 2, 3.
Razem 21 warunków!
D y g r e s j a: ile byłoby warunków przy 3 dostawcach i 3 odbiorcach, a ile przy 4 odbiorcach i 4 dostawcach?
Okazuje się, że można ten model znacznie uprościć i wykorzystując równości (∗) i (∗∗) oprzeć się na tylko 6 zmiennych decyzyjnych xij.
Wprowadzimy mianowicie nowe parametry uij = pj− ki− aij. Wtedy funkcja celu wygląda następująco
f =
2
X
i=1 3
X
j=1
uijxij,
a warunki ograniczające
ai ¬
3
X
j=1
xij ¬ bi, i = 1, 2
cj ¬
2
X
i=1
xij ¬ dj, j = 1, 2, 3 xij 0, i = 1, 2; j = 1, 2, 3.
Razem już tylko 11 warunków.
Zauważmy, że współczynniki eij odpowiadają za koszty transportu. Jeśli ograniczymy się tylko do nich (zakładając, że ceny u wszystkich dostawców są takie same oraz u wszystkich odbiorców sa takie same), to otrzymamy problem nazywany ZAGADNIENIEM TRANSPORTOWYM.
Zakłada się, że odbiorcy muszą dostać ustaloną ilość towaru (oznacza to, że cj = dj). Przy dostawcach rozważamy tylko ograniczenie górne.
Oczywiście zysk będzie największy, gdy koszty transportu będą najmniejsze.
Prowadzi to do modelu:
Funkcja celu:
f =
2
X
i=1 3
X
j=1
aijxij, szukamy jej minimum.
Warunki ograniczające:
3
X
j=1
xij ¬ bi, i = 1, 2
2
X
i=1
xij = cj, j = 1, 2, 3 xij 0, i = 1, 2; j = 1, 2, 3.
Wygodnie dane dla zagadnienia transportowego zapisywac w postaci tabeli, co zobaczymy w poniższym przykladzie liczbowym.
Pewien towar jest zmagazynowany w miejscowości A1 w ilości 700 ton oraz w miejscowości A2 w ilości 200 miejscowości A3 w ilości 900 ton. Ma być on przewieziony do miejscowości M1 w ilości 500 ton oraz miejscowości M2 w ilości 1200 ton. Koszt przewozu jednej tony pomiędzy miejscowościami podany jest w tabeli
M1 M2 A1 75 42 A2 25 25 A3 65 24
.
Model wygląda następująco:
Najpierw wypiszmy dane odpowiadające ogólnemu modelowi:
Zauważmy, że tym razem mamy 3 „dostawców” i 2 „odbiorców”, czyli i zmie- nia sie od 1 do 2, zaś j od 1 do 3. a11 = 75, a12 = 42, a21 = 25, a22 = 25, a31 = 65, a32 = 24. b1 = 700, b2 = 200, b3 = 900, c1 = 500, c2 = 1200.
Funkcja celu ma postać:
f = 75x11+ 42x12+ 25x21+ 25x22+ 65x31+ 24x32.
Warunki ograniczające:
x11+ x12¬ 700, x21+ x22¬ 200, x31+ x32¬ 700.
x11+ x21+ x31= 500, x12+ x22+ x32 = 1200.
Zapiszemy ten model w postaci tabeli:
M1 M2 znak bi
A1 75 42 ¬ 700
A2 25 25 ¬ 200
A3 65 24 ¬ 900
znak = = 500 1200
.
PRZYKŁAD 3. DZIAŁALNOŚĆ ROLNIKA
Rolnik posiada 40 hektarów ziemi. Może hodować tuczniki i uprawiać ziem- niaki j zboże. Jeden tucznik potrzebuje 4 q ziemniaków i 2 q zboża i wymaga dodatkowo 200 złotych (robocizna, witaminy, weterynarz itp.) Uprawa hek- tara ziemniaków kosztuje 800 zł. nakładu (nawozy, robocizna, paliwo, środki ochrony roślin itp.) i daje plon 200 q. Uprawa hektara zboża kosztuje 200 zł i daje plon 50 q. Cena sprzedaży jednego tucznika wynosi 300 złotych, 1 q ziemniaków 10 zł., a zboża 30 zł. Zasoby rolnika (robocizna, siła nabywcza itp) wynoszą 40000 zł. Zbuduj model matematyczny.
ZMIENNE DECYZYJNE:
x1 - liczba tuczników
x2 - obszar uprawy ziemniaków x3 - obszar uprawy zboża
x4 - ilość sprzedanych ziemniaków x5 - ilość sprzedanego zboża FUNKCJA CELU (ZYSKU)
f = 300x1+ 10x4+ 30x5− (200x1+ 800x2+ 200x3).
WARUNKI OGRANICZAJĄCE:
x2+ x3 ¬ 40 4x1+ x4 ¬ 200x2
2x1+ x5 ¬ 50x3
200x1+ 800x2+ 200x3 ¬ 40000 x1, x2, x3, x4, x5 0 x1 - całkowite.
Ostatni warunek bardzo utrudnia rozwiązanie. Zwykle go się pomija i po uzyskaniu rozwiązania wybiera się liczbę całkowitą najbliższą uzyskanej.
ROZWIĄZANIE GEOMETRYCZNE
Rozważmy problem:
Znaleźć maksimum funkcji
f (x1, x2) = 2x1+ x2
przy warunkach 3x1+ 2x2 ¬ 18 3x1+ x2 ¬ 12 x1, x2 0.
Rozwiązanie geometryczne widzimy na następnej stronie.
Rozwiązanie geometryczne da się wykorzystać tylko przy małej liczbie zmien- nych - w zasadzie tylko dwóch.
Przy większej liczbie zmiennych trzeba stosować inne metody.
Zaprezentujemy jedną z nich tzw. algorytm sympleksowy.
Zanim do niego przejdziemy wprowadzimy kilka wstępnych pojęć.
POSTAĆ KANONICZNA
W postaci kanonicznej poprzez dodanie nowych zmiennych zamieniamy wa- runki ograniczające mające postać nierówności na warunki mające postać równości.
Zaprezentujemy to na przykładzie poprzednim:
Znaleźć maksimum funkcji
f (x1, x2) = 2x1+ x2 przy warunkach
3x1+ 2x2 ¬ 18 3x1+ x2 ¬ 12 x1, x2 0.
Pierwszy warunek ograniczający 3x1 + 2x2 ¬ 18 zastąpimy warunkami:
3x1+ 2x2+ s1 = 18 oraz s1 0.
Drugi warunek ograniczający 3x1+ x2 ¬ 12 zastępujemy warunkami 3x1+ x2+ s2 = 12 oraz s2 0.
Ostatecznie forma standardowa zadania programowania liniowego będzie w postaci:
FUNKCJA CELU:
f = 2x1 + x2+ 0s1+ 0s2 WARUNKI OGRANICZAJĄCE:
3x1+ 2x2+ s1 = 18 3x1+ x2+ s2 = 12 x1, x2, s1, s2 0.
Zanim przejdziemy do dalszej części wykładu przypomnimy elementy rachun- ku macierzowego.
MACIERZE
Macierzą o n wierszach i k kolumnach nazywamy układ nk liczb rzeczywi- stych zapisanych w postaci prostokątnej tabeli
A =
a11 a12 . . . a1k
a21 a22 . . . a2k ... ... . .. ... an1 a22 . . . ank
.
Układ liczb ai1 ai2 . . . aik nazywamy i−tym wierszem macierzy A, a układ
liczb a1j a2j ... anj
nazywamy j−tą kolumną macierzy A.
Kolumnę macierzy możemy traktować jako wektor n-wymiarowy, a wiersz jako wektor k-wymiarowy.
Macierz oznacza się też następująco:
A = [aij]j=1,...,ki=1,...,n.
W wypadku gdy macierz ma n wierszy i k kolumn będziemy pisać, że jest to macierz n × k.
Teraz omówimy operacje jakie możemy wykonywać na macierzach.
Najpierw przypomnimy co to jest iloczyn skalarny dwóch wektorów.
Iloczynem skalarnym wektorów V =
x1 ... xn
oraz W =
y1 ... yn
nazywamy liczbę
V · W = x1y1+ x2y2+ · · · + xnyn.
Na przykład
(1, 2, 3) · (−1, 0, 2) = 1 · (−1) + 2 · 0 + 3 · 2 = 5.
TRANSPONOWANIE
Macierzą transponowaną macierzy A nazywamy macierz oznaczaną AT, któ- rej kolejne wiersze są kolejnymi kolumnami macierzy A. Zatem jeśli macierz A jest macierzą n × k, to macierz AT jest macierzą k × n.
PRZYKŁAD. Jeśli A =
1 2 3 4 5 6
, to AT =
"
1 3 5 2 4 6
#
.
MNOŻENIE PRZEZ LICZBĘ
Jeśli A jest macierzą n × k, a q ∈ IR, to możemy utworzyć macierz qA = [cij]j=1,...,ki=1,...,n, gdzie cij = qaij dla każdego i = 1, . . . , n i j = 1, . . . , k.
PRZYKŁAD.
5 ·
"
1 2 3 4 5 6
#
=
"
5 · 1 5 · 2 5 · 3 5 · 4 5 · 5 5 · 6
#
=
"
5 10 15 20 25 30
#
.
DODAWANIE
Jeśli obie macierze A i B są macierzami n × k, to możemy utworzyć macierz C = A + B = [cij]j=1,...,ki=1,...,n, gdzie cij = aij + bij, dla każdego i = 1, . . . , n i j = 1, . . . , k.
PRZYKŁAD.
1 2 3 4 5 6
+
0 7 3 8 1 9
=
1 + 0 2 + 7 3 + 3 4 + 8 5 + 1 6 + 9
=
1 9 6 12 6 15
.
Dodawanie macierzy i mnożenie przez liczbę spełniają warunki
(q + r)A = qA + rA, q(A + B) = qA + qB,
(A + B)T = AT + BT.
MNOŻENIE MACIERZY
Jeśli macierz A ma tyle samo kolumn ile wierszy ma macierz B, czyli A jest macierzą n × k, a B jest macierzą k × p, to możemy utworzyć macierz A · B = C = [cij]j=1,...,pi=1,...,n, gdzie
cij = ai1b1j+ ai2b2j + · · · + ainbnj.
Inaczej mówiąc cij jest iloczynem skalarnym wektora utworzonego z i−tego wiersza macierzy A i wektora utworzonego z j−tej kolumny macierzy B.
Często opuszczamy znak · i piszemy zamiast A · B po prostu AB.
PRZYKŁAD. Niech A =
"
1 2 3 4 5 6
#
, B =
2 5 3 6 4 7
.
Możemy wykonać działania zarówno AB jak i BA. Niech AB = C. Wówczas C będzie macierzą 2 × 2.
Obliczając według powyższej recepty mamy
c11= 1 · 2 + 2 · 3 + 3 · 4 = 20 c12= 1 · 5 + 2 · 6 + 3 · 7 = 38 c21= 4 · 2 + 5 · 3 + 6 · 4 = 47 c22= 4 · 5 + 5 · 6 + 6 · 7 = 92.
Zatem AB =
"
20 38 47 92
#
.
Natomiast macierz BA będzie macierzą 3 × 3. Mamy:
BA =
2 5 3 6 4 7
·
"
1 2 3 4 5 6
#
=
2 · 1 + 5 · 4 2 · 2 + 5 · 5 2 · 3 + 5 · 6 3 · 1 + 6 · 4 3 · 2 + 6 · 5 3 · 3 + 6 · 6 4 · 1 + 7 · 4 4 · 2 + 7 · 5 4 · 3 + 7 · 6
=
22 29 36 27 36 45 32 43 54
.
PRZYKŁAD. Niech A =
"
0 1 0 0
#
, B =
"
0 0 1 0
#
.
Wtedy AB =
"
1 0 0 0
#
, natomiast BA =
"
0 0 0 1
#
.
Wniosek:
Mnożenie macierzy nie jest przemienne.
Natomiast prawdziwa jest rozdzielność mnożenia macierzy względem doda- wania, czyli
(A+B)C = AC + BC A(B+C) = AB+AC,
przy czym w pierwszej kolejności wykonuje się mnożenie, a potem dodawanie.
Operacje elementarne
Operacjami elementarnymi nazywamy:
1. Mnożenie i-tego wiersza macierzy przez dowolną liczbę różną od zera.
2. Dodanie do i-tego wiersza macierzy innego wiersza macierzy pomnożo- nego przez dowolną liczbę.
3. Zamianę miejscami dwóch dowolnych wierszy macierzy.
PRZYKŁAD. Dana jest macierz A =
"
1 2 3 4
#
. Poprzez operacje elementarne przekształcić tę macierz w macierz B =
"
0 1 2 0
#
. Rozwiązanie
Krok pierwszy: do pierwszego wiersza dodajemy wiersz drugi pomnożony przez −1/3 - operacja typu 2. Otrzymujemy macierz
"
0 23 3 4
#
.
Krok drugi: mnożymy pierwszy wiersz przez 3/2 - operacja typu 1. Otrzy- mujemy macierz
"
0 1 3 4
#
.
Krok trzeci: do drugiego wiersza dodajemy pierwszy wiersz przemnożony przez −4 - operacja typu 2. Otrzymujemy macierz
"
0 1 3 0
#
.
Krok czwarty: mnożymy drugi wiersz przez 2/3 - operacja typu 1. Otrzymu- jemy macierz B.
Słowne opisywanie operacji, które wykonujemy jest uciążliwe. Wprowadzimy pewne skrótowe opisy. Będziemy oznaczać i-ty wiersz macierzy przed wyko- naniem operacji przez wi, a i-ty wiersz macierzy po dokonaniu operacji przez w0i. I tak na przykład pierwszą operację w powyższym przykładzie możemy zapisać następująco:
w10 = w1−1 3w2. Natomiast cały schemat rozwiązania zapiszemy tak:
"
1 2 3 4
#
w01 = w1− 13w2
"
0 23 3 4
#
w01 = 32w1
"
0 1 3 4
#
w02 = w2− 4w1
"
0 1 3 0
#
w02 = 23w2
"
0 1 2 0
#
.
Można było skrócić całą procedurę wykonując w jednym kroku kilka operacji elementarnych. Mogliśmy na przykład zapisać nasze rozwiązanie tak:
"
1 2 3 4
# w01 = w1− 13w2
w01 = 32w1
"
0 1 3 4
# w02 = w2− 4w1 w02 = 23w2
"
0 1 2 0
#
.
MACIERZ JEDNOSTKOWA
Macierzą jednostkową In nazywamy macierz o n wierszach i n kolumnach mającą na głównej przekątnej jedynki, poza tym same zera.
np.
I2 =
"
1 0 0 1
#
I3 =
1 0 0 0 1 0 0 0 1
I4 =
1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
itd.
POSTAĆ BAZOWA MACIERZY
Załóżmy, że macierz A ma k kolumn i n wierszy, przy czym k n. Powiemy, że macierz ma postać bazową, jeśli po wykreśleniu k − n kolumn i przesta- wieniu kolejności pozostałych kolumn otrzymamy macierz jednostkową In. Te kolumny, kt
Na przykład macierz
A =
"
0 2 1
1 −3 0
#
ma postać bazową. Usuwamy drugą kolumnę i zamieniamy miejscami pozo- stałe kolumny. Kolumny bazowe macierzy A to kolumny pierwsza i trzecia.
Macierz
B =
4 1 3 0 0 6 5 0 3 0 1 7
−1 0 2 1 0 1
też ma postać bazową: usuwamy 1, 3 i 6 kolumnę następnie przestawiamy w pozostałych drugą z trzecią. Kolumny bazowe macierzy B, to kolumny druga, czwarta i piąta.
PRZYKŁAD.
Przy pomocy operacji elementarnych sprowadzimy macierz
"
1 2 3 4 5 6
#
do postaci bazowej, tak aby kolumnami bazowymi były pierwsza i trzecia.
Oznacza to, że pierwsza kolumna ma być postaci 1
0 , a druga 0 1
Ponieważ chcemy, aby w pierwszej kolumnie i drugim wierszu pojawiło się 0 stosujemy operację elementarną:
w20 = w2 − 4w1. Otrzymujemy macierz
"
1 2 3
0 −3 −6
#
. Już pierwsza kolumna jest taka, jaką chcemy
Teraz chcemy, aby w trzeciej kolumnie i pierwszym wierszu pojawiło się 0, wykonujemy zatem operację:
w01 = w1+1 2w2.
Otrzymujemy macierz
"
1 1/2 0 0 −3 −6
#
.
Wreszcie na końcu musimy podzielić pierwszy wiersz przez −6, czyli wykonać operację
w20 = −1 6w2. Otrzymujemy macierz w postaci bazowej
"
1 1/2 0 0 1/2 1
#
takiej jak chcieliśmy.
PRZYKŁAD:
Przy pomocy operacji elementarnych sprowadzimy macierz
1 2 3 4 1 0 2 1 2 2 1 0
do postaci bazowej, tak aby kolumnami bazowymi były druga, trzecia i pierw- sza.
Oznacza to, że druga kolumna ma być postaci 1 0 0
, trzecia 0 1 0
, a pierwsza 0 0 1 .
Stosujemy kolejno operacje elementarne: 1) w30 = w3 − w1. Otrzymujemy macierz
1 2 3 4
1 0 2 1
1 0 −2 −4
;
2) w10 = w1+ w3. Otrzymujemy macierz
2 2 1 0
1 0 2 1
1 0 −2 −4
;
3) w30 = w3+ 4w2. Otrzymujemy macierz
2 2 1 0 1 0 2 1 5 0 6 0
;
4) w10 = w1+ 2/5w3, w02 = w3− 1/5w3. Otrzymujemy macierz
0 2 −7/5 0 0 0 4/5 1
5 0 6 0
;
5) w10 = 1/2w1, w30 = 1/5w3. Otrzymujemy macierz
0 1 −7/10 0
0 0 4/5 1
1 0 6/5 0
w takiej postaci, o jaką chodzi.
TERAZ OMÓWIMY DOKŁADNIE ALGORYTM SYMPLEKSOWY.
Omówimy go początkowo dla maksymalizacji funkcji celu. Na zakończenie podamy co trzeba zmienić w przypadku minimalizacji.
Będziemy go ilustrować poniższym przykładem.
FUNKCJA CELU:
f = 4x1+ x2 → max WARUNKI OGRANICZAJĄCE
3x1+ 2x2 ¬ 18 4x1 ¬ 8 x1, x2 0 Tworzymy postać kanoniczną.
POSTAĆ KANONICZNA FUNKCJA CELU:
f = 4x1+ x2+ 0s1+ 0s2 → max
WARUNKI OGRANICZAJĄCE:
3x1+ 2x2+ s1 = 18 4x1+ s2 = 8 x1, x2, s1, s2 0 ALGORYTM SYMPLEKSOWY
Oznaczamy zmienne początkowe przez x1, . . . , xn, zmienne dodane przy two- rzeniu postaci kanonicznej przez s1, . . . , sm.
Współczynniki w funkcji celu oznaczamy przez c1, . . . cn, cn+1, . . . , cn+m. cp = 0 dla p > n.
W rozważanym przykładzie n = 2, m = 2, n + m = 4, c1 = 4, c2 = 1, c3 = 0, c4 = 0.
Przypuśćmy, że jest m warunków ograniczających powstałych z nierówności (oprócz warunków xi 0, sj 0) postaci
aj1x1+ · · · + ajnxn+ aj(n+1)s1+ · · · + aj(n+m)sm = bj j = 1, 2, . . . k.
Np. w naszym przykładzie: a11 = 3, a12 = 2, a13= 1, a14= 0 a21 = 4, a12 = 0, a13 = 0, a14= 1
b1 = 18, b2 = 8.
KROK 1
TWORZYMY TABLICĘ SYMPLEKSOWĄ W NASTĘPUJĄCEJ POSTA- CI
cj c1 ... cn 0 .. 0
cB bazowe x1 .. xn s1 ... sm bi
cp1 s1 a11 ... a1n a1(n+1) ... a1(n+m) b1
... ... ... ... ... ... ... ... ...
cpm sm am1 ... amn am(n+1) ... am(n+m) bm
zj z1 ... zn zn+1 ... zn+m
cj − zj c1− z1 ... cn− zn cn+1− zn+1 ... cn+m− zn+m
Macierz współczynników A = [aij]j=1,...,n+m
i=1,...,m musi mieć postać bazową.
W drugiej kolumnie wypisujemy zmienne bazowe, czyli zmienne odpowiada- jące kolumnom bazowym.
W pierwszej kolumnie cB mamy współczynniki cp1, . . . , cpm z funkcji celu odpowiadające zmiennym bazowym z drugiej kolumny.
W chwili startu zmienne bazowe to s1, . . . , sm (w takiej kolejności), zatem te współczynniki są w chwili startu równe zero. zj wyliczamy z wzoru
zj = cB·
a1j ...
akj
=
m
X
i=1
cpiaij.
W ostatnim wierszu wpisujemy liczby cj− zj, j = 1, 2, ...n + m.
Każdej tablicy sympleksowej odpowiada rozwiązanie bazowe. W takim roz- wiązaniu zmienne niebazowe są równe zero.
Na przykład dla tablicy sympleksowej
cj 4 3 0 0
cB bazowe x1 x2 s1 s2 bi
0 s1 0 2 1 3 12
4 x1 1 0 0 1 2
zj 4 0 0 4
cj− zj 0 3 0 −4
mamy x2 = 0, s2 = 0, x1 = 2 (z drugiego równania), s1 = 12 (z pierwszego równania) i funkcja celu jest równa 4 · 2 + 3 · 0 + 0 · 12 + 0 · 0 = 8.
W następnych krokach będziemy zamieniać zmienne bazowe poprawiając wy- nik.
KRYTERIUM OPTYMALNOŚCI
Badamy współczynniki w ostatnim wierszu czyli cj − zj. Jeśli wszystkie są niedodatnie, to kończymy pracę - rozwiązanie jest optymalne.
KRYTERIUM WEJŚCIA
Jeśli wśród liczb cj − zj istnieją dodatnie, to wybieramy największą z nich.
Niech będzie ona w kolumnie k-tej. Oznacza to, że nową zmienną bazową będzie zmienna xk
KRYTERIUM WYJŚCIA
Rozważamy kolumnę macierzy A pod zmienną xk. Jest to kolumna
a1k ...
amk
. Rozważamy najmniejszą spośród liczb abj
jk dla ajk > 0. Niech to będzie np.
liczba abp
pk. Odpowiada to zmiennej bazowej sp. Oznacza to, że zmienna ba- zowa xk pojawi się w miejsce zmiennej bazowej sp.
TWORZENIE NOWEJ TABLICY SYMPLEKSOWEJ
Poprzez operacje elementarne tak zmieniamy macierz A|B, aby pod zmienną xk pojawił się wektor taki, jaki jest teraz pod zmienną sp tzn. jedynka na p-tym miejscu, na pozostałych zera. Pod pozostałymi zmiennymi bazowymi musi pozostać to co było.
W drugiej kolumnie w miejsce zmiennej bazowej sp usuwanej z bazy wpisu- jemy nazwę nowej zmiennej bazowej, czyli xk, a w pierwszej zamiast współ- czynnika przy sp (równego 0) wpisujemy współczynnik z funkcji celu przy xk, czyli ck.
PROCEDURĘ POWTARZAMY TAK DŁUGO, AŻ OTRZYMA- MY ROZWIĄZANIE OPTYMALNE W KRYTERIUM OPTY- MALNOŚCI
PRZEŚLEDZIMY TO NA ROZWAŻANYM PRZYKŁADZIE POCZĄTKOWA TABLICA SYMPLEKSOWA
cj 4 1 0 0
cB bazowe x1 x2 s1 s2 bi
0 s1 3 2 1 0 18
0 s2 4 0 0 1 8
zj ? ? ? ?
cj − zj ? ? ? ? Wyliczamy zj:
z1 = cB·
"
3 4
#
=
"
0 0
#
·
"
3 4
#
= 0 · 3 + 0 · 4 = 0.
z2 = cB·
"
2 0
#
=
"
0 0
#
·
"
2 0
#
= 0 · 2 + 0 · 0 = 0.
z3 = cB·
"
1 0
#
=
"
0 0
#
·
"
1 0
#
= 0 · 1 + 0 · 0 = 0.
z4 = cB·
"
0 1
#
=
"
0 0
#
·
"
0 1
#
= 0 · 0 + 0 · 1 = 0.
Uzupełniamy tablicę sympleksową.
cj 4 1 0 0
cB bazowe x1 x2 s1 s2 bi
0 s1 3 2 1 0 18
0 s2 4 0 0 1 8
zj 0 0 0 0
cj − zj 4 1 0 0
Stosujemy kryterium optymalności: W ostatnim wierszu istnieją wyrazy dodatnie, zatem rozwiązanie nie jest optymalne.
Stosujemy kryterium wejścia.
Maksimum cj− zj wynosi 4 i mieści się w pierwszej kolumnie. Zatem k = 1, co oznacza, że nową zmienną bazową będzie x1.
Stosujemy kryterium wyjścia Liczymy minimum abj
jk dla ajk > 0.
W naszym wypadku k = 1, czyli liczymy minimum spośród liczb ab1
11 = 183 = 6 oraz ab2
21 = 84 = 2.
Mniejszą jest druga z liczb otrzymana z drugiego wiersza odpowiadającego zmiennej bazowej s2.
Zatem nowa zmienna bazowa x1 ma zastąpić zmienną s2.
Obecnie zmiennymi bazowymi będą s1 - pozostanie w pierwszym wierszu oraz x1 w drugim wierszu.
Oznacza to, że przez operacje elementarne kolumna pod x1 mająca obecnie postać 3
4 musi zmienić się w kolumnę 0
1 , a kolumna pod s1 ma pozostać w postaci 1
0 .
W tym celu pierwszy wiersz przekształcamy następująco:
w10 = w1−3
4w2 =h 3 2 1 0 18 i−3
4 ·h 4 0 0 1 8 i
=h 0 2 1 −3/4 12 i, a drugi
w02 = 1
4w2 = 1
4 ·h 4 0 0 1 8 i=h 1 0 0 1/4 2 i. Otrzymujemy nową tablicę sympleksową.
cj 4 1 0 0 cB bazowe x1 x2 s1 s2 bi
0 s1 0 2 1 −3/4 12
4 x1 1 0 0 1/4 2
zj ? ? ? ?
cj− zj ? ? ? ?
Wyliczamy zj:
z1 = cB·
"
0 1
#
=
"
0 4
#
·
"
0 1
#
= 0 · 0 + 4 · 1 = 4.
z2 = cB·
"
2 0
#
=
"
0 4
#
·
"
2 0
#
= 0 · 2 + 4 · 0 = 0.
z3 = cB·
"
1 0
#
=
"
0 4
#
·
"
1 0
#
= 0 · 1 + 4 · 0 = 0.
z4 = cB·
"
−3/4 1/4
#
=
"
0 4
#
·
"
−3/4 1/4
#
= 0 · (−3/4) + 4 · 1/4 = 1.
Uzupełniamy tablicę sympleksową.
cj 4 1 0 0
cB bazowe x1 x2 s1 s2 bi
0 s1 0 2 1 −3/4 12
4 x1 1 0 0 1/4 2
zj 4 0 0 1
cj− zj 0 1 0 −1
Stosujemy kryterium optymalności: W ostatnim wierszu istnieją wyrazy dodatnie, zatem rozwiązanie nie jest optymalne.
Stosujemy kryterium wejścia.
Maksimum cj− zj wynosi 1 i mieści się w drugiej kolumnie. Zatem k = 2, co oznacza, że nową zmienną bazową będzie x2.
Stosujemy kryterium wyjścia:
Liczymy minimum abj
jk dla ajk > 0.
W naszym wypadku k = 2, czyli liczymy minimum spośród jednej tylko liczby ab1
12 = 122 = 6
Otrzymana jest ona z pierwszego wiersza odpowiadającego zmiennej bazo- wej s1.
Zatem nowa zmienna bazowa x2 ma zastąpić zmienną s1.
Obecnie zmiennymi bazowymi będą x1 - pozostanie w drugim wierszu oraz x2 pojawi się zamiast s1 w pierwszym wierszu.
Oznacza to, że kolumna pod x1 pozostanie bez zmian, czyli 0
1 , a kolumna pod x2 musi przybrać postać 1
0 . Aby to osiągnąc wystarczy przekształcenie elementarne
w01 = 1
2w1 = 1
2 ·h 0 2 1 −3/4 12 i=h 0 1 1/2 −3/8 6 i. Drugi wiersz pozostaje bez zmian.
Otrzymujemy nową tablicę sympleksową.
cj 4 1 0 0
cB bazowe x1 x2 s1 s2 bi
1 x2 0 1 1/2 −3/8 6
4 x1 1 0 0 1/4 2
zj ? ? ? ?
cj− zj ? ? ? ?
Wyliczamy zj:
z1 = cB·
"
0 1
#
=
"
1 4
#
·
"
0 1
#
= 1 · 0 + 4 · 1 = 4.
z2 = cB·
"
1 0
#
=
"
1 4
#
·
"
1 0
#
= 1 · 1 + 4 · 0 = 1.
z3 = cB·
"
1/2 0
#
=
"
1 4
#
·
"
1/2 0
#
= 1 · 1/2 + 4 · 0 = 1/2.
z4 = cB·
"
−3/8 1/4
#
=
"
1 4
#
·
"
−3/8 1/4
#
= 1 · (−3/8) + 4 · 1/4 = 5/8.
Uzupełniamy tablicę sympleksową.
cj 4 1 0 0
cB bazowe x1 x2 s1 s2 bi
1 x2 0 1 1/2 −3/8 6
4 x1 1 0 0 1/4 2
zj 4 1 1/2 5/8
cj− zj 0 0 −1/2 −5/8
Ponieważ wszystkie wyrazy w ostatnim wierszu tablicy są niedodatnie, wnio- skujemy że mamy optymalne rozwiązanie. W nim x1 = 2, x2 = 6, f = 14.
ZADANIE NA MINIMUM
Do tej pory omawialiśmy algorytm sympleksowy dla maksymalizacji funk- cji celu. Przy minimalizacji warunki ograniczające mają przeważnie postać nierówności w drugą stronę dlatego zmienne swobodne występują w formie standardowej ze znakiem minus. Powoduje to, że startowa tablica symplek- sowa budowana identycznie jak w przypadku maksymalizacji nie będzie w postaci bazowej.
Rozpatrzmy np. zadanie programowania liniowego Zminimalizować funkcję
f (x1, x2) = x1+ x2, przy ograniczeniach
x1+ 2x2 3, 3x1+ x2 4, x1, x2 0.
Wprowadzając nieujemne zmienne swobodne s1 i s2 zamieniamy nierówności na równości
x1+ 2x2− s1 = 3, 3x1+ x2− s2 = 4.
Teraz przy zmiennych swobodnych mamy znak −.
Zbudowanie początkowej tablicy sympleksowej podobnie jak dla maksymali- zacji da nam nam tablicę następującą
cj 1 1 0 0
cB bazowe x1 x2 s1 s2 bi
0 s1 1 2 −1 0 3
0 s2 3 1 0 −1 4
zj ? ? ? ?
cj − zj ? ? ? ?
Nie jest ona w postaci bazowej ze względu na minusy przed jedynkami w trzeciej i czwartej kolumnie macierzy A. Nic nie da pomnożenie wierszy przez
−1 bo wyrazy wolne powinny być w algorytmie sympleksowym dodatnie - w przeciwnym wypadku startowe rozwiązanie bazowe będzie niedopuszczalne - zmienne si byłyby ujemne.
Jednym ze sposobów jest wprowadzenie do funkcji celu nowych zmiennych tzw. zmiennych sztucznych w taki sposób aby początkowe rozwiązanie z tymi zmiennymi jako bazowymi było bardzo duże. Uzyskamy to dobieraj/ac do nich duże współczynniki w funkcji celu. Spowoduje to, że w trakcie sto- sowania metody sympleksowej te nowe zmienne staną się zerami.
Ponieważ teraz będziemy rozwiązanie zmniejszać, wprowadzane są następu- jące korekty w porównaniu z zadaniem maksymalizacji:
1) Kryterium optymalności: wszystkie cj − zj 0 zamiast cj − zj ¬ 0.
2) Kryterium wejścia: min(cj − zj) zamiast max(cj− zj).
Pozostałe elementy algorytmu sympleksowego pozostają identyczne.
Prześledzimy to na następującym zadaniu programowania liniowego.
Funkcja celu
x1+ x2 → min Ograniczenia
x1+ 2x2 3 3x1+ x2 4 x1, x2 0
Krok pierwszy - wprowadzamy zmienne swobodne s1, s2 0. Otrzymujemy postać kanoniczną.
Funkcja celu
x1 + x2+ 0s1+ 0s2 → min Ograniczenia
x1+ 2x2− s1 = 3
3x1+ x2− s2 = 4 x1, x2, s1, s2 0
Krok drugi - wprowadzamy zmienne sztuczne v1 i v2 i dodajemy do funkcji celu składnik 10v2+10v2 oraz do równości odpowiednio v1 i v2. Otrzymujemy postać kanoniczną i jednocześnie bazową.
Funkcja celu
x1+ x2+ 0s1+ 0s2+ 10v2+ 10v2 → min Ograniczenia
x1+ 2x2 − s1+ v1 = 3 3x1+ x2 − s2+ v2 = 4 x1, x2, s1, s2, v1, v2 0
Startowa tablica sympleksowa ma postać (piszemy od razu uzupełnioną).
cj 1 1 0 0 10 10
cB bazowe x1 x2 s1 s2 v1 v2 bi
10 v1 1 2 −1 0 1 0 3
10 v2 3 1 0 −1 0 1 4
zj 40 30 −10 −10 10 10
cj− zj −39 −29 10 10 0 0
Kryterium optymalności – w ostatnim wierszu istnieją liczby ujemne – rozwiązanie można poprawić.
Kryterium wejścia
min(cj− zj) = c1− z1 = −39.
Oznacza to, że nową zmienną bazową będzie x1. Kryterium wyjścia
4/3 < 3/1
Zmienną usuwaną z bazy będzie v2. W pierwszej kolumnie ma się pojawić wektor 0
1 . W tym celu stosujemy operacje elementarne
w01 = w1− 1 3w2 w02 = 1
3w2 Otrzymujemy nową tablicę sympleksową.
cj 1 1 0 0 10 10
cB bazowe x1 x2 s1 s2 v1 v2 bi
10 v1 0 5/3 −1 1/3 1 −1/3 5/3
1 x1 1 1/3 0 −1/3 0 1/3 4/3
zj 1 17 −10 3 10 −3
cj − zj 0 −16 10 −3 0 13
Kryterium optymalności – w ostatnim wierszu istnieją liczby ujemne – rozwiązanie można poprawić.
Kryterium wejścia
min(cj− zj) = c2− z2 = −16.
Oznacza to, że nową zmienną bazową będzie x2. Kryterium wyjścia
5/3
5/3 < 4/3 1/3
Zmienną usuwaną z bazy będzie v1. Oznacza to, że w drugiej kolumnie ma się pojawić wektor 1
0 . W tym celu stosujemy operacje elementarne
w02 = w2− 1 5w1 w01 = 3
5w1
Otrzymujemy nową tablicę sympleksową.
cj 1 1 0 0 10 10
cB bazowe x1 x2 s1 s2 v1 v2 bi
1 x2 0 1 −3/5 1/5 3/5 −1/5 1
1 x1 1 0 1/5 −2/5 −1/5 2/5 1
zj 1 1 −2/5 −1/5 2/5 1/5
cj− zj 0 0 2/5 1/5 48/5 49/5
Wszystkie współczynniki cj − zj są nieujemne. Otrzymujemy rozwiązanie bazowe optymalne: s1 = s2 = v2 = v2 = 0, x1 = 1, x2 = 1,
f = 1 + 1 = 2.
Rozwiązywanie zadań programowania liniowego progra- mem solver
„Solver” jest dodatkiem do arkusza kalkulacyjnego openoffice calc (istnieje począwszy od wersji 3.1).
Poniżej opiszemy jak rozwiązać omawiane przez nas powyżej zadania progra- mowania liniowego przy pomocy tego programu.
Zademonstrujemy to na podstawie uproszczonego zadania z początku wykła- du. Rozwiązemy mianowicie zadanie:
FUNKCJA CELU (ZYSKU)
f = 250x1+ 200x2
OGRANICZENIA
1,3x1+ 1,2x2 ¬ 180, 1,2x1 + x2 ¬ 200,
x1, x2 0.
Otwieramy program „calc” i wpisujemy dane następująco:
Komórki, które wybieramy są tylko przykładowe!
W komórkach b2 i c2 wpisujemy współrzędne funkcji celu, czyli 200 i 250.
W komórkach b4 i c4 wpisujemy jakiekolwiek dane początkowe zmiennych decyzyjnych np. 1 i 2.
W komórce f2 wpisujemy funkcję celu tzn:
= SUMA.ILOCZYNÓW(b2:c2;b4:c4)
Pojawi się w niej wynik 650 (250 · 1 + 200 · 2).
W szóstym i siódmym wierszu wpisujemy ograniczenia: w komórkach b6 i c6 liczby 1,3 i 1,2 a w komórkach b7 i c7 liczby 1,2 i 1.
W komórce d6 wpisujemy wzór
= SUMA.ILOCZYNÓW(b6:c6;b4:c4)
W komórce d7 wpisujemy wzór
= SUMA.ILOCZYNÓW(b7:c7;b4:c4)
Pojawią się w nich odpowiednio liczby 3,7 i 3,2.
W komórkach f6 i f7 wpisujemy prawe strony warunków ograniczających czyli 180 i 200.
Otwieramy zakładkę Narzędzia, a w niej zakładkę Solver.
W okienku Komórka docelowa wpisujemy f2. Zoptymalizuj wynik za- znaczamy Maksimum.
W okienku Komórki dla zmiennych wpisujemy b4:c4.
W ograniczeniach wpisujemy:
W pierwszym wierszu w kolumnie Odwołanie do komórki wpisujemy d6 w kolumnie Operator wybieramy <=, w kolumnie Wartość wpisujemy f6.
W drugim wierszu w kolumnie Odwołanie do komórki wpisujemy d7 w kolumnie Operator wybieramy <=, w kolumnie Wartość wpisujemy f7.
Otwieramy zakładkę Opcje (na dole po lewej stronie okienka).
Zaznaczamy opcję Przyjmij, że zmienne są liczbami nieujemnymi.
Wychodzimy z tej zakładki naciskając OK i wybieramy Znajdź rozwiąza- nie.
Pojawia się małe okienko pt. Wynik szukania rozwiązania zawierające informacje:
Szukanie rozwiązania zakończone powodzeniem Wynik: 34615,38
Zachować wynik czy przywrócić poprzednie wartości?
Wybieramy Zachowaj wynik powracając do głównego ekranu arkusza kal- kulacyjnego.
W komórce b4 pojawi się liczba 138,46, w komórce c4 liczba 0, w komórce d6 liczba 180, w komórce d7 liczba 166,15 i w komórce f2 liczba 34615,38.
Otrzymujemy zatem rozwiązanie:
Maksymalną wartość funkcja celu osiągnie przy x1 = 138,46, x2 = 0. Wynosi ona 34615,38.