Optymalizacja Cw 2 Dwufazowa metoda simpleks

TECHNIKA OPTYMALIZACJI - LABOLATORIUM
Ćwiczenie II: Dwufazowa metoda simpleks
Skład grupy:

- Dawid Cekus

- Mateusz Grzelak

Zadania programowania liniowego dla ograniczeń mniejszościowych i większościowych. Dwufazowa metoda simpleks.

  1. Cel ćwiczenia.

Celem ćwiczenia to zapoznanie się metodą rozwiązywania zadania LP na przykładzie dwufazowej metody simpleks. Pozwala ona, na wyliczenie takiego wektora zmiennych decyzyjnych x, należącego do zbioru rozwiązań dopuszczalnych X, dla którego funkcja celu osiąga maksimum (minimum):

f(x) = xo = cTx → max(min)

przy ograniczeniach:


X = {x  : A1 • x ≥ b1;  x ≥ 0;  A2 • x ≤ b2}

dim x= nx1, dim c=nx1, dim A1=m1xn, dim A2=m2xn, dim b1 = m1x1, dim b2 = m2x1

Macierz A1 jest to macierz tworzona przez współczynniki przy zmiennych decyzyjnych w kolejnych m1 ograniczeniach większościowych, macierz A2 jest to macierz tworzona przez współczynniki przy zmiennych decyzyjnych w kolejnych m2 ograniczeniach mniejszościowych. Wektory b1, b2 to wektory wyrazów wolnych w ograniczeniach

  1. Przebieg ćwiczenia.

Przykład I X  ≠  O , istnieje optymalne rozwiązanie dla n = 2

Min { x0 = -2x1 + x2 }

Ograniczenia:


