Mađarski algoritam

Mađarski algoritam je kombinatorijalni optimizacioni algoritam koji rešava problem dodele koji ima složenost subeksponencijalno vremena i koji iščekuje kasnije primal-dual metode. Razvio ga je i objavio 1955. godine Harold Kan, koji ga je nazvao Mađarski algoritam jer je on svoj rad zasnovao na radu dvojice mađarskih matematičara: Dénes Kőnig and Jenő Egerváry.[1][2]

Džejms Mankres je proceni o aloritam 1957. i uvideo da je vremensa složenost subeksponencijalno vreme. Od tada je algoritam poznat i kao Kan-Mankresov algoritam ili Mankresov algoritam dodele.[3] Teorija kompleksnosti ovog algoritam je bila O(n^4), ali su Edmonds i Karp, i odvojeno od njih Tomicava uvideli da može da dostigne i kubnu složenost. Ford i Falkerson su unapredili metodu do opšteg problema transportacije. 2006. otkriveno je da je Karl Gustav Džakobi rešio taj problem u 19. veku, i da je rešenje objavljeno 1890. na latinskom jeziku.

Jednostavno objašnjenje problema dodele uredi

U ovom primeru postoje tru radnika: Pera, Mika i Žika. Jedan od njih mora da očisti toalet, jedan da briše podove, i jedan da pere prozore, ali sva trojica traže različitu platu za različite probleme. Problem je naći najjeftiniji način da se raspodeli posao. Problem može da se predstavi matricom cena. Na primer:

Brisanje toaleta Brisanje podova Brisanje prozora
Pera $2 $3 $3
Mika $3 $2 $3
Žika $3 $3 $2

Mađarska metoda, kada se primeni na tabelu iznad, daje minimalnu cenu, koja bi bila 6$ tako što bi Pera prao toalet, Mika brisao podove, a Žika prozore.

Podešavanje uredi

Uzimamo nenegativnu kvadratnu matricu, gde je element u i-toj koloni i j-tom redu predstavlja cenu dodele j-tog posla i-tom radniku. Moramo da nađemo posao radnicima koji će nas najmanje koštati. 

Algoritam se može jednostavnije objasniti ako formulišemo problem pomoću bipartitivnog grafa. Ako imamo potpuni bipartitivni graf G = (S, T, E) sa n radnika grana (S) i n poslova grana (T), gde svaka grana ima nenegativnu cenu c(i, j). Hoćemo da nađemo najbolje poklapanje sa minimalnom cenom.

Sada pozivamo funkciju y: (S U T) -> R čiji je potencijal y(i) + y(j) <= c(i, j) za svako i koje pripada S, j koji pripadaju T. Može se primetiti da je cena savršenog poklapanja  bar vrednost svakog potencijala. Mađarska metoda nalazi savršeno poklapanje i potencijal sa jednakim cenama koji dokazuje optimalnost.

Algoritam predstavljen preko bipartitivnog grafa uredi

Tokom rada algoritma čuvamo potencijal y i orijentaciju Gy koja ima osobinu da su sve grane orijentisane od T do S čine poklapanje M. Inicijano y je 0 svuda, i sve grane su orijentisane od S do T, a M je prazno. U svakom korak uili menjamo y tako što mu vrednost povećavamo ili menjamo orijantaciju da bismo postigli poklapanje sa više grana. Završili smo ako je M savršeno poklapanje.

U generalnom koraku, neka su   and   čvorovi koji nisu pređeni sa M (tako se   sastoji od čvorova u S bez ulaznih grana i   koji se sadrži od čvorova iz T bez izlaznih grana). Neka je   set čvorova koji mogu da se dohvate u    od   pomoću usmerene putanje koja prati samo grane koje su zbijene. Ovo može da se izračuna pomoću pretrage u dubinu.

Ako je   neprazan, onda okreni orijentaciju putanje usmerenog grafa    od   do  . Tako je veličina odgovarajućih poklapanja povećana za 1.

Ako je   prazan, onda neka je .   pozitivan jer nema zbijenih grana u   i   . Povećaj y by   na čvorovima   i smanji y za   na čvoroima  . Rezultujuće y je i dalje potencijal. Graf   se menja, ali i dalje sadrži M. Orijentišemo nove grane od S do T. Po definiciji   set Z čvorova koji mogu da se dohvate od   se povećava (napomena je da se broj zbijenih grana ne mora povećati).

Ponavljamo ove korake sve dok M jeste savršeno poklapanje, i tom slučaju dobijamo minimalnu cenu za dodelu. Složenost ove verzije je O(n^4): M se povećava n puta, a u fazi gde je M nepromenjeno, postoji najviše n potencijalnih promena. Vreme koje je potrebno za potencijalnu promenu je O(n^2).

Interpretacija algoritma preko matrica uredi

Ako imamo n radnika i zadataka, i nxn matricu koja sadrži cene dodele nekog posla svakom radniku, tražimo najbolju varijantu.

Prvo se problem zadaje kao matrica ispod:

 

