Operační výzkum Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační číslo projektu: CZ..7/2.2./28.326
Přiřazovací problém Přiřazovací problém = úloha optimálního přiřazení - např. strojů na pracovišti, - pracovišť k pracovníkům, - zákazníků k poskytovatelům služeb, -... Jeden činitel. druhu je vždy přiřazen právě jednomu činiteli 2. druhu. Nejprve se tedy seznámíme s problematikou řešení minimalizačních úloh, následně se budeme věnovat i řešení maximalizačních úloh.
Př. (motivační): Podnik má k dispozici 3 jeřáby, které má přepravit na 3 pracoviště (každý jeřáb právě na jedno pracoviště). Vzdálenosti v km mezi stanovišti jeřábu J i, i =, 2, 3, a pracovišti P j, j =, 2, 3, jsou uvedeny v tabulce: c ij P P 2 P 3 J 4 3 J 2 2 6 J 3 4 5 3 Nalezněte optimální řešení, tj. takový plán přepravy, při kterém bude celkový počet ujetých kilometrů minimální.
Řešení:. Matematický model Je třeba stanovit, který z jeřábů má být přepraven na které pracoviště tak, aby v součtu přepravní vzdálenost všech jeřábů byla minimální. Zavedeme bivalentní proměnnou x ij, i =, 2, 3, j =, 2, 3, přičemž x ij =, jestliže i-tý jeřáb je přiřazen na j-té pracoviště, x ij =, jestliže i-tý jeřáb není přiřazen na j-té pracoviště. Řešením tedy budeme rozumět čtvercovou matici třetího (obecně n-tého) řádu x x 2 x 3 X = x 2 x 22 x 23 A. x 3 x 32 x 33
Každý jeřáb má být přiřazen právě na jedno pracoviště, proto v každém řádku matice X musí být právě jedna jednička a n nul. Každému pracovišti má být přiřazen právě jeden jeřáb, takže každý sloupec matice X musí obsahovat právě jednu jedničku a n nul. V souladu s tím můžeme psát omezující podmínky ve tvaru: resp. J : x + x 2 + x 3 =, J 2 : x 2 + x 22 + x 23 =, J 3 : x 3 + x 32 + x 33 =, P : x + x 2 + x 3 =, P 2 : x 2 + x 22 + x 32 =, P 3 : x 3 + x 23 + x 33 =. () (2)
Podmínky (), resp. (2) lze úsporněji zapsat ekvivalentním způsobem následovně: 3X x ij =, i =, 2, 3, (3) resp. j= 3X x ij =, j =, 2, 3. (4) i= Účelová funkce zde vyjadřuje součet přepravních vzdáleností. Má tvar: z = c x + c 2x 2 + c 3x 3 + c 2x 2 + + c 33x 33 min. Zkráceně: z = 3X 3X c ijx ij min. (5) i= j=
Obecně jde o to, přiřadit n činitelů n jiným činitelům tak, aby součet příslušných sazeb byl minimální (resp. maximální). OBECNÝ MATEMATICKÝ MODEL: P z = n np c ijx ij min. i= j= 9 np x ij =, i =, 2,..., n >= j= np celkem 2n omezení (rovnic), x ij =, j =, 2,..., n >; i= x ij =... přiřazení... nepřiřazení n 2 proměnných. n proměnných nabývá hodnoty, n 2 n proměnných je rovno. Základních proměnných je v úloze 2n. Tedy, stupeň degenerace, je roven n ). Pro řešení se využívá algoritmus nazývaný maďarská metoda.
Postup při užití maďarské metody Předpokládáme, že řešená úloha je minimalizační. Provedeme redukci sazeb (c ij) matice: i) od každého řádku matice odečteme nejmenší sazbu v tomto řádku, ii) od každého sloupce matice odečteme nejmenší sazbu v tomto sloupci. 2 V redukované matici sazeb vyhledáme tzv. nezávislé nuly, tj. nuly, z nichž se každá nachází v jiném řádku a jiném sloupci. Budeme je označovat pomocí horního indexu, tj.. V dané matici je třeba najít maximální počet nezávislých nul, proto postupujeme následovně: i) Za nezávislou nulu zvolíme tu, která se nachází na svém řádku či sloupci samostatně. ii) Vynecháme řádky a sloupce, na jejichž průsečíku se označené nuly nachází a ve vzniklé submatici pokračujeme bodem 2.i) iii) Pokud každý řádek či sloupec obsahuje víc než jednu neoznačenou nulu, vybereme řádek či sloupec s nejmenším počtem nul a ve vybraném řádku či sloupci libovolnou nulu zvolíme za nezávislou. Pokračujeme bodem 2.ii) 3 Podaří-li se vám vybrat n nezávislých nul, obsadíme místa matice, kde se nezávislé nuly nacházejí, hodnotou, ostatní pole hodnotou. Získali jsme optimální řešení přiřazovacího problému. Hodnota účelové funkce je rovna součtu původních sazeb příslušných místům obsazených jedničkami.
Postup při užití maďarské metody 4 Je-li počet nezávislých nul menší než n, zjistíme pomocí tzv. Königovy věty, zda jsme vybrali maximální možný počet nezávislých nul. KÖNIGOVA VĚTA: Maximální počet nezávislých nul v matici je roven minimálnímu počtu krycích čar, jimiž je možné pokrýt všechny nulové sazby dané matice. Za tím účelem je potřeba všechny nulové sazby matice pokrýt minimálním počtem krycích čar. KONSTRUKCE KRYCÍCH ČAR: i) Řádky a sloupce, ve kterých neleží nezávislé nuly, označíme *. Nulovými sazbami takto označených řádků (resp. sloupců) vedeme svislé (resp. vodorovné) čáry. ii) Vynecháme řádky a sloupce označené * a řádky a sloupce pokryté čarami. Ve vzniklé submatici pokračujeme krokem 4.i). iii) Zůstanou-li nepokryté pouze řádky a sloupce s nezávislými nulami, vedeme minimální počet krycích čar i přes tyto nuly. 5 Je-li počet nalezených nezávislých nul roven počtu krycích čar, jimiž jsme pokryli všechny nulové sazby (tj. vybrali jsme maximální počet nezávislých nul), přistoupíme k další redukci sazeb matice: i) z nepokrytých polí vybereme minimální sazbu, ii) hodnotu této sazby odečteme od všech prvků nepokrytých krycími čarami, a přičteme k prvkům, kde se krycí čáry kříží, iii) sazby v polích pokrytých jedinou krycí čarou ponecháme nezměněny. 6 Celý postup opakujeme od 2. bodu (opět hledáme nezávislé nuly).
Př: Nalezněte všechna optimální řešení motivačního přiřazovacího problému s jeřáby. Řešení: Začneme redukcí matice sazeb dle bodu. algoritmu maďarské metody. Nejprve od sazeb každého řádku odečteme nejmenší sazbu v daném řádku. Protože ještě ve druhém sloupci není nulová sazba, odečteme od sazeb tohoto sloupce jedničku (nejmenší sazba tohoto sloupce). 4 3 2 6 4 5 3 A 3 3 2 5 2 A 3 5 V poslední matici již je v každém řádku alespoň jedna nula a v každém sloupci je alespoň jedna nula. Dle bodu 2. nalezneme nezávislé nuly (označíme ). V prvním řádku je jediná nula, proto ji můžeme označit, podobně ve druhém sloupci je jediná nula, i tu označíme za nezávislou. Samozřejmě dbáme na pravidlo, že nelze označit za nezávislé dvě nuly v jednom řádku ani v jednom sloupci. 3 5 A 3 5 A 3 5 A A 2 6 A
3 5 A 3 5 A 3 5 A 2 6 Označíme * řádky a sloupce, v nichž nejsou nezávislé nuly a vyznačíme krycí čáry, tj. postupujeme dle bodu 4.i). Počet krycích čar (jimiž jsme pokryli všechny nulové sazby) je roven počtu nalezených nezávislých nul. Tím jsme si ověřili, že jsme skutečně vybrali maximální počet nezávislých nul. Nejmenší z nepokrytých sazeb má hodnotu. Provedeme redukci matice sazeb podle bodu 5. V této znovu redukované matici opět hledáme nezávislé nuly. Tentokrát jsme již našli tři (tolik, kolik je řád matice) nezávislé nuly. A dokonce jsme objevili tři trojice nezávislých nul (odlišeny indexem). 2 6 A 2 3 2 23 6 2 3 Úloha má proto tři optimální řešení. A A
Úloha má proto tři optimální řešení: X opt, = A, z(x opt,) = + 2 + 4 = 7, X opt,2 = A, z(x opt,2) = + + 5 = 7, X opt,3 = A, z(x opt,3) = + 3 + 3 = 7.
Poznámka: Celý postup budeme zapisovat stručněji. Řešení předchozího příkladu by vypadalo například takto: 4 3 3 2 3 2 6 A 5 A 5 A 4 5 3 3 2 2 3 2 23 6 A 2 3
Přiřazovací problém maximalizačního typu Dosud jsme se věnovali přiřazovacím úlohám minimalizačního typu. Nejsou však vyjímkou přiřazovací problémy maximalizačního typu. Převádíme je na minimalizační přiřazovací problém, který má stejnou množinu všech optimálních řešení jako původní maximalizační úloha. Tento převod na úlohu minimalizační provádíme tak, že všechny prvky matice vynásobíme číslem ( ). Dále postupujeme maďarskou metodou.
Př: Uvažujme firmu, v níž čtyři pracovníci P i, i =, 2, 3, 4, mohou vyrábět čtyři druhy výrobků V j, j =, 2, 3, 4 (podle toho, na kterou ze čtyř výrobních linek jsou pracovníci přiřazeni). Počet c ij výrobků V j, které je pracovník P i schopen za hodinu vyrobit je uveden v tabulce. Určete, které výrobky bude vyrábět který pracovník, aby celkový počet výrobků vyrobených za hodinu byl maximální. c ij V V 2 V 3 V 4 P 5 7 23 P 2 6 5 7 5 P 3 2 5 P 4 5 2 5
Řešení: B 5 7 23 6 5 7 5 2 5 5 2 5 C A ( ) B 5 7 23 6 5 7 5 2 5 5 2 5 ( 23) C ( 7) A ( 2) ( 2) B B 8 6 3 2 2 5 5 5 2 2 8 2 8 4 3 2 2 5 2 C A C A B 8 4 8 3 3 3 C A 3
Úloha má dvě optimální řešení: X opt, = B C A, z(xopt,) = 23 + 5 + 2 + 5 = 73 ks/hod., X opt,2 = B C A, z(xopt,2) = 23 + 5 + 2 + 5 = 73 ks/hod.