Simplexní algoritmus - Simplex algorithm
v matematická optimalizace, Dantzig je simplexní algoritmus (nebo simplexní metoda) je populární algoritmus pro lineární programování.[1]
Název algoritmu je odvozen z konceptu a simplexní a navrhl T. S. Motzkin.[2] Simplice se ve skutečnosti nepoužívají v metodě, ale jednou z jejích interpretací je to, že funguje na simpliciálu šišky, a tyto se stávají správnými jednoduchostmi s dalším omezením.[3][4][5][6] Jedná se o zjednodušené kužele, které jsou rohy (tj. Sousedství vrcholů) geometrického objektu zvaného a polytop. Tvar tohoto mnohostěnu je definován znakem omezení aplikován na objektivní funkci.
Dějiny
George Dantzig pracoval na metodách plánování pro americké vojenské letectvo během druhé světové války pomocí stolní kalkulačky. V průběhu roku 1946 ho jeho kolega vyzval, aby mechanizoval proces plánování, aby ho odvrátil od přijetí jiné práce. Dantzig formuloval problém jako lineární nerovnosti inspirované prací Vasilij Leontief v té době však do své formulace nezahrnul cíl. Bez cíle může být proveditelné obrovské množství řešení, a proto k nalezení „nejlepšího“ proveditelného řešení je třeba použít vojensky specifikovaná „základní pravidla“, která popisují, jak lze dosáhnout cílů, na rozdíl od samotného určení cíle. Dantzigovým základním poznatkem bylo uvědomit si, že většinu takových základních pravidel lze převést na lineární objektivní funkci, kterou je třeba maximalizovat.[7] Vývoj simplexové metody byl evoluční a probíhal přibližně po dobu jednoho roku.[8]
Poté, co Dantzig v polovině roku 1947 zahrnul do své formulace objektivní funkci, byl problém matematicky přijatelnější. Dantzig si uvědomil, že jedním z nevyřešených problémů je to spletl se jako domácí úkol u svého profesora Jerzy Neyman Třída (a ve skutečnosti později vyřešena), byla použitelná pro nalezení algoritmu pro lineární programy. Tento problém zahrnoval zjištění existence Lagrangeovy multiplikátory pro obecné lineární programy přes kontinuum proměnných, z nichž každá je ohraničena mezi nulou a jednou, a splňující lineární omezení vyjádřená ve formě Lebesgueovy integrály. Dantzig později publikoval své „domácí úkoly“ jako diplomovou práci, aby získal doktorát. Geometrie sloupu použitá v této práci poskytla Dantzigovi pohled, díky němuž věřil, že metoda Simplex bude velmi efektivní.[9]
Přehled


Simplex algoritmus pracuje na lineárních programech v kanonická forma
- maximalizovat
- podléhá a
s koeficienty objektivní funkce, je maticová transpozice, a jsou proměnné problému, je p × n matice a jsou nezáporné konstanty (). Existuje přímý proces převodu libovolného lineárního programu do jednoho ve standardní formě, takže použití této formy lineárních programů nevede ke ztrátě obecnosti.
Z geometrického hlediska proveditelný region definované všemi hodnotami takhle a je (možná neomezený) konvexní mnohostěn. Extrémní bod nebo vrchol tohoto mnohostoru je známý jako základní proveditelné řešení (BFS).
Je možné ukázat, že u lineárního programu ve standardní formě, pokud má objektivní funkce maximální hodnotu na proveditelné oblasti, má tuto hodnotu na (alespoň) jednom z krajních bodů.[10] To samo o sobě snižuje problém na konečný výpočet, protože existuje konečný počet krajních bodů, ale počet krajních bodů je nespravedlivě velký pro všechny kromě nejmenších lineárních programů.[11]
Lze také ukázat, že pokud extrémní bod není maximálním bodem objektivní funkce, pak existuje hrana obsahující bod, takže objektivní funkce se přísně zvyšuje na hraně pohybující se od bodu.[12] Pokud je hrana konečná, pak se hrana připojí k jinému krajnímu bodu, kde má objektivní funkce větší hodnotu, jinak je objektivní funkce neohraničená výše na hraně a lineární program nemá řešení. Simplexový algoritmus aplikuje tento pohled procházením podél hran polytopu do extrémních bodů se stále většími objektivními hodnotami. To pokračuje, dokud není dosaženo maximální hodnoty nebo je navštívena neomezená hrana (k závěru, že problém nemá řešení). Algoritmus vždy končí, protože počet vrcholů v mnohostěnu je konečný; navíc, protože skáčeme mezi vrcholy vždy ve stejném směru (směr objektivní funkce), doufáme, že počet navštívených vrcholů bude malý.[12]
Řešení lineárního programu je provedeno ve dvou krocích. V prvním kroku, známém jako Fáze I, je nalezen počáteční extrémní bod. V závislosti na povaze programu to může být triviální, ale obecně to lze vyřešit použitím simplexního algoritmu na upravenou verzi původního programu. Možné výsledky fáze I spočívají buď v nalezení základního proveditelného řešení, nebo v tom, že proveditelná oblast je prázdná. V druhém případě se volá lineární program nemožné. Ve druhém kroku, fázi II, je použit simplexní algoritmus, který jako výchozí bod používá základní proveditelné řešení nalezené ve fázi I. Možné výsledky z Fáze II jsou buď optimální základní proveditelné řešení, nebo nekonečná hrana, na které je výše objektivní funkce neomezená.[13][14][15]
Standardní forma
Transformaci lineárního programu na program ve standardní formě lze provést následujícím způsobem.[16] Nejprve se pro každou proměnnou se spodní mezí jinou než 0 zavádí nová proměnná představující rozdíl mezi proměnnou a mezí. Původní proměnnou lze poté eliminovat substitucí. Například vzhledem k omezení
nová proměnná, , je představen s
Druhá rovnice může být použita k eliminaci z lineárního programu. Tímto způsobem mohou být všechna omezení dolní hranice změněna na nezáporná omezení.
Zadruhé, pro každé zbývající omezení nerovnosti byla vytvořena nová proměnná nazvaná a volná proměnná, je zaveden pro změnu omezení na omezení rovnosti. Tato proměnná představuje rozdíl mezi dvěma stranami nerovnosti a je považována za nezápornou. Například nerovnosti
jsou nahrazeny
Je mnohem snazší provádět algebraickou manipulaci s nerovnostmi v této podobě. U nerovností, kde se objeví ≥, jako je ta druhá, někteří autoři odkazují na proměnnou zavedenou jako a nadbytečná proměnná.
Za třetí, každá neomezená proměnná je vyloučena z lineárního programu. To lze provést dvěma způsoby, jedním z nich je řešení proměnné v jedné z rovnic, ve kterých se objeví, a následná eliminace proměnné substitucí. Druhým je nahrazení proměnné rozdílem dvou omezených proměnných. Například pokud je neomezený, pak napište
Rovnici lze použít k eliminaci z lineárního programu.
Po dokončení tohoto procesu bude proveditelná oblast ve formě
Je také užitečné předpokládat, že hodnost je počet řádků. To nemá za následek žádnou ztrátu obecnosti, protože jinak buď systém má redundantní rovnice, které lze vynechat, nebo je systém nekonzistentní a lineární program nemá řešení.[17]
Simplexní tablo
Lineární program ve standardní formě lze reprezentovat jako a živý obraz formuláře