Az optimalizálás elméletben és a gráfelméletben a maximális áramlási probléma az, hogy olyan áramlást találjunk a szállítási hálózaton keresztül , amelynél a forrásból érkező áramlások összege, vagy ennek megfelelően a nyelőhöz tartó áramlások összege maximális.
A maximális áramlási probléma a nehezebb problémák speciális esete, mint például a keringési probléma .
Miután az Egyesült Államok 1941-ben belépett a második világháborúba , George Bernard Dantzig matematikus csatlakozott az Egyesült Államok légierejének statisztikai hivatalához Washington DC -ben . 1941 és 1946 között a Combat Analysis Branch vezetője volt, ahol különféle matematikai problémákkal foglalkozott. [1] [2] Ezt követően, Danzig munkáját felhasználva, először a léghíd előkészítése során , az 1948-1949- es nyugat-berlini blokád idején oldották meg a maximális áramlási problémát . [3] [4] [5]
1951-ben George Dantzig fogalmazta meg először általánosságban a problémát. [6]
1955-ben Lester Ford és Delbert Ray Fulkerson először készített egy algoritmust, amelyet kifejezetten ennek a problémának a megoldására terveztek . Algoritmusukat Ford-Fulkerson algoritmusnak hívták . [7] [8]
A jövőben a probléma megoldását sokszor javították.
2010-ben Jonathan Kelner és Aleksander Mądry, az MIT kutatói , valamint kollégáikkal, Daniel Spielmannel , a Yale Egyetemen és Shen - Hua Tenggel , a Dél-A Kaliforniai Egyetemen 10 év után először mutattak be egy újabb fejlesztést az algoritmuson. [3] [9] [10]
Adott egy szállítási hálózat forrással , nyelővel és kapacitással .
Az áramlás értéke a forrásból származó áramlások összege . A „ Közlekedési hálózat ” cikkben bebizonyosodott, hogy ez egyenlő a nyelőhöz vezető áramlások összegével .A maximális áramlás problémája az , hogy olyan áramlást találjunk, ahol az áramlás maximális értéke.
Az alábbi táblázat felsorol néhány algoritmust a probléma megoldására.
Módszer | Bonyolultság | Leírás |
---|---|---|
Lineáris programozás | Az adott algoritmustól függ. A szimplex módszernél ez exponenciális. | Mutassa be a maximális áramlási problémát lineáris programozási problémaként. A változók a szélek mentén folyó áramlások, a korlátok pedig az áramlás megőrzése és az áteresztőképesség korlátozása. |
Ford-Fulkerson algoritmus | A bővítő útvonal keresési algoritmusától függ. Ilyen keresést igényel . | Keressen bármilyen bővítő utat. Növelje az áramlást az összes széle mentén a maradék kapacitás minimális értékével. Addig ismételje, amíg van egy növelési út. Az algoritmus csak egész számú sávszélesség esetén működik. Ellenkező esetben korlátlan ideig futhat anélkül, hogy konvergálna a helyes válaszhoz. |
Edmonds-Karp algoritmus | Végrehajtjuk a Ford-Fulkerson algoritmust, minden alkalommal kiválasztva a legrövidebb kibővítési útvonalat ( a szélesség-első keresés alapján ). | |
Dinit algoritmusa | vagy Slethor és Tarjan dinamikus fákat használó egységkapacitásokhoz [11] | Az Edmonds-Karp algoritmus továbbfejlesztése (de kronologikusan korábban találtuk). Minden iterációnál a szélesség-első keresés segítségével meghatározzuk a távolságot a forrástól a maradék hálózat összes csúcsáig. Készítünk egy gráfot, amely a reziduális hálózatnak csak olyan éleit tartalmazza, amelyeken ez a távolság 1-gyel növekszik. A gráfból kizárunk minden olyan zsákutcát, amelynek élei beesnek, amíg az összes csúcs nem zsákutcává válik. (A zsákutca egy csúcs, kivéve a forrást és a nyelőt, amely nem tartalmaz egyetlen élt sem, vagy amelyből nem származnak élek.) Az eredményül kapott gráfon megtaláljuk a legrövidebb növelési utat (bármilyen út lesz az s-ből). t-ig). Kizárjuk a maradék hálózatból a minimális kapacitású élt, ismét kizárjuk a zsákutca csúcsait, és így tovább, amíg nincs bővítési út. |
Preflow Push Algorithm | Előfolyamon működik folyam helyett. A különbség az, hogy bármely u csúcsra, kivéve a forrást és a nyelőt, az áramláshoz belépő áramlások összegének szigorúan nullának kell lennie (az áramlásmegmaradás feltétele), az előáramlásnál pedig nem negatívnak kell lennie. Ezt az összeget a csúcshoz vezető többletáramlásnak nevezzük , és a pozitív többletáramlású csúcsot túlcsordulásnak nevezzük . Ezenkívül az algoritmus minden csúcshoz elment egy további jellemzőt, a magasságot , amely egy nem negatív egész szám. Az algoritmus két műveletet használ: push , amikor a magasabb csúcsból az alacsonyabb csúcsba tartó él mentén az áramlást a lehető legnagyobb mértékben növeljük, és lift , amikor egy túlcsorduló csúcsot emelünk, amelyből a nem megfelelő magasság miatt nem lehet tolni. . A tolás akkor lehetséges, ha egy él a maradék hálózathoz tartozik, magasabb csúcsból egy alacsonyabbba vezet, és az eredeti csúcs túlcsordul. Az emelés akkor lehetséges, ha az emelendő csúcs megtelt, de azon csúcsok közül, ahová a maradék hálózat élei vezetnek, egyik sem alacsonyabb nála. Olyan magasságig hajtják végre, amely 1-gyel nagyobb, mint e csúcsok magasságának minimuma. Kezdetben a forrás magassága V, a forrásból kilépő összes él mentén a maximális lehetséges áramlási áramlások, a fennmaradó magasságok és áramlások nullák. A tolási és emelési műveleteket a lehető leghosszabb ideig kell végrehajtani. | |
Algoritmus "emelés az elejére" | vagy dinamikus fák használatával | Az előző algoritmus egy olyan változata, amely speciális módon határozza meg a toló és emelő műveletek sorrendjét. |
Bináris blokkoló áramlási algoritmus [1] |
A részletesebb listát lásd: [2] és A maximális áramlás megtalálására szolgáló algoritmusok listája .
Ha az áteresztőképesség egész szám, akkor a maximális áramlás is egész szám.
A tétel például a Ford–Fulkerson tételből következik .
A maximális áramlási probléma néhány általánosítása könnyen redukálható az eredeti problémára.
Ha egynél több forrás van, adjunk hozzá egy új S csúcsot, amelyet az egyetlen forrássá tesszük. Mindegyik régi forráshoz S-től végtelen kapacitású éleket adunk.
Hasonlóképpen, ha egynél több nyelő van, adunk hozzá egy új T csúcsot, amelyet az egyetlen süllyedővé tesszük. Minden régi mosogatóból végtelen kapacitású éleket adunk a T-hez.
Minden irányítatlan élt (u, v) egy pár irányított él (u, v) és (v, u) helyettesít.
Minden korlátozott kapacitású v csúcsot felosztunk két v be és v ki csúcsra . A felosztás előtt a v-ben szereplő összes él szerepel a v -ben . Minden él, amely v-ből származott a felosztás előtt, most v- ből származik . Adjon hozzá egy élt (v be , v out ) kapacitással .
A problémafelvetés ezen verziójában az egyes élek áramlásának értékét alulról a függvény is korlátozza . Így az áramlási érték egyetlen élre sem haladhatja meg a kapacitását, de nem lehet kisebb a megadott minimumnál, pl. . A probléma megoldásához az eredeti közlekedési hálózatot közlekedési hálózattá kell átalakítani az alábbiak szerint:
Olyan áramlást határozunk meg a B-ben, amely akkor és csak akkor teljesíti az élek áteresztőképességének alulról történő korlátozására vonatkozó feltételt, ha olyan maximális áramlás van definiálva, amelyben az és az összes éle „telített”. Ennek a konstrukciónak köszönhetően az alulról határolt folyam megtalálásának algoritmusa a következő lesz:
A feladatnak ez a változata megegyezik az előzővel, azzal a különbséggel, hogy az egyes élek áramlási értéke egyenlő is lehet -vel , azaz. vagy . A feltétel enyhe változása ellenére nincs polinomiális megoldás erre a problémára, ha a P és NP osztályok nem egyenlőek . Az állítás bizonyítására az Exact-3-SAT probléma polinomiális redukcióját adhatjuk .