Simplexová metoda (Simplexový algoritmus) je iterativní způsob řešení problémů lineárního programování (lineární optimalizace) objevený americkým matematikem Georgem Dantzigem v roce 1947. Simplexová metoda postupuje od základního řešení, v každém svém kroku řešení pozmění takovým způsobem, aby hodnota účelové funkce byla vyšší než v kroku předchozím. Algoritmus terminuje, pokud řešení již nelze zlepšit (je optimální).
Základní postup
Základní postup řešení problémů maximalizace lineárního programování simplexovou metodou vyžaduje omezení ve tvaru nerovností a všechny proměnné musí být kladné.Pro řešení minimalizačních problémů je zapotřebí převést úlohu na maximalizační dle vzorce .
Za podmínek:
Prvním krokem je odstranění nerovností z podmínek, čímž vzniknou v budoucí simplexové tabulce bázové proměnné.
Za podmínek:
Nyní přepíšeme problém do simplexové tabulky.
x1 | x2 | x3 | x4 | x5 | b |
---|---|---|---|---|---|
1 | 0 | 1 | 0 | 0 | 4 |
0 | 2 | 0 | 1 | 0 | 12 |
3 | 2 | 0 | 0 | 1 | 18 |
-3 | -5 | 0 | 0 | 0 | 0 |
Sloupce odpovídají jednotlivým proměnným, řádky jednotlivým podmínkám. V posledním řádku je zapsáno kritérium ve tvaru . V posledním řádku sloupce b je hodnota kriteriální funkce za předpokladu, že jsou všechny nebázové proměnné nulové (ty jež nemají ve svých hodnotách jednotkovou matici).
Nyní zvolíme klíčový sloupec. Klíčový sloupec je takový sloupec, na kterém hodnota kritéria závisí nejvíce. Z kriteriální funkce je to zřejmě , jelikož má tato proměnná nejvyšší multiplikativní koeficient (5). V simplexové tabulce je to sloupec, v jehož posledním řádku je nejnižší záporná hodnota (nejvyšší v absolutní hodnotě). Pokud jsou všechny hodnoty kladné, tak algorimus terminuje, řešení ve sloupci b je optimální.
Následuje volba klíčového prvku. V klíčovém sloupci hledáme takovou kladnou hodnotu, jejíž podíl s odpovídající hodnotou ve sloupci b je minimální (). V tomto případě je to hodnota na druhém řádku. V případě rovnosti více minimálních hodnot vybereme libovolnou z nich. Tímto postupem vybíráme z omezení to, které je nejtvrdší (podle třetího omezení je maximálně 9, podle druhého maximálně 6).
Dalším krokem již je výpočet nové simplexové tabulky. Postupujeme tak, aby z báze vypadl sloupec obsahující jednotku na indexu klíčového prvku a nahradil jej v bázi klíčový sloupec, koeficienty v posledním řádku pod bází musí být nulové. Úpravy spočívají v přičítání (odečítání) násobků ostatních řádků, případně ve vynásobení řádku samotného.
x1 | x2 | x3 | x4 | x5 | b |
---|---|---|---|---|---|
1 | 0 | 1 | 0 | 0 | 4 |
0 | 1 | 0 | 1/2 | 0 | 6 |
3 | 0 | 0 | -1 | 1 | 6 |
-3 | 0 | 0 | 5/2 | 0 | 30 |
V nové simplexové tabulce si povšimneme, že se hodnota kriteriální funkce zvýšila na 30, jejíž aktuální stav lze napsat takto:
Z uvedeného vyplývá, že řešení není stále optimální, protože zvýšení povede ke zvýšení hodnoty kritéria (v simplexové tabulce vidíme záporný koeficient v posledním řádku sloupce ). Proto provedeme další iteraci algoritmu.
x1 | x2 | x3 | x4 | x5 | b |
---|---|---|---|---|---|
0 | 0 | 1 | 1/3 | -1/3 | 2 |
0 | 1 | 0 | 1/2 | 0 | 6 |
1 | 0 | 0 | -1/3 | 1/3 | 2 |
0 | 0 | 0 | 3/2 | 1 | 36 |
V posledním řádku simplexové tabulky se již vyskytují pouze samé nezáporné hodnoty, řešení je proto optimální.
Speciální případy
Blandovo anticyklické pravidlo
Při řešení simplexové metody se můžeme dostat do cyklu - hodnota kriteriální funkce nestoupá a po několika iteracích se vrátíme k původnímu zadání. Tuto situaci řeší Blandovo anticyklické pravidlo, které upravuje volbu klíčového prvku takovým způsobem, aby k zacyklení nedošlo.
- Jako klíčový sloupec bereme ten, který má v posledním řádku zápornou hodnotu a jeho index je nejnižší.
- Pokud neexistuje jednoznačná volba, který sloupec opustí bázi, vybereme ten s nižším indexem.
Nekonečné množství řešení
Uvažujme příklad
Za podmínek:
Převedeme na požadovaný tvar.
Za podmínek:
Sestavíme simplexovou tabulku.
x1 | x2 | x3 | x4 | b |
---|---|---|---|---|
1 | 1 | 1 | 0 | 4 |
1 | 2 | 0 | 1 | 6 |
-2 | -4 | 0 | 0 | 0 |
V posledním řádku jsou záporné koefienty, provedeme další iteraci.
x1 | x2 | x3 | x4 | b |
---|---|---|---|---|
1/2 | 0 | 1 | -1/2 | 1 |
1/2 | 1 | 0 | 1/2 | 3 |
0 | 0 | 0 | 2 | 12 |
Dle dosud popsaných pravidel simplexová metoda končí. Ale povšimněme si, že v posledním řádku je nulový koeficient i u nebázové proměnné. To značí, že úloha má nekonečné množství řešení (řešením je celá stěna mnohostěnu). V tomto případě provedeme nad daným sloupcem (sloupci) další iteraci. Celkové řešení problému bude konvexním obalem jednotlivých řešení.
x1 | x2 | x3 | x4 | b |
---|---|---|---|---|
1 | 0 | 2 | -1 | 2 |
0 | 1 | -1 | 1 | 2 |
0 | 0 | 0 | 2 | 12 |
Celkové řešení úlohy je:
Neomezené řešení
Další možností, na kterou lze v simplexové metodě narazit je neomezené řešení. To nastává tehdy, je-li mnohostěn řešení neomezený a vektor kriteriální může růst nadevšechny meze.
Mějme příklad
Za podmínek:
Převedeme na požadovaný tvar.
Za podmínek:
Sestavíme simplexovou tabulku.
x1 | x2 | x3 | b |
---|---|---|---|
-2 | 1 | 1 | 1 |
-1 | -3 | 0 | 0 |
Řešení není optimální, provedeme další iteraci.
x1 | x2 | x3 | b |
---|---|---|---|
-2 | 1 | 1 | 1 |
-7 | 0 | 3 | 12 |
V simplexové tabulce jsme se nyní dostali do situace, kdy by musela být hodnota klíčové prvku záporná, což není možné. Řešení je neomezené.
Jiná omezení a jejich převod na kanonický tvar
Za předpokladu, že jsou omezení zadána například pomocí rovnic (nikoliv pomocí nerovnic), nebyli bychom schopni problém řešit simplexovou metodou, protože by nám chybělo díky absenci báze základní řešení. V tomto případě se napřed musí vyřešit tzv. umělý problém.Tato úloha má zřejmě totožné řešení jako úloha původní, a to pokud . Pokud y nelze položit rovné nule, pak úloha nemá řešení.
Nejprve vyřešíme umělý problém tak, aby báze neobsahovala proměnné y. V momentě, kdy se nám to podaří, můžeme tyto proměnné z příkladu vyloučit - máme totiž simplexovou tabulku, která obsahuje základní bázi zadaného problému (nezávisí na proměnných y). Po případných úpravách nové tabulky (zajištění nulových koeficientů pod bází) již postupujeme standardním způsobem
Ukažme si uvedený postup na příkladu (zdroj: skripta profesora Štechy).
Za podmínek:
Provedeme úpravu nerovnic.
Za podmínek:
Ze zadání nyní vidíme, že bychom klasickou simplexovou metodu nemohli nastartovat (chybí jednotková báze). Musíme proto provést dvoufázové řešení. V první fázi vyřešíme umělý problém dle vzorce uvedeného výše.
Nejprve sestavíme simplexovou tabulku.
x1 | x2 | x3 | y1 | y2 | b |
---|---|---|---|---|---|
1 | 1 | 0 | 1 | 0 | 10 |
1 | 0 | -1 | 0 | 1 | 4 |
0 | 0 | 0 | 1 | 1 | 0 |
Tabulku upravíme tak, aby pod bází byly nulové koeficienty.
x1 | x2 | x3 | y1 | y2 | b |
---|---|---|---|---|---|
1 | 1 | 0 | 1 | 0 | 10 |
1 | 0 | -1 | 0 | 1 | 4 |
-2 | -1 | 1 | 0 | 0 | -14 |
Provedeme první iteraci simplexové metody.
x1 | x2 | x3 | y1 | y2 | b |
---|---|---|---|---|---|
0 | 1 | 1 | 1 | -1 | 6 |
1 | 0 | -1 | 0 | 1 | 4 |
0 | -1 | -1 | 0 | 2 | -6 |
Řešení není stále optimální (poslední řádek obsahuje záporné koeficienty), provedeme další iteraci.
x1 | x2 | x3 | y1 | y2 | b |
---|---|---|---|---|---|
0 | 1 | 1 | 1 | -1 | 6 |
1 | 0 | -1 | 0 | 1 | 4 |
0 | 0 | 0 | 1 | 1 | 0 |
Nyní jsme získali řešení umělého problému. Jak vidíme, tak toto řešení nezávisí na hodnotách proměnných y, a proto má původní problém řešení. Nyní můžeme sestavit simplexovou tabulku původního problému tak, že vypustíme sloupce proměnných y a do posledního řádku vepíšeme jeho kriteriální funkci. Tímto končí první fáze řešení, dále již postupujeme dle standardního postupu.
x1 | x2 | x3 | b |
---|---|---|---|
0 | 1 | 1 | 6 |
1 | 0 | -1 | 4 |
3 | 2 | 0 | 0 |
Simplexovou tabulku upravíme tak, aby v posledním řádku pod bázovými proměnnými byly nulové koeficienty.
x1 | x2 | x3 | b |
---|---|---|---|
0 | 1 | 1 | 6 |
1 | 0 | -1 | 4 |
0 | 0 | 1 | -24 |
Z upravené tabulky vidíme, že jsme nalezli optimální řešení (pokud bychom toto štěstí neměli, tak bychom postupovali dle běžné simplexové metody).
Literatura
- ŠTECHA, Jan. Optimální rozhodování a řízení : Přednášky. [s.l.] : Vydavatelství ČVUT, 2002. 241 s. ISBN 80-01-02083-5.