OSTRAVSKÁ UNIVERZITA PŘÍRODOVĚDECKÁ FAKULTA
[ MOPV ] METODY OPERAČNÍHO VÝZKUMU Distanční opora
RNDr. Miroslav Liška, CSc.
OSTRAVA 2002
1
Simplexová metoda je iterační výpočetní postup pro nalezení optimálního řešení úlohy lineárního programování (pokud takové řešení existuje). Výchozím bodem tohoto algoritmu je nalezení výchozího základního řešení úlohy lineárního programování. Pokud je již takové řešení k dispozici, potom simplexová metoda v jednotlivých krocích vypočte vždy nové základní řešení s lepší nebo alespoň stejnou – v případě maximalizace vyšší – hodnotou účelové funkce. Po konečném počtu kroků musí tedy tento výpočetní postup vést k nalezení základního řešení s nejlepší hodnotou účelové funkce nebo ke zjištění, že takové řešení neexistuje. Při jeho nalezení se musí podle základní věty LP jednat o řešení optimální. Postup výpočtu pomocí simplexové metody se dělí na dvě fáze: ¾ I.fáze: nalezení výchozího základního řešení ¾ II. fáze: iterační postup vedoucí k optimalizaci účelové funkce V některých speciálních případech je nalezení výchozího základního řešení natolik snadné, že I. fáze výpočtu vlastně odpadá. V takovém případě se celý postup označuje jako jednofázová simplexová metoda. V obecném případě nemusí být však nalezení výchozího základního řešení úlohy LP jednoduché. Potom mluvíme o dvoufázové simplexové metodě.
2
Jednofázová simplexová metoda Lze ji použít pouze v případě, že všechna vlastní omezení úlohy LP jsou definována jako nerovnice typu "≤". Po převedení takovéto soustavy nerovnic na ekvivalentní soustavu rovnic pomocí přídatných proměnných dostáváme totiž soustavu rovnic v kanonickém tvaru.
Kanonický tvar soustavy m lineárních rovnic o (m+n) proměnných je takový tvar, ve kterém matice strukturních koeficientů obsahuje soustavu m jednotkových vektorů, ze kterých lze vytvořit jednotkovou matici. Pokud máme soustavu m lineárních rovnic o (m+n) proměnných v kanonickém tvaru, potom z něj lze snadno odvodit základní řešení této soustavy. V kanonickém tvaru jsou dva druhy proměnných : ¾ m základních proměnných – to jsou proměnné, kterým odpovídají jednotkové vektory a jejichž hodnoty jsou v příslušném základním řešení rovny hodnotám pravé strany ¾ n nezákladních proměnných - to jsou všechny ostatní proměnné, jejichž hodnoty jsou v základním řešení rovny 0.
Příklad: Balírny pražírny kávy plánují výrobu dvou směsí kávy Super a Standard . Pro výrobu obou směsí mají k dispozici tři druhy kávových bobů – K1, K2 a K3 postupně v kapacitě 40, 60 a 25 tun lišících se kvalitou a nákupní cenou. Následující tabulka ukazuje skladbu obou směsí (v tunách komponenty na 1 tunu směsi):
Na základě přímých a nepřímých nákladů souvisejících s výrobou a vzhledem k předpokládaná ceně obou směsí byl vykalkulovaný zisk, který činí 20 000 Kč resp. 14 000 Kč na jednu tunu směsi Super resp. Standard. Management firmy chce samozřejmě naplánovat produkci firmy tak, aby byl její celkový zisk maximální. Po doplnění přídatných proměnných získáváme snadno soustavu tří rovnic, které obsahují pět proměnných: 0,5x1+
0,25x2
+ x3
= 40
3
0,5x1+
0,5x2
+ x4
= 60 + x5
0,25x2
= 25
Matice strukturních koeficientů:
Výchozí základní řešení Základní proměnné jsou tedy x3, x4 a x5. Nezákladní proměnné jsou x1 a x2 . Pokud položíme tyto nezákladní proměnné rovny 0, potom z dané soustavy rovnic snadno získáme hodnoty základních proměnných x3 = 40 , x4 = 60 , x5 = 25 . Řešení získané uvedeným způsobem je, vzhledem k nezápornosti, základním řešením dané úlohy. Po získání výchozího základního řešení lze okamžitě přistoupit v jednotlivých iteracích k testu optimality a ke zlepšování řešení. Celý výpočet je organizován v tzv. simplexové tabulce.
Výchozí simplexová tabulka
Tabulka obsahuje: seznam základních proměnných, matici strukturních koeficientů, vektor pravých stran a v posledním řádku koeficienty účelové funkce v anulovaném tvaru, tj. tvaru, ve kterém jsou všechny proměnné převedeny na levou stranu a na pravé straně je absolutní člen, který udává počáteční hodnotu účelové funkce. Anulovaný tvar účelové funkce je obecně z – c1x1 – c2x2 - … - cnxn = 0 a konkrétně pro náš příklad z - 20000 x1 - 14000 x2 = 0
4
Test optimality Uvažujme simplexovou tabulku v libovolné s-tém kroku výpočtu. Předpokládejme, že tato tabulka obsahuje (m+n) proměnných a m omezujících podmínek s tím, že prvních n proměnných jsou nezákladní proměnné a zbývajících m proměnných jsou základní proměnné. Hodnoty všech základních proměnných včetně hodnoty účelové funkce potom můžeme vyjádřit obecně následovně: Xn+1 = β1 – α11 x1 - α12 x2 - … - α1n xn , Xn+2 = β2 – α21 x1 – α22 x2 - … - α2n xn , …
Xn+m = βm – αm1 x1 – αm2 x2 - … - αmn xn , zs
= β0 – z1 x1 - z2 x2 - … - zn xn .
Vzhledem k tomu, že nezákladní proměnné x1, x2 , …, xn mají nulovou hodnotu, potom jsou vektor řešení v s-tém kroku výpočtu xs hodnota účelové funkce zs xs = (0, 0, …, 0, β1, β2, …, βm) , zs = β0 Předpokládejme, že v (s+1) kroku výpočtu se proměnná xk , k є {1, 2, …, n} stane proměnnou základní. Tuto proměnnou budeme označovat jako proměnnou vstupující. Vzhledem k tomu, že počet základních proměnných je konstantní, musí tato proměnná nahradit některou z původních základních proměnných. Tato proměnné se označuje jako proměnná vystupující. Podívejme se tedy nyní, jak se změní hodnota účelové funkce, pokud bude mít vstupující proměnná v (s+1) kroku nezápornou hodnotu t : xk = t ≥0. Nová hodnota účelové funkce bude po dosazení Zs+1 = β0 –t zk. Změna hodnoty účelové funkce, pokud se proměnná Xk základní proměnnou je tedy
stane
∆ z (xk) = zs+1 – zs = -t* zk . V jednotlivý krocích výpočtu je třeba dosáhnout v případě maximalizace přírůstku hodnoty účel. funkce tzn. ∆ z (xk) ≥ 0 (při minimalizaci ∆ z (xk) ≤ 0 )
5
Vzhledem k nezápornosti nové hodnoty vstupující proměnné t závisí tedy znaménko hodnoty ∆ z (xk) pouze na hodnotě redukované ceny zk Mohou nastat tři možnosti: 1. ∆ z (xk) >0 ↔ zk < 0 - ke zvýšení hodnoty účel. funkce dojde v případě, že je redukovaný cenový koeficient u vstupující proměnné záporný 2. ∆ z (xk) < 0 ↔ zk > 0 – ke snížení hodnoty dojde v případě, že je redukovaný cenový koeficient u vstupující proměnné kladný 3. ∆ z (xk) = 0 ↔ zk = 0 nebo t = 0 – hodnota funkce se nezmění , jestliže je reduk. cen. koeficient roven 0 nebo hodnota vstupující proměnné rovna 0 . Pokud nelze nalézt v daném kroku vstupující proměnnou, která by vedla ke zvýšení (v případě maximalizace) nebo snížení (minimalizace) hodnoty účelové funkce, potom základní řešení obsažené v tomto kroku je řešením optimálním.
Výpočet nového základního řešení Pokud je v nějakém kroku výpočtu porušen test optimality, znamená to, že lze nalézt nové základní řešení, které bude mít lepší hodnotu účelové funkce. Vlastní realizace výpočtu probíhá ve třech krocích: 1. volba vstupující proměnné 2. volba vystupující proměnné 3. přepočet simplexové tabulky tak, aby se vstupující proměnná stala základní a vystupující proměnná nezákladní proměnnou. 1. Volba vstupující proměnné Změna hodnoty účelové funkce v případě, že je proměnná xk proměnnou vstupující, je určena vztahem ∆ z (xk) = -t* zk , kde t je nová hodnota vstupující proměnné. Při výpočtu je samozřejmě snaha o to, aby byla změna účelové funkce co nejvyšší, tzn. aby celý iterační postup směřoval k optimálnímu řešení co nejrychleji. Nejjednodušším postupem je zvolit vstupující proměnnou podle jednotkové změny hodnoty účelové funkce, tzn. podle redukovaných cenových koeficientů zj. Čím vyšší bude v absolutní hodnotě koeficient zj, tím vyšší změnu hodnoty účel. funkce lze očekávat. Při volbě vstupující proměnné je třeba mít na paměti, že ¾ záporné hodnoty zj signalizují možnost zvýšení hodnoty funkce 6
¾ kladné hodnoty zj signalizují možnost snížení hodnoty funkce 2. Volba vystupující proměnné Vystupující proměnnou najdeme tak, že vypočteme minimální podíl transformovaných hodnot pravé strany (βi) a kladných strukturních koeficientů u vstupující proměnné (αik). Tento minimální podíl určuje vystupující proměnnou. Ve výchozí simplexové tabulce bude vstupující proměnnou proměnná x1, u které je redukovaná cena z1 = -20 - na jednu jednotku této proměnné dosáhneme tedy přírůstku hodnoty účel. funkce 20 tis. Kč (u proměnné x2 by byl přírůstek pouze 14 tis. Kč). Pokud bude x1 = t, potom budou nové hodnoty proměnných x3, x4, x5 rovny x3 = 40 - 0,5t ≥ 0 x4 = 60 - 0,5t ≥ 0 x5 = 25
≥0
Zvolíme-li t= min [40/0,5, 60/0,5] = min [80, 120], potom x3 = 0, x4 = 20, x5 = 25 a vystupující proměnnou bude x3. 3. Přepočet simplexové tabulky Vstupující proměnná určuje v simplexové tabulce tzv. klíčový sloupec, vstupující proměnná tzv. klíčový řádek. Průsečíkem klíčového sloupce a řádku je potom klíčový prvek. Výchozí simplexová tabulka našeho příkladu: Přípustné řešení obsažené v této tabulce je charakterizováno vektorem x1 = (0, 0, 40, 60, 25) a hodnota účelové funkce tohoto řešení je z1 = 0.
tabulka 1
V tabulce 1 je vstupující proměnná x1 a vystupující proměnná x3. Pro přepočet simplexové tabulky se použije standardní Gaussova eliminační metoda. Vlastní přepočet je možné realizovat následujícím způsobem: 1.
Transformace klíčového řádku se provede tak, že celý řádek vydělíme klíčovým prvkem a tím získáme na místě klíčového prvku hodnotu 1.
7
2.
Transformace i-tého řádku simplexové tabulky (včetně řádku účelové funkce). Transformovaný klíčový řádek, tj. ten který obsahuje už hodnotu 1 na místě klíčového prvku, vynásobíme hodnotou (-ajk) resp. (-zk) a přičteme k i-tému řádku resp. k řádku účelové funkce. První krok výpočtu simplexovou metodou: klíčový řádek: 1.řádek (tab.2) = 1.řádek (tab.1) / 0,5 = 1.řádek ( tab.1) * 2 2.ř. (tab.2) = 2.ř. (tab.1) +1.ř. (tab.2)*(-0,5) 3.ř. (tab.2) = 3.ř. (tab.1) + 1.ř.(tab. 2) * 0 = 3.ř. (tab1) řádek účelové funkce: 4.ř. (tab.2) = 4.ř. (tab.1) + 1.ř. (tab.2) *20
tabulka 2
Tabulka 2 obsahuje přípustné řešení x2 = (80, 0, 0, 20, 25), které má hodnotu účelové funkce z2 = 1600 [tis. Kč]. Přírůstek účelové funkce vychází skutečně ∆ z (x1) = z2 – z1 = -t* z1 = -80 (-20) = 1600. Řešení x2 není však ještě optimálním řešením úlohy LP. Redukovaná cena z2 = -4 signalizuje, že dojde ke zvýšení účelové funkce, pokud se proměnná x2 stane proměnnou vstupující. Vystupující proměnnou je potom proměnná x4 , u které je minimální podíl βi / αik = 20/0,25 = 80. Přepočet tabulky 2 podle nového klíčového prvku 0,25. klíčový řádek: 2.řádek (tab.3) = 2.řádek (tab.2) / 0,25 = 2.řádek (tab.2) * 4 1.ř. (tab.3) = 1.ř. (tab.2) + 2.ř. (tab.3) * (-0,5) 3.ř. (tab.3) = 3.ř.(tab.2) + 2.ř. (tab.3) * (-0,25) řádek účelové funkce 4.ř. (tab.3) = 4.ř. (tab.2) + 2.ř. (tab. 3) * 4
8
tabulka 3
Tabulka 3 obsahuje řešení x3 = (40, 80, 0, 5) s hodnotou účelové funkce z3 = 1920 [tis. Kč]. Přírůstek hodnoty účelové funkce je zde skutečně ∆ z (x2) = z3 – z2 = -t* z2 = -80 (-4) = 320. Řešení obsažené v tab.3 je již řešením optimálním. Redukované ceny u nezákladních proměnných jsou všechny kladné, tzn. nelze dosáhnout dalšího zvýšení hodnoty účelové funkce. Optimální výrobní program představuje tedy produkci 40 tun směsi Super a 80 tun směsi Standard. Tento program přináší zisk 1 920 000 Kč.
9
Dvoufázová simplexová metoda Tato metoda se používá, jestliže nejsou v úloze lineárního programování všechny omezující podmínky ve tvaru nerovnic „≤“. Potom není získání výchozího základního řešení této úlohy tak snadné a představuje vlastně celou I. fázi výpočtu. Teprve II. fáze výpočtu se potom zabývá optimalizací účelové funkce. Tato fáze je již naprosto shodná s postupem, který byl popsán u jednofázové simplexové metody. Postup výpočtu dvoufázovou simplexovou metodou si ukážeme na jednoduchém numerickém příkladu, ve kterém jsou úmyslně definovány všechny tři možné typy omezujících podmínek.
Příklad: Máme maximalizovat účelovou funkci z = 2x1 + x2 za podmínek 3x1 – x2 ≤ 12 x1 + x2 ≥ 6
(1)
-x1 + 2x2 = 9 x1, x2 ≥ 0 Převedeme-li soustavu omezujících podmínek pomocí přídatných proměnných na ekvivalentní soustavu rovnic, dostáváme v tomto případě soustavu tří rovnic o čtyřech neznámých: 3x1 – x2 + x3 x1 + x2 -x1 + 2x2
= 12 – x4
=6
(2)
=9
Všimněte si způsobu doplňování přídatných proměnných: •
U nerovnic typu „≤“ přídatnou proměnnou k levé straně nerovnice přičítáme. Tato proměnná potom vyjadřuje rozdíl mezi pravou a levou stranou nerovnice – je-li tedy například pravá strana nerovnice kapacita suroviny, která je k dispozici při plánování výrobního programu a levá strana je spotřeba této suroviny, potom přídatná proměnná vyjadřuje nespotřebovanou kapacitu, tj. rozdíl mezi kapacitou a spotřebou. 10
•
U nerovnic typu „≥“ přídatnou proměnnou od levé strany nerovnice odečítáme. V tomto případě vyjadřuje přídatná proměnná rozdíl mezi levou a pravou stranou nerovnice (levá strana nerovnice má být větší nebo rovna pravé straně, musíme tedy od ní přídatnou proměnnou odečíst). Vyjadřuje-li například omezení s nerovnicí „≥“ požadavek na minimální produkci nějakého výrobku, potom hodnota přídatné proměnné představuje, o kolik je v daném výrobním programu uvedený požadavek překročen.
•
Pokud je nějaké omezení zadáno přímo ve tvaru rovnice „=“, potom se přídatná proměnná k modelu samozřejmě nedoplňuje, neboť přídatné proměnné nemají jinou roli než převést soustavu nerovnic a soustavu rovnic. Po doplnění přídatných proměnných do smíšených typů omezujících podmínek však není získaná soustava rovnic v kanonickém tvaru. Z této soustavy tedy nelze přímo získat její základní řešení. Pro získání kanonického tvaru se proto tato soustava rovnic uměle rozšiřuje o další proměnné, které budeme označovat jako pomocné (umělé) proměnné. Ekvivalentní soustavu rovnic rozšířenou o pomocné proměnné budeme označovat jako rozšířenou soustavu rovnic. V našem příkladu má rozšířená soustava rovnic po doplnění pomocných proměnných následující podobu (pomocné proměnné zde označujeme y1, y2): 3 x1 – x1 +
=
9
x2 + x3 x2
= 12 – x4 + y1
=
- x1 + 2 x2
6
(3)
+ y2
Jaká jsou tedy pravidla pro doplňování pomocnýchproměnných U nerovnic typu „≤“ pomocnou proměnnou nedoplňujeme, protože přídatná proměnná přičtená při převodu této nerovnice na rovnici sama o sobě zabezpečuje získání jednotkového vektoru v matici strukturních koeficientů a může se tedy stát v této rovnici základní proměnnou. U omezujících podmínek typu „≥“ a „=“ je třeba pomocnou proměnnou k levé straně nerovnice případně rovnice přičíst. Pomocné proměnné budou v takto získané soustavě rovnic základními proměnnými.
11
Shrnutí způsobu doplňování přídatných a pomocných proměnných pro všechny typy omezujících podmínek přináší tabulka 1.
Tabulka 1 – Doplňování přídatných a pomocných proměnných
Rozšířená soustava rovnic je soustavou v kanonickém tvaru, základní proměnné jsou zde postupně proměnné x3, y1 a y2. Základní řešení této soustavy je dáno vektory x1 = (0, 0, 12, 0) a y1 = (6, 9) – vektor x1 je vektor hodnot strukturních přídatných proměnných, vektor y1 je vektorem hodnot uměle doplněných pomocných proměnných. Dosadíme-li prvky vektoru x1 do soustavy (1) nebo (2), zjistíme však, že řešení rozšířené soustavy rovnic není přípustným řešením dané úlohy LP. Tuto skutečnost dokumentuje tabulka 2.
Tabulka 2 – Hodnoty přídatných a pomocných proměnných
Z tabulky 2 je patrné, že první omezující podmínka je pro řešení x1 splněn. Rozdíl mezi pravou a levou stranou je 12 a to je v tomto případě hodnota přídatné proměnné x3. Druhé omezení splněno není – rozdíl, který zde udává, o kolik toto omezení splněno není, je roven 6. Všimněte si, že se tento rozdíl shoduje s hodnotou pomocné proměnné y1. Podobně je to s omezením posledním – rozdíl udávající míru nesplnění je 9 a to je hodnota pomocné proměnné y2. Přípustné řešení úlohy LP tedy získáme pouze tehdy, budou-li hodnoty všech pomocných proměnných rovny 0. Obsahem I. fáze výpočtu dvoufázovou simplexovou metodou je proto vynulování všech pomocných proměnných rozšířené soustavy rovnic. I. fáze výpočtu může být zakončena dvěma způsoby: Podařilo se vynulovat všechny pomocné proměnné a tím bylo získáno výchozí přípustné řešení (je současně i řešením základním) dané úlohy LP. Výpočet může dále pokračovat optimalizací účelové funkce, tedy II. fází. Pomocné proměnné ve druhé fázi výpočtu už neuvažujeme. Nepodařilo se vynulovat všechny pomocné proměnné. Potom neexistuje řešení, které by vyhovovalo všem omezujícím podmínkám. Úloha LP nemá tedy žádné přípustné řešení a ve výpočtu nemá smysl dále pokračovat. 12
Technicky se může zabezpečit vynulování pomocných proměnných dvěma základními způsoby: 1. Minimalizací pomocné účelové funkce, která je vhodnějším postupem při „ručním“ výpočtu malých úloh LP. 2. Použitím prohibitních cenových koeficientů – tento postup je zpravidla používán v programových systémech pro řešení úloh LP.
Minimalizace pomocné účelové funkce Minimalizaci hodnot pomocných proměnných lze zabezpečit tak, že zkonstruujeme pomocnou účelovou funkci z’, která bude definována jako součet všech pomocných proměnných. Tuto pomocnou účelovou funkce budeme minimalizovat: z’ = Σiyi → min Pokud se podaří získat minimální hodnotu z’ = 0, potom musí být, vzhledem k nezápornosti všech proměnných, všechny pomocné proměnné rovny 0. Tím je získáno výchozí přípustné řešení úlohy LP. Je-li minimum z’ > 0, potom nelze získat řešení, ve kterém by byly všechny pomocné proměnné rovny 0. Úloha LP nemá potom vůbec přípustné řešení.
Příklad: V našem ilustračním příkladu obsahuje rozšířená soustava rovnic dvě pomocné proměnné. Pomocná účelová funkce bude tedy z’ = y1 + y2 → min Ze soustavy (3) je y1 = 6 – x1 – x2 + x4,
y2 = 9 + x1 – 2x2,
takže z’ = y1 + y2 = 6 – x1 – x2 + x4 + 9 + x1 – 2x2 = 15 – 3x2 + x4 V anulovaném tvaru má potom pomocná účelová funkce tuto konečnou podobu z’ + 3x2 – x4 = 15 Výchozí simplexová tabulka rozšířená o pomocné proměnné a o řádek pomocné účelové funkce bude mít následující podobu:
13
Tabulka 3 – Výchozí simplex. tabulka pro dvoufázovou simplex. metodu
V tab. 3 si všimněte, že koeficienty pomocné účelové funkce lze snadno získat i tak, že sečteme řádky, ve kterých jsou pomocné proměnné základními proměnnými (v našem případě 2. 3. řádek tabulky). Ve sloupcích pomocných proměnných jsou však tyto koeficienty vždy rovny 0 (viz předchozí úprava pomocné účelové funkce z’). Při řešení rozšířené úlohy je třeba si uvědomit především: Vstupující proměnná se volí podle redukovaných cenových koeficientů pomocné účelové funkce, kterou vždy minimalizujeme. Klíčový sloupec je tedy určen maximálním kladným koeficientem v řádku z’ – v tab. 3 je proto vstupující proměnná x2. Volba klíčového řádku i přepočet simplexové tabulky se provádí standardním způsobem popsaným v části o jednofázové simplexové metodě – v tab. 3 je vystupující proměnná y2. Řádek původní funkce z se pouze přepočítává jako kterýkoliv jiný řádek v tabulce. V tabulce 4 je dokončena minimalizace pomocné účelové funkce. Ve dvou iteracích je nejprve vypočteno řešení x2 = (0, 9/2, 35/2, 0), y2 = (3/2, 0) s hodnotou funkce z2 = 9/2 a z’2 = 3/2 a potom řešení x3 = (1, 5, 14, 0), y3 = (0, 0) s hodnotou funkce z3 = 7 a z’3 = 0. Řešení x3, y3 je již optimálním řešením rozšířené úlohy. Vzhledem k tomu, že je v tomto řešení hodnota pomocné účelové funkce rovna 0, je řešení x3 současně výchozím základním řešením původní úlohy lineárního programování.
14
Tabulka 4 – I. fáze – minimalizace pomocné účelové funkce z‘
Nalezením výchozího přípustného řešení končí I. fáze výpočtu dvoufázovou simplexovou metodou. Ve výpočtu se poté pokračuj II. fází, která spočívá v optimalizaci původní účelové funkce z. II. fáze výpočtu našeho příkladu je ilustrována v tabulce 5. Všimněte si, že v této tabulce již nejsou obsaženy pomocné proměnné, které lze po jejich vynulování z modelu vyloučit, ani pomocná účelová funkce. Vzhledem k maximalizaci funkce z není řešení x3 = (1, 5, 14, 0) s hodnotou účelové funkce z3 = 7 řešením optimálním. Hodnotu účelové funkce lze zlepšit tak, že zvolíme jako vstupující proměnnou x4 – vystupující proměnná je potom x3 (viz tab. 5). Po přepočtu simplexové tabulky podle klíčového prvku (5/3) získáme řešení x4 = (33/5, 39/5, 0, 42/5) s hodnotou účelové funkce z4 = 21. Nalezením řešení x4 končí II. fáze výpočtu, neboť toto řešení je již hledaným optimálním řešením dané úlohy LP.
Tabulka 5 – II. fáze – optimalizace účelové funkce z
Celý postup výpočtu, který je obsažený v tabulkách 3 – 5, je ilustrován graficky na obrázku. Na tomto obrázku je zvýrazněn množina přípustných řešení – je to v tomto případě pouze jedna hrana mezi body x3 a x4. V I. fázi výpočtu (tab. 4) jsme vycházeli z řešení x1 a ve dvou iteracích jsme přešli přes řešení x2, které také není 15
přípustné, k řešení x3. Tím skončila I. fáze, neboť řešení x3 je již řešením přípustným. Ve II. fázi se v jedné iteraci vypočte optimální řešení x4.
Obrázek – Množina přípustných řešení
16
Použití prohibitních cenových koeficientů Místo zavedení pomocné účelové funkce lze dosáhnout efektu minimalizace hodnot pomocných proměnných i jiným, relativně jednodušším způsobem. Účelová funkce z se doplní o pomocné proměnné, kterým se však přiřadí maximálně nevýhodné cenové koeficienty ±M: +M v případě minimalizace a –M při maximalizaci funkce z, kde M je ve srovnání s ostatními cenovými koeficienty dostatečně velké kladné číslo. Vzhledem k nevýhodnosti prohibitních cen u pomocných proměnných budou tyto proměnné prioritně zvoleny jako vystupující a bude tedy dosaženo podobného efektu jako při použití pomocné účelové funkce. Použití prohibitních sazeb není, ve srovnání s pomocnou účelovou funkcí, z hlediska „ručního“ výpočtu výhodnější. Tento postup je však používán v většině programových produktů.
Příklad: Pro ilustraci uvedeného postupu zapíšeme výchozí simplex. tabulku s účelovou funkcí upravenou pomocí prohibitních saze. V našem příkladu bude vypadat tato funkce následovně: z = 2x1 +x2 –My1 – My2 Pokud však zapíšeme funkci do simplexové tabulky, budou u pomocných proměnných (které jsou proměnnými základními) porušeny jednotkové vektory (v řádku z nejsou nulové koeficienty ale sazby M). Z tohoto důvodu je třeba dále tuto tabulku upravit tak, že řádky obsahující pomocné proměnné vynásobíme hodnotou (-M) a přičteme k řádku z. Výchozí simplexová tabulka pro náš příklad je v tabulce 6. Další výpočet se realizuje už standardním způsobem s tím, že se počítá samozřejmě pouze s upravenou účelovou funkcí. Podle této funkce se zvolí klíčový sloupec (z2 = -3M – 1) – vystupující proměnná určená klíčovým řádkem je potom y2. Tuto proměnnou lze tedy vyloučit a v dalším průběhu výpočtu nemusí být už uvažována.
Tabulka 6 – použití prohibitních sazeb
17
Duální úloha Teorie duality Dualitou v úlohách lineárního programování se rozumí vzájemný vztah dvojice přesně d e f i n o v a n ý c h ú l o h l i n e á r n í h o p r o g r a m o v á n í . Ke každé úloze lineárního programování lze zformulovat podle definice, kterou uvedeme dále, jinou úlohu lineárního programování. První z nich budeme označovat jako ú l o h u p r i m á r n í , druhou potom jako ú l o h u d u á l n í .
Uvedené označení však svádí k tomu, že duální úloha je v jakémsi podřízeném stavu k úloze primární, neboť je z ní odvozena. Takové chápání duality by nebylo správné . Je třeba se uvědomit, že d u a l i t a je vzájemným symetrickým vztahem obou úloh. Pokud tedy budeme aplikovat proces transformace jedné úlohy na druhou dvakrát po sobě, potom dostáváme zpět původní primární úlohu:
primární úloha transformace duální úloha transformace primární úloha Místo označení primární a duální úloha lze použít termín d v o j i c e duálně sdružených úloh.
Praktický význam duality spočívá v tom, že vlastnosti duálních modelů a vztahy mezi duálně sdruženými úlohami se využívá při
18
speciálních algoritmech pro řešení úloh LP. Velký význam má dualita i v etapě ekonomické interpretace výsledků řešení.
Úlohy souměrně duálně sdružené (souměrná dualita)
Principy konstrukce duálních úloh
Mějme úlohu lineárního programování ve tvaru I
I Za podmínek a11x1 + a12x2 + ................ + a1nxn ≤ b1 a21x1 + a22x2 + ................ + a2nxn ≤ b2 ............................................................. am1x1 + am2x2 + ................ + a mnxn ≤ bm xj ≥ 0, j = 1,2, ...., n
, , , (1) ,
nalézt maximum funkce z = c1x1 + c2x2 + ................ + cnxn ,
Tuto úlohu nazveme p r i m á r n í .
Když každému omezení primární úlohy (1) přiřadíme jednu duální proměnnou ui i =1,2, ...,m,
můžeme formulovat d u á l n í ú l o h u ve tvaru II
II 19
Za podmínek a11u1 + a21u2 + ................ + am1um ≥ c1 a12u1 + a22u2 + ................ + a2mum ≥ c2 ............................................................. a1nu1 + a2nu2 + ................ + amnum ≥ cn ui ≥ 0, i =1,2, ..., m
, , , (2) ,
nalézt minimum funkce w = u1b1 + u2b2 + ................ + umbm ,
Úlohy (1) a (2). jsou tzv. symetrické duální úlohy. Vztah duality je vztahem vzájemným, neboť kterákoliv z těchto úloh může být vzata jako primární a naopak. Duální úloha má n omezení,k tedy tolik, kolik má primární úlohy proměnných, a m proměnných, tedy tolik, kolik má primární úloha omezení.
Definice:
V maticovém vyjádření mají symetrické duální úlohy tento tvar:
I. Primární model
II. Duální model
z = cTx Æ max.,
w = uTb Æ min.,
za podmínek Ax ≤ b, x ≥ 0.
za podmínek ATu ≥ c, u ≥ 0.
20
kde: cT = (c1, c2, . . . . c n) je n-složkový řádkový vektor cenových koeficientů x = (x1, x2, . . . . x n) T strukturních proměnných
je n-složkový sloupcový vektor modelu
b = (b1, b2, . . . . b m) T koeficientů pravé strany
je m-složkový sloupcový vektor
A
matice strukturních koef. o rozměru m n
W modelu
hodnota účelové funkce duálního
u = (u1, u2, . . . . u m) T proměnných duálního
je m-složkový sloupcový vektor modelu
Při zápisu pomocí sumací v matematickém modelu duálně sdružených úloh vypadá definice souměrné duality následovně: n
∑
=
z
c
j
j = 1
n
∑
a
j = 1
x
j
ij
x
≤
j
x
b
≥ 0 , j = 1 , 2 ,...,
→
j
i
, i =
max
1 , 2 ,...,
m
n
Primární model: Duální model: Z obou zápisu je naprosto zřejmé, že v duálním modelu jsou obsaženy stejné koeficienty jako v modelu primárním - samozřejmě s výjimkou vektorů x a u, které označují vektor proměnných primárního a duálního modelu. u m
∑
i = 1
i
≥ 0 , i = 1 , 2 ,...,
a
ij
u
i
≤ c
j
m
, j = 1 , 2 ,...,
n .
Při formulaci duálního modelu je třeba vycházet z výše uvedené definice.
21
Prvním důležitým krokem při této formulaci je převod primárního matematického modelu na tvar, který je uveden v definice, tzn.: při maximalizaci účelové funkce z je třeba převést všechna vlastní omezení úlohy na typ „ ≤ “ . při minimalizaci účelového funkce z je třeba všechna vlastní omezení úlohy na typ „≥“. Po této úpravě je už vlastní formulace duální úlohy velmi jednoduchá: ke každému vlastnímu omezení primární úlohy přiřadíme jednu duální proměnnou ui, i=1,2,..,m - každé z těchto proměnných je přiřazena podmínka nezápornosti. ke každé proměnné xj, j=1,2,...,n primární úlohy přiřadíme vlastní omezení duální úlohy - koeficienty tohoto omezení jsou určeny j-tým sloupcem matice A, typ všech omezení musí opět korespondovat s extrémem účelové funkce w („≤“ v případě maximalizace a „≥“ v případě minimalizace), koeficienty pravé stany v duální úloze jsou shodné s koeficienty účelové funkce primární úlohy a naopak koeficienty účelové funkce duální úlohy jsou shodné s koeficienty pravé strany primární úlohy, extrém účelové funkce se mění z maximalizace na minimalizaci, případně naopak.
Příklad: Formulace souměrně sdruženého duálního modelu: 0,5 x1 + 0,25 x2 ≤ 40 0,5 x1 + 0,5 x2 ≤ 60 0,25 x2 ≤ 25 z = 20 x1 + 14 x2 Příslušný duální model bude mít tři duální proměnné a dvě duální vlastní omezení.
22
Formulace uvedena v tabulce - 1:
Primární model z = 20 x1 + 14 x2
→
Duální model max
W = 40 u1 + 60 u2 + 25 u3 min
0,5 x1 + 0,25 x2 ≤ 40
u1 ≥ 0
0,5 x1 + 0,5 x2 ≤ 60
u2 ≥ 0
0,25 x2 ≤ 25
u3 ≥ 0
x1 ≥ 0
0,5 u1 +0,5 u2 ≥ 20
x2 ≥ 0
0,25 u1 + 0,5 u2 +0,25u3 ≥ 14
→
Tabulka 1 - Formulace souměrného duálního modelu
Z tabulky je patrné, že je každému vlastnímu omezení jedné úlohy přiřazena podmínka nezápornosti úlohy druhé a naopak každé proměnné s podmínkou nezápornosti je přiřazeno v druhé úloze vlastní omezení. Dostáváme tak tedy v našem příkladu pět řádků (kromě řádku obsahujícího účelové funkce obou úloh (1. řádek)), z nichž každý obsahuje vlastní omezení jedné úlohy a podmínku nezápornosti úlohy druhé. V každém řádku je tedy dvojice omezujících podmínek - vlastní omezení jedné úlohy a podmínka nezápornosti úlohy druhé. Tyto dvojice budeme dále označovat jako dvojice duálně sdružených omezení.
Mezi řešeními sdružených úloh platí zajímavé vztahy. Hodnota účelové funkce libovolného řešení primární úlohy nemůže být větší než hodnota účelové funkce libovolného řešení duální úlohy. Hodnota účelové funkce duální úlohy (minimalizační) je tedy horní mezí pro hodnotu účelové funkce primární úlohy (maximalizační). Jestliže nalezneme taková přípustná řešení obou úloh, jejichž hodnoty účelových funkcí se rovnají, pak jsou to řešení optimální.
23
Věty o dualitě:
Věta 1. Je-li x libovolné přípustné řešení primární úlohy a u libovolné přípustné řešení duální úlohy, platí, cTx ≤ bTu. Důkaz: Vynásobíme vlastní omezení primární úlohy vektorem u a vlastní omezení duální úlohy vektorem x: uTAx ≤ uTb
⇒c x≤u b T
T
uTAx ≥ cTx
Věta 2. Je-li x přípustné řešení primární úlohy a u přípustné řešení duální úlohy, pro něž
cTx = bTu, pak x a u jsou optimální řešeními obou úloh. Důkaz: Označíme přípustná řešení sdružených úloh, jejichž hodnoty účelových funkcí se rovnají, x0 a u0. T
T
Platí-li c x0 = b u0, potom z věty plyne pro libovolné přípustné T T řešení primární úlohy c x ≤ u 0 b, tj. cTx = cTx0 a pro libovolné T T T T přípustné řešení duální úlohy u b ≥ c x0, tj. u b ≥ b u0. Je tedy x0 optimálním řešením primární úlohy a u0 optimálním řešením duální úlohy. Kromě těchto dokázaných vztahů, platí mezi řešeními sdružených úloh i další vztahy.
24
Věta 3. Mají-li obě sdružené úlohy optimální řešení, pak se optimální hodnoty účelových funkcí obou úloh sobě rovnají.
25
Úlohy nesouměrně duálně sdružené (nesouměrná dualita) Při definici souměrné duality jsme uvažovali pouze vlastní omezení ve tvaru nerovnic " ≥ " nebo " ≤ ". V úlohách lineárního programování se však vyskytují i vlastní omezení ve tvaru rovnic. Jakým způsobem modifikuje výskyt takových omezení formulaci duální úlohy bude ukázáno nyní: V následujícím příkladu jsou v soustavě vlastních omezení obsaženy všechny tři možné typy omezení - tj. jedna nerovnice " ≤ " a druhá " ≥ " a jedna rovnice:
Příklad: 3 x1 -
x2 ≤ 12 x1 + x2 ≥
6
-x1 + 2x2 = 9 z = 2x1 + x2 Vzhledem k maximalizaci účelové funkce z = 2x1 + x2 je třeba převést nejprve všechna vlastní omezení na typ " ≤ ". Nerovnici x1 + x2 ≥ 6 stačí vynásobit (- 1). Rovnici -x1 + x2 = 9 je možné nahradit dvěma nerovnicemi: -x1 + 2x2 ≤ x1 -2 x2
9
≥ -9
Původní soustava tří vlastních omezení se tak rozšiřuje o jedno další omezení s tím , že původní rovnici přísluší dvě vlastní omezení v rozšířené soustavě. Duální proměnné příslušející těmto dvěma vlastním omezením označíme u3´ a u3´´, protože obě přísluší shodnému původnímu vlastnímu omezení (rovnici). Formulace duálního modelu příslušejícího této rozšířené soustavě vlastních omezení je uvedena v tabulce -2 - v tomto případě se jedná o s o u m ě r n o u d u a l i t u.
26
Primární model z = 2 x1 + x 2
→
Duální model
max
W = 12 u1 - 6 u2 + 9*( u3 ´- u3 ´´) min
3 x1 -
x2
≤ 12
u1 ≥ 0
- x1
x2
≤-6
u2 ≥ 0
- x 1 + 2 x2
≤ 9
u3 ´ ≥ 0
x1 + 2 x2
≤ -9
u3 ´ ≥ 0
-
x1 ≥ 0
3 u1 - u2 -
x2 ≥ 0
- u1 - u2 +2* (u3 ´- u3 ´´) ≥ 1
→
(u3 ´- u3 ´´) ≥ 2
Tabulka 2 -Formulace souměrného duálního modelu
Nyní budeme formulovat duální úlohu k nerozšířenému modelu, tj. k modelu, ve kterém ponecháme třetí omezující podmínku ve tvaru rovnice. Této rovnici přiřadíme duální proměnnou u3 . Vzhledem k extrému účelové funkce musíme i zde vynásobit druhou nerovnici hodnotou (-1), abychom toto omezení převedli na typ " ≤ ". Formulace opět uvedena v tabulce:
Primární model = 2 x1 + x2
Duální model max
3 x1 -
x2
≤ 12
- x1
x2
≤-6
- x 1 + 2 x2
= 9
-
W = 12 u1 - 6 u2 min
+ 9 u3
u1 ≥ 0 u2 ≥ 0 u3 - libovolné
27
x1 ≥ 0
u3
≥ 2
- u 1 - u 2 + 2 u3
≥ 1
3 u1 - u2 x2 ≥ 0
Tabulka 3 -Formulace nesouměrného duálního modelu Duální modely v tabulce 2 a 3 jsou téměř shodné - hlavní rozdíl spočívá v tom, že je proměnná u3 z tabulky 3 nahrazena v tabulce 2 ( v souměrném modelu) rozdílem dvou proměnných (u3´ - u3´´). Duální proměnná u3 byla přiřazena vlastnímu omezení - x1 + 2 x2 = 9 a proměnné u3´ a u3´´ příslušely dvojici omezujících podmínek odvozených z uvedené rovnice. Pro všechny podmínky v souměrné dualitě - tedy i pro proměnné u3´ a u3´´ platí podmínky n e z á p o r n o s t i . Pro proměnnou u3 = u3´ - u3´´, která je definována jako rozdíl dvou nezáporných hodnot však z pochopitelných důvodů podmínka nezápornosti platit nemůže - rozdíl dvou nezáporných hodnot může být stejně tak kladný, záporný nebo nulový. Z tohoto důvodu platí, že duální proměnné příslušející vlastním omezením ve tvaru rovnice nejsou omezeny podmínkami nezápornosti.
Obecná definice nesouměrné duality I. Maximalizovat funkci funkci
II. Minimalizovat
z = cTx,
w = uTb ,
za podmínek
za podmínek ATu ≥ c,
Ax = b, X≥0
u - libovolné
Nesouměrnost spočívá v tom , že dvojice duálně sdružených omezení nejsou v tomto případě "kompletní". V souměrné dualitě tyto dvojice obsahovaly vždy vlastní omezení ve tvaru nerovnice v jedné úloze a podmínku nezápornosti v úloze druhé. V nesouměrné dualitě nepřísluší vlastnímu omezení ve tvaru rovnice v jedné úloze žádná omezující podmínka v úloze druhé (příslušná proměnná může být libovolná).
28
Řešení duálně sdružených úloh Pro nalezení optimálního řešení dvojice duálně sdružených úloh lze použít, vzhledem k tomu, že se v obou případech jedná o standardní úlohy lineárního programování, simplexovou metodou. Každou z obou duálně sdružených úloh lze tedy řešit samostatně simplexovou metodou
Příklad: Optimální řešení duálně sdružených úloh V kožedělném závodě se vyrábějí 3 druhy výrobků, na než se spotřebovávají 2 druhy surovin (kůží), jejichž disponibilní množství nelze zvýšit na udanou mez. Je třeba určit výrobní program maximální výši zisku. Potřebné údaje jsou v tabulce 4. Formulace primární úlohy: 0,2x3 ≤ 3000
0,2 x1 +
0,25 x2 + 0,3x3 ≤ 4200 xj ≥ 0 (j = 1, 2, 3 ) z = 12 x1 + 11 x2 +26 x3
→
MAX.
Formulace duální úlohy k primární úloze: ≥12
0,2 u1
0,25 u2 ≥11 0,2 u1 +
0,3 u2
≥26
ui ≥ 0 (i = 1, 2) w = 3000 u1 + 4200 u2
→
MIN.
Obě úlohy převedeme na standardní tvar pomocí přídatných proměnných. U duální úlohy přidáme kromě přídatných proměnných i proměnné pomocné (yi))
Pozn.: U omezujících podmínek typu „≥“ a "=" je třeba pomocnou proměnnou k levé straně nerovnice případně rovnice přičíst. Pomocné
29
proměnné budou v takto získané soustavě rovnic základními proměnnými.
Řešíme simplexovou metodou: V části simplexové tabulky obsahující poslední iteraci výpočtu jedné ze sdružených úloh je i řešení druhé úlohy. Z tabulky 5 (3. Iterace) lze tedy vyčíst i optimální řešení duální úlohy uT= [60, 140/3] ( je v posledním řádku tabulky pod přídatnými proměnnými, jejichž koeficienty vytvořily jednotkovou matici 1. Iterace). Hodnoty přídatných proměnných lze zjistit rovněž z posledního řádku tabulky 3. Iterace. Jsou zapsány ve sloupcích původních strukturních proměnných u3 = 0, u4 = 2/3, u5 = 0. I obráceně lze z tabulky řešení duální úlohy zjistit řešení úlohy sdružené (tj. primární). Tedy optimální řešení primární úlohy z tabulky 6 (duální řešení) je xT = [1000, 0, 14000, 0, 0] z = 12 x1 + 11 x2 +26 x3 z = 12*1000+26*14000 = 376 000 w = 3000 u1 + 4200 u2 w = 3000*60 + 4200*140/3 = 376 000
Strukturní duální proměnné můžeme interpretovat jako ocenění jedné jednotky kapacity ve vztahu k hodnotě účelové fce. Jedná se tedy o marginální ocenění kapacit. Někdy se strukturní duální proměnné označují jako stínové ceny. Hodnoty duálních proměnných je třeba uvažovat pouze v rámci určitých intervalů stability pro hodnoty pravé strany b. Vlastní výpočet intervalů stability: b1 + ∆b1 Bs-1
b2
≥0
: : bm Bs-1
je inverzní matice báze v s-tém kroku výpočtu,
30
bi i = 1, 2, ….,m jsou prvky vektoru pravých stran ∆bi je hledaná přípustná změna pro hodnotu bi
31
Celočíselné programování Mezi speciální úlohy lineárního programování (LP) lze zařadit i úlohy celočíselného (lineárního) programování. Jedná se o standardní úlohy LP, které jsou však doplněny o tzv. podmínky celočíselnosti, (zabezpečují, aby všechny nebo některé proměnné nabývaly pouze celočíselných hodnot). Tyto podmínky vyplývají ze zadaného problému. Kromě obecných celočíselných podmínek se mohou v úlohách LP vyskytovat podmínky, aby proměnné nabývaly pouze hodnot 0 nebo 1, takové proměnné se označují jako bivalentní proměnná.Tyto proměnné se používají i při formulaci přiřazovacího a okružního dopravního problému, což jsou úlohy celočíselného programování. Úlohy celočíselného programování, které obsahují pouze bivalentní proměnné se označují jako úlohy bivalentního programování. Úlohy celočíselného programování je možné klasifikovat podle různých hledisek. Jeden způsob klasifikace rozděluje tyto úlohy na úlohy s obecnými podmínkami celočíselnosti a na bivalentní úlohy tak, jak bylo uvedeno výše. Jiná klasifikace vychází z toho, zda jsou kladeny podmínky celočíselnosti na všechny proměnné modelu nebo pouze na jejich podmnožinu – v prvním případě se hovoří o ryze celočíselných, ve druhém o smíšeně celočíselných úlohách LP. (Řešení těchto úloh je většinou velmi náročné, nejenom na výpočet, ale i z časového hlediska.)
32
Metody řešení úloh celočíselného programování se dělí do několika skupin podle jejich charakteru: 1. Metody řezných (sečných) nadrovin jsou vhodné pro řešení ryze i smíšené celočíselných úloh, ve kterých jsou uvažovány obecné podmínky celočíselnosti. Nejsou vhodné pro řešení bivalentních úloh. Tyto metody vychází z množiny přípustných řešení úlohy bez podmínek celočíselnosti. Pro tuto množinu je vypočteno běžnou simplexovou metodou optimální řešení. Pro takto zúženou množinu je opět vypočteno optimální řešení. Po konečném počtu kroků vede tento postup k získání řešení. 2. Kombinatorické metody jsou univerzálním nástrojem pro řešení většiny typů úloh. Podstatou těchto metod je jejich efektivní prohledávání. Bližší obecný popis metod typu není možný, protože výpočetní realizace je u jednotlivých metod poměrně odlišná. 3. Speciální metody obsahují např. maďarskou metodu (pro výpočet optimálního řešení přiřazovacího problému nebo speciální přibližné algoritmy pro řešení okružního dopravního problému).
Množinu přípustných řešení a postup výpočtu optima budeme ilustrovat na příkladu. Máme tedy úlohu maximalizovat z = 2x1 + 3x2
za podmínek
Grafické znázornění:
4x1 + 3x2 ≤ 13 x1 + 2x2 ≤ 6 x1, x2 ≥ 0 x1, x2 - celé
:
Obr. 1.1 – množina přípustných řešení úlohy celočíselného LP
Grafické znázornění množiny přípustných řešení této úlohy je na obr. 1.1. Stínování vyjadřuje množinu přípustných řešeni bez podmínek celočíselnosti. Mřížka diskrétních bodů reprezentuje celočíselné řešení, těchto bodů je v tomto případě 10. Je zřejmé, že optimální řešení neceločíselné úlohy je dáno vektorem xopt = (8/5, 11/5),
33
hodnota účelové funkce tohoto řešení je zopt = 49/5. Jakékoli zaokrouhlení, což je často první myšlenka, která vzniká při pokusu získat celočíselné řešení, nevede k uspokojivým výsledkům. Jakýmkoliv zaokrouhlením vektoru xopt nelze získat optimální řešení. Toto řešení (jak po chvíli zjistíme) je xopt = (0,3) s hodnotou účelové funkce zopt = 9. V profesionálních programových systémech se pro řešení celočíselných úloh LP používají nejčastěji tzv. metody větvení a mezí. Tento princip je dostatečně obecný, takže jej lze použít na mnoho úloh. Těchto metod je ovšem docela dost, proto se zmíníme konkrétně o jedné - je to metoda autorek Land a Doig. Lze ji použít pro řešení jak ryze, tak i smíšeně celočíselných úloh LP, ale předpokládejme zde, že koeficienty účelové funkce jsou vždy celá čísla. Prvním krokem uvedené metody je, že se standardním postupem vypočte optimální řešení bez podmínek celočíselnosti. Označme si vektor tohoto řešení x° = (x1°, x2°, ...x n°) a jeho hodnotu účelové funkce z°. Pokud takto vypočtené řešení vyhovuje podmínkám celočíselnosti, pak je to optimální řešení a výpočet končí. V opačném případě se z množiny X° vytvoří dvě podmnožiny - X1, X2 ( což označujeme jako větvení velké množiny na dvě podmnožiny), z vektoru x° se vybere libovolně jedna proměnná, která porušuje podmínku celočíselnosti (nechť se jedná o proměnnou xk , jejíž hodnota je ve vektoru x° rovna xk0). MnožinaX1 je charakterizována rozšířením o podmínku [xk0] + l, množina X2 je vytvořena z množiny X° rozšířením o podmínku ≤ [xk0]
xk ≥
xk ,
kde [xk0] představuje celou část z hodnoty xk0. Je-li tedy složka xk0 = 8/5, pak je množina X1 určena podmínkou xk ≥ [8/5] + 1 = 2 a množina X2 podmínkou xk ≤ [8/5] = l. V každé z obou větví je vypočteno optimální řešení bez uvažování podmínek celočíselnosti a proces větvení v případě potřeby pokračuje dále podobné jako u množiny X0. Součástí uvedeného algoritmu dále je, že je v každé větvi odvozována horní mez pro hodnotu účelové funkce celočíselného řešení. Např. na naší množině X° je optimální řešení určeno vektorem x° s hodnotou účelové funkce z° = 49/5. Protože je to jediné optimální, řešení na množině X°, je zřejmé, že ryze celočíselné řešení nemůže mít hodnotu účelové funkce vyšší než [49/5] = 9. Horní mez na množině X0 je tedy rovna 9. U ryze celočíselných úloh lze získat horní mez pro hodnotu celočíselného řešení na množině Xk jako [zk - ε ], kde zk je optimální hodnota neceločíselného optima na množině Xk a ε je dostatečné
34
malé ( 10-9) kladné číslo. U smíšeně celočíselných úloh je však horní mez v dané větvi rovna přímo vypočtené hodnotě účelové funkce. Celý tento proces se provádí tak dlouho, pokud všechny vytvořené větve nejsou uzavřeny jedním z následujících způsobů: 1. 2. 3.
Ve větvi je nalezeno řešení, které vyhovuje podmínkám celočíselnosti Ve větvi neexistuje žádné přípustné řešení Ve větvi je nalezeno neceločíselné řešení a horní mez pro hodnotu účelové funkce, odvozená z tohoto řešení, je nižší než hodnota účelové funkce nějakého řešení, nalezeného již dříve v některé z ostatních větví. Po uzavření všech větví je nejlepší nalezené celočíselné řešení současně hledaným optimálním řešením celočíselné úlohy.
Příklad: Postup výpočtu celočíselného optima metodou Land a Doig budeme ilustrovat na výše uvedeném numerickém příkladu. K lepšímu pochopení algoritmu uvádíme na obr. 1.2 a 1.3. jednak grafické znázornění způsobu dělení původní množiny přípustných řešení X0 na podmnožiny v jednotlivých větvích a optimální řešení získané na těchto podmnožinách (x0,x1,...,x4) a jednak graf řešení, která schématicky znázorňuje postup výpočtu.
Obr. 1.2 - Výpočet celočíselného optima metodou větvení a mezí
Prvním krokem výpočtu je nalezení optimálního řešení na množině X0. To je na celé množině přípustných řešení bez podmínek celočíselnosti. Toto řešení je dáno vektorem x0 = (8/5 , 11/5) s hodnotou účelové funkce z0 = 49/5. Horní mez je = 9. Pro větvení vybereme např. první neceločíselnou složku vektoru x0 a z původní množiny X0 vytvoříme dvě podmnožiny X1 a X2 tak, že soustavu omezujících podmínek rozšíříme o x1 ≥ [8/5]+1 = 2 a o x1 ≤ [8/5] = 1 viz obr 1.3. Množiny X1 a X2 jsou na obr 1.2. zvýrazněny stínováním.Na obou těchto množinách je vypočteno optimální řešení. Tato řešení jsou určena vektory x1 = (2, 5/3) a x1 = (1, 5/2). Jejich hodnoty z1 = 9 a z2 = 19/2. Na podmnožinách odvozených z X1 nelze 35
tedy získat celočíselné řešení, které bude mít hodnotu účelové funkce vyšší než 8 (horní mez je 8). Na množině X2 je horní mez rovna [19/2] = 9.
x0
x0 = (8/5; 49/5) Z0 = 49/5
x1; x1 ≥ 2
8
x2; x2 ≤ 1
9
x2 = (1, 5/2) z2 = 19/2
x1 = (2; 5/3) x1= 9
x4; x2 ≥ 3
x3; x2 ≤ 2
x4 = (0,3) Z4 = 9
x3 = (1,2) z3 = 8
STOP
STOP
Obr. 1.3 – Graf řešení metodou větvení a mezí
Ani jedno řešení x1 a x2 není celočíselné, pro další větvení vybereme větev X2, protože hodnota horní meze je větší než na X1, proto lze očekávat získání řešení s vyšší hodnotou účelové funkce. Z X2 vytvoříme podmnožiny X3 a X4 tak, že doplníme o podmínky x2 < [5/2] = 2 a x2 ≥ [5/2] + 1 = 3. Na obou podmnožinách získáváme již 36
celočíselné řešení, konkrétně se jedná o řešeni x3 = (1,2) s hodnotou účelové funkce z3 = 8 a x4 = (0,3) s hodnotou účelové funkce z4 = 9. Tímto lze větvení ukončit (viz pravidlo l). Tedy nejlepší nalezené řešení je x4 = (0,3) s hodnotou z4 = 9. Pro doplnění uvedeme Gomoryho metodu, která patří do skupiny metod řezných nadrovin, ale pouze v nejjednodušší verzi určenou pro řešení ryze celočíselných úloh. První vypočteme simplexovou metodou řešení bez podmínek celočíselnosti. Pokud splňuje toto řešení podmínky celočíselnosti, je to optimální řešení celočíselné úlohy a výpočet může skončit. V opačném případě se k soustavě podmínek doplňuje nové omezeni - řezná nadrovina. Předpokládejme, že základní proměnná v i-tém řádku simplexové tabulky porušuje podmínku celočíselnosti. Nové omezení bude mít následující podobu:
∑ (-rij)xj + xn+1 = -ri0 kde j = 0, 1,...,n rij – jsou celočíselné zbytky strukturních koeficientů i-tého řádku simplexové tabulky, ri0 – je celočíselný zbytek hodnoty prvé strany v i-tém řádku tabulky , tj. hodnoty základní proměnné, která porušuje podmínky celočíselnosti xn+1 – ji přídatná proměnná doplněná k tomuto novému omezení Celočíselný zbytek je vždy číslo z intervalu <0,1). Pro ilustraci celočíselný. zbytek 8/5 je 3/5, protože 8/5 = 1+3/5 a celočís. zbytek čísla -8/5 je 2/5, protože 8/5= -2+2/5. Po doplnění řezné nadroviny do simplexové tabulky dostáváme v této tabulce primárně nepřípustné řešení. Ve výpočtu pokračujeme duálně simplexovou metodou. Po nalezení optima se situace opakuje - buď je celočíselné, nebo se k soustavě omezení doplní další řezná nadrovina stejným způsobem. Po konečném počtu kroků konverguje tento postup k optimálnímu řešení. Ovšem v každém kroku se rozšiřuje soustava o jedno nové omezení (řádek) a novou proměnnou (sloupec). Vzhledem k tomu, že počet kroků může být i u malých úloh značný, může se i do značných rozměrů rozrůst původní problém. S tím souvisí i potenciální výpočetní problémy.
37
Příklady • Celočíselné optimum • Graf řešení • Optimální řešení neceločíselné úlohy • Gomoryho metoda • Optimální řešení
38
Celočíselné optimum Výpočet celočíselného optima metodou větvení a mezí m
Graf rešení Grafické řešení metodou větvení a mezí x0
x0 = (8/5; 49/5) Z0 = 49/5
x1; x1 ≥ 2
8
x2; x2 ≤ 1
9
x2 = (1, 5/2) z2 = 19/2
x1 = (2; 5/3) x1 = 9
x3; x2 ≤ 2
x4; x2 ≥ 3
39
x3 = z3 = 8
x4 = (0,3) Z4 = 9
(1,2)
STOP
STOP
Postup výpočtu celočíselného optima budeme ilustrovat na stejném numerickém příkladu jako předchozí metodu větvení a mezí. Předpokladem pro použití Gomoryho metody je znalost optimálního neceločíselného řešení.
Optimální řešení neceločíselné úlohy Toto řešení pro náš příklad je uvedeno v tabulce: Základní proměnná X1 X2 X3
X4
Bi
X1
1
0
2/5 -3/5 8/5
X2
0
1 -1/5 4/5 11/5
Zj
0
0
1/5 6/5 49/5
Toto řešení nesplňuje podmínky celočíselnosti. Vybereme řádek s první neceločíselnou hodnotou základní proměnné (x1 = 8/5) a podle něj zkonstruujeme nové omezení – řeznou nadrovinu: 0*x1 – 0*x2 – 2/5x3 – 2/5x4 + x5 = - 3/5, kde x5 je přidaná proměnná příslušející tomuto novému omezení. O nové omezení rozšíříme předchozí tabulku a ve výpočtu budeme pokračovat jedním krokem duálně simplexové metody. Tento krok je uveden zde:
Gomoryho metoda První krok výpočtu Gomoryho metody
40
X1
X2
X3
X4
X5
Bi
X1
1
0
2/5
-3/5
0
8/5
X2
0
1
-1/5
4/5
0
11/5
X5
0
0
-2/5
-2/5
1
-3/5
Yj
0
0
1/5
6/5
0
49/5
X1
1
0
0
-1
1
1
X2
0
1
0
1
-1/2
5/2
X3
0
0
1
1
-5/2
3/2
Zj
0
0
0
1
1/2
19/2
Toto řešení není celočíselné. Pokračujeme dále. Vybereme opět řádek s první neceločíselnou hodnotou základní proměnné (x2 = 5/2) a podle něj vytvoříme nové omezení: -1/2x5 + x6 = -1/2, kde x6 je další přidaná proměnná. Po doplnění tohoto omezení do tabulky a po provedení výpočtu jedním krokem duálně simplexové metody dostáváme již celočíselné řešení. Optimální celočíselné řešení je tedy charakterizované vektorem xc = (0, 3, 4, 1) a hodnotou účelové funkce xc = 9. Ve vektoru xc jsme neuvedli hodnoty proměnných x5, x6 tj. přidaných proměnných dvou nově doplněných omezení (řezných nadrovin). Tyto proměnné totiž nemají ve vztahu k původnímu modelu žádnou interpretaci.
Optimální řešení
X1
X2
X3
X4
X5
X6
Bi
X1
1
0
0
-1
1
0
1
X2
0
1
0
1
-1/2
0
5/2
41
X3
0
0
1
1
-5/2
0
3/2
X6
0
0
0
0
-1/2
1
-1/2
Zj
0
0
0
1
½
0
19/2
X1
1
0
0
-1
0
2
0
X2
0
1
0
1
0
-1
3
X3
0
0
1
1
0
-5
4
X5
0
0
0
0
1
-2
1
Yj
0
0
0
1
0
1
9
42
Dopravní problém (Speciální úlohy lineárního programování) Mezi nejtypičtější úlohy lineárního programování patří tzv. distribuční úlohy lineárního programování. Z distribučních úloh v této kapitole podrobněji rozebereme dopravní problém a z formulačního hlediska se zmíníme o dalších úlohách jako je přiřazovací problém, okružní dopravní problém a obecný distribuční problém.
Dopravní problém – formulace ekonomického a matematického modelu V dopravním problému se typickém případě jedná o rozvržení rozvozu nějakého zboží či materiálu z dodavatelských míst (zdroje) odběratelům (cílová místa) tak, aby byly minimalizovány celkové náklady související s tímto rozvozem. V dopravním problému je definováno m-zdrojů (dodavatelů) D1, D2, …, Dm s omezenými kapacitami a1, a2, …, am (množství, které je dodavatel schopen v uvažovaném období dodat ) a ncílových míst (odběratelů) O1, O2, …, On se stanovenými požadavky b1, b2, …, bn (množství, které odběratel v uvažovaném období požaduje). Vztah každé dvojice zdroj-cílové místo je nějakým způsobem oceněn. Tímto oceněním mohou být například vykalkulované náklady na přepravu jedné jednotky zboží mezi zdrojem a cílovým místem nebo kilometrová vzdálenost mezi zdrojem a cílovým místem. Kvantifikované ocenění vztahu zdrojů a cílových míst označím cij, i = 1, 2, …, m, j = 1, 2, …, n. Cílem řešení dopravního problému je naplánovat přepravu mezi zdroji a cílovými místy, tzn. stanovit objem přepravy mezi každou dvojici zdroj-cílové místo tak, aby nebyly překročeny kapacity zdrojů a aby byly uspokojeny požadavky cílových míst. Z hlediska matematického modelu je tedy třeba stanovit hodnoty proměnných xij, i = 1, 2, …, m, j = 1, 2, …, n, které vyjadřují objem přepravy mezi i-tým zdrojem a jtým cílovým místem. Výše uvedený popis lze považovat za typickou formulaci ekonomického modelu dopravního problému. Tuto formulaci lze přehledně vyjádřit ve formě tabulky (tabulka 1).
Zdroje
D1
D2
Cílová místa O1
O2
c11
c12
x11
x12
c21
c22
x21
x22
…
On
Kapacity zdrojů
c1a …
x1a
a1
c2n …
43
x2n
a2
…
…
…
…
…
. . . Dm
Požadavky cíl. míst
cm1
cm2
xm1
xm2
cmn …
xmn
am
∑ i ai b1
b2
…
bn
∑ j bj
Tab. 1 – Formulace ekonomického modelu dopravního problému. Při řešení dopravního problému je třeba uvažovat vztah celkové kapacity všech zdrojů ∑i ai (součet všech dílčích kapacit) a všech požadavků cílových míst ∑j bj (součet požadavků). Pouze ve speciálním případě bude patrně platit ∑i ai = ∑j bj . Takový dopravní problém budeme označovat jako vyrovnaný dopravní problém. V tomto případě platí, že všechny požadavky budou přesně uspokojeny a všechny kapacity budou vyčerpány. Dopravní problém, ve kterém ∑i ai ≠ ∑j bj budeme označovat jako nevyrovnaný dopravní problém. Při převisu na straně nabídky zůstane část kapacity nevyužita a podobně při převisu na straně poptávky nebudou uspokojeny všechny požadavky. My se v dalším textu budeme zabývat pouze vyrovnaným dopravním problémem, neboť nevyrovnaný problém lze na vyrovnaný snadno převést. Tento převod se realizuje tak, že při převisu nabídky k modelu doplníme tzv. fiktivní cílové místo OF (fiktivní odběratel), jehož požadavek bude roven ∑i ai - ∑j bj , tj. rozdílu mezi celkovými kapacitami a požadavky – tabulka 1 bude tedy rozšířena o nový sloupec, při převisu poptávky k modelu doplníme tzv. fiktivní zdroj DF (fiktivní dodavatel), jehož kapacita bude rovna ∑j bj - ∑i ai , tj. rozdílu mezi sumou požadavků a kapacit – tabulka 1 bude tedy rozšířena o nový řádek. Zbývá poznamenat, že ocenění vztahu mezi zdroji a cílovými místy cij je u fiktivních činitelů nulové.
44
Při formulaci matematického modelu vyrovnaného dopravního problému si je třeba uvědomit, že model bude obsahovat m.n proměnných xij vyjadřujících objem přepravy mezi i-tým zdrojem a j-tým cílovým místem a dále bude obsahovat (m+n) vlastních omezení. Omezení jsou přitom dvojího druhu. Prvních m představuje bilanci pro jednotlivé zdroje – součet dodávek ze zdrojů cílovým místům nesmí přesáhnout kapacitu jednotlivých zdrojů (vzhledem k vyrovnanosti dopravního problému bude roven této kapacitě). Řádkové součty proměnných v tabulce 1 se tedy rovnají příslušným kapacitám. Zbývajících n omezení přísluší jednotlivým cílovým místům. Součet dodávek do jednotlivých cílových míst by se měl rovnat, opět vzhledem k vyrovnanosti dopravního problému, jednotlivým požadavkům. Matematický model vyrovnaného dopravního problému vypadá proto následovně: minimalizovat z = c11x11 + c12x12 + … + c1nx1n + … + cm1xm1 + cm2xm2 + … +cmnxmn za podmínek x11 + x12 + … + x1n
= a1
x21 + x22 + … + x2n
u1 = a2
u2
.
.
.
.
.
..
.
.
xm1 + xm2 + … + xmn = am x11
+ x21 x12 .
. . . + xm1
= b1
+ x21 . . .
+ xm2 = b2
v2
.
.
.
.
.
.
.
.
.
.
.
.
. . + x1n + x2n . . .
+ xmn = bn
um
v1
vn
xij ≥ 0, i = 1, 2, … , m, j = 1, 2, …, n. Koeficienty cij budeme v matematickém modelu označovat jako cenové koeficienty. Současně s formulaci matematického modelu budeme formulovat i model k němu duálně sdružený. Ve výše uvedené formulaci jsme označili symboly u1, u2, …, um duální proměnné příslušející kapacitnímu omezením a pro odlišení symboly v1, v2, …, vn duální proměnné pro omezení jednotlivých požadavků. Duální model bude vypadat následovně: maximalizovat 45
f = a1u1 + a2u2 + … + amum + b1v1 + b2v2 + …+ bnvn za podmínek u1 + v1 ≤ c11, u2 + v2 ≤ c12, . . um + vn ≤ cmn. Vlastní omezení duální úlohy lze přehledně zapsat v následující podobě: xij ≥ 0 ui + vj ≤ ci j., i = 1, 2, …, m, j = 1, 2, …, n. Nebo lze zapsat takto: minimalizovat z=
m
n
i =1
j =1
∑ ∑
cijxij
za podmínek n
∑
xij = ai,
i = 1, 2, …, m,
xij = bj,
j = 1, 2, …, n,
j =1 m
∑ i =1
xij ≥ 0,
i = 1, 2, …, m, j = 1, 2, …, n.
Množina přípustných řešení vyrovnaného dopravního problému je určená soustavou (m+n) lineárních rovnic, které obsahují m.n proměnných, a podmínkami nezápornosti. Je však možné poměrně snadno ukázat, že hodnost rozšířené matice uvedené soustavy lineárních rovnic
1 1
1
...
1 1
1
...
1 1 1
1 1
1
1
...
1
1
1
1
46
1
a1 a2 am b1 b2 bn
není zrovna m+n, ale pouze m+n-1, že libovolný řádek uvedené matice lze získat jako lineární kombinaci všech řádků ostatních. Důsledkem toho je, že v základním řešení vyrovnaného dopravního problému je pouze m+n-1 základních proměnných.
Příklad: Společnost Multicomp, s.r.o. má v ČR 3 střediska (Plzeň, Pardubice, Olomouc), ve kterých montuje osobní počítače. Kapacita těchto středisek je 330, 150 a 220 ks počítačů měsíčně. Tyto počítače jsou distribuovány smluvním odběratelům v Brně, Praze, Ostravě a Liberci. Podle smluv dodá Multicomp jednotlivým odběratelům postupně 180, 250, 160 a 110 ks počítačů. Distribuční náklady mezi středisky a odběrateli byly vykalkulovány na 1 ks počítače ve výši, která je zřejmá z tabulky 2 – údaj v pravém horním rohu každého pole (uvedené hodnoty jsou ve stovkách Kč).
Brno
Praha
Ostrava
Liberec
Plzeň
11
4
17
9
Pardubice
6
7
10
8
Olomouc
3
9
5
12
Kapacity
Požadavky Tab. 2 – Dopravní problém – formulace ekonomického modelu.
Formulace matematický modelu našeho vyrovnaného dopravního problému následnovně: minimalizovat z = 11x11 + 4x12 + 17x13 + 9x14 + 6x21 + 7x22 + 10x23 + 8x24 + 3x31 + 9x32 + 5x33 + 12x34 za podmínek x11 + x12 + x13 + x14 = 330 Je-li počet kladných základních proměnných nižší než m+n-1, jedná se o degenerované základní řešení. x21 + x22 + x23 + x24 = 150 x31 + x32 + x33 + x34 = 220 x11
+ x21 + x31 = 180 x12
+ x22 + x32 = 250
47
x13
+ x23 + x33 = 160
x14
+ x24 + x34 = 110
xij ≥ 0, i = 1, 2, 3, j = 1, 2, 3, 4.
Řešení dopravního problému Dopravní problém je možné řešit standardní simplexovou metodou. Metoda má tyto kroky: výpočet výchozího základního řešení test optimality (v případě, že je řešení už optimální, ukončení výpočtu) výpočet nového základního řešení s lepší (nižší) hodnotou účelové funkce – tento krok zahrnuje podobně jako u simplexové metody: volbu vstupující proměnné, volbu vystupující proměnné, přepočet tabulky, ve které je výpočet realizován. 1. Výpočet výchozího základního řešení Při výpočtu základního řešení se zde vlastně jedná pouze o to, doplnit do tabulky 1 hodnoty proměnných tak, aby jejich řádkové součty byly rovny kapacitám a sloupcové součty byly rovny požadavkům, a aby počet nenulových proměnných nebyl vyšší než m+n-1. Pro výpočet je možno použít tří metod: metoda severozápadního rohu, indexní metoda (metoda maticového minima) a metoda VAM. Metoda severozápadního rohu
Příklad: Tato metoda umístí v prvním kroku přepravu do pole s proměnnou x11, které je v tabulce vlevo nahoře tedy na „severozápadě“. V našem případě představuje toto pole přepravu mezi Brnem a Plzní, která bude ve výši 180 ks a tím je požadavek Brna plně uspokojen a je třeba zredukovat kapacitu Plzně z původních 330 ks na 330 – 180 = 150 ks. Dále pokračujeme stejným způsobem.
Brno
Praha
Ostrava
Liberec
Plzeň
11
4
17
9
Pardubice
6
7
10
8
Olomouc
3
9
5
12
48
Kapacity
Požadavky
Tab. 3 – Dopravní problém – metoda severozápadního rohu.
Základní proměnná
Objem
Jednotkové
Podíl na
x11 (Plzeň – Brno)
180
1 100
198 000
x12 (Plzeň – Ostrava)
150
400
60 000
x21 (Pardubice – Praha)
100
700
70 000
x22 (Pardubice – Ostrava)
50
1 000
50 000
x33 (Olomouc – Ostrava)
110
500
55 000
x34 (Olomouc – Liberec)
110
1 200
132 000
Náklady celkem
xxx
xxx
565 000
Tab. 4 – Výpočet hodnoty účelové funkce. Z tabulky 4 je vidět, že celkové náklady přepravy pro řešení získané metodou severozápadního roku jsou 565 000 Kč. Pozn.: Tato metoda poskytuje v typickém případě velmi špatné řešení, nebere totiž při obsazování přepravy v úvahu vůbec náklady přepravy. Proto se tato metoda nedoporučuje používat. Indexní metoda (metoda maticového minima)
Příklad: Tato metoda jako první umístí přepravu do pole s minimálními jednotkovými přepravními náklady, v našem případě jde o pole Olomouc-Brno. Umisťujeme stejně jako v předešlé metodě.
Brno Plzeň
Praha
Ostrava
4
17
Pardubice
10
49
Liberec
8
Kapacity
Olomouc
3
5
Požadavky
Tab. 4.8 – Dopravní problém – indexní metoda Hodnota účelové funkce tohoto řešení je 438 000 Kč, což je lepší výsledek než v předchozí metodě.
Základní proměnná
Objem
Jednotkové
Podíl na
(přeprava odkud – kam)
přepravy
náklady
celk. náklady
x11 (Plzeň – Praha)
250
400
100000
x12 (Plzeň – Ostrava)
80
1700
136000
x21 (Pardubice – Ostrava)
40
1000
40000
x22 (Pardubice – Liberec)
110
800
88000
x33 (Olomouc – Brno)
180
300
54000
x34 (Olomouc – Ostrava)
40
500
20000
Náklady celkem
xxx
Xxx
438000
Indexní metoda poskytuje v typickém případě lepší řešení než metoda severozápadního rohu. Tuto skutečnost však nelze brát jako pravidlo. Negativním rysem indexní metody je, že sice zpočátku obsazuje přepravu do nejvýhodnějších polí, ale může se snadno stát, ze nakonec je třeba obsadit pole s nejméně výhodnými cenovými koeficienty. Metoda VAM (Vogelova aproximační metoda)
Příklad: Výpočet metodou VAM budeme ilustrovat na stejném příkladu. Tabulka 6 obsahuje 5 kroků výpočtu optimálního řešení. Tato metoda vychází z toho, že se pro každý řádek a sloupec dopravního problému vypočítají tzv. DIFERENCE, což je rozdíl mezi nejmenšími cenovými koeficienty v daném řádku či sloupci.. Vybere se pole, které má nejnižší cenový koeficient v řádku nebo sloupci s maximální diferencí. Může nastat situace, kdy existuje více řádků a sloupců se stejnou maximální diferencí. Pak vybereme pole, které má nejnižší sazbu z těch polí, které leží v řádcích a sloupcích
50
s těmito maximálními diferencemi.Po obsazení pole dojde k vyloučení řádku a sloupce. Přepočítáme diference a postup zopakujeme.
1 krok
Brno
Plzeň
Praha
Ostrava
4
17
Pardubice Olomouc
10 3
Liberec
Kapacity
Diference
Kapacity
Diference
Kapacity
Diference
Kapacity
Diference
8
5
Požadavky Diference
2 krok
Brno
Plzeň
Praha
Ostrava
4
17
Pardubice Olomouc
10 3
Liberec
8
5
Požadavky Diference
3 krok
Brno
Plzeň
Praha
Ostrava
4
17
Pardubice Olomouc
10 3
Liberec
8
5
Požadavky Diference
4 krok
Brno
Praha
Ostrava
Liberec
Plzeň
11
4
17
9
51
Pardubice
6
7
10
8
Olomouc
3
9
5
12
5 krok
Brno
Praha
Ostrava
Liberec
Plzeň
11
4
17
9
Pardubice
6
7
10
8
Olomouc
3
9
5
12
Požadavky Diference
Kapacity
Diference
Požadavky Diference Tab. 6 – Dopravní problém – metoda VAM (1. – 5. krok).
Hodnota účelové funkce tohoto řešení je 366000 Kč a je tedy výrazně lepší než řešení získané předchozími metodami. Základní proměnná
Objem
Jednotkové
Podíl na
(přeprava odkud – kam)
přepravy
náklady
celk. náklady
x11 (Plzeň – Praha)
250
400
100000
x12 (Plzeň – Liberec)
80
900
72000
x21 (Pardubice – Brno)
120
600
72000
x22 (Pardubice – Liberec)
30
800
24000
x33 (Olomouc – Brno)
60
300
18000
x34 (Olomouc – Ostrava)
160
500
80000
Náklady celkem
xxx
xxx
366000
Metoda VAM poskytuje v typickém případě nejlepší řešení.
Test optimality 52
Po nalezení výchozího základního řešení je třeba provést test optimality, který spočívá ve výpočtu redukovaných cenových koeficientů zij zij = ui + vj – cij, i = 1, 2, …, m, j = 1, 2, …, n. Pro každou základní proměnnou xij, která je v typickém případě kladná, platí podle této věty zij = ui + vj – cij = 0, tedy ui + vj = cij. Aby řešení, jehož optimalitu testujeme, bylo řešením optimálním, musí platit pro všechny nezákladní proměnné, že jsou jejich redukované ceny nekladné. Dostáváme tedy dvě podmínky optimality: Výpočetní realizace testu optimality: Pro každé obsazené pole sestavíme rovnici ui + vj = cij. Dostáváme tedy soustavu m+n-1 rovnic pro m+n neznámých. Tato soustava má jeden stupeň volnosti a proto libovolně jednu z neznámých položíme rovnu nule a ostatní dopočítáme. Duální proměnné vypočtené v prvním kroku použijeme pro ověření druhé podmínky optimality, která udává, že redukované ceny zij pro nezákladní proměnné musí být nekladné. Pokud tomu tak je, je testované základní řešení řešením optimálním.
Příklad: Test optimality ukážeme na výchozím základním řešení našeho příkladu, tabulka 5. Základní proměnné s jejich hodnotou a jim odpovídající rovnice ui + vj = cij uvádíme Test optimality 1.
pro základní proměnné (typicky xij > 0) musí platit
zij = ui + vj – cij = 0, 2 přehledu: v následujícím
ákl d í
ě
é(
x12 = 250
⇒
u1 + v2 = 4
x12 = 80
⇒
u1 + v3 = 17 ,
x12 = 40
⇒
u2 + v3 = 10 ,
x12 = 110
⇒
u2 + v4 = 8
,
x12 = 180
⇒
u3 + v1 = 3
,
x12 = 40
⇒
u3 + v3 = 5
.
0)
í l tit
,
Položíme-li například neznámou v3 = 0, potom pro ostatní duální proměnné dostáváme již snadno – u1 = 17, u2 = 10, u3 = 5, v1 = -2, v2 = - 13 a v4 = -2. Pro nezákladní proměnné vypočteme redukované ceny: x11 = 0 ⇒
z11 = u1 + v1 – c11 = 17 – 2 – 11 = 4
53
,
x14 = 0 ⇒
z14 = u1 + v4 – c14 = 17 – 2 – 9 = 6
,
x21 = 0 ⇒
z21 = u2 + v1 – c21 = 10 – 2 – 6 = 2
,
x22 = 0 ⇒
z22 = u2 + v2 – c22 = 10 – 13 – 7 = -10 ,
x32 = 0 ⇒
z32 = u3 + v2 – c32 = 5 – 13 – 9 = -17
,
x34 = 0 ⇒
z34 = u3 + v4 – c34 = 5 – 2 – 12 = -9
.
Z uvedeného přitom plyne, že testované řešení není optimální, protože je zde test optimality porušen u proměnných x11, x14 a x21, u kterých jsou redukované ceny kladné. 3. Výpočet nového základního řešení
Volba vstupující proměnné Provádí se stejně jako u simplexovy metody. Zvolí se ta proměnná, která nejvíce porušuje test optimality. Volí se tedy podle maximálního kladného redukovaného cenového koeficientu. Zrs = max (zij ) zij > 0 Pokud toto určení není jednoznačné, zvolí se vstupující proměnná libovolně z proměnných, které přicházejí v úvahu. Vstupující proměnná určuje klíčové pole. V našem případě je vstupující proměnná x14 , protože redukovaná cena u této proměnné je 6, a porušuje tak nejvíce test optimality.
Volba vystupující proměnné Je třeba nejdříve zkonstruovat tzv. uzavřený kruh. Je to posloupnost obsazených polí, která začíná a současně končí v klíčovém poli. Tento kruh je určen jednoznačně. Po určení uzavřeného kruhu označíme jeho prvky střídavě symbolem +t a –t. V klíčovém poli je přitom symbol +t. Vystupující proměnná je určená minimální hodnotou xij , které jsou označeny symbolem –t. Pokud je polí s touto minimální hodnotou více, zvolí se vstupující proměnná libovolně z nich. Hodnota t určuje současně hodnotu nově vstupující proměnné. V našem případě vychází jako vystupující proměnná x13 a hodnota t =80.
Přepočet tabulky dopravního problému K polím označeným +t se jednoduše hodnota t přičte a naopak od polí označených –t se odečte. Ostatní pole zůstanou beze změny. V každém kroku výpočtu musí zůstat zachován počet základních proměnných m+n-1. Změnu hodnoty účelové funkce pro vstupující proměnnou xrs lze vypočítat podle vztahu ∆z(xrs) = -t* Zrs . V našem případě dostáváme ∆z(x14 ) = -80*6 = -480 – hodnota účelové funkce se sníží o 48000 Kč. 54
V našem případě je vstupující proměnou tedy x14 . Klíčové pole a prvky uzavřeného kruhu jsou v tabulce zvýrazněny. Vystupující proměnná je zřejmě x13 –hodnota t = min (80,110) = 80. Hodnota účelové funkce se v prvním kroku snížila z hodnoty 438000 Kč o 48000 Kč a její nová hodnota je 390000 Kč. V novém řešení opět realizujeme test optimality. V našem případě je porušen pouze u proměnné x21 , jejíž cenový koeficient je roven 2 (má být záporný). Je to teda nová vstupující proměnná. Vystupující proměnnou je x23 – hodnota t = min(120,180) = 120. Změna hodnoty účelové funkce nového řešení je rovna ∆z(x21 )= -120*2 = -240 – nová výše nákladů je tedy 390000 – 24000 = 366000 Kč. Přepočteme-li znovu tabulku dosáhneme již optimálního řešení, protože všechny nezákladní proměnné již budou záporné. Všimněte si, že se jedná o řešení, které je shodné s výchozím základním řešením vypočteným metodou VAM.
Brno
Praha
Ostrava
Liberec
Plzeň
4
4
17
6
Pardubice
2
-10
10
8
Olomouc
3
-17
5
-9
Brno
Praha
Ostrava
Liberec
-2 11
4
-6 17
9
Kapacity
ui
Kapacity
ui
Požadavky vj
Plzeň Pardubice
250 -4 7
2 6
Olomouc
3
10 120 5
-11 9
180
40 +
80 8
330
30 -9 12
150
1
220
6
Požadavky 180
250
160
110
9
4
11
9
vj
55
700
0
Brno Plzeň
-4 11
Pardubice 6 Olomouc
3 60
Praha 4 250 -4 7 -9 9
Ostrava -8 17 -2 10 5 160
Liberec 9
Kapacity
330
ui
0
8 30 -7 12
150
1
220
4
700
Požadavky 180
250
160
110
7
4
9
9
vj
Vyrovnaný dopravní problém má vždy optimální řešení. Optimální řešení může být přitom buď jediné nebo alternativní. Jediné řešení má dopravní problém v případě, že jsou všechny redukované cenové koeficienty u nezákladních proměnných záporné. Pokud je alespoň jeden z těchto koeficientů roven nule má dopravní problém alternativní řešení.
56