Algoritm maghiar

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În matematică , metoda maghiară [1] [2] , sau algoritmul maghiar , este o metodă de optimizare combinatorie care rezolvă problema de atribuire în timp polinomial . Metoda a fost dezvoltată de Harold Kuhn în 1955 , anticipând metodele dual-primale [3] ulterioare, și este numită „maghiară”, deoarece se bazează [4] [5] pe lucrările lui Dénes König [6] și Jenő Egerváry [7] ] . În 2006, a fost descoperită o lucrare a lui Carl Jacobi , datând din secolul al XIX-lea , care rezolvă aceeași problemă [8] . Complexitatea algoritmului a fost , dar s-a demonstrat că prin modificarea ușoară a algoritmului este posibil să se obțină o complexitate de calcul egală cu .

Definirea problemei

Pictogramă lupă mgx2.svg Același subiect în detaliu: Problema atribuirii .

Problema de atribuire necesită asocierea perechilor de elemente preluate din două seturi diferite. Având în vedere că un cost este asociat fiecărei perechi, dorim să minimizăm costul total. De exemplu: luând în considerare un set de angajați, un set de sarcini care trebuie îndeplinite și timpul pe care fiecare sarcină l-ar necesita dacă este efectuat de un anumit angajat, doriți să asociați fiecare angajat cu o sarcină pentru a minimiza timpul total necesar.

Formal dat o matrice a costurilor , vrem să găsim o permutare din pe care o minimizezi .

Algoritm

Problema este codificată folosind un grafic bipartit , unde vârfurile sunt elementele care trebuie asociate, iar arcele reprezintă posibilele alegeri de perechi. Fiecare arc are un cost asociat. În mod formal, se ia în considerare graficul unde U și V sunt cele două seturi de elemente care trebuie asociate și E este setul de arce.

Algoritmul pleacă de la orice soluție posibilă, chiar parțială, a problemei și încearcă să o îmbunătățească verificând prezența elementelor neatribuite.

La fiecare iterație, algoritmul încearcă să găsească o cale care crește numărul de elemente din soluție. Prima iterație începe de la un element de nealocat. Există două posibilități:

  1. există un arc care leagă elementul u de un element nu face parte din soluție
  2. există doar arce care conectează elementul u la elementele lui V deja atribuite

În primul caz, atribuirea dintre u și v se adaugă la soluție.

Interpretarea matricială a algoritmului

Dat fiind o matrice pătrată de ordine reprezentând matricea de cost a problemei de atribuire, algoritmul funcționează după cum urmează

  1. Pentru fiecare rând, găsiți minimul și scădeți-l din toate elementele rândului;
  2. Pentru fiecare coloană, găsiți minimul și scădeți-l din toate elementele coloanei;
  3. Acoperiți cu cel mai mic număr de linii toate zerourile care s-au format cu scăderile anterioare;
  4. Dacă numărul minim de linii necesar este egal cu este posibil să se determine o atribuire optimă, altfel se continuă cu pasul 5;
  5. Identificați minimul dintre elementele care nu sunt acoperite de linii, scădeți-l din elementele care nu sunt acoperite și adăugați-l la elementele care sunt intersecții ale două linii. Reveniți la pasul 3.

Pentru a determina cel mai mic număr de linii necesare pentru a acoperi toate zerourile formate (pasul 3) se poate utiliza următorul algoritm:

  1. Determinați o sarcină (chiar incompletă, adică o sarcină în care poate exista un rând care nu este atribuit niciunei coloane);
  2. Marcați liniile neatribuite;
  3. Pentru fiecare rând marcat neexaminat încă, marcați coloanele care au un zero pe acel rând;
  4. Pentru fiecare coloană nemarcată, marcați rândurile care au o alocare acelor coloane;
  5. Repetați de la pasul 3 până când toate liniile marcate care nu au fost încă vizitate sunt epuizate;
  6. Numărul minim de linii se obține selectând coloane marcate și linii nemarcate.

Exemplu

Având în vedere următoarea matrice de costuri

Minimele rândurilor sunt (de sus în jos): 9, 3, 13, 4, 10. Scăzându-le din rândurile respective obținem următoarea matrice:

