. Lineární programování. Lineární programování Úloha lineárního programování (lineární optimalizace) je jedním ze základních problémů teorie optimalizace. Našim cílem je nalézt maximum (resp. minimum) jisté lineární funkce. Tato funkce se nazývá účelová funkce. Maximum hledáme na podmnožině R n, která je řešením soustavy lineárních (rovnic) a nerovnic. Této množině se říká množina (přípustných) řešení dané úlohy. Přípustné řešení se nazývá optimální, jestliže hodnota účelové funkce v tomto bodě nabývá svého maxima (resp. minima). Obecně nastane právě jedna z možností:. Zadaná úloha nemá přípustné řešení. To znamená, že nejsme schopni splnit všechny podmínky najednou.. Přípustné řešení existuje, ale zadaná úloha nemá optimální řešení.. Zadaná úloha má optimální řešení. Poznámka. Každou minimalizační úlohu můžeme snadno převést na maximalizační, nebot hledat minimum funkce f je to samé jako hledat maximum funkce f. Od této chvíle se tedy budeme zabývat pouze maximalizačními úlohami. Na konkrétním příkladě si ukažme, jak se úloha lineárního programování řeší. Příklad.. Pan Bůček se vrhl na výrobu müsli. Chce míchat dvě verze v kilových baleních, přičemž balení první "výběrové"směsi bude obsahovat g sušeného ovoce a 6 g ovesných vloček. Jedno balení druhé "základní"směsi bude obsahovat g sušeného ovoce a g ovesných vloček. Pan Bůček má pro první várku výroby nachystáno,5 kg ovesných vloček a,5 kg sušeného ovoce. Rád by maximalizoval svůj zisk, přičemž ví, že zisk z jednoho balení výběrového müsli má 7 Kč a zisk z jednoho balení základní směsi má 5 Kč... Formulace úlohy lineárního programování Prvním úkolem je formulovat zadaný problém jako úlohu lineárního programování. To znamená, že potřebujeme určit účelovou funkci a rohodnout, zda ji budeme maximalizovat nebo minimalizovat. Dále musíme určit množinu, na které budeme účelovou funkci maximalizovat. To znamená pomocí nerovností popsat všechna omezení. Označme x počet balení výběrové směsi a y počet balení základní směsi. Účelovou funkcí je zisk, tj. f(x, y) = 7x + 5y. Funkci f chceme maximalizovat na množině, která je popsána nerovnostmi x + y 5, 6x + y 5, x, y. Poznámka. Ačkoliv nejsou poslední dvě nerovnosti explicitně uvedeny v zadání úlohy, nesmíme na ně zapomenout. Vzhledem k tomu, že x a y jsou počty balení, které bude pan Bůček vyrábět, nedávají záporné hodnoty žádný smysl.
. Lineární programování.. Geometrické řešení úlohy V případě, že máme pouze dvě proměnné (což je náš případ), můžeme úlohu snadno vyřešit geometricky. V případě, že máme více proměnných, je výhodnější použít tzv. simplexovou metodu, kterou si popíšeme vzápětí. Množina všech přípustných řešení odpovídá vyšrafované oblasti na obrázku. 8 6 Účelová funkce je lineární, a proto svého maxima nabývá v některém z vrcholů (popř. na hraně). Nejjednodušší je spočítat jednotlivé vrcholy. Tři z nich známe, zbývá spočítat průsečík přímek x + y = 5 a x + y = 75. Odečtením dvojnásobku druhé rovnice od první dostaneme 5y = 5 5 = 55, tedy y =. Odtud pak odvodíme, že x =. Nyní spočítejme hodnoty účelové funkce v jednotlivých bodech: f(, ) =, f (, 5) = 7 + 5 5 = 5, ( ) 5 f, = 7 5 675 + 5 = = 875, f(, ) = 7 + 5 = > 875 > 5. Účelová funkce f nabývá maxima v bodě [x, y] = [, ]. Optimální hodnotu účelové funkce je... Simplexová metoda Simplexová metoda je algoritmus na řešení úlohy lineárního programování. Tato metoda má nálsedující geometrickou interpretaci: Začneme v nějakém vrcholu množiny přípustných řešení, následně postupujeme po hranách z vrcholu do vrcholu a zlepšujeme hodnotu účelové funkce. Pro jednoduchost budeme předpokládat, že naše úloha má vždy nulové řešení.
. Lineární programování.. Inicializace algoritmu Prvním krokem je sestavení simplexové tabulky. K tomu je zapotřebí převést naši úlohu na ekvivalentní pomocnou úlohu. Uvažme nerovnosti, které zadávají množinu přípustných řešení: x + y 5, x + y 75, x, y. Simplexová metoda automaticky předpokládá, že všechny proměnné jsou nezáporné. Takže poslední dvě nerovnosti x, y nemusíme uvažovat. Nyní ze všech zbývajících nerovností uděláme jednoduchým trikem rovnosti - zavedeme pomocné proměnné. Totiž, je-li znamená to, že existuje u tak, že Ze stejného důvodu existuje v tak, že Když budeme mít opačnou nerovnost, např. x + y 5, x + y + u = 5. x + y + v = 75. 5x y 7, tak ji nejprve vynásobíme. Tím se nerovnost otočí a jsme tedy v situaci, kterou už umíme řešit. 5x + y 7 Původní úlohu jsme tedy převedli na úlohu v následujícím tvaru: Maximalizujeme funkci f(x, y, u, v) = 7x + 5y za následujících podmínek: Simplexová tabulka je následující schéma x + y + u = 5, x + y + v = 75, x, y, u, v. 7 5 5 75
. Lineární programování V záhlaví tabulky je záporně vzatá účelová funkce, v tuto chvíli se na účelovou funkci díváme jako na funkci proměnných x, y, u, v. Proměnné u, v se však ve funkci f nevyskytují, a proto f = f(x, y, u, v) = 7x + 5y + u + v. V pravém horním rohu je hodnota účelové funkce v počátečním bodu [,, 5, 75]. Ten odpovídá bodu [, ] v původní úloze. Simplexová tabulka se nazývá přípustná, jestliže v pravém sloupci jsou nezáporná čísla. To odpovídá tomu, že bod, ve kterém se aktuálně nacházíme, je přípustným řešením. Jak už bylo na začátku uvedeno, budeme vždy začínat s přípustnou simplexovou tabulkou. Ještě poznamenejme, že pokud začneme s přípustnou tabulkou, v každém kroku simplexové metody získáme zase přípustnou tabulku... Průběh algoritmu Abychom si ušetřili psaní mnoha nul, budeme uvažovat desetinu účelové funkce, tj. funkci 7x + 5y. 7 5 5 75 Zvolíme sloupec nejnižšího indexu (nejvíc vlevo), jehož hodnota v záhlaví tabulky je záporná, v našem případě je to první sloupec. Kdyby takový index neexistoval, tj. v záhlaví bychom měli pouze nezáporná čísla, pak jsme hotovi, nebot bod, ve kterém se nacházíme, je optimálním řešením. V tomto sloupci zvolíme tzv. pivot. Pivotem může být pouze kladný prvek a takový, že podíl b a, kde b je číslo na pravé straně, je nejmenší možný. Pokud je takovýchto prvků více, vybereme libovolný z nich. Pokud v tomto sloupci neexistuje žádný kladný prvek, znamená to, že úloha je neomezená a hodnota účelové funkce může nabývat libovolně velkých hodnot (jinými slovy optimální řešení neexistuje). V prvním sloupci je pivotem číslo, nebot 5 < 75. 7 5 5 75 Tabulku následně doeliminujeme řádkovými úpravami podle pivotu. 7 665 5 55
. Lineární programování Všimněme si, že volba pivotu (prvku, podle kterého eliminujeme) nám zaručí, že opět získáme přípustnou tabulku, a tedy neopustíme množinu přípustných řešení. Navíc máme zaručeno, že hodnota účelové funkce se nezhorší. V tomto kroku se nacházíme v bodě [ 5,,, 55 ], který odpovídá bodu [ 5, ]. Vidíme, že tabulka ještě není optimální, nebot v záhlaví máme stále záporná čísla. Pokračujeme proto v úpravách. Ve druhém sloupci je pivotem číslo, nebot = < 5 = 5. 7 665 5 55 Následně tabulku doeliminujeme podle tohoto pivotu. V této chvíli máme již optimální tabulku (v záhlaví nejsou záporná čísla). Optimálním řešením pomocné úlohy je bod [,,, ], tedy optimálním řešením původní úlohy je bod [x, y] = [, ]. Optimální hodnota účelové funkce je (nesmíme zapomenout na to, že jsme pracovali s desetinou účelové funkce), což je ve shodě s předchozím geometrickým řešením... Další řešený příklad Příklad.. Firma plánuje reklamní kampaň, ve které chce použít inzerci v rádiu, televizi a novinách. Cena jednoho uvedení reklamy v rádiu je Kč, cena jednoho uvedení reklamy v televizi je Kč a jedno uvedení reklamy (ve formě inzerátu) v novinách stojí Kč. Firma má pro reklamní kampaň připraveno 6 Kč a tuto částku nelze překročit. Vzhledem k cílové skupině zákazníků chce firma omezit počet uvedení reklamy v televizi na nejvýše pět. Dále firma chce, aby v televizi byla nejvýše čtvrtina z celkového počtu uvedení reklamy ve všech médiích. Počet lidí zasažených reklamou je následující: jedno uvedení reklamy v rádiu slyší lidí, jedno uvedení reklamy v televizi vidí 6 lidí a jeden inzerát v novinách přečte lidí. Reklamy jsou ve všech médiích postupně uváděny v různých krajích, takže firma pro jednoduchost předpokládá, že nikdo není reklamou zasažený vícekrát. Při kolika uvedeních reklamy v rádiu, televizi a novinách firma maximalizuje počet lidí zasažených reklamou (při splnění popsaných omezení)? A jaký tento počet bude? Zformulujte problém jako úlohu lineárního programování, a pak tuto úlohu vyřešte. Označme x počet uvedení reklamy v rádiu, x počet uvedení reklamy v televizi a x počet uvedení reklamy v novinách. Účelová funkce tedy je (x +6x +x ) a omezení jsou popsána nerovnicemi x + x + x 6, x 5 a x (x + x + x ), což je ekvivalentní s nerovnicí x + x x, a také x, x a x. Jedná se tedy o úlohu lineární 5
. Lineární programování optimalizace maximalizovat funkci (x + 6x + x ) při výše uvedených omezeních. CHYBNÁ ÚVAHA: Cena reklamy za jednoho člověka je Kč v rádiu,, 5 Kč v televizi a Kč v novinách, tedy televize je nejefektivnější, a proto položíme x = 5. Dosazením této hodnoty dostaneme následující nerovnosti: x + x, x + x 5. Tuto úlohu můžeme snadno vyřešit geometricky. Dopočítáním dostaneme výsledek x =, x = 5 a x = 6. Hodnota účelové funkce v tomto bodě je ( + + 8) = 57. SPRÁVNÉ ŘEŠENÍ: Úlohu řešíme simplexovou metodou pomocí zápisu simplexovou tabulkou. Abychom se co nejvíce vyhnuli počítání s velkými čísly, budeme uvažovat desetitisícinu účelové funkce, tj. funkci x + 6x + x. Sestavíme počáteční tabulku a eliminujeme dle algoritmu (pivot, podle kterého se eliminuje, je v tabulce podtržen): 6 6 5 6 6 5 6 6 5 5 57 5 6 6 6 6 5 6 6 Z tabulky vyčteme optimální hodnotu neznámých (pravá strana řádku, ve kterém se nachází pivot příslušného sloupce): x =, x = a x =. Firma by si tedy měla objednat uvedení reklamy v televizi a uvedení reklamy v novinách. Počet lidí zasažených reklamou pak bude 6. Problém předchozí úvahy spočívá v tom, že tato úvaha nebere v potaz poslední nerovnost x + x x. 6