• Nie Znaleziono Wyników

Wybrane elementy badań operacyjnych

N/A
N/A
Protected

Academic year: 2021

Share "Wybrane elementy badań operacyjnych"

Copied!
47
0
0

Pełen tekst

(1)

Wybrane elementy badań

operacyjnych

(2)

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.

(3)

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

(4)

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.

(5)

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.

(6)

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

.

(7)

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.

(8)

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.

(9)
(10)

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.

(11)

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.

(12)

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.

(13)

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,

(14)

(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

#

(15)

=

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

(16)

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 = w11 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

#

.

(17)

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

(18)

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.

(19)

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

;

(20)

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.

(21)

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.

(22)

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.

(23)

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.

(24)

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.

(25)

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

(26)

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.

(27)

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 = w13

4w2 =h 3 2 1 0 18 i3

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ą.

(28)

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.

(29)

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.

(30)

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.

(31)

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 ? ? ? ?

(32)

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

(33)

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

(34)

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

(35)

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.

(36)

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.

(37)

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.

(38)

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).

(39)

Zaznaczamy opcję Przyjmij, że zmienne są liczbami nieujemnymi.

Wychodzimy z tej zakładki naciskając OK i wybieramy Znajdź rozwiąza- nie.

(40)

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.

Cytaty

Powiązane dokumenty

W przydzielonym akcie normatywnym wskaż element opisany w kolumnie drugiej poniższej tabeli.. Tabela

-rozwijanie możliwości podejmowania działań alternatywnych poprzez zaangażowanie uczniów w działalność pozytywną, -reagowanie na próby podejmowania zachowań ryzykownych

1) organizację pracy szkoły, w tym tygodniowy rozkład zajęć edukacyjnych;.. Rada Pedagogiczna wydaje opinie w zakresie powierzania funkcji kierowniczych w szkole. Może wystąpić

Zgodnie z wcześniejszymi ustaleniami zakres tematyczny, który obowiązuje na kolokwium zaliczeniowym obejmuje wszystkie ćwiczenia laboratoryjne bez względu na to, jakie oceny

Моя жена часто говорила мне, что я покупаю очень много книг и трачу на них все деньги.. Но когда я увидел новую

Zakres pracy obejmował: analizę pracy tego aparatu, opis matematyczny procesu przepływu mleka przez kolumnę autonomicznego aparatu udojowego oraz eksperyment symulacyjny..

Trzecim obszarem jest platforma internetowa ONKOline sta- nowiąca narzędzie wymiany danych pomiędzy leka- rzami POZ a centrami onkologii w ramach realizacji pakietu onkologicznego..

W naszej pracy zastosowano tę modyfikację do oznaczania stężenia amino ­ kwasów, uprzednio rozdzielonych na kolumnie wg sposobu opisanego w części I (Szczepaniak, 1964).