Minimele coloanei sunt (de la stânga la dreapta): 0, 0, 0, 6, 0. Scăzându-le din coloanele respective obținem:

O atribuire (incompletă) este determinată prin derularea rândurilor și atribuirea acestora la prima coloană posibilă. Adică, se determină următoarea atribuire (elementele atribuite sunt cu caractere aldine):

Acum continuăm cu determinarea numărului minim de linii pentru a acoperi elementele nule ale matricei. Linia 3 care nu este atribuită este marcată. Acest rând are un zero în coloana 3 (care este marcată). Această coloană are o atribuire pentru rândul 1 (care este marcat). Rândul 1 (care a fost marcat în iterația anterioară) este acum examinat. Acest rând are un zero în coloana 3 care este deja marcat. Nu există alte coloane marcate neexaminate și rânduri marcate neexaminate. Numărul minim de linii este dat de coloanele marcate (coloana 3) și liniile nemarcate (liniile 2, 4, 5) linii. Nu este posibil să se determine o sarcină completă și să se treacă la pasul 5.

Se determină minimul dintre elementele care nu sunt acoperite de linii, adică minimul următoarei matrice obținut prin eliminarea elementelor acoperite de linii:

care este 9. Această valoare trebuie scăzută din elementele care nu sunt acoperite de linii și adăugată elementelor de trecere a două linii. Cu alte cuvinte, obținem:

O atribuire (posibil incompletă) este acum determinată prin derularea rândurilor și atribuirea primei coloane posibile. Se obține

Toate liniile sunt atribuite, deci nu sunt marcate linii. Liniile necesare pentru a acoperi toate elementele nule sunt date de coloanele marcate (niciuna) și liniile nemarcate (toate) și sunt este deci posibil să atribuiți toate liniile și atribuirea este dată de .

Notă

Bibliografie

  • ( LA ) Jacobi, CGJ și Borchardt, CW , De investigandoorder systematis aequationum Differentialium vulgarium cujuscunque , în Jurnalul lui Crelle , vol. 64, 1865, pp. 297-320. Adus pe 19 noiembrie 2013 .
  • ( DE ) Dénes König, Theorie der endlichen und unendlichen graphen , Leipzig, Akademische Verlagsgesellschaft MBH, 1936.
  • ( HU ) Egerváry, Jenő, Matrixok kombinatorius tulajdonságairól , în Matematikai és Fizikai Lapok , vol. 38, 1931, pp. 16-28.
    • tradus în ( EN ) Kuhn, Harold W., Despre proprietățile combinatorii ale matricilor , în Logistics Papers , vol. 11, n. 4, 1955, pp. 1-11.
  • ( EN ) Kuhn, HW, Metoda maghiară pentru problema atribuirii , în jurnalul de rezoluție navală. Quart. , vol. 2, 1955, pp. 83-97.
  • ( EN ) Kuhn, HW, Variante ale metodei maghiare pentru problema atribuirii , în Naval Res. Log. Quart. , vol. 3, 1956, pp. 253-258.
  • ( EN ) GB Dantzig, LR Ford și DR Fulkerson,Un algoritm primal-dual pentru programe liniare , în HW Kuhn, AW. Tucker (eds), Inegalități liniare și sisteme conexe , Princeton, Princeton University Press, 1956, pp. 171 -181.
  • ( EN ) HW Kuhn, Despre originea metodei maghiare pentru problema atribuirii , în JK Lenstra, AHG Rinnooy Kan, A. Schrijver (ed.), History of Mathematical Programming , Amsterdam, North-Holland, 1991, pp. 77-81, ISBN 0-444-88818-7 .
  • ( EN ) Rainer Burkard, Mauro Dell'Amico și Silvano Martello, Linear sum assignment problem ( PDF ), în Assignment Problems - Revised Reprint , Philadelphia, Society for Industrial and Applied Mathematics, 2012, p. 79, ISBN 978-1-61197-222-1 .
  • S. Martello, „Jeno Egerváry: de la originile algoritmului maghiar la comunicarea prin satelit”, Central European Journal of Operations Research 18, 47–58, 2010
Matematica Portalul de matematică : accesați intrările Wikipedia care se ocupă cu matematica