A minimális költségű folyam feladat és megoldási módszerei Készítette: Kovács Péter Email: kpeter@inf.elte.hu 2008.01.30.
I. rész A minimális költségű folyam feladat
Minimális költségű folyam G=(V,E) irányított gráf, adott: (i,j)E élre: lij alsó, uij felső korlát, cij élköltség iV csúcsra: b(i) termelés/fogyasztás (előjeles!) Keresendő: (i,j)E élre xij folyamérték, amelyre: 3
Minimális költségű folyam A egy n×m-es mátrix, ahol minden oszlop egy (i,j) élhez tartozik: az i. sorában +1, a j. sorában -1 van, a többi érték 0. Így a feladat felírható LP feladatként: Általában minden adat egész, és egészértékű megoldást keresünk, tehát IP feladat, a megoldása nem triviális. 4
Speciális esetek Legrövidebb út (i,j)E : lij = 0, uij = 1, iV \ {s,t} : b(i) = 0, b(s) = 1, b(t) = -1 (i,j)E : lij = 0, uij = n-1, iV \ {s} : b(i) = -1, b(s)= n-1 Maximális folyam iV : b(i) = 0, (i,j)E : cij = 0, és a gráfot kiegészítjük egy (t,s) éllel, amelyre lts=0, uts = ∞, cts = -1 Szállítási feladat Pl. termelők, fogyasztók (páros gráf, minden (i,j) élre: iV1, jV2) Hozzárendelési feladat ua., csak minden kapacitás 1, és iV1 : b(i) = 1, jV2 : b(j) = -1 Áramfeladat iV : b(i) = 0 (nincs termelés/fogyasztás, a min. költségű áramlást keressük) 5
Általánosítások Konvex költségű folyam Általánosított folyam a célfüggvény valamilyen konvex fv. pl. torlódások kezelése közlekedési, ill. kommunikációs hálózatokban Általánosított folyam az egyes élek „fogyaszthatják” és „növelhetik” is a rajtuk átfolyó folyamot pl. elektromos hálózatokban veszteségek, vízvezeték hálózatokban szivárgás/párolgás, romlandó termék szállítása stb. Több termékes folyam egyszerre több árucikk, a kapacitásokon osztoznak pl. utasok közlekedése, üzenetek küldése különböző küldő-címzett párok között stb. 6
Feltételezések Minden adat (kapacitás, élköltség, termelés) egész. Minden kapacitás véges. (össztermelés = összes fogyasztás) Minden alsó korlát nulla (lij = 0). Ekvivalens átalakítással elérhető. Minden élköltség nemnegatív (cij ≥ 0). Ekvivalens átalakítással elérhető. 7
Minimális költségű folyam A vizsgált feladat még egyszer: Ahol minden adat egész, és b(i) = 0. 8
Megoldási módszerek Összetett feladat, számos megoldó algoritmus létezik. Csoportosítás: megközelítés módja szerint: primál, duál, primál–duál, relaxációs műveletigény szerint: kvázipolinomiális, polinomiális, erősen polinomiális Jelölés: n a csúcsok, m az élek száma U a max. kapacitás/termelés, C a max. élköltség Elnevezés: kvázipolinomiális: n, m, U, C függvényében polinomiális polinomiális: n, m, log U, log C függvényében polinomiális erősen polinomiális: n, m függvényében polinomiális 9
SP(...) a legrövidebb út-keresés műveletigényét jelöli. Megoldási módszerek A legjobb lépésszámkorlátokat adó algoritmusok: SP(...) a legrövidebb út-keresés műveletigényét jelöli. 10
II. rész A két alapvető megoldási módszer
Megoldási módszerek A két alapvető megoldási módszer: Primál: negatív kör algoritmus (negative cycle / cycle canceling) Duál: ismételt legrövidebb út algoritmus (successive shortest path) Még szükséges fogalmak: maradék (reziduális) hálózat optimalitási feltételek csúcspotenciálok, redukált élköltségek 12
Maradék hálózat Maradék (reziudális) kapacitás a szokásos módon, de itt élköltségek is kellenek. Szemlélet: egy adott x folyamhoz viszonyított módosítás. (i,j) élen max. uij – xij mennyiség küldhető még át, cij költséggel, „visszafelé” max. xij mennyiség, a költség nyilván –cij (cij -t kapunk vissza). Jelölés: Gx az x folyamhoz tartozó maradék hálózat. Csak azok az élek szerepelnek benne, amelyek maradék kapacitása pozitív! 13
Optimalitási feltételek Cél: karakterizálni egy megengedett megoldás optimalitását. Eszköz a hatékony ellenőrzésre. Ötletet ad megoldó algoritmusokhoz. Állítás: Bármely x megengedett folyam átvihető bármely y megengedett folyamba úgy, hogy a Gx maradék hálózat irányított körei mentén folyamot küldünk. Ilyenkor y összköltsége egyenlő x költségének és a körök költségének összegével. Ezen a tulajdonságon alapul minden optimalitási feltétel és minden algoritmus. 14
Negatív kör módszer Tétel: Negatív kör optimalitási feltétel Biz: Egy x megengedett folyam ACSA optimális, ha Gx nem tartalmaz negatív összköltségű irányított kört. Biz: Ha Gx-ben van negatív kör, akkor azon pozitív mennyiségű folyamot átküldve x-nél jobb megoldást kapunk. Ha x nem optimális, akkor javítható, tehát kell lennie ilyen körnek. ■ A tételből közvetlenül adódik az alábbi algoritmus: Legyen x egy tetszőleges megengedett folyam. Keressünk negatív kört Gx-ben. Amíg találtunk, küldjük végig rajta a megengedett legtöbb folyamot. Ha már nincs negatív kör, a talált folyam optimális. 15
Negatív kör módszer 16
Negatív kör módszer Példa: Egy megengedett folyam: Maradék hálózat: kapacitás, élköltség Egy megengedett folyam: 3, 100 7, 100 3 3 +5 -5 3, 50 2, 100 2, 200 2 2 Maradék hálózat: Optimális folyam: 4, 100 3, -100 3 5 3, 50 3, -100 2 2, -100 2, -200 2 egy negatív kör 17
Negatív kör módszer Az általános módszer nem határozza meg: a megengedett folyam keresésének módját, a negatív körök kiválasztásának módját és sorrendjét. A megengedett folyam-keresés visszavezethető maximális folyam feladatra: Egészítsük ki a gráfot egy s forrás és egy t nyelő csúccsal. Minden i termelő csúcshoz legyen egy (s,i) él b(i) kapacitással, minden j fogyasztó csúcshoz legyen egy (j,t) él –b(j) kapacitással. Az eredeti feladatnak ACSA van megengedett megoldása, ha a segédgráfban a max. folyam telíti az s-ből kivezető, ill. t-be vezető éleket. Ilyenkor a max. folyam megad egy megengedett megoldást is. 18
Negatív kör módszer Negatív köröket kereshetünk legrövidebb út-kereső algoritmusokkal. Pl. Bellman–Ford-algoritmussal: A szokásos n-1 iteráció után egy n-ediket végrehajtva abban ACSA javítunk, ha a gráfban van negatív kör. Egy kör így megtalálható O(n m) időben. Minden adat egész és minden körrel javítunk, így legfeljebb O(mCU) iteráció lehet (max. ennyi a kezdeti folyam összköltsége). Tehát az algoritmus O(n m2 CU) időben fut. Algoritmus javítása: Nem feltétlenül kell n BF-iteráció egy negatív kör kereséséhez. Ötlet: először csak néhány iteráció, utána ellenőrzés. Ha nem találtunk negatív kört, akkor a korlátot növeljük, és újabb iterációkat hajtunk végre. Ez nagyságrendekkel gyorsítja az algoritmust! 19
Redukált élköltségek Algoritmusokban gyakran van szükség az élköltségek módosítására. Minden csúcshoz rendeljünk hozzá egy (i) potenciálértéket. Egy (i,j) él redukált költsége: cij = cij + (i) – (j) Megjegyzés: Minden irányított kör költsége c és c szerint megegyezik. 20
Optimalitási feltételek Tétel: (ism.) Negatív kör optimalitási feltétel Egy x megengedett folyam ACSA optimális, ha Gx nem tartalmaz negatív összköltségű irányított kört. Tétel: Redukált költség optimalitási feltétel Egy x megengedett folyam ACSA optimális, ha létezik potenciál, amelyre a Gx minden élének redukált költsége nemnegatív. Szemlélet: Potenciálok ≈ távolságcímkék. Legrövidebb út problémánál az optimalitás szükséges feltétele: minden (i,j) élre: d(j) ≤ d(i) + cij Ezt átírva: cij + d(i) – d(j) ≥ 0, vagyis: cdij ≥ 0. 21
Ismételt legrövidebb út módszer Az azonosan nulla folyamból indulunk ki. Végig olyan folyamot és potenciálokat tartunk nyilván, hogy minden redukált költség nemnegatív legyen (a folyam nem megengedett!). Minden lépésben kiválasztunk egy v csúcsot, ahol még többlet van és egy w csúcsot, ahol még hiány van, és folyamot küldünk v-ből w-be a maradék hálózat egy, a redukált költségek szerint vett legrövidebb útja mentén. Ezután a távolságcímkék alapján módosítani kell a potenciálokat is! Amikor a folyam megengedett lesz, akkor optimális is. A redukált költségek végig nemnegatívak, ezért használhatjuk a Dijkstra-algoritmust. 22
Ismételt legrövidebb út módszer Minden lépésben csökken a többlet és a hiány egy-egy csúcsban, ami kezdetben max. nU/2 lehet. Így az algoritmus O(nU SP(n, m) ) időben fut, ahol SP(…) a Dijkstra-algoritmus műveletigénye. Fibonacci-kupacokkal: O(nU (m + n log n) ) Duál megközelítési módszer: A csúcspotenciálok a min. költségű folyam feladat duál megoldása! Duál megengedett megoldásokat tartunk nyilván, és a primál megengedettséget akarjuk elérni (megengedett folyam). 23
Ismételt legrövidebb út módszer 24
Ismételt legrövidebb út módszer Példa: kapacitás, élköltség Első legrövidebb út: 3, 100 7, 100 3 3 +5 -5 3, 50 2, 100 2, 200 Maradék hálózat: Optimális folyam: 4, 100 3, -100 3 5 3, 50 3, 50 3, -100 2 2, 100 2, 200 2 második legrövidebb út 25
Összehasonlítás A két módszer hatékony C++ implementációjának összehasonlítása különböző sűrűségű gráfokon: 26
Felhasznált irodalom Ravindra K. Ahuja – Thomas L. Magnanti – James B. Orlin: Network Flows: Theory, Algorithms, and Applications. Prentice-Hall, Inc., February 1993. Alexander Schrijver: Combinatorial Optimization: Polyhedra and Efficiency. Springer-Verlag, 2003. Thomas H. Cormen – Charles E. Leiserson – Ronald L. Rivest – Clifford Stein: Introduction to Algorithms. The MIT Press, 2nd edition, 2001. Saját diplomamunka: Hálózati folyamok és alkalmazásaik – Hatékony algoritmusok a minimális költségű folyam feladatra. http://people.inf.elte.hu/kpeter 27