Algorytm simpleks

Algorytm simpleks jest uniwersalna metodą rozwiązywania programów liniowych.
Istota tego algorytmu polega na badaniu kolejnych rozwiązań bazowych (rozwiązań dopuszczalnych) programu liniowego w postaci kanonicznej w taki sposób, że :


a) znajdujemy (dowolne) rozwiązanie bazowe programu;
b) sprawdzamy, czy jest ono optymalne;
c) jeżeli dane rozwiązanie nie jest optymalne, konstruujemy następne rozwiązania bazowe lepsze (lub przynajmniej nie gorsze od poprzedniego).

Postępowanie kończy się w momencie stwierdzenia, że aktualne rozwiązanie bazowe jest optymalne, tzn. nie można już go poprawić.
Algorytm simpleks jest więc procedurą iteracyjna (etapową),a wyniki poszczególnych etapów zestawia się w kolejnych tablicach simpleks.

Pierwszym krokiem jest przekształcenie równań w postać macierzową

c1x1+c2x2+…+cnxn ≤ max

a11x1+a12x2+…+a1nxn ≤ b1

amx1+amx2+…+amnxn ≤ bm

Przy czym, c1, c2 to współczynniki zysku przy każdym produkcie.

.

0x08 graphic

Macierz A, oznacza produkty. A jest macierzą współczynników warunków ograniczających

0x08 graphic

Macierz x, która oznacza zmienne

decyzyjne.

0x08 graphic

Macierz B oznacza maksymalne ograniczenie. Jest wektorem wyrazów wolnych warunków ograniczających.

0x08 graphic
Funkcja C, czyli funkcja celu, oznacza zysk. Zdefiniowane po wprowadzeniu zmiennych bilansujących.

Zmienne bilansujące:

cb

xb

A I

b

zj

0

Cj-zj

c

xb - wektor zmiennych bazowych

cb - wektor kolumnowy współczynników funkcji celu dla zmiennych bazowych.

I - macierz jednostkowa o wymiarach m x n

zj - wiersz zerowy:

Plan produkcji wygląda następująco:

 

P1

P2

ZASOBY

S1

5

4

22

S2

5

6

45

S3

3

7

33

ZYSK

3

4

 

NAJPIERW WYZNACZAMY FUNKCJĘ CELU

3x1 + 4x2 + 0x4 + 0x5 + 0x6   --> MAX

W przypadku, gdy funkcja celu jest maksymalna - rozwiązanie dotąd nie będzie optymalne, dopóki w wierszu zerowym będą występować liczby nieujemne.

- kolejny krok to doprowadzenie do postaci kanonicznej układu:

5x1 + 4x2+x3= 22

5x1 +6x2+x4 = 45

5x1 + 7x2+x5 =33

x1 >= 0, x2 >= 0, x3 >= 0, x4 >= 0, x5 >= 0,

- układ doprowadzamy do bazowej postaci kanonicznej

5x1 + 4x2 + 1x3 + 0x4 + 0x5 = 22
5x1 + 6x2 + 0x3 + 1x4 + 0x5 = 45
5x1 + 7x2 + 0x3 + 0x4 + 1x5 = 33

W moim przypadku macierze potrzebne do obliczeń będą wyglądać w sposób następujący:

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

; ; ;

- przystępujemy do tworzenia tabeli metody simpleks

Cx->max

3

4

0

0

0

b

Baza

Cb

x1

x2

x3

x4

x5

x3

0

5

4

1

0

0

22

x4

0

5

6

0

1

0

45

x5

0

5

7

0

0

1

33

Zj

 

Cj -Zj

- wyliczamy wskaźniki optymalności

*korzystamy ze wzorów; Zj=∑Cb*aij ; Fc=∑ Cb*b

Cx->max

3

4

0

0

0

b

Baza

Cb

x1

x2

x3

x4

x5

x3

0

5

4

1

0

0

22

x4

0

5

6

0

1

0

45

x5

0

5

7

0

0

1

33

Zj

0*5+0*5+0*5=0

0*4+0*6+0*7=0

0*1+0*0+0*0=0 

0*0+0*1+0*0=0

0*0+0*0+0*1=0

22*0+45*0+33*0=0

Cj -Zj

3-0=3

4-0=4

0-0=0

0-0=0

0-0=0

-pierwsza tablica simpleksowa

Ponieważ współczynniki optymalności mają wartości dodatnie - rozwiązanie nie jest optymalne.

* dlatego też następnym krokiem jest znalezienie kryterium wejściowego i wyjściowego;

Kryterium optymalności dla zadania maksymalizacji:

