Maďarská metoda Kirill Šustov Michal Bednář Stanislav Běloch Hana Teubelová Stanislav Běloch
Maďarská metoda, neboli Kuhnův algoritmus, se používá při řešení přiřazovacího problému. Tato metoda není příliš citlivá na degeneraci a byla odvozena na základě teorie grafů.
Úlohu lze matematicky formulovat takto: Nalézt minimum funkce: za podmínek: xij = 1 pro j = 1,2,...,n xij = 1 pro i = 1,2,...,n xij = 1 nebo xij = 0 pro i,j = 1,2,...,n
Základní pojmy: Nulový prvek nezávislé matice nazveme nezávislou nulou, je-li tento nulový prvek jediný ve svém řádku i sloupci. Soustava krycích čar je soustava vodorovných a svislých přímek, kterými je možno "pokrýt" všechny nulové prvky čtvercové matice Redukce čtvercové matice spočívá v přičtení libovolných čísel k prvkům jednotlivých řádků a v přičtení libovolných čísel k prvkům jednotlivých sloupců.
Maďarská metoda je založena na této myšlence: místo původní úlohy řešit úlohu s maticí sazeb redukovanou tak, aby všechny sazby zůstaly nezáporné a aby v každém řádku a v každém sloupci byla alespoň jedna sazba nulová. Existuje-li řešení, ve kterém kladným složkám odpovídají nulové sazby, je toto řešení optimální. Neexistuje-li takové řešení, provede se další redukce matice sazeb, atd. Po konečném počtu kroků se dospěje k optimálnímu řešení
Příklad min f = Sxij.cij
Počáteční redukci matice sazeb provedeme tak, že v každém sloupci(řádku) vyhledáme nejmenší prvek a odečteme ho od všech prvků téhož řádku(sloupce).
V matici vyhledáme řadu, tj. řádek nebo sloupec ( resp V matici vyhledáme řadu, tj. řádek nebo sloupec ( resp. jednu z řad ), s nejmenším počtem nul a jednu z nul této řady dáme do rámečku. Ostatní nuly nacházející se v tomtéž řádku (sloupci) jako nula v rámečku ( nezávislá nula ) přeškrtneme. Ze zbývajících řad opět vybereme řadu obsahující nejmenší počet nul a celý postup opakujeme. Takto postupujeme, dokud je možné dávat nuly do rámečku ( vybírat nezávislé nuly ).
Vztah mezi počtem nezávislých nul a počtem krycích čar udává tzv. Königova věta: Minimální počet krycích čar, jimiž je možno pokrýt všechny nulové prvky, je roven maximálnímu počtu nezávislých nul, které je možno v dané matici vybrat.
Soustavu minimálního počtu krycích čar, jimiž lze pokrýt všechny nulové prvky, sestavíme tímto způsobem: Označíme si řádek(sloupec) ve kterém je nezávislá nula a také alespoň jedna škrtnutá nula. Pokud v tabulce zbyly pouze nezávislé nuly, pak můžeme označit řádek, ale i sloupec.
Pokud je minimální počet krycích čar menší než n ( nelze vybrat n nezávislých nul ), provedeme další redukci matice sazeb tímto způsobem: Zjistíme nejnižší sazbu mezi prvky, které nejsou pokryty a odečteme ji od všech těchto nepokrytých prvků. Tuto sazbu přičteme k prvkům. Které jsou pokryty dvakrát. Prvky pokryté jednou neměníme.
Postup opakujeme od etapy 2.
Řešení: S1 P2 S2 P4 min f = 72 S3 P1 S4 P3 Pokud je minimální počet krycích čar rovno n (máme n nezávislých nul ), našli jsme optimální řešení. Řešení: S1 P2 S2 P4 S3 P1 S4 P3 min f = 72 Optimální řešení zřejmě nemusí být jediné. ( Vybereme-li n nezávislých nul všemi možnými způsoby, dostaneme všechna optimální řešení. )
Maximalizace Maximalizační matici vytvoříme z minimalizační tak, že každý starý prvek vynásobíme –1 a přičteme k němu maximální sazbu prvku v řádku(sloupci). Toto číslo nám nahradí starý prvek. Tímto způsobem musíme přepočítat celou matici. Dále pokračujeme jako u minimalizace An = -As + max(aij)