gde su a, b, c, i d radnici koji moraju da rade poslove 1, 2, 3, 4. a1, a2, a3, i a4 obeležavaju šta bi se desilo kad bi radnik a, radio određene zadatke. Isto važi i za ostale simbole takođe. Matrica je kvadratna, tako da svaki radnik može da obavlja jedan posao.

Korak 1

Onda radimo operacije sa kolonama. Da bismo izveli to, najmanji od ai se umanjujeod vsakog element au tom redu. To će dovesti do bar jedne nule u tom redu. Ova radnja se obavlja za sve kolone. Sada imamo matricu sa najmanje jednom nulom po jednom redu. Sada pokušavamo da dodelimo poslove agentima tako da svaki agent radi samo jedan posao. Ovo je ilustrovano ispod:

0 a2' a3' a4'
b1' b2' b3' 0
c1' 0 c3' c4'
d1' d2' 0 d4'

Nule koje su opisane kao 0’ su dodeljeni poslovi

Korak 2

Ponekad se može ispostaviti da je matricu u ovoj gazi neupotrebljiva za operaciju dodele, kao što je prikazano u primeru ispod.

0 a2' a3' a4'
b1' b2' b3' 0
0 c2' c3' c4'
d1' 0 d3' d4'

U slučaju iznad, nijedna dodela ne može da se izvrši. Napomena je da se u zadatak 1 efikasno odradio za agenta a i c. Ne mogu obojica da dobiju isti zadatak. Takođe treba napomenuti da niko ne obavlja zadatak 3 efikasno. Da bi se ovo prevazišlo, ponavljamo proceduru iznas po svim kolonama, i onda opet gledamo da li su dodele moguće.

U većini slučajeva će ovo da da rezultat, ali ako ne, proces se opet ponavlja itd.

Korak 3

Sve nule u matrici moraju da budu prođene tako što ćemo markirati što manje kolona i redova je moguće. Sledeća procedura obavlja to:

Prvo, dodeljujemo što više zadataka je moguće.

  • Red 1 ima jednu nulu, znači da je dodeljen. Nula u redu 3 je precrtana jer je u istoj koloni 
  • Red 2 ima jednu nulu, i onda je dodeljena 
  • Jedina nula u redu 3 je precrtana, tako da ništa nije dodeljeno 
  • Red 4 ima dve neprecrtane nule. Bilo koja od njih može biti dodeljena, a druga nula će biti precrtana 

Alterantivno, nula u redu 3 može biti dodeljena, što bi prouzrokovalo nulu u prvom redu da bude precrtana.

0' a2' a3' a4'
b1' b2' b3' 0'
0 c2' c3' c4'
d1' 0' 0 d4'

A sad deo sa crtanjem:

  • Obeležimo sve redove koji nemaju dodele 
  • Obeležimo sve neoznačene kolone koje imaju nule u novoobeleženim redovima 
  • Obeležimo sve redove koje imaju kolone sa prethodne tačke 
  • Ponavljamo za sve neoznačene redove 
×
0' a2' a3' a4' ×
b1' b2' b3' 0'
0 c2' c3' c4' ×
d1' 0' 0 d4'

Sada crtamo linije kroz sve obeležene kolone i neobeležene redove

×
0' a2' a3' a4' ×
b1' b2' b3' 0'
0 c2' c3' c4' ×
d1' 0' 0 d4'

Ovo je samo jedan način za crtanje matrice. Postoji još nekoliko dokazanih i proverenih načina sa istim ishodom

Korak 4

Sada uklanjamo obeležene redove i kolone. Onda će matrica izgledati ovako.

 

Vratimo se na korak 1 i ponaljavmo proces dok matrica nije prazna.

Bibliografija uredi

  • R.E. Burkard, M. Dell'Amico, S. Martello: Assignment Problems (Revised reprint). SIAM, Philadelphia (PA.). 2012. ISBN 978-1-61197-222-1.
  • M. Fischetti, "Lezioni di Ricerca Operativa", Edizioni Libreria Progetto Padova, Italia, 1995.
  • R. Ahuja, T. Magnanti, J. Orlin, "Network Flows", Prentice Hall, 1993.
  • S. Martello, "Jeno Egerváry: from the origins of the Hungarian algorithm to satellite communication". Central European Journal of Operations Research 18, 47–58, 2010

Reference uredi

  1. ^ Harold W. Kuhn, "The Hungarian Method for the assignment problem", Naval Research Logistics Quarterly, 2: 83–97, 1955. Kuhn's original publication.
  2. ^ Harold W. Kuhn, "Variants of the Hungarian method for assignment problems", Naval Research Logistics Quarterly, 3: 253–258, 1956.
  3. ^ J. Munkres, "Algorithms for the Assignment and Transportation Problems", Journal of the Society for Industrial and Applied Mathematics, 5(1):32–38, 1957 March.

Spoljašnje veze uredi

Implementacije uredi

(Napomena: neće svi algoritmi ispod da zadovolje  O(n^3) složenost)