Jeżeli wartość wszystkich składników optymalności cj - zj jest niedodatnia, to rozpatrywane rozwiązanie jest optymalne. Jeżeli choć jeden ze wskaźników optymalności cj - zj jest dodatni, to istnieje możliwość poprawy tego rozwiązania.

Kryterium wejścia:

Wybieramy największą wartość wskaźnika optymalności cj - zj. Odpowiadającą mu zmienną wprowadzamy do nowej bazy. Jeżeli największa wartość wskaźnika optymalności odpowiada więcej niż jedna zmienna, to do nowej bazy wprowadzamy zmienną o niższym numerze.

Kryterium wyjścia:

Obliczamy iloraz kolejnych wyrazów wolnych przez odpowiadające im elementy kolumny wchodzącej do bazy dla tych elementów kolumny wprowadzonej do bazy, które są dodatnie. Bazę opuszcza ta zmienna, dla której odpowiadający jej iloraz jest najmniejszy. Jeżeli minimum jest przyjmowane przez więcej niż jeden raz, to jako zmienną opuszczającą bazę wybieramy zmienną o najniższym numerze.

- maksymalizujemy f-kcję celu więc szukamy maksymalnego wskaźnika optymalności (kryterium wejścia),poczym zaznaczamy całą kolumnę, w której znaleźliśmy max. wskaźnik.

W naszym przypadku jest to wartość = 4

Cx->max

3

4

0

0

0

b

Baza

Cb

x1

x2

x3

x4

x5

x3

0

5

4

1

0

0

22

x4

0

5

6

0

1

0

45

x5

0

5

7

0

0

1

33

Zj

0

0

 0

0

0

0

Cj -Zj

3

4

0

0

0

MAX.

kryterium wejścia

-następnie wyliczamy kryteria wyjścia (ostatnia, szara kolumna) ,

Cx->max

3

4

0

0

0

b

Baza

Cb

x1

x2

x3

x4

x5

x3

0

5

4

1

0

0

22

22/4=5,5

x4

0

5

6

0

1

0

45

45/6=7,5

x5

0

5

7

0

0

1

33

33/7=4,7

Zj

0

0

 0

0

0

0

Cj -Zj

3

4

0

0

0

MAX.

kryterium wejścia

-teraz szukamy najmniejszej wartości w ostatniej kolumnie (szarej-kryterium wyjścia),poczym zaznaczamy całą kolumnę, w której znaleźliśmy najmniejszy wskaźnik. ;

Cx->max

3

4

0

0

0

b

Baza

Cb

x1

x2

x3

x4

x5

x3

0

5

4

1

0

0

22

22/4=5,5

x4

0

5

6

0

1

0

45

45/6=7,5

x5

0

5

7

0

0

1

33

33/7=4,7

Kryterium wyjścia

MIN.

Zj

0

0

 0

0

0

0

Cj -Zj

3

4

0

0

0

Max.kryterium wejścia

-wymieniamy jedną zmienną bazową (kolumna żółta) znajdującą się w zaznaczonym wierszu (jest nią x5 ) na zmienną niebazową ,znajdującą się w zaznaczonej kolumnie (jest nią x2 ). Wraz ze zmienną przenosimy odpowiadający jej współczynnik z f-kcji celu ;

.

Bazę opuszcza wg kryterium x5(korzystam z kryterium wejścia i wyjścia).Do bazy wchodzi x2.

Tablica simpleksowa wygląda wówczas tak ;

Cx -> max

3

4

0

0

0

b

baza

Cb

x1

x2

x3

x4

x5

x3

0

3,285714

0

1

0

-0,57143

3,142857

0,956522

x4

0

2,428571

0

0

1

-0,85714

16,71429

6,882353

x2

4

0,428571

1

0

0

0,142857

4,714286

11

Zj

1,714286

4

0

0

0,571429

18,85714

C-Zj

1,285714

0

0

0

-0,57143

-druga tablica simpleksowa

W dalszym ciągu nie uzyskaliśmy rozwiązania optymalnego.

Przechodzimy do następnej bazy.

Bazę opuszcza x3. Do bazy wchodzi x1.

Cx -> max

3

4

0

0

0

b

baza

Cb

x1

x2

x3

x4

x5

x3

3

1

0

0,304348

0

-0,17391

0,956522

x4

0

0

0

-0,73913

1

-0,43478

14,3913

x2

4

0

1

-0,13043

0

0,217391

4,304348

Zj

3

4

0,391304

0

0,347826

20,08696

C-Zj

0

0

-0,3913

0

-0,34783

-trzecia tablica simpleksowa

Ponieważ w wierszu zerowym nie występują już liczby dodatnie (cj - zj), więc rozwiązanie jest optymalne.

Optymalne rozwiązanie:

 

x1

0,956522

xb=

x4

14,3913

 

x2

4,304348

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic