Simplexová metoda je algoritmus pro řešení optimalizačního problému lineárního programování výčtem vrcholů konvexního mnohostěnu ve vícerozměrném prostoru.
Podstata metody: konstrukce základních řešení, na kterých lineární funkcionál monotónně klesá, až do situace, kdy jsou splněny nezbytné podmínky lokální optimality.
V díle L. V. Kantoroviče „Matematické metody organizace a plánování výroby“ (1939) byly poprvé uvedeny principy nového oboru matematiky, který později vešel ve známost jako lineární programování. [jeden]
Historicky byl obecný problém lineárního programování poprvé nastolen v roce 1947 Georgem Bernardem Dantzigem , Marshallem Woodem a jejich spolupracovníky na ministerstvu vzdušných sil USA. V té době tato skupina zkoumala možnost využití matematických a příbuzných metod pro vojenské a plánovací problémy. Později byla v letectvu zorganizována výzkumná skupina s názvem Project SCOOP, která měla tyto myšlenky rozvíjet. První úspěšné řešení úlohy lineárního programování na počítači SEAC bylo provedeno v lednu 1952 [2] .
Problém lineárního programování je ten, že je nutné maximalizovat nebo minimalizovat nějaký lineární funkcionál na vícerozměrném prostoru za daných lineárních omezení.
Všimněte si, že každá z lineárních nerovností na proměnných ohraničuje poloviční prostor v odpovídajícím lineárním prostoru. V důsledku toho všechny nerovnosti omezují nějaký konvexní mnohostěn (možná nekonečný), nazývaný také mnohostěnný komplex . Rovnice W ( x ) = c , kde W ( x ) je maximalizovaný (nebo minimalizovaný) lineární funkcionál, generuje nadrovinu L(c) . Závislost na c generuje rodinu paralelních nadrovin. Extrémní úloha pak dostává následující formulaci: je třeba najít největší c takové, aby nadrovina L(c) protínala mnohostěn alespoň v jednom bodě. Všimněte si, že průsečík optimální nadroviny a mnohostěnu bude obsahovat alespoň jeden vrchol a bude jich více, pokud průsečík obsahuje hranu nebo k - rozměrnou plochu. Proto lze maximum funkcionálu hledat ve vrcholech mnohostěnu. Princip simplexové metody spočívá v tom, že se zvolí jeden z vrcholů mnohostěnu, načež začíná pohyb po jeho hranách od vrcholu k vrcholu ve směru zvyšování hodnoty funkcionálu. Když je přechod podél hrany z aktuálního vrcholu do jiného vrcholu s vyšší hodnotou funkcionálu nemožný, má se za to, že optimální hodnota c byla nalezena.
Posloupnost výpočtů simplexovou metodou lze rozdělit do dvou hlavních fází :
Navíc v některých případech je počáteční řešení zřejmé nebo jeho definice nevyžaduje složité výpočty, například když jsou všechna omezení reprezentována nerovnostmi ve tvaru „menší nebo rovno“ (pak je nulový vektor rozhodně proveditelné řešení , i když s největší pravděpodobností není zdaleka nejoptimálnější) . V takových problémech lze první fázi simplexové metody zcela vynechat. Simplexová metoda se dělí na jednofázovou a dvoufázovou .
Zvažte následující problém lineárního programování :
Položme nyní tento problém v ekvivalentní rozšířené podobě. Je nutné maximalizovat Z , kde:
Zde x jsou proměnné z původního lineárního funkcionálu, x s jsou nové proměnné, které doplňují staré tak, že nerovnost přechází v rovnost, c jsou koeficienty původního lineárního funkcionálu, Z je proměnná, která má být maximalizována. Poloprostory a průsečík tvoří mnohostěn představující množinu možných řešení. Rozdíl mezi počtem proměnných a rovnic nám udává počet stupňů volnosti. Jednoduše řečeno, vezmeme-li v úvahu vrchol mnohostěnu, pak je to počet hran, po kterých se můžeme dále pohybovat. Potom můžeme tomuto počtu proměnných přiřadit hodnotu 0 a nazývat je „nezákladní“ . V tomto případě budou zbývající proměnné vypočteny jednoznačně a budou nazývány „základní“ . Stejný soubor těchto proměnných se nazývá báze . Výsledným bodem bude vrchol v průsečíku nadrovin odpovídajících nebázickým proměnným. Aby bylo možné najít tzv. počáteční přípustné řešení (vrchol, od kterého se začneme pohybovat), všem počátečním proměnným x přiřadíme hodnotu 0 a budeme je považovat za nezákladní a všechny nové budeme považovat za základní. V tomto případě se počáteční přípustné řešení počítá jednoznačně: .
Nyní představíme kroky algoritmu. V každém kroku změníme množiny základních a nebázických vektorů (pohybujeme se po okrajích) a matice bude vypadat takto:
kde jsou koeficienty vektoru odpovídající základním proměnným (proměnné odpovídají 0), jsou sloupce odpovídající základním proměnným. Matice tvořená zbývajícími sloupci je označena . Proč bude mít matice tento tvar, bude vysvětleno v popisu kroků algoritmu.
První krok .
Zvolíme počáteční platnou hodnotu, jak je uvedeno výše. V prvním kroku je matice identity, protože základní proměnné jsou . je ze stejných důvodů nulový vektor.
Druhý krok
Ukažme, že ve výrazu mají nenulový koeficient pouze nebázické proměnné. Všimněte si, že z výrazu jsou základní proměnné jednoznačně vyjádřeny jako nebázické, protože počet základních proměnných je roven počtu rovnic. Nechť být základní a být nezákladní proměnné v dané iteraci. Rovnici lze přepsat jako . Vynásobme to vlevo: . Základní proměnné jsme tedy vyjádřili pomocí nebázických proměnných a ve výrazu ekvivalentním levé straně rovnosti mají všechny základní proměnné jednotkové koeficienty. Pokud tedy k rovnosti přidáme rovnost , pak ve výsledné rovnosti budou mít všechny základní proměnné nulový koeficient - všechny základní proměnné tvaru x se zredukují a základní proměnné tvaru x s nebudou zahrnuty do výrazu .
Zvolme si hranu, po které se budeme pohybovat. Protože chceme maximalizovat Z , je nutné zvolit proměnnou, která výraz nejvíce sníží
.
K tomu zvolíme proměnnou, která má největší záporný koeficient v modulu [3] . Pokud takové proměnné neexistují, to znamená, že všechny koeficienty tohoto výrazu jsou nezáporné, pak jsme došli k požadovanému vrcholu a našli jsme optimální řešení. V opačném případě začneme tuto nezákladní proměnnou zvyšovat, to znamená pohybovat se po hraně, která jí odpovídá. Říkejme tomu proměnný vstup .
Třetí krok
Nyní musíme porozumět tomu, která základní proměnná se dostane na nulu jako první, když se vstupní proměnná zvýší. K tomu stačí zvážit systém:
Pro pevné hodnoty nezákladních proměnných je systém jednoznačně řešitelný vzhledem k základním proměnným, takže můžeme určit, která ze základních proměnných bude první, která dosáhne nuly, když se vstup zvýší. Nazvěme tuto proměnnou výstup . To bude znamenat, že jsme dosáhli nového vrcholu. Nyní si prohodíme příchozí a odchozí proměnné – příchozí „vstoupí“ do základní a odchozí proměnná „opustí“ nezákladní. Nyní přepíšeme matici B a vektor c B v souladu s novými množinami základních a nebázických proměnných, poté se vrátíme ke druhému kroku. X''
Protože počet vrcholů je konečný, algoritmus jednoho dne skončí. Nalezený vrchol bude optimálním řešením.
Pokud v podmínce problému lineárního programování nejsou všechna omezení reprezentována nerovnostmi typu „≤“, pak nulový vektor nebude vždy platným řešením. Každá iterace simplexové metody je však přechodem z jednoho vrcholu do druhého, a pokud není znám žádný vrchol, nelze algoritmus vůbec spustit.
Proces nalezení počátečního vrcholu se příliš neliší od jednofázové simplexové metody, ale může být nakonec obtížnější než další optimalizace.
Všechna omezení úlohy se upravují podle následujících pravidel:
Podle toho bude vytvořena řada dalších a pomocných proměnných. V počátečním základu jsou vybrány další proměnné s koeficientem "+1" a všechny pomocné. Pozor: řešení, kterému tento základ odpovídá, není přípustné.
Rozdíly mezi doplňkovými a pomocnými proměnnýmiNavzdory skutečnosti, že dodatečné i pomocné proměnné jsou vytvořeny uměle a použity k vytvoření počátečního základu, jejich hodnoty v řešení jsou velmi odlišné:
To znamená, že nenulová hodnota doplňkové proměnné může (ale neměla by) signalizovat, že řešení není optimální . Nenulová hodnota pomocné proměnné znamená, že řešení je neplatné .
Po úpravě podmínky se vytvoří pomocná účelová funkce . Pokud byly pomocné proměnné označeny jako , , pak pomocnou funkci definujeme jako
Poté se provede běžná simplexová metoda s ohledem na pomocnou účelovou funkci. Protože všechny pomocné proměnné zvyšují hodnotu , budou v průběhu algoritmu jedna po druhé odvozovány od základu a po každém přechodu se nové řešení bude přibližovat množině proveditelných řešení.
Když je nalezena optimální hodnota funkce pomocného cíle, mohou nastat dvě situace:
Ve druhém případě máme přípustný základ, nebo jinými slovy počáteční přípustné řešení. Je možné provádět další optimalizaci s přihlédnutím k původní účelové funkci, přičemž se nevěnuje pozornost pomocným proměnným. Toto je druhá fáze řešení.
V upravené metodě matice
nepřepočítává se, pouze se uloží a přepočítá matice . Zbytek algoritmu je podobný výše popsanému.
1. Vypočítejte duální proměnné
2. Kontrola optimálnosti. je převeden na .
Kontrola spočívá ve výpočtu pro všechny sloupce . Do základu lze zadat sloupec s hodnotou < 0.
Často volte minimální hodnotu, ale k tomu musíte iterovat přes všechny sloupce.
Častěji zvolte hodnotu nižší, než je nějaká daná hodnota
Pokud takový sloupec není nalezen, považuje se za nalezenou maximální nalezená absolutní hodnota a do základu se zanese odpovídající sloupec.
3. Definice výstupu.
Nechť je vstupní sloupec odpovídající proměnné Základní plán je řešení systému Zvýšení .
Vynásobte vlevo číslem , tj .
Zde je základní plán, je rozšíření vstupního sloupce, pokud jde o základ.
Najděte maximální hodnotu , pro kterou jsou všechny hodnoty nezáporné. Pokud lze vzít libovolně velké, řešení je neomezené. V opačném případě se jeden z prvků vynuluje. Odpovídající sloupec odvodíme ze základu.
4. Přepočet referenčního (základního) plánu.
Vypočítáme nový referenční plán pomocí již uvedeného vzorce s nalezenou hodnotou .
5. Přepočítáme inverzi k základu .
Nechť je výstupní sloupec.
Matici B lze reprezentovat jako
kde je základní matice bez výstupního sloupce.
Po změně sloupce bude základní matice vypadat takto
Musíme najít takovou matici
=> => =>
Kde
Komentář.
Přepočet matice shromažďuje zaokrouhlovací chyby. Aby se předešlo velkým chybám, matice se čas od času kompletně přepočítává. Tento proces se nazývá „opakování“.
V multiplikativní verzi se matice neukládá, ukládají se pouze faktory
Při řešení ekonomických problémů je matice omezení často řídká , v takovém případě má multiplikativní možnost další výhody - můžete ukládat multiplikátory v komprimované podobě (neukládat nuly).
Aby se zabránilo hromadění chyb zaokrouhlování, lze použít rozklad LU matice .
Při obrovském počtu omezení typu „nerovnost“ lze použít metodu proměnné báze . [čtyři]
Metoda je založena na skutečnosti, že základní matici lze reprezentovat jako
Jeho inverzní má tvar
Při relativně malých velikostech matrice nemusí být zbytek matrice uložen.
Tento přístup může vyřešit problémy s desítkami milionů řetězců omezení (například z teorie her).
Pro implementaci duální metody je nutné přejít od problému k minimu k problému k maximu (nebo naopak) transpozicí matice koeficientů. Při přechodu z úkolu na minimum bude mít účelová funkce tvar:
pod omezeními
.
Věta o dualitě . Pokud má jeden z dvojice duálních problémů optimální plán, pak druhý má řešení a extrémní hodnoty lineárních funkcí těchto problémů jsou stejné.
Pokud lineární funkce jednoho z problémů není omezena, pak druhý nemá řešení.
Simplexová metoda je v praxi překvapivě účinná, ale v roce 1972 Klee a Minty [5] uvedli příklad, ve kterém simplexová metoda iterovala přes všechny vrcholy simplexu, přičemž v nejhorším případě ukázala exponenciální konvergenci metody. Od té doby se pro každou variantu metody našel příklad, na kterém se metoda chovala výjimečně špatně.
Pozorování a analýza účinnosti metody v praktických aplikacích vedla k vývoji dalších způsobů měření účinnosti.
Simplexová metoda má průměrnou polynomickou konvergenci se širokým výběrem distribuce hodnot v náhodných maticích. [6] [7]
Výpočetní účinnost se obvykle odhaduje pomocí dvou parametrů:
Jako výsledek numerických experimentů byly získány následující výsledky.
Počet omezení ovlivňuje výpočetní efektivitu více než počet proměnných, proto při formulování problémů lineárního programování je třeba usilovat o snížení počtu omezení, i když zvýšením počtu proměnných.
Jedním z časově nejnáročnějších postupů v simplexové metodě je hledání sloupce zavedeného do základu. Pro lepší konvergenci by se zdálo, že musíte vybrat proměnnou s nejlepším zbytkem, ale to vyžaduje úplné skenování, to znamená, že musíte vynásobit sloupec duálních proměnných (někdy nazývaných stínové ceny) všemi sloupci matice. [8] . Tento přístup funguje dobře pro malé problémy, které se řeší ručně. Navíc se striktní dodržování pravidla pro volbu maximálního reziduálního modulu může ukázat jako suboptimální z hlediska celkového počtu iterací potřebných k získání extrému. Maximální zisk při jedné iteraci může vést k pomalému poklesu hodnoty účelové funkce v následujících krocích a tím zpomalit proces řešení problému [9] .
S velkými maticemi omezení začíná procedura hledání vstupní proměnné zabírat hodně času a často dochází k pokusům vyhnout se prohlížení všech sloupců matice, k čemuž lze použít následující metody:
Bariéra . Jakmile je diskrepance proměnné dostatečně odlišná od nuly (překročí určitou hodnotu zvanou bariéra), je proměnná zavedena do báze. Pokud se ukázalo, že všechny rezidua jsou menší než bariéra, je jako vstup vybrána proměnná s nejmenším reziduem, zatímco samotná bariéra je podle nějakého pravidla redukována (například polovina nejmenšího rezidua). Bariéra se často používá s následující technikou. Podobný přístup je popsán v Murtaughově knize, viz oddíl 3.6.2. Dílčí hodnocení knihy [10] . Pohled na kolo . Hledání vstupní proměnné začíná od pozice následující za proměnnou zavedenou v předchozí iteraci. Skupinový výběr (V Murtaughově knize se tato technika nazývá vícenásobné vyhodnocení . Viz část 3.6.3. Vícenásobné vyhodnocení [11] .) Při hledání vstupní proměnné se nevybírá jedna proměnná, ale několik kandidátů. Při dalších iteracích je prohlížení prováděno pouze mezi vybranými kandidáty, přičemž kandidáta lze ze seznamu vymazat. Účel vah . Proměnným jsou přiřazeny váhy. Viz část 3.6.4 DEVEX skórovací metoda od Murtafy [12] . Hledejte nejstrmější žebro Goldfarba a Reeda. Viz část 3.6.5 Metoda odhadu nejstrmější hrany v Murtaughově knize [13] .Možné jsou i jiné triky, jako například Zadehovo pravidlo .
![]() | |
---|---|
V bibliografických katalozích |
Optimalizační metody | |
---|---|
Jednorozměrný |
|
Nulové pořadí | |
První objednávka | |
druhá objednávka | |
Stochastické | |
Metody lineárního programování | |
Metody nelineárního programování |