Kolejne kroki otrzymywania
prowadzą do narastania błędów - duża liczba mnożeń i dzieleń powoduje, że wyniki
są coraz mniej dokładne (algorytm metody sympleks nie jest stabilny).
Przypuśćmy, że
startową jest
![]()
i w m-tym kroku uzyskaliśmy tablicę zawiązana z wyborem zmiennych bazowych
.
Oznacza to, że macierz
gdzie
jest
-tą kolumną macierzy
, spełnia warunek
![]()
jest m-tą
,
to znaczy jej kolumny
tworzą macierz jednostkową
![]()
Co pewien czas (np. co 100 kroków) zamiast wyliczać
metodą eliminacji
, wyliczamy ją bezpośrednio ze
startowej
mnożąc ją z lewej strony przez odpowiednią podmacierz
wyznaczoną przez wybór
bazy.
Kolejna
powstaje z poprzedniej przez mnożenie z lewej strony przez macierz różniącą się od jednostkowej tylko jedną kolumna a więc postaci
![E=\left[\begin{array}[]{c|c|c|c}1&\cdots&\frac{-\alpha _{{0,r}}}{a\gamma r}&0\\
0&...&\frac{-\alpha _{{1,r}}}{a_{{\gamma r}}}&0\\
\vdots&\vdots&...&\\
\vdots&&\frac{-1}{a_{{\gamma,r}}}&\vdots\\
\vdots&&...&\vdots\\
0&\vdots&\frac{-\alpha _{{t}}r}{a_{{\gamma,r}}}&1\end{array}\right]=I-\frac{1}{\alpha _{{\gamma r}}}\left[\begin{array}[]{c|c|c}0&\alpha _{{0,r}}&0\\
\vdots&\alpha _{{1,r}}&\vdots\\
\vdots&\vdots&\vdots\\
0&\alpha _{{t,r}}&0\end{array}\right]+j\left[\begin{array}[]{c|c|c}0&...&0\\
\vdots&\frac{1}{\alpha _{{\gamma,r}}}&\vdots\\
0&...&0\end{array}\right]](wyklady/op1/mi/mi869.png)
gdzie kolumna główna macierzy poprzedniej ma postać
i elementem centralnym jest
.
![E\cdot\left[\begin{array}[]{c}\alpha _{{0,r}}\\
\alpha _{{1,r}}\\
\vdots\\
\alpha _{{t,r}}\end{array}\right]=\left[\begin{array}[]{c}\alpha _{{0}}r-\frac{\alpha _{{0}}r}{\alpha _{{j,r}}}\cdot\alpha _{{j,r}}\\
\vdots\\
\alpha _{{t}}r-\frac{\alpha tr}{\alpha _{{j,r}}}\cdot\alpha _{{j,r}}\end{array}\right]=\left[\begin{array}[]{c}0\\
\vdots\\
1\\
\vdots\\
\par
\end{array}\right]\leftarrow j](wyklady/op1/mi/mi870.png)
Macierze
. Ponieważ macierze typu
są podobne do macierzy elementarnych
można tak modyfikować uzyskiwanie macierzy
(dobierając kolejność mnożenia przez
macierze elementarne by zminimalizować błędy) i dodatkowo jeśli macierz początkowa był a rozrzedzona, tzn. miała
mało współczynników
, by macierz wynikowa była też rozrzedzona.
Algorytm zrewidowanej metody sympleks:
Dana jest początkowa
(lub macierz opisująca wielościan i koszty).
W kolejnym kroku mamy dodatkowo macierz
powstałą przez odwrócenie podmacierzy wyznaczonej
przez zmienne bazowe i listę zmiennych bazowych.
![\left[\begin{array}[]{c|c|c}x_{{0}}&1&cB^{{-1}}\\
\hline\begin{array}[]{c}x_{{i_{{1}}}}\\
x_{{i_{{2}}}}\\
\vdots\\
x_{{i_{{t}}}}\end{array}&\begin{array}[]{c}0\\
0\\
\vdots\\
\par
\end{array}&B^{{-1}}\end{array}\right]](wyklady/op1/mi/mi895.png)
1) wyliczamy wyrazy wolne ![\left[\begin{array}[]{c}b_{{0}}^{{\prime}}\\
b_{{1}}^{{\prime}}\\
...\\
b_{{t}}^{{\prime}}\end{array}\right]=\overline{B}^{{-1}}\left[\begin{array}[]{c}b_{{0}}\\
b_{{1}}\\
...\\
b_{{t}}\end{array}\right]](wyklady/op1/mi/mi860.png)
2) wyliczamy koszty zredukowane
![]()
gdzie
jest i-ta kolumną macierzy
(początkowej)
3) test optymalności
Jeżeli
to stop:
wierzchołkiem optymalnym jest ![]()
Jeżeli nie, to wybieramy kolumnę główną taką, że ![]()
4) obliczamy kolumnę główną ![]()
5) test skończoności
Jeżeli
to stop: otrzymujemy nieskończoną krawędź poprawiajacą
6) wyznaczamy element centralny ![]()
7) wyliczamy nową
stosując do
przekształcenia
i ustalamy nową
listę zmiennych bazowych.
![]()
następna
![TS\qquad=\ \left[\begin{array}[]{c|c|c}-c_{{N}}+c_{{N}}B^{{-1}}A_{{N}}&cB^{{-1}}&b_{{0}}^{{\prime}}=cB^{{-1}}\\
\hline\underset{\text{nie interesująca - nie wyliczamy}}{A_{{N}}B^{{-1}}}&B^{{-1}}&B^{{-1}}b\end{array}\right]](wyklady/op1/mi/mi893.png)
Policzmy ile działań wykonujemy w przypadku tablicy o
kolumnach i
wierszach.
| Przekształcenia | |||
| Metoda | Gausa | Koszty | Razem |
| Jordana | zredukowane | ||
| Sympleks
|
|||
| Zrewidowana
|
![]() |
Wniosek:
Zazwyczaj metoda zrewidowana jest droższa, ale zyskujemy dokładność.
Niestety macierzowy algorytm metody sympleks, w przeciwieństwie do geometrycznego, może się zapętlić. Sytuacja zachodzi wtedy gdy jeden wierzchołek może być przedstawiony za pomocą wielu tablic sympleks. Możemy w nieskończoność wędrować krawędziami zdegenerowanymi po jednym i tym samym wierzchołku. Aby uniknąć tej sytuacji niektóre algorytmy wykorzystują numerowanie leksykograficzne wierzchołków. Patrz [4]
Aby wierzchołek mógł być przedstawiony wieloma tablicami sympleks z prawej strony kreski muszą znajdować się zera. Algorytmy wykonujące przekształcenia Gaussa - Jordana nie są stabilne co w konsekwencji daje błąd ale i przerwanie pętli - co wykorzystują inne algorytmy.
Podamy teraz przykład zapętlenia się algorytmu sympleks pochodzący z [3].
, gdzie
![\begin{array}[]{r}x_{1}+\frac{1}{4}x_{4}-8x_{5}-x_{6}+9x_{7}=0\\
x_{2}+\frac{1}{2}x_{4}-12x_{5}-\frac{1}{2}x_{6}+3x_{7}=0\\
x_{3}+x_{6}=1\end{array}](wyklady/op1/mi/mi879.png)
![]()
Ten układ równań daje następującą TS
![\left[\begin{array}[]{r|rrrrrrr|r}1&0&0&0&-\frac{3}{4}&20&-\frac{1}{2}&6&0\\
\hline 0&1&0&0&(\mathbf{\frac{1}{4}})&-8&-1&9&0\\
0&0&1&0&\frac{1}{2}&-12&-\frac{1}{2}&3&0\\
0&0&0&1&0&0&1&0&1\end{array}\right]](wyklady/op1/mi/mi890.png)
Otrzymujemy następujące TS:
![\left[\begin{array}[]{r|rrrrrrr|r}1&3&0&0&0&-4&-\frac{7}{2}&33&0\\
\hline 0&4&0&0&1&-32&-4&36&0\\
0&-2&1&0&0&(\mathbf{4})&\frac{3}{2}&-15&0\\
0&0&0&1&0&0&1&0&1\end{array}\right]](wyklady/op1/mi/mi903.png)
![\left[\begin{array}[]{r|rrrrrrr|r}1&1&1&0&0&0&-2&18&0\\
\hline 0&-12&8&0&1&0&(\mathbf{8})&-84&0\\
0&-\frac{1}{2}&\frac{1}{4}&0&0&1&\frac{3}{8}&-\frac{15}{4}&0\\
0&0&0&1&0&0&1&0&1\end{array}\right]](wyklady/op1/mi/mi902.png)
![\left[\begin{array}[]{r|rrrrrrr|r}1&-2&3&0&\frac{1}{4}&0&0&-3&0\\
\hline 0&-\frac{3}{2}&1&0&\frac{1}{8}&0&1&-\frac{21}{2}&0\\
0&\frac{1}{16}&-\frac{1}{8}&0&-\frac{3}{64}&1&0&(\mathbf{\frac{3}{16}})&0\\
0&\frac{3}{2}&-1&1&-\frac{1}{8}&0&0&\frac{21}{2}&1\end{array}\right]](wyklady/op1/mi/mi873.png)
![\left[\begin{array}[]{r|rrrrrrr|r}1&-1&1&0&-\frac{1}{2}&16&0&0&0\\
\hline 0&(\mathbf{2})&-6&0&-\frac{5}{2}&56&1&0&0\\
0&\frac{1}{3}&-\frac{2}{3}&0&-\frac{1}{4}&\frac{16}{3}&0&1&0\\
0&-2&6&1&\frac{5}{2}&-56&0&0&1\end{array}\right]](wyklady/op1/mi/mi865.png)
![\left[\begin{array}[]{r|rrrrrrr|r}1&0&-2&0&-\frac{7}{4}&44&\frac{1}{2}&0&0\\
\hline 0&1&-3&0&-\frac{5}{4}&28&\frac{1}{2}&0&0\\
0&0&(\mathbf{\frac{1}{3}})&0&\frac{1}{6}&-4&-\frac{1}{6}&1&0\\
0&0&0&1&0&0&1&0&1\end{array}\right]](wyklady/op1/mi/mi862.png)
![\left[\begin{array}[]{r|rrrrrrr|r}1&0&0&0&-\frac{3}{4}&20&-\frac{1}{2}&6&0\\
\hline 0&1&0&0&\frac{1}{4}&-8&-1&9&0\\
0&0&1&0&\frac{1}{2}&-12&-\frac{1}{2}&3&0\\
0&0&0&1&0&0&1&0&1\end{array}\right]](wyklady/op1/mi/mi887.png)
I tak ostatnia siódma TS jest identyczna z pierwszą.
Wszystkie tablice opisują wierzchołek nieoptymalny
![]()
Idąc inną drogą otrzymujemy:
![\left[\begin{array}[]{r|rrrrrrr|r}1&0&0&0&-\frac{3}{4}&20&-\frac{1}{2}&6&0\\
\hline 0&1&0&0&\frac{1}{4}&-8&-1&9&0\\
0&0&1&0&(\mathbf{\frac{1}{2}})&-12&-\frac{1}{2}&3&0\\
0&0&0&1&0&0&1&0&1\end{array}\right]](wyklady/op1/mi/mi880.png)
![\left[\begin{array}[]{r|rrrrrrr|r}1&0&\frac{3}{2}&0&0&2&-\frac{5}{4}&\frac{21}{2}&0\\
\hline 0&1&-\frac{1}{2}&0&0&-2&-\frac{3}{4}&\frac{15}{2}&0\\
0&0&2&0&1&-24&-1&6&0\\
0&0&0&1&0&0&(\mathbf{1})&0&1\end{array}\right]](wyklady/op1/mi/mi906.png)
![\left[\begin{array}[]{r|rrrrrrr|r}1&0&\frac{3}{2}&\frac{5}{4}&0&2&0&\frac{21}{2}&\frac{5}{4}\\
\hline 0&1&-\frac{1}{2}&\frac{3}{4}&0&-2&0&\frac{15}{2}&\frac{3}{4}\\
0&0&2&1&1&-24&0&6&1\\
0&0&0&1&0&0&1&0&1\end{array}\right]](wyklady/op1/mi/mi889.png)
Ostatnia tablica opisuje wierzchołek optymalny
.
Rada praktyczna:
Krawędzie zdegenerowane pochodzą od tych zmiennych, które na
przecięciu swojej kolumny i równania (wiersza) o wyrazie wolnym
mają liczbę
.
Badamy wiersze o zerowym wyrazie wolnym i szukamy krawędzi
poprawiających, które mają w tym wierszu liczbę
.
Treść automatycznie generowana z plików źródłowych LaTeXa za pomocą oprogramowania wykorzystującego LaTeXML.
strona główna | webmaster | o portalu | pomoc
© Wydział Matematyki, Informatyki i
Mechaniki UW, 2009-2010.
Niniejsze materiały są udostępnione bezpłatnie na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 3.0 Polska.
Projekt współfinansowany przez Unię Europejską w ramach
Europejskiego Funduszu Społecznego.
Projekt współfinansowany przez Ministerstwo Nauki i Szkolnictwa Wyższego i przez Uniwersytet Warszawski.