Předpokladem k porozumění tomuto textu je znalost poznatků z Lineární algebry 1 a 2. Na rozdíl od 🅱urdíkových přednášek není předpokladem porozumění lineárnímu programování.
Simplexová metoda
Jelikož chceme optimalizovat něco s vektory, asi by mohl být dobrý nápad si nejprve zavést, jak se porovnávají. Uděláme to naprosto zřejmým způsobem:
Definice. Nechť
. Nerovnost vektorů z
definujeme takto:
Poznámka. Takto definované uspořádání je částečné uspořádání, ale pro není úplné uspořádání, protože například vektory a jsou neporovnatelné.
Poznámka. Relace v tomto případě neznamená doslova „větší nebo rovno“. Například platí , ale neplatí .
Tato nerovnost se v určitých ohledech chová jako nerovnost čísel. Asi není potřeba dokazovat reflexivitu, antisymetrii, tranzitivitu, přičítání nuly a podobné věci. Něco, co by nemuselo být úplně zřejmé, je násobení:
Věta (násobení nerovnosti vektorem). Nechť
. Potom
.
Důkaz. Jelikož pro všechna platí , máme . Z toho plyne
Nyní už přejděme k lineárnímu programování. Problémy, je kterými se v něm setkáme, můžou mít rozličné tvary, takže podrobně analyzujeme jeden, se kterým se dobře pracuje, a následně si ukážeme, že spousta ostatních se na něj dá převést.
Definice. Mějme
.
Primární úloha lineárního programování je následující optimalizační úloha:
Funkce
, kterou chceme optimalizovat, se nazývá
účelová funkce.
Poznámka. Písmeno je čteno důrazně [ˈbɞ]. Jakákoli jiná výslovnost je špatně a budete za ni okamžitě vyhozeni od zkoušky.
Definice. Přípustné řešení primární úlohy lineárního programování je jakýkoli vektor splňující .
Definice. Optimální řešení primární úlohy lineárního programování je přípustné řešení, pro které je minimální.
Možných přípustných řešení může být celkem hodně (konkrétně nespočetně mnoho), takže zkoušet postupně všechny by asi nebyl úplně nejlepší přístup. Naštěstí se ukazuje, že se stačí zajímat o tzv. bazická řešení:
Definice. Bazické řešení primární úlohy lineárního programování je přípustné řešení, pro které jsou sloupce lineárně nezávislé.
Věta (Rohn 1). Pokud má primární úloha lineárního programování optimální řešení, potom má bazické optimální řešení.
Důkaz. Předpokládejme, že úloha má optimální řešení
, které není bazické. Nechť
. Z definice nebazického řešení a lineární závislosti existují taková
, že alespoň jedno
je nenulové a
Předpokládejme bez újmy na obecnosti, že
, a pro
(tedy
) dodefinujme
. Zřejmě potom
. Nyní dokážeme sporem, že
.
- Nechť . Jelikož všechny složky odpovídající nenulovým složkám jsou kladné, pro nějaké dostatečně malé bude platit . Máme:
Tedy je přípustné řešení lepší než , což se spor s optimalitou .
- Pro analogicky, akorát zvolíme .
Nyní definujme
Snadno ověříme, že jde také o optimální řešení. (Při důkazu optimality využijeme předchozí výsledek
.) Zároveň z definice
existuje takové
, že
. To znamená, že
, tedy jsme z
odstranili jednu nenulovou složku. To můžeme opakovat, až se z
stane bazické řešení. ■
Nyní zavedeme značení, které nám z matice umožní vybírat pouze některé sloupce. Toto značení se ukáže jako velmi užitečné v dalších větách.
Definice. Nechť
obsahuje vzájemně různá čísla. Potom značíme
Důsledek.
Poznámka. Písmeno je čteno důrazně [ˈbɞ] (tedy stejně jako ). Jakákoli jiná výslovnost je špatně a budete za ni okamžitě vyhozeni od zkoušky.
Poznámka. Občas budeme tak trochu zaměňovat, jestli je uspořádaná -tice, nebo množina, ale vždy by mělo být jasné, co se tím myslí.
Definice. Pro analogicky definujeme .
Nyní ukážeme, že mezi bazickými řešeními a existuje jednoduchý vztah. To je dobrá zpráva, protože možných je pouze konečně mnoho (i když na řešení hrubou silou jich pořád může být celkem hodně).
Věta (Rohn 2). Nechť
a řádky
jsou lineárně nezávislé. Potom
je bazické řešení právě tehdy, pokud pro nějaké
platí:
- je regulární
Důkaz. Nechť je bazické řešení. To znamená, že sloupce jsou lineárně nezávislé. Také víme, že hodnost matice je , protože má lineárně nezávislé řádky. Zmíněné sloupce tedy můžeme doplnit na bázi dalšími sloupci, aby jich bylo celkem , a zvolíme jako indexy těchto sloupců. Potom zřejmě platí všechny body. ◧
Z posledních tří bodů plyne, že řešení je přípustné. Zároveň ze čtvrtého plyne, že , tedy řešení je podle prvního bodu i bazické. ◨
Definice. Nechť je regulární a . Potom definujeme předpisem
Dobře, můžeme tedy vzít nějaké a dostaneme bazické řešení , které je kandidátem na optimální řešení. Ale jak poznáme, jestli je to to pravé? Celkem jednoduše:
Věta (Rohn 3, kritérium optimality). Nechť pro nějaké
je
regulární a platí
Potom
je optimální řešení primární úlohy.
Důkaz. Nechť je libovolné přípustné řešení (tedy mimo jiné ). Přenásobme předpoklad zprava :
Dokázali jsme, že má menší hodnotu účelové funkce než libovolné , tedy je optimální. ■
Teď zavedeme taková divná písmena s čarami, jejichž význam je zatím dost nejasný, ale později z nich sestavíme simplexovou tabulku, která bude výrazně ulehčovat hledání správného a jeho bazického řešení .
Definice. Mějme
takové, že
je regulární. Potom definujeme
Poznámka. Kritérium optimality se dá přeformulovat jako .
Věta.
Důkaz.
Věta.
Důkaz.
Ještě by ale bylo dobré umět poznat, kdy úloha žádné optimální řešení nemá, protože se s účelovou funkcí dokážeme dostat libovolně nízko.
Věta (Rohn 4, kritérium neomezenosti). Nechť pro nějaké
existuje
takové, že
a
. Potom účelová funkce není zdola omezená (a úloha tedy nemá optimální řešení), to znamená
Důkaz. Již máme dokázáno, že , tedy z předpokladu plyne . Definujme :
Pro tento vektor platí
Vezměme libovolné . Dokážeme, že je přípustné řešení:
Nyní zbývá dokázat, že pro dostatečně vysokou hodnotu dokážeme učinit hodnotu libovolně nízkou:
Podle předpokladu je , tedy výraz pro skutečně jde do . ■
Nyní již přejděme k simplexové tabulce:
Definice. Mějme primární úlohu lineárního programování a nějaké
.
Simplexová tabulka je tabulka
ve tvaru
Poznámka. Jelikož , platná simplexová tabulka musí v levé horní části obsahovat všechny sloupce jednotkové matice (ne nutně v postupném pořadí); z indexů těchto sloupců pak lze vyčíst . Jelikož , pod těmito sloupci budou samé nuly.
Poznámka. Kritérium optimality říká, že pokud v levé dolní části tabulky není žádné záporné číslo, řešení v tabulce je optimální.
Poznámka. Kritérium neomezenosti říká, že pokud nad záporným číslem v levé dolní části není žádné kladné číslo, úloha je neomezená.
Proč takovouto tabulku zavádíme? Ukazuje se, že provádění určitých řádkových úprav v simplexové tabulce odpovídá zkoušení různých , a již víme, že pokud existuje optimální řešení, potom ho pro nějaké v tabulce najdeme. Zároveň v pravém dolním rohu najdeme minimální hodnotu účelové funkce (akorát bez mínusu).
Věta (Rohn 5). Mějme nějaké
. Upravme původní tabulku
pomocí řádkových úprav (násobení řádku konstantou a přičtení násobku řádku k jinému) do takové podoby, že pro každé
se z
-tého sloupce stane
. Přitom nikdy nebudeme násobit poslední řádek nebo přičítat jeho násobek k jinému. Potom těmito úpravami vznikne simplexová tabulka pro dané
.
Důkaz. Nejprve budeme tvrdit, že vznikne tabulka ve tvaru pro nějaká . To se dá nějak hnusně dokázat přes matice úprav, ale popravdě je to celkem zřejmé, když se nad tím člověk zamyslí. Když to nyní srovnáme s definicí simplexové tabulky, tak vlastně chceme dokázat, že . Tak pojďme na to.
■
Teď už můžeme přejít k samotnému algoritmu. Myšlenka je taková, že máme simplexovou tabulku s nějakým a snažíme se ji upravit tak, aby vzniklo jiné vyhovující podmínce optimality. Budeme to provádět postupně: vždy vybereme jednu složku , která se nám nelíbí, a nahradíme ji jinou složkou.
Jelikož chceme, aby na spodním řádku nebyla žádná záporná čísla, vybereme jeden sloupec , který tam má záporné číslo, a nacpeme ho do , což způsobí, že tam bude mít nulu. Zároveň musíme vybrat řádek , jehož odpovídající z báze vyřadíme. Následně provedeme řádkové úpravy tak, aby bylo , čímž dostaneme opět platnou simplexovou tabulku s novým .
Jak vybrat správné ? Chceme, aby se zvýšilo , protože je hodnota účelové funkce, kterou chceme minimalizovat. Snadno spočteme, že se po úpravě zvýší o . Víme, že , takže aby přičtený výraz byl nezáporný, potřebujeme . Ale co když žádné takové neexistuje? V takovém případě máme dole záporné číslo, nad kterým není žádné kladné číslo, takže úloha je neomezená.
Zároveň si musíme dávat pozor, aby složky zůstaly nezáporné. Toho docílíme tím, že si zvolíme takové , aby bylo minimální (důkaz jde snadno rozmyslet).
Tímhle způsobem tedy dokážeme zajistit, aby hodnota účelové funkce po provedení krohu byla větší nebo rovna. Ale jak zajistíme, že se nedostaneme do nekonečné smyčky? Ještě máme určitou volnost ve volbě , a té právě vyuzijeme.
Definice. Cyklus je konečná posloupnost kroků simplexového algoritmu, které začínají i končí stejným .
Věta. V přůběhu cyklu zůstává poslední sloupec beze změny a v každém kroku platí
.
Důkaz. se nikdy nemůže snížit, takže během cyklu musí zůstat stejné. Jelikož se snižuje o , musí být , tedy . A díky tomu se nezmění ani ostatní složky . ■
Věta (Rohn 6, Blandovo pravidlo). Při provádění simplexového algoritmu:
- vybereme nejmenší takové, aby .
- vybereme tak, aby , z takových bylo minimální a z takových bylo minimální.
Potom se algoritmus nedostane do cyklu.
Důkaz. Nechť
je množina všech
vstupujících do báze během cyklu (což jsou zároveň všechna
vystupující z báze). Nechť
.
bude v nějaké chvíli vstupovat do báze, označme bázi předtím
, s cenovým vektorem
(tedy
).
bude taky někdy vystupovat z báze, tu označíme
, přičemž
, a části odpovídající tabulky budeme značit obvyklými písmeny. Nechť v dalším kroku do báze vstupuje sloupec
. Definujme
podobně jako
v důkazu kritéria neomezenosti:
Máme:
Jelikož skalární součin
je kladný, musí být
. Z
plyne
. Ze
plyne
. Každopádně
. Dále
, protože podle simplexového algoritmu je
. Z toho plyne
.
Rozlišíme dva případy:
- Pokud , měli jsme podle Blandova pravidla pro vstup místo vybrat , protože z definice je . To je spor. ◧
- Pokud , potom také . Jelikož je z definice záporné, nemůže být , tedy . Protože zároveň , muselo někdy v průběhu cyklu vstoupit do báze, tedy podle předchozí věty je . Tedy -tý řádek má minimální ze všech řádků, kde , což ho kvalifikuje pro výběr pivota. Podle předpokladu je , tedy podle Blandova pravidla jsme pro výstup neměli vybrat , nýbrž , což je spor. ◨
Pokud obsahuje jednotkovou matici, můžeme rovnou použít simplexovou metodu a úlohu vyřešit. Ale co když ne? V takovém případě použijeme dvoufázovou simplexovou metodu. Nejprve si zavedeme umělých proměnných, abychom do tabulky jednotkovou matici dostali. Chceme ovšem, aby ve výsledku měly všechny hodnotu . To zajistíme tak, že nejprve budeme (pomocí simplexové metody) minimalizovat součet těchto umělých proměnných. Tedy vytvoříme pomocné , od kterého musíme ještě odečíst všechny řádky matice, aby na správných místech obsahovalo nuly. Pokud se nám podaří pomocnou účelovou funkci dostat na nulu, dostali jsme přípustné řešení, které neobsahuje umělé proměnné, takže je můžeme odstranit a pokračovat (akorát musíme přepočítat spodní řádek). Pokud se nepodaří umělou účelovou funkci dostat na nulu, znamená to, že úloha žádné přípustné řešení nemá.
Věta (Rohn 7). Pokud má primární úloha lineárního programování přípustné řešení, potom buď má optimální řešení, nebo je zdola neomezená.
Důkaz. Simplexový algoritmus s použitím Blandova pravidla se vždy zastaví a buď nahlásí, že úloha je neomezená, nebo vrátí optimální řešení. ■
Věta (Rohn 8, množina optimálních řešení). Je-li v simplexové tabulce
, potom nějaké
je optimální řešení právě tehdy, pokud
Důkaz.
◧
Přípustnost: , optimalita: ◨
Věta (Rohn 9). Je-li v simplexové tabulce
, potom má úloha právě jedno optimální řešení (a to
).
Důkaz. Nechť je optimální řešení. Potom . Aby to mohlo zároveň s predpokladem platit, musí být . Z toho plyne
Z toho plyne , tedy . ■
Von Neumann a teorie her
Definice. Mějme
výplatní matici . Potom
maticovou hrou nazveme takovouto hru: První hráč zvolí
, druhý nezávisle na něm zvolí
. Následně první hráč získá
bodů a druhý získá
bodů.
Příklad. Hra „Kámen, nůžky, papír“ se dá formulovat jako maticová hra s maticí
Definice. Smíšená strategie je dvojice vektorů reprezentující pravděpodobnost, s jakou každý hráč zvolí jednotlivé řádky/sloupce.
Poznámka. Očekávaná hodnota zisku pro prvního hráče při použití smíšené strategie je , pro druhého hráče .
Definice. Optimální smíšená strategie je smíšená strategie taková, že pro každou smíšenou strategií je
Tedy pokud si kterýkoli hráč zvolí libovolnou jinou strategii, bude na tom stejně nebo hůř.
Věta. Všechny optimální smíšené strategie jsou stejně dobré, tedy existuje nějaká
cena hry , která se rovná hodnotám všech optimálních smíšených strategií.
Důkaz. Nechť jsou dvě smíšené strategie. Z definice máme:
V tomto řetězci zřejmě musí být všude rovnost, tedy speciálně , což mělo být dokázáno. ■
Definice.
Věta (Rohn 22). Nechť
.
Nechť
.
Potom dvojice úloh s nerovnostmi
má optimální řešení
.
Nechť dále
.
Potom
je optimální smíšená strategie, podle které můžeme spočítat cenu hry
, a daná smíšená strategie
je optimální právě tehdy, pokud
.
Důkaz. Z definice
plyne, že všechny její prvky jsou kladné. Duální úloha je přípustná, protože má přípustné řešení
. Nechť
je nějaké její přípustné řešení. Potom pro každá
musí platit
, tedy
, tedy úloha je omezená. Jelikož je přípustná a omezená, musí mít optimální řešení
, tedy podle věty o dualitě i primární úloha má optimální řešení
a platí
. Z přípustnosti
plyne
. Vektory tedy můžeme normalizovat (viz znění věty) a tím dostaneme smíšenou strategii. Nyní musíme dokázat, že je optimální. Vezměme jinou smíšenou strategii
. Opět využijeme přípustnosti:
Zřejmě pro libovolná
platí
. Z tohoto a předchozích dvou nerovností máme
. To platí pro libovolná
, takže speciálně můžeme říct
. To znamená, že skutečně jde o optimální strategii. Nyní již zbývá jen dokázat poslední ekvivalenci.
Mějme libovolnou strategii druhého hráče. Z definice optimální strategie pro libovolné platí . Vybereme-li speciálně , dostaneme , tedy . Analogicky pro prvního hráče. ◧
Nechť je strategie druhého hráče splňující . Potom pro každou strategii prvního hráče máme
Zároveň již víme, že pro libovolné je
Pokud v těchto nerovnostech zvolíme , dostáváme . Pokud to do těch samých nerovností (s obecnými ) dosadíme, dostaneme definici optimální strategie. Analogicky pro prvního hráče. ◨
Cvičení. Dokažte podle této věty, že pro hru „Kámen, nůžky, papír“ je optimální smíšená strategie
Věta (Rohn 23, von Neumannova). Každá konečná maticová hra má optimální smíšenou strategii.
Důkaz. Na základě předchozí věty triviální (stačí vzít třeba ). ■
Analýza citlivosti
Tahle sekce pochází z prezentace Mgr. Jany Sekničkové, Ph.D., takže je psána takovým fyzikálnějším stylem: místo vět a důkazů je postupné odvozování. Taky používá úplně jiné značení než Rohn; pokusím se to trochu zkonzistentnit, ale přesto hodně štěstí.
Mějme nějakou simplexovou tabulku s optimálním řešením. Zajímá nás, jak moc se můžou změnit parametry úlohy, aby se nezměnilo optimální .
Aby řešení stále bylo přípustné, musí být . Zkusíme najít, jak moc se může změnit pro nějaké .
Chceme, aby bylo:
Pro maximální zmatení budeme značit :
Rozepíšeme to po složkách, tedy pro všechna :
Z toho dostaneme podmínku:
Pokud bychom nedělali ty šaškárny s , ale rovnou rozepsali po složkách vztah , vyšly by nám nerovnosti udávající omezení přímo pro .
Pokud tedy takovéto nerovnosti splníme, zůstane stejné, ovšem stále se může změnit a hodnota účelové funkce.
Tím jsme zjistili, jak optimální řešení reaguje na změny . Co takhle změny ? Řešení musí stále splňovat podmínku optimality . Zároveň z nějakého důvodu musí být . Jelikož ve vzorcích máme , musíme rozlišovat změnu bazické a nebazické části. Nejdříve změníme nebazickou.
Nechť , kde . Potom se změní jedna složka , zatímco se nezmění. Z vektoru se také změní -tá složka:
Chceme, aby to pořád bylo nezáporné, tedy řešení zůstává optimální, pokud . Žádné dolní omezení není, nebazická proměnná se může libovolně snížit.
Dobře, to bylo jednoduché. Co takhle změna bazické proměnné? Teď už se změní všechny koeficienty :
Teď prostě zase budeme řešit, kdy je to nezáporné. Nemá cenu to rozepisovat. Ještě navíc musí být nezáporné. Jelikož máme rádi písmenka, označíme si číslo řádku, v němž je bazická proměnná (tedy ), a máme