2389


Programowanie liniowe - metoda simplex

Grzegorz Hoppe

Robert Watras

Algorytm simplex jest algorytmem pozwalającym znaleźć maksimum linowej funkcji celu określonej równaniem

0x01 graphic

w obszarze ograniczonym liniowymi warunkami:

0x01 graphic

0x01 graphic

Algorytm ten polega na utworzeniu specyficznej macierzy simpleksowej i wykonywaniu na niej określonych operacji, które odpowiadają zmianom argumentów funkcji celu, aż do momentu otrzymania takiej wartości funkcji dla której nie jest już możliwa zmiana argumentów z zyskiem dla wartości.

.

W wykonaniu tego zadania posłużyliśmy się programem napisanym w matlabie, który wykonuje przekształceń macierzy simpleksowej. Przed utworzeniem macierzy simpleksowej doprowadziliśmy równanie funkcji celu i ograniczenia do postaci normalnej ZPL. W naszej macierzy simpleksowej pierwszy wiersz i pierwsza kolumna zawierają liczby będące indeksami przy zmiennych. Oto kod źródłowy programu:

function []=zpl()

a=[0 0 2 4

0 -2.5 1.5 1.5

1 1 -2 -2

3 1.5 -1.5 0.5]

k=3;

r=3;

% 7.Powtarzaj procedure dopóki mozliwe jest okreslenie elementu centralnego.

while (k<=size(a,2))&(r<=size(a,1))

% 1.Okresl element centralny dla kolejnej iteracji

while (k<=size(a,2))&(a(2,k)<=0)

k=k+1;

r=3;

if k<=size(a,2)

while (r<=size(a,1))&(a(r,k)>=0)

r=r+1;

end

end

end

if (k<=size(a,2))&(r<=size(a,1))

%k

%r

%a(r,k)

a1=a;

% 2.Wiersz r-ty podziel przez minus element centralny

for i=2:size(a,2)

a1(r,i)=a(r,i)/(-a(r,k));

end

% 3.Do kazdego i-tego z pozostałych wierszy dodaj wiersz centralny pomnozony przez aik.

for i=2:size(a,1)

if i~=r

for j=2:size(a,2)

a1(i,j)=a1(i,j)+a1(r,j)*a(i,k);

end

end

end

% 4.Oryginalna kolumne k-ta podziel przez element centralny ark

for i=2:size(a,1)

a1(i,k)=a(i,k)/a(r,k);

end

% 5. Element centralny ark zastap jego odwrotnoscia 1/ark

a1(r,k)=1/a(r,k);

% 6. Zamienia zmienne bazowe z niebazowymi

tmp=a1(r,1);

a1(r,1)=a1(1,k);

a1(1,k)=tmp;

a=a1

else

'koniec'

end

end

Zadanie 1.

Znaleźć 0x01 graphic
dla

0x01 graphic

przy ograniczeniach:

0x01 graphic

Po wykonaniu przekształceń algebraicznych otrzymujemy równoważną postać normalną ZPL:

0x01 graphic

Macierz simpleksowa wygląda wtedy następująco:

x3

z

9.9

-2.6

x1

3.1

-1.1

x2

0.3

-0.3

Jak widać w macierzy współczynnik przy jedynej zmiennej niebazowej 0x01 graphic
jest ujemny, czyli nie można określić elementu centralnego. Wynika stąd, że 0x01 graphic
jest wartością maksymalną funkcji celu i jest ona osiągana dla 0x01 graphic

Zadanie 2.

Znaleźć 0x01 graphic
dla

0x01 graphic

przy ograniczeniach

0x01 graphic

Postać normalna ZPL:

0x01 graphic

Macierz simplex

x2

x4

Z

-2.5

1.5

1.5

x1

1

(-2)

-2

x3

1.5

-1.5

-0.5

Elementem centralnym w tej macierzy jest element znajdujący się w kolumnie zmiennej niebazowej 0x01 graphic
(wartość przy tej zmiennej jest dodatnia) o wartości równej -2 (bierzemy ujemną wartość z rozpatrywanej kolumny. Przekształcenie macierzy simpleksowej wygląda wtedy następująco:

x1

x4

Z

-1.75=-2.5+0.5*1.5

-0.75=1.5/(-2)

0=1.5+1.5*(-1)

x2

0.5=1/(-2)

-0.5=1/(-2)

-1=2/(-2)

x3

0.75=1.5+0.5*(-1.5)

0.75=-1.5/(-2)

1=-0.5+(-1)*(-1.5)

W otrzymanej macierzy nie ma już dodatnich wartości przy zmiennych niebazowych więc nie przekształcamy jej dalej. Odczytujemy wartość maksymalną funkcji celu 0x01 graphic
, która jest osiągana dla 0x01 graphic
.

Zadanie 3.

Znaleźć 0x01 graphic
dla

0x01 graphic

przy ograniczeniach:

0x01 graphic

Macierz simplex

x1

x2

y1

y2

Z

0

7

11

0

0

z1

21

-3

3

-1

0

z2

20

-2

-4

0

-1

z'

-41

5

1

1

1

Po przekształceniu

x1

z2

y1

y2

z

55

-5.5

-2.75

0

-2.75

z1

36

-4.5

-0.75

-1

-0.75

x2

5

-0.5

-0.25

0

-0.25

z'

-36

4.5

-0.25

1

0.75

Znalezione maksimum 0x01 graphic
dla 0x01 graphic

Zadanie 4.

Znaleźć 0x01 graphic
dla

0x01 graphic

przy ograniczeniach:

0x01 graphic

Macierz simplex

z1

x2

y1

y2

Z

0

1

-1

0

0

z1

2

-2

1

1

0

z2

5

-1

-1

0

-1

z'

-7

3

0

-1

1

Po przekształceniu

z1

x2

z2

y2

z

5

0

-2

-1

-1

x1

5

0

-1

-1

-1

y1

8

1

-3

-2

-2

z'

0

1

0

-1

0

Znalezione maksimum 0x01 graphic
dla 0x01 graphic



Wyszukiwarka