$$\left\{ \begin{matrix} 2x_{1} + x_{2} \leq 1 \\ \ 4x_{1} - 3x_{2}\ \geq 2 \\ \end{matrix} \right.\ \ $$


x1,  x2  ≥ 0

Rozwiązanie uzyskane przy użyciu Matlaba - linprog:


$$x = \left\lbrack \ \begin{matrix} 0.5\ \\ 0 \\ \end{matrix} \right\rbrack$$

Fval = -1

Exitflag = 1

Iterations = 1

Algorithm = „simplex”

Interpretacja graficzna zadania:

Opis i rozwiązanie problemu LP z użyciem metody dwu fazowej.

Przed optymalizacją metoda simpleks, rozpoczynam od standaryzacji problemu. (Algorytm simpleks polega na badaniu postaci kanonicznej, więc przed przystąpieniem do budowy tablicy muszę zamienić wszystkie nierówności na równania.)

- Dla ograniczeń ze znakiem dodaję zmienne swobodne „slack” w celu utworzenia równań.


2x1 + x2 ≤ 1 →  2x1 + x2  +  s1 = 1

- Dla ograniczeń ze znakiem ≥ odejmuję zmiennych swobodną / nadmiarową „excess” i dodaję zmienną sztuczą „artificial” w celu utworzenia równań.


4x1 − 3x2  ≥ 2 →  4x1 − 3x2 −  e2 + a2 = 2

Faza I

Celem jest minimalizacja sumy wszystkich zmiennych sztucznych.

(W fazie I zaczynam od minimalizacji niezależnie od tego czy oryginalną funkcją celu jest minimalizacja czy maksymalizacja).

Ponieważ mam tylko jedną zmienną sztuczną, więc moją funkcją celu jest:

Min x0 = a2

Następnie standaryzuję funkcję celu:


x0 = a2 →  x0 −  a2 = 0

Dodatkowo należy zaznaczy, że wszystkie zmienne decyzyjne mają wartości dodatnie. Tj:


x1,  x2,s1, e2, a2  ≥ 0

Przechodzę do tworzenia tabeli simpleksowej. (RHS – „right hand side” – prawa strona równania)

x1 x2 s1 a2 e2 RHS
s1 2 1 1 0 0 1
a2 4 -3 0 1 -1 2
x0 0 0 0 -1 0 0

W kolumnie zmiennej bazowej a2 dla rzędu x0 występuje wartość -1, co nie jest zgodne z typową definicją zmiennych bazowych. Innymi słowy wartość 1 może występować tylko w kolumnie i rzędzie a2, a w innych rzędach dla tej kolumny musi występować 0.

Z tego powodu wykonuję operację elementarną Rx1 -> Rx1 + Ra2

x1 x2 s1 a2 e2 RHS
s1 2 1 1 0 0 1
a2 4 -3 0 1 -1 2
x0 4 -3 0 0 -1 2

Warunkiem optymalizacji w tym kroku będzie osiągnięcie tabeli, w której wszystkie współczynniki zmiennych w rzędzie x0 będą ≤0

Krok 1. Znajduję największą dodatnią wartość w rzędzie x0, Kolumna x1, w której znajduje się ta wartość to tzw. oś „pivot” (W celach wyjaśnień dla kolejnych przykładów, zaznacza, że gdyby operacja ta dotyczyła maksymalizacji, musiał bym wybrać najmniejsza ujemną wartość w tym kroku).

Krok 2. Wykonuję test minimum, dla wartości dodatnich w kolumnie x1.

min { RHSk / x1k } – wybieram najmniejszą z obliczonych wartości (lub dowolną, jeśli są różne), a rząd, którego dotyczy będzie tzw. rzędem osi.

x1 x2 s1 a2 e2 RHS Min test
s1 2 1 1 0 0 1
$$\frac{1}{2}$$
a2 4 -3 0 1 -1 2
$$\frac{2}{4} = \frac{1}{2}$$
x0 4 -3 0 0 -1 2

Rząd i kolumna osi wyznaczają teraz tzw. Wartość osi. W kolejnej tabeli zamieniam więc a2 z x1

Wykonuję kolejno następujące operacje elementarne w celu uzyskania, jak wcześniej opisałem odpowiednich wartości dla zmiennych bazowych w kolumnie x1. Tzn. 1 w osi oraz 0 dla innych wartości dla kolumny x­1.

R3 -> -R2 + R3

R2 -> R2 / 4

R1 -> -2R2 + R­1

x1 x2 s1 a2 e2 RHS
s1 0
$$\frac{5}{2}$$
1
$$\frac{- 1}{2}$$

$$\frac{1}{2}$$
0
x1 1
$$\frac{- 3}{4}$$
0
$$\frac{1}{4}$$

$$\frac{- 1}{4}$$

$$\frac{1}{2}$$
x0 0 0 0 -1 0 0

Otrzymane współczynniki w rzędzie x0≤0 więc osiągnięty został warunek na optimum i tabela jest optymalna.

W zmiennych bazowych, dzięki powyższym operacjom zniknęła nam zmienna sztuczna. Możemy teraz zinterpretować tabele, jako:

s1 = 0, x1 = 0.5

x2 = e2 = a2 = 0

x0 = a2 = 0

Wartość funkcji celu to 0, co implikuje, że wartość zmiennej sztucznej to również zero i problem ma „rozwiązywalne” rozwiązanie.

Faza II

Przechodzę teraz do rozwiązywania oryginalnej funkcji, skoro pozbyłem się sztucznej zmiennej, i mogę usunąć jej kolumnę.

Analogicznie jak pokazałem w fazie pierwszej standaryzuję problem, przekształcam w celu otrzymania odpowiednich wartości dla zmiennych bazowych, wykonuje test minimum, i tak aż do osiągnięcia warunku na optymalną tabelę.

max { x0 = -2x1 + x2 }


min x0 + 2x1 −  x2 = 0

x1 x2 s1 e2 RHS
s1 0
$$\frac{5}{2}$$
1
$$\frac{1}{2}$$
0
x1 1
$$\frac{- 3}{4}$$
0
$$\frac{- 1}{4}$$

$$\frac{1}{2}$$
x0 2 -1 0 0 0

R3 -> -2R2 + R1

x1 x2 s1 e2 RHS
s1 0
$$\frac{5}{2}$$
1
$$\frac{1}{2}$$
0
x1 1
$$\frac{- 3}{4}$$
0
$$\frac{- 1}{4}$$

$$\frac{1}{2}$$
x0 0
$$\frac{1}{2}$$
0
$$\frac{1}{2}$$
-1


$$R_{1} \rightarrow \frac{2}{5}R_{1}$$


$$R_{2} \rightarrow \frac{3}{4}R_{1} + \ R_{2}$$


$$R_{3} \rightarrow \frac{- 1}{2}R_{1} + \ R_{3}$$

x1 x2 s1 e2 RHS
x2 0 1
$$\frac{2}{5}$$

$$\frac{1}{5}$$
0
x1 1 0
$$\frac{3}{10}$$

$$\frac{- 1}{10}$$

$$\frac{1}{2}$$
x0 0
0

$$\frac{- 1}{5}$$

$$\frac{2}{5}$$
-1


$$R_{2} \rightarrow \frac{R_{1}}{2} + \ R_{2}$$


R3 → −2R1 +  R3


R1 → 5R1

x1 x2 s1 e2 RHS
e2 0 5 2 1 0
x1 1
$$\frac{1}{2}$$

$$\frac{1}{10}$$

0

$$\frac{1}{2}$$
x0 0 -2
$$\frac{- 3}{5}$$

0
-1

Otrzymane współczynniki w rzędzie x0≤0 więc osiągnęliśmy warunek na optimum w przypadku dla minimalizacji i tabela jest optymalna.

Interpretacja wyników:

X1 = 0.5

X2 = 0

X0 = -1

Wnioski:

Otrzymaliśmy wyniki takie same jak w przypadku obliczeń w matlabie. Ilość iteracji nie zgadza się z liczbą tablic, ponieważ matlab zlicza je począwszy od fazy II.

Przykład II X =  O , zbiór pusty, zadanie nie ma rozwiązania dla n = 2

Min { x0 = 2x1 + x2 }

Ograniczenia:


$$\left\{ \begin{matrix} - 4x_{1} + 3x_{2} \leq 2 \\ - 2x_{1} - x_{2}\ \geq 1 \\ \end{matrix} \right.\ \ $$


x1,  x2  ≥ 0

Rozwiązanie uzyskane przy użyciu Matlaba - linprog:


x = [ ]


fval = [ ]

Output:

No feasible points exists.

Exitflag = -2

Iterations = 0

Algorithm = „simplex”

Interpretacja graficzna zadania:

Opis i rozwiązanie problemu LP z użyciem metody dwu fazowej.

Standaryzacja:


−4x1 + 3x2 ≤ 2 →   − 4x1 + 3x2  +  s1 = 2


−2x1 − x2  ≥ 1 →   − 2x1 − x2 −  e2 + a2 = 1

Założenia:


x1,  x2,s1, e2, a2  ≥ 0

Funkcja celu:


min x0 =  a2 

Standaryzacja funkcji celu:


x0 = a2 →  x0 −  a2 = 0

Tablica simpleksowa:

x1 x2 s1 a2 e2 RHS
s1 -4 3 1 0 0 2
a2 -2 -1 0 1 -1 1
x0 0 0 0 -1 0 0


R3 → R2 +  R3

x1 x2 s1 a2 e2 RHS
s1 -4 3 1 0 0 2
a2 -2 -1 0 1 -1 1
x0 -2 -1 0 0 -1 1

Interpretacja wyników:

Nie można wybrać, największej dodatniej wartości w rzędzie x0, co oznacza, że nie ma optymalnego rozwiązania i minimalizacja nie jest możliwa.

Nie ma sensu wybierać również „zer”, ponieważ skutkowałoby to tzw. zapętleniem i nigdy nie otrzymalibyśmy wyniku.

Wynik zgodny, z obliczeniami w matlabie.

Przykład III X ≠  O , wektor x przyjmuje wartości z zakresu licz rzeczywistych tzn: x  ∈  Rn- lub tylko kilka składowych wektora x i ∈  R i istnieje rozwiązanie optymalne zadania.

Funkcja celu:


max x0 =  x1 − 2x2

Ograniczenia:


$$\left\{ \begin{matrix} - 4x_{1} + 2x_{2} \leq 8 \\ 2x_{1} - 3x_{2} \leq 3 \\ 3x_{1} + 2x_{2} \leq 6 \\ \end{matrix} \right.\ \ $$


x1,  x2  ∈  R

Rozwiązanie uzyskane przy użyciu Matlaba - linprog:


$$x = \left\lbrack \ \begin{matrix} - 3.75\ \\ - 3.5 \\ \end{matrix} \right\rbrack$$

Fval = -3.25

Exitflag = 1

Iterations = 2

Algorithm = „simplex”

Interpretacja graficzna zadania:

Opis i rozwiązanie problemu LP z użyciem metody dwu fazowej.

Wprowadzam zmienne swobodne z powodu braku ograniczeń dla x1 i x2 w celu sprowadzenia zadania do postaci standardowej.


x1 = u1 −  v1


x2 = u2 −  v2

Standaryzacja:


−4x1 + 2x2 ≤ 8 →   − 4(u1 −  v1)+2(u2 −  v2)+ s1 = 8


2x1 − 3x2 ≤ 3 →  2(u1 −  v1)−3(u2 −  v2)+ s2 = 3


3x1 + 2x2 ≤ 6 →  3(u1 −  v1)+2(u2 −  v2)+ s3 = 6


x0 =  x1 − 2x2 →   x0 −  (u1 −  v1)+2(u2 −  v2)=0

Tablica simpleksowa:

u1 v1 u2 v2 s1 s2 s3 RHS Min test
s1 -4 4 2 -2 1 0 0 8 -
s2 2 -2 -3 3 0 1 0 3 1
s3 3 -3 2 -2 0 0 1 6 -
x0 -1 1 2 -2 0 0 0 0


$$R_{2} \rightarrow \frac{R_{2}}{3}$$


R1 → 2R2 +  R1


R3 → 2R2 +  R3


R4 → 2R2 +  R4

u1 v1 u2 v2 s1 s2 s3 RHS Min test
s1
$$\frac{- 8}{3}$$

$$\frac{8}{3}$$
0 0 1
$$\frac{2}{3}$$
0 10
$$\frac{15}{4}$$
v2
$$\frac{2}{3}$$

$$\frac{- 2}{3}$$
-1 1 0
$$\frac{1}{3}$$
0 1 -
s3
$$\frac{13}{3}$$

$$\frac{- 13}{3}$$
0 0 0
$$\frac{2}{3}$$
1 8 -
x0
$$\frac{1}{3}$$

$$\frac{- 1}{3}$$
0 0 0
$$\frac{- 2}{3}$$
0 2


$$R_{2} \rightarrow \frac{R_{1}}{4} + \ R_{2}$$


$$R_{3} \rightarrow \frac{{13R}_{1}}{8} + \ R_{3}$$


$$R_{1} \rightarrow \frac{{3R}_{1}}{8}$$


$$R_{4} \rightarrow \frac{1R_{1}}{3} + \ R_{4}$$

u1 v1 u2 v2 s1 s2 s3 RHS
v1 -1 1 0 0
$$\frac{3}{8}$$

$$\frac{1}{4}$$
0
$$\frac{15}{4} = 3.75$$
v2 0 0 -1 1 0
$$\frac{1}{2}$$
0
$$\frac{7}{2} = 3.5$$
s3 0 0 0 0
$$\frac{13}{8}$$

$$\frac{7}{4}$$
1
$$\frac{97}{4}$$
x0 0 0 0 0
$$\frac{1}{8}$$

$$\frac{3}{4}$$
0
$$\frac{13}{4} = 3.25$$

Interpretacja wyników:


x1 = u1 −  v1 = 0 −  3.75 =   −  3.75 


x2 = u2 −  v2 = 0 −  3.5 =   −  3.5


x0 = 3.25

Ilość iteracji otrzymanych w wyniku działania funkcji linprog w matlabie nie zgadza się z liczbą tablic, ponieważ matlab zlicza je począwszy od fazy II.

Wartość funkcji fval, również nie zgadza się, ponieważ, matlab z użyciem linprog liczy tylko minimum, przez co wartości obliczone zgadzają się, ale ich znak się nie zgadza (są przeciwne).

Przykład IV Przykład praktyczny. Zadanie PL z większa liczbą zmiennych (n>2)

Treść zadania:

Babcia Genowefa zachorowała na grypę. Bakterie można zabić na trzy sposoby.

-Antybiotykami - x1

-Alkoholem – x2

-Wodą z cytryną – x3

Przyjęcie 1 porcji Antybiotyku zabija 40 Mld bakterii

Przyjęcie 1 porcji Alkoholu zabija 5 Mld bakterii

Przyjęcie 1 porcji Wody z cytryną zabija 1 Mld bakterii

Działanie 1 porcji Antybiotyku trwa 24h

Działanie 1 porcji Alkoholu trwa 5h

Działanie 1 porcji Wody z cytryną trwa 1h

Nie wolno podawać innych leków, kiedy działanie poprzedniego nie skończyło się. Kuracja nie może trwać więcej niż 7 dni, bo bakterie uodpornia się na Leki.

Koszt 1 porcji Antybiotyku wynosi 10 zł

Koszt 1 porcji Alkoholu wynosi 3 zł

Koszt 1 porcji Wody z cytryną wynosi 1 zł

Babcia może ze swojej renty wydać maksymalnie 31 zł, w innym wypadku nie będzie mieć, co jeść.

Należy ustalić dla babci kurację, która zabije najwięcej bakterii, za założeniem, że babcia przynajmniej raz spróbuje wody z cytryną, żeby się wyleczyć.

Rozwiązanie uzyskane przy użyciu Matlaba - linprog:


$$x = \left\lbrack \ \begin{matrix} 3\ \\ \begin{matrix} 0\ \\ 1 \\ \end{matrix} \\ \end{matrix} \right\rbrack$$

Fval = -121

Exitflag = 1

Iterations = 1

Algorithm = „simplex”

Funkcja celu:


max x0 =  40x1 + 5x2 + x3   [Mld bakt.]

Objaśnienia:

-Współczynniki w funkcji celu oznaczają ilość zabitych w Mld bakterii przypadająca na 1 porcję $\lbrack Mld\frac{\text{bakt.}}{porcje}\rbrack\ \ \ $

-Zmiennymi w funkcji celu jest ilość porcji.

Ograniczenia:


$$\left\{ \begin{matrix} \ 24x_{1} + {5x}_{2} + x_{3} \leq 168\ \lbrack godziny\rbrack \\ \ 10x_{1} + {3x}_{2} + x_{3} \leq 31\ \lbrack PLN\rbrack \\ x_{3} \geq 1 \\ \end{matrix} \right.\ \ $$


x1,  x2,  x3  ≥ 0

Objaśnienia:

-Współczynniki w pierwszym ograniczeniu oznaczają ilość godzin działania leku przypadająca na 1 porcję leku $\lbrack\frac{\text{godziny}}{porcje}\rbrack\ \ \ $

-Współczynniki w drugim ograniczeniu funkcji oznaczają ilość złotych (kosztów) przypadająca na 1 porcję leku $\lbrack\frac{\text{PLN}}{porcje}\rbrack\ \ \ $

-Trzecie ograniczenie oznacza, że ilość przyjętych przez pacjenta porcji wody z cytryną ma być większa lub równa 1

Standaryzacja:


24x1 + 5x2 + x3 ≤ 168 →  24x1 + 5x2 + x3 +  s1 = 168


10x1 + 3x2 + x3 ≤ 31 →  10x1 + 3x2 + x3 +  s2 = 31


x3 ≥ 1 →  x3 −  e3 +  a3 = 31

Faza I

Funkcją celu w fazie I:


min = x0 =  a3

Standaryzacja funkcji celu:


x0 = a3 →  x0 −  a3 = 0

Tablica smipleks:

x1 x2 x3 s1 s2 a3 e3 RHS
s1 24 5 1 1 0 0 0 168
s2 10 3 1 0 1 0 0 31
a3 0 0 1 0 0 1 -1 1
x0 0 0 0 0 0 -1 0 0


R4 → R3 +  R4

x1 x2 x3 s1 s2 a3 e3 RHS Min test
s1 24 5 1 1 0 0 0 168 168
s2 10 3 1 0 1 0 0 31 31
a3 0 0 1 0 0 1 -1 1 1
x0 0 0 1 0 0 0 -1 1


R1 → −R3 +  R1


R2 → −R3 +  R2


R4 → −R3 +  R4

x1 x2 x3 s1 s2 a3 e3 RHS
s1 24 5 0 1 0 -1 1 167
s2 10 3 0 0 1 -1 1 30
x3 0 0 1 0 0 1 -1 1
x0 0 0 0 0 0 -1 0 0

Warunek optymalności tablicy spełniony.

x0 = a3 = 0

Faza II

Funkcją celu w fazie II - maksymalizacja


max x0 −  40x1 − 5x2 − x3 = 0

x1 x2 x3 s1 s2 e3 RHS
s1 24 5 0 1 0 1 167
s2 10 3 0 0 1 1 30
x3 0 0 1 0 0 -1 1
x0 -40 -5 -1 0 0 0 0


R4 → R3 +  R4

x1 x2 x3 s1 s2 e3 RHS Min test
s1 24 5 0 1 0 1 167
$$\frac{167}{24} = 6.958(3)$$
s2 10 3 0 0 1 1 30
$$\frac{30}{10} = 3$$
x3 0 0 1 0 0 -1 1 -
x0 -40 -5 0 0 0 -1 1


R4 → 4R2 +  R4


$$R_{2} \rightarrow \frac{R_{2}}{10}$$


R1 → −24R2 +  R1

x1 x2 x3 s1 s2 e3 RHS
s1 0
$$\frac{- 11}{5}$$
0 1
$$\frac{- 24}{10}$$

$$\frac{- 14}{10}$$
95
x1 1
$$\frac{3}{10}$$
0 0
$$\frac{1}{10}$$

$$\frac{1}{10}$$
3
x3 0 0 1 0 0 -1 1
x0 0 7 0 0 4 3 121

Otrzymane współczynniki w rzędzie x0≥0 więc osiągnęliśmy warunek na optimum w przypadku dla maksymalizacji i tabela jest optymalna.

Interpretacja wyników:

X1 = 3

X2 = 0

X3 = 1

X0 = 121

Wnioski:

Ilość iteracji otrzymanych w wyniku działania funkcji linprog w matlabie nie zgadza się z liczbą tablic, ponieważ matlab zlicza je począwszy od fazy II.

Wartość funkcji fval, również nie zgadza się, ponieważ, matlab z użyciem linprog liczy tylko minimum, przez co wartości obliczone zgadzają się, ale ich znak się nie zgadza (są przeciwne).


Wyszukiwarka

Podobne podstrony:
BO Cw 02 Metoda Simplex
Dwufazowa prymarna metoda simplex
ćw 17 Metoda Rungego Kutty
metoda SIMPLEX
badania operacyjne, w5 Metoda Simpleks
algorytm transportowy, metoda simplex XJJRAUUERJVV5AUF7SO4M6PNICAPSRDHZNPH7FQ
badania operacyjne metoda simplex[1]
metoda simplex (1), notatki, notatki
Ekonometria - metoda simplex (14 stron)
Ekonometria metoda simplex (14 stron) (3)
Prymarna metoda simplex
Ćw 4 Techniczna metoda pomiaru impedancji pętli zwarciowej
ćw 18 Metoda Różnic Skończonych
Z.T. Metoda simpleks, Podstawy logistyki, Transport i spedycja
WILGOTNOŚĆ OPTYMALNA (ćw.7)
programowanie liniowe - metoda simpleks, BADOP

więcej podobnych podstron