Papp Róbert, Blaskovics Viktor, Hantos Norbert Magyar módszer Táblázatra és gráfra Papp Róbert, Blaskovics Viktor, Hantos Norbert
A probléma Egy gyakorlati probléma: adott N darab gép, és N munkás. Minden munkás tudja kezelni az összes gépet, de más-más költséggel. Melyik munkás melyik géphez kerüljön, hogy az összköltség minimális legyen? 2 3 Gépek 1 1 Munkadíjak 2 5 9 8 4 6 3 7 Munkások 2 3 1
A probléma definiálása Gráf - minimális súlyú párosítás Adott G = (V,E,s) egyszerű (irányítatlan) teljes páros (|V|/2-reguláris) élsúlyozott gráf, ahol s: E->R függvény, az éleket súlyozza. V = A U F alsó és felső pontok (diszjunkt) halmaza. |A| = |F| = N Keressünk a gráfban minimális összsúlyú teljes párosítást! Mátrix - hozzárendelési feladat Adott egy N*N-es (négyzetes) valós számokból álló mátrix. Jelöljünk ki a mátrixban N darab számot úgy, hogy minden sorban és oszlopban pontosan egy ilyen kijelölt szám legyen, és a számok összértéke minimális legyen!
Ekvivalencia A mátrixot tekinthetjük a gráf szomszédsági mátrixának: a mátrix egy aij eleme a gráf i. A-beli és j. F-beli pontok által meghatározott él súlya. A két probléma ekkor ekvivalens: a mátrix egy kijelölt (független) számhalmaza által reprezentált élek a gráfban párosítást alkotnak, és viszont. 2 3 1 1 2 3 4 5 6 7 8 9 1 2 5 9 8 4 6 3 7 2 3 1
A Magyar módszer Kombinatorikai optimalizálási eljárás Kőnig Dénes és Egerváry Jenő nyomán Harold Kuhn, 1955 Módosítva: James Munkres, 1957 A program párhuzamosan mutatja a a magyar módszer lépéseit mind a mátrixos, mind a gráfos értelmezésében. Az egyszerűség kedvéért feltételezhetjük, hogy csak egész számokon dolgozunk.
Inicializálás Gráf Minden A-beli pontból kiinduló élek súlyát csökkentjük az A-szerinti élsúlyminimummal, majd minden F-beli pontból kiinduló élek súlyát csökkentjük az F-szerinti élsúlyminimummal. Csak a nulla súlyú éleken fogunk dolgozni. Mátrix Minden sorból kivonjuk a sorminimumokat, majd minden oszlopból kivonjuk az oszlopminimumokat.
Inicializálás
Nulladik iteráció Gráf Az A-beli csúcsokon sorban végighaladva mohón keresünk egy 0 súlyú párosítást. (barna élek) Mátrix Oszlopfolytonosan kijelölünk egy független 0-kból álló rendszert. (0*) Megjegyzés: mindegy, hogy milyen módszerrel történik a kezdeti párosítás, illetve a 0 független rendszer kiválasztása, akár az is lehet, hogy nem jelölünk ki semmit. Ebben az esetben természetesen az eljárás több iterációt igényel.
Nulladik iteráció
1. lépés Gráf Ha az aktuális párosításunk maximális (N elemű), kész vagyunk. A párosításunk az eredeti gráfban minimális összsúlyú párosítás. Különben 2. lépés. Mátrix Ha az aktuális 0* független rendszerünk maximális (N elemű), kész vagyunk. A 0*-gal jelölt helyek az eredeti mátrixban az optimális hozzárendelést adják meg. Különben 2. lépés.
1. lépés
2. lépés Gráf Lekötjük a párosított F-beli pontokat (kék F-beli pontok), és sorba véve a szabad A-beli pontokat, megkeressük az első olyan élt, amelyik szabad F-beli ponthoz tartozik. Ha nincs, 5. lépés. Ha van, megszínezzük (szaggatott piros él), és megnézzük, van-e az A-beli pontjához már párosítás. Ha nincs, 4. lépés. Különben 3. lépés. Mátrix Lekötjük a 0*-ok oszlopait (kék oszlopok), és sorfolytonosan keresünk egy szabad 0-t. Ha nincs, 5. lépés. Ha van, megvesszőzzük (0’), és megnézzük, van-e a sorában 0*. Ha nincs, 4. lépés. Különben 3. lépés.
2. lépés
3. lépés Gráf A talált megszínezett él A-beli pontját lekötjük (zöld A-beli pont), az ezen A-beli ponthoz tartozó párosítás F-beli pontját felszabadítjuk. 2. lépés. Mátrix A talált 0’ sorát lekötjük (zöld sor), a sorában található 0* oszlopát felszabadítjuk. 2. lépés.
3. lépés
4. lépés Gráf A talált színezett élből kiindulva láncot képzünk: színezett él esetén F felé, párosított él esetén A felé haladunk. A lánc mentén a színezést és a párosítást kicseréljük. A párosítások kivételével minden jelölést törlünk, új iterációba kezdünk. 1. lépés. Mátrix A talált 0’-ből kiindulva láncot képzünk: 0’ esetén oszlop szerint 0*-ra, 0* esetén sor szerint 0’-re lépünk. A lánc mentén 0’ és 0* jelöléseket kicseréljük. A 0*-ok kivételével minden jelölést törlünk, új iterációba kezdünk. 1. lépés.
4. lépés
5. lépés Gráf T := a teljes gráfban a szabad élek súlyainak minimuma. A teljes gráfban minden szabad él súlyát csökkentjük T-vel, és minden duplán (A és F szerint) kötött él súlyát növeljük T-vel. 2. lépés. Megjegyzés: ezután ismét csak a 0 súlyú éleket vesszük figyelembe. Mátrix T := a szabad elemek minimuma. A mátrixban minden szabad elemet csökkentünk T-vel, és minden duplán (sor és oszlop szerint) kötött elemet növelünk T-vel. 2. lépés.
5. lépés
Optimális hatásfokú foglalkoztatás Kőnig tételének egy fontos általánosítása G: (A U F) élsúlyozott teljes páros gráf, cij élsúlyokkal A = a1,…, an F = f1,…, f1 P = {i,P(i)} független élrendszer: i és P(i) permutáltja közötti élek halmaza, i = 1,…,n c(P) a P független élrendszer értéke (élsúlyainak összege)
Optimális hatásfokú foglalkoztatás Csúcsokhoz f az éleket fedő súlyrendszer: f(ai) = sai ≥ 0, az ai él súlya f(bj) = sbj ≥ 0, a bj él súlya sai + sbj ≥ cij sai + sbj ≥ cij esetén az {ai, bj} élt fedettnek nevezzük. sai + sbj = cij esetén az {ai, bj} élt pontosan fedettnek nevezzük. sai + sbj > cij esetén az {ai, bj} élt túlfedettnek nevezzük. f súlyösszege: s(f) = sai összege = sbj összege
Optimális hatásfokú foglalkoztatás Világos, hogy : maxP c(P) ≤ minf s(f) Kőnig tétele: maxP c(P) = minf s(f) A bizonyítás a Magyar módszer helyességéből adódik.