Isang halimbawa ng paghahanap ng pinakamataas na daloy gamit ang paraan ng Ford-Fulkerson. Algorithm para sa paghahanap ng maximum na daloy

Sum of flows through arcs incident v, ay katumbas ng kabuuan ng mga daloy sa pamamagitan ng insidente ng arko w; ang kabuuan na ito ay tinatawag na flux value. Pangunahing magiging interesado tayo sa mga daloy na may pinakamalaking posibleng halaga - ang tinatawag na pinakamataas na daloy. Sa pangkalahatan, ang isang network ay maaaring magkaroon ng maraming magkakaibang mga maximum na daloy, ngunit ang kanilang mga halaga ay dapat na pareho. (4)

Ang pag-aaral ng pinakamataas na daloy sa pamamagitan ng isang network N = (V,D,a) ay malapit na nauugnay sa konsepto ng isang hiwa, i.e. tulad ng isang set A ng mga arko ng isang digraph D na may ari-arian na anumang simpleng chain ng v V dumadaan sa arko na kabilang sa A. Ang kapasidad ng isang hiwa ay ang kabuuan ng mga kapasidad ng mga arko na kabilang dito. Ang mga pagbawas na may pinakamaliit na posibleng throughput ay tinatawag na minimal cut.

Ang magnitude ng anumang daloy ay hindi lalampas sa throughput capacity ng anumang seksyon, at, dahil dito, ang magnitude ng anumang pinakamataas na daloy hindi lalampas sa kapasidad ng anumang minimum na hiwa. Gayunpaman, hindi agad malinaw na ang huling dalawang numero ay palaging pantay; Ang resultang ito ay nakuha ng mga Amerikanong mathematician na sina Ford at Fulkerson noong 1955 at tinawag na maximum flow at minimum cut theorem.

Theorem (tungkol sa maximum flow at minimum cut). Sa anumang network, ang laki ng anumang maximum na daloy ay katumbas ng kapasidad ng anumang minimum na hiwa.

Ang maximum flow at minimum cut theorem ay nagbibigay-daan sa iyo upang suriin kung ang isang naibigay na daloy ay maximum o hindi, ngunit para lamang sa medyo simpleng mga network. Siyempre, sa pagsasanay kailangan nating harapin ang malaki at kumplikadong mga network, at sa pangkalahatan ay mahirap hanapin ang maximum na daloy sa pamamagitan ng simpleng pagpili. Ilarawan natin ang isang algorithm para sa paghahanap ng maximum na daloy sa anumang network na may integer throughput.

Hakbang 1. Una, pumili tayo ng isang daloy na may hindi zero na halaga (kung may ganoong daloy). Halimbawa, kung ang N ay ang network na ipinapakita sa Fig. 29.3, pagkatapos ay ang daloy na ipinapakita sa Fig. 29.4. Kapansin-pansin na mas malaki ang halaga ng paunang daloy na aming pinili, mas madali ang mga susunod na hakbang.

Hakbang 2. Batay sa N, bumuo kami ng bagong network na N’ sa pamamagitan ng pagbabago ng direksyon ng daloy sa kabaligtaran. Mas tiyak, anumang arko a kung saan ang (a) = 0 ay nananatili sa N' kasama ang orihinal na kapasidad nito, at anumang arko a kung saan , ay pinapalitan ng isang arko a na may kapasidad at isang kabaligtaran na arko na may kapasidad (a). Ang Network N' sa aming halimbawa ay ipinapakita sa Fig. 29.5. Vertex v ay hindi na pinagmumulan, kundi isang lababo.

Hakbang 3. Kung sa network N’ makakahanap tayo ng non-zero flow mula sa v c, pagkatapos ay maaari itong idagdag sa orihinal na daloy at makakuha ng bagong daloy ng mas malaking halaga sa N. Ngayon ay maaari mong ulitin ang hakbang 2, gamit ang bagong thread na N' sa halip na N' kapag gumagawa ng network. Sa pamamagitan ng pag-uulit ng pamamaraang ito, sa kalaunan ay makakarating tayo sa isang network na N' na naglalaman ng walang mga di-zero na daloy; kung gayon ang katumbas na daloy ay ang pinakamataas na daloy. Halimbawa, sa Fig. 29.5 mayroong isang di-zero na daloy kung saan ang mga daloy sa pamamagitan ng mga arko ( v,u), (u,z), (z,x), (x,y) At ( y,) ay katumbas ng isa, at ang mga flux sa mga natitirang arko ay katumbas ng zero. Ang pagdaragdag ng daloy na ito sa daloy sa Fig. 29.4, nakuha namin ang daloy na ipinapakita sa Fig. 29.6; inuulit ang hakbang 2, madaling ipakita na ito ang pinakamataas na daloy.


Mga Ginamit na Aklat:

(1) http://pgap.chat.ru/zap/zap264.htm#0

(2) Asanov M.O., Baransky V.A., Rasin V.V. Discrete mathematics: mga matroid graph, algorithm

(3) Basaker R., Saati T. May hangganang mga graph at network.

(4) Wilson R. Panimula sa Teoryang Graph


Hayaang magbigay ng nakadirekta na graph G= , kung saan ang direksyon ng bawat arko vÎV nangangahulugang direksyon ng daloy (halimbawa, ang daloy ng mga sasakyan), throughput ang bawat arko ay pantay d(v). Sa maraming mga taluktok E dalawang vertex ang naka-highlight t At s. Vertex t ang pinagmulan ng daloy, s- alisan ng tubig. Ito ay kinakailangan upang matukoy ang maximum na daloy na maaaring maipasa mula sa vertex t V s .

Ipahiwatig natin sa pamamagitan ng x(v) ang dami ng daloy na gumagalaw sa isang arko v. Obvious naman yun

0 £ x(v) £ d(v) , vÎV . (6. 1)

Sa bawat rurok iÎE\(t,s) ang dami ng papasok na daloy ay katumbas ng dami ng papalabas na daloy, i.e. ang pagkakapantay-pantay ay totoo

(x(v)|i О V + (i))= (x(v)| iО V - (i))

(x(v)| iÎV + (i)) - (x(v)| iÎV - (i))=0.(6.2)

Para sa tuktok t

(x(v)| iÎV + (i)) -(x(v)¦ iÎV - (i))=-Q,(6.3)

para sa vertex s

(x(v)| iО V + (i)) -(x(v)¦ i О V - (i))= Q.(6.4)

Magnitude Q ay ang magnitude ng daloy na umaalis sa vertex t at pumasok sa tuktok s.

Kailangang matukoy

Q ® max(6.5)

sa ilalim ng mga paghihigpit (6.1-6.4).

Dami Q, x(v), vÎV, kasiya-siyang mga paghihigpit (6.1-6.4) tatawag tayo ng daloy sa network, at kung ma-maximize nila ang halaga Q, pagkatapos ay ang maximum na daloy. Ito ay madaling makita na ang mga halaga Q=0, x(v)=0, vÎV, ay isang daloy sa network.

Ang Problema (6.1-6.5) ay isang linear programming problem at maaaring lutasin gamit ang simplex method algorithm.

Hatiin natin ang hanay ng mga vertices E sa dalawang magkahiwalay na bahagi E1 at E2 sa paraang tÎE1, sÎE2. Sa pamamagitan ng hiwa V(E1,E2), naghihiwalay t At s tatawagin natin ang set V(E1,E2)ÌV na para sa bawat arko v О V(E1,E2) o h1(v)ОE1 At h2(v)ОE2, o h1(v)ОE2 At h2(v)ОE1.

Hatiin natin ang set V(E1,E2) sa dalawang bahagi V(E1,E2+),V(E1,E2,-) sa sumusunod na paraan:

V(E1,E2+)=(vÎV(E1,E2)| h1(v)ÎE1 At h2(v)ОE2)

V(E1,E2,-)= ( vÎV(E1,E2)| h2(v)ÎE1 At h1(v)ОE2)

Tatawagin natin ang throughput capacity ng cut

Q(E1,E2) = (x(v)| vÎV(E1,E2+))-(x(v)| vÎV(E1,E2,-))

Ang sumusunod ay totoo

Teorama 1. (Tungkol sa maximum flow at minimum cut).

Sa anumang network, ang maximum na daloy mula sa pinagmulan ay t sa stock s katumbas ng pinakamababang throughput Q(E1,E2) sa lahat ng mga hiwa V(E1,E2), na naghihiwalay sa mga vertex t At s.

Tandaan na sa pinakamataas na daloy

x(v)=d(v) , vÎV(E1,E2+),

x(v)=0 , vÎV(E1,E2,-).

Hayaan Q, x(v), vÎV, - ilang daloy ng network, pagkakasunud-sunod

t=i(0),v(1),i(1),v(2),i(2),...,v(k),i(k)=s,

ay isang kadena na nagdudugtong sa mga vertex t At s. Itakda natin ang direksyon ng paggalaw sa chain na ito mula sa itaas t Upang s. Arc v(j) mula sa kadena na ito ay tinatawag na isang tuwid na linya kung ang direksyon nito ay tumutugma sa direksyon ng paggalaw mula sa t Upang s, at ang reverse kung hindi man. Tatawagin nating landas ang kadena na ito pagtaas ng daloy, kung para sa mga tuwid na arko v mga tanikala x(v)< d(v) at para sa kabaligtaran x(v) > 0. Ang isang karagdagang daloy ay maaaring maipasa sa circuit na ito q mula sa t Upang s laki q = min (q1,q2), saan q1=min (d(v) -x(v)), ang minimum ay kinuha sa lahat ng tuwid na arko ng chain, q1=min (x(v)), ang minimum ay kinukuha sa lahat ng reverse arc ng chain.

Teorama 2.

Daloy Q, x(v) , vÎV, ay maximum kung at tanging kung walang paraan upang mapataas ang daloy.

Ang iminungkahing algorithm para sa paglutas ng problema ng maximum na daloy sa isang network ay batay sa paghahanap ng isang paraan upang mapataas ang daloy mula sa t V s, na nakabatay naman sa proseso ng pag-aayos ng mga vertex label. Sabihin na natin

kaitaasan i minarkahan ng marka q(i)>0, at kilala rin ang straight arc arc v(i), kung saan dumating ang daloy na ito, o minarkahan ng , kung ilang karagdagang daloy ng magnitude q(i)>0, at kilala rin ang reverse arc v(i), kung saan pumasok ang daloy na ito;

ang vertex i ay titingnan kung ang lahat ng mga kalapit na vertex nito ay minarkahan.

Kung minarkahan ang vertex s, may nakitang landas na magpapalaki ng daloy ayon sa magnitude q, na dumaraan sa landas na ito. Upang ilarawan ang algorithm kailangan din namin ng isang array SPW, na naglalaman ng mga bilang ng mga minarkahang vertice sa pagkakasunud-sunod kung saan sila minarkahan. C1- numero sa array SPW tiningnan ang tuktok, C2- ang bilang ng huling minarkahang vertex sa array na ito.

Ang manwal na ito ay inilaan para sa mga mag-aaral na kumukuha ng mga kurso sa discrete mathematics at/o graph theory. Sa tulong nito ay makabisado mo ang paksang "Maximum flow at minimum cut sa network." Direkta mula sa manwal na ito, maaari mong kalkulahin ang iyong ID, kahit na wala kang MATLAB sa iyong computer. Kung mayroon kang MATLAB, pumunta sa pahinang ito: doon mayroon kang pagkakataong makialam sa script ng pagkalkula (program). Dito, ang problema ng maximum na daloy sa network ay nalutas sa pamamagitan ng pagbabawas nito sa isang linear programming problem.

Ipakilala natin ang sumusunod na notasyon:

  • n=|V| − laki ng graph (bilang ng mga vertex);
  • m=|E| − graph cardinality (bilang ng mga gilid);
  • A − incidence matrix ng isang network digraph ng laki n× m; bawat elemento nito isang ik=1 kung mula sa i-lumabas ang tuktok k-i arc; isang ik=−1, kung sa i pumapasok ang th vertex k-i arc; At isang ik=0 sa ibang mga kaso; sa bawat haligi ng naturang matrix ay may eksaktong isa, isang minus one, at ang natitira ay mga zero;
  • s− numero ng source vertex ng network; mga arko lamang ang dapat lumabas mula sa tuktok na ito, at anumang iba pang tuktok ay dapat maabot mula sa pinagmulan;
  • t− numero ng network sink vertex; ang mga arko lamang ang dapat pumasok sa vertex na ito, at ang isang drain ay dapat maabot mula sa anumang iba pang vertex;
  • a ss A ; ito ay dapat maglaman lamang ng ilan, dahil mga arko lamang ang dapat lumabas mula sa pinagmulan;
  • a tt-ika-row ng incidence matrix ng network digraph A ; dapat ay naglalaman lamang ito ng mga minus, dahil ang mga arko lamang ang dapat pumasok sa alisan ng tubig;
  • A st− incidence matrix ng network digraph A kasama ang mga itinapon dito s ika at t ika linya;
  • e − column vector ng haba m; sa bawat elemento nito e k ang magiging magnitude ng daloy sa k ika-arko;
  • c − column vector ng haba m; sa bawat elemento nito c k Itinatakda ng ≥0 ang throughput k ika-arko.

Kung gayon ang pinakamataas na problema sa daloy ng network ay maaaring mabalangkas bilang isang linear na problema sa programming:

Ang kabuuang daloy na umaalis sa pinagmulan (1) ay na-maximize. Bukod dito, sa anumang intermediate vertex ang papasok na daloy ay katumbas ng papalabas na daloy (2), at ang kapasidad ng mga arko ay limitado (3).

Ang dalawahang problema hanggang sa maximum na problema sa daloy ay ang problema sa minimum na hiwa. Upang makabuo ng isang minimal na hiwa, maaari mong gamitin ang duality theorems. Kailangang:

  • alisin ang lahat ng walang laman mula sa network digraph ( e k= 0) at puspos ( e k = c k) mga arko;
  • hanapin ang mga konektadong bahagi ng natitirang graph;
  • kung mayroong dalawang tulad na mga bahagi, kung gayon ang mga itinapon na arko ay nagbibigay ng kaunting hiwa;
  • kung higit sa dalawang konektadong bahagi ang lumitaw, kung gayon ang network digraph ay may ilang kaunting mga pagbawas (ang kaukulang problema sa linear programming ay bumababa).

Para sa isang lumalalang problema, ang unang minimal na hiwa na pinakamalapit sa pinagmulan ay itinayo sa pahinang ito.

Para sa tamang operasyon sa pahinang ito dapat na sinusuportahan ng iyong browser ang mga script Java Script. I-on ang mga ito.

Ilagay ang paunang data sa mga lugar ng pag-input sa ibaba. Sa unang lugar, kailangan mo (mas tiyak, maaari mong) ipasok ang mga coordinate ng vertices upang gumuhit ng isang digraph ng network. Ang mga ito ay tinukoy sa anyo ng isang matrix n×2: sa unang hanay − x ika-coordinate, sa pangalawang − y-e. Maaaring tukuyin ang mga numero bilang mga integer, na may decimal point, o sa exponential form. Paghiwalayin ang mga numero na may mga puwang. Kabuuan Tinutukoy ng mga linya sa lugar ng pag-input na ito ang laki ng digraph n− bilang ng mga vertex. Ang mga paunang data na ito (vertex coordinates) ay opsyonal: kung hindi tinukoy ang mga ito, ang network digraph ay iguguhit bilang isang tama n-gon, at ang bilang ng mga vertex ay matutukoy ng pinakamataas na numero ng vertex sa susunod na lugar ng pag-input.

Sa susunod na lugar ng pag-input, ang kaliwang bahagi ay kinakailangan. Tinutukoy nito ang istraktura ng digraph ng network. Ang bawat arko sa isang digraph ay nag-uugnay sa dalawang vertice. Ang mga numero ng mga vertex na ito ay tinukoy sa anyo ng isang matrix m×2 sa kaliwang bahagi ng pangalawang lugar ng pag-input. Sa bawat linya, ang 1st vertex (buntot, pinagmulan) ng arc ay unang tinukoy, at pagkatapos, sa pamamagitan ng isang espasyo, ang 2nd vertex (tip, drain) ng arc ay tinukoy. Dapat ay mayroon ang mga column na ito mga integer mula 1 hanggang n kasama. Paghiwalayin ang mga numero na may mga puwang. Sa kanang bahagi, ang mga kapasidad ng mga arko ay tinukoy - mga positibong tunay na numero. Kung ang column na ito ay hindi tinukoy, ang lahat ng mga kapasidad ay itinuturing na pareho (isa). Tinutukoy ng kabuuang bilang ng mga numero sa bawat isa sa mga column na ito ang cardinality ng digraph m− bilang ng mga arko.



Kalkulahin

Gawain sa transportasyon
Maaaring lumitaw sa pisika, ekonomiya, atbp.
Sa mga indibidwal na bahagi ng network ng transportasyon
(network ng mga riles, kalsada, atbp.
mga landas; pipeline network, atbp.) superimposed
mga paghihigpit - ang kanilang pinakamataas na pinahihintulutan
load.
Ito ay kinakailangan upang matukoy ang maximum
posibleng bilang ng mga pasahero, kalakal,
produkto, atbp., na maaaring dalhin sa pamamagitan nito
network at kung paano.
Bubuo kami ng discrete graph model
itong problema sa transportasyon at lutasin ito dito
mga modelo.

Mathematician na si George Bernard Dantzig, mula noong 1941
Habang nagtatrabaho sa statistical office ng US Air Force sa Washington, una siyang nagpasya
maximum na problema sa daloy sa panahon ng paghahanda
air bridge sa panahon ng blockade ng West Berlin.
Noong 1951, unang bumalangkas si George Danzig
gawain sa pangkalahatang pananaw. Noong 1955, si Lester Ford at
Unang binuo ni Delbert Fulkerson ang algorithm,
partikular na idinisenyo upang malutas ang problemang ito.
Ang kanilang algorithm ay tinawag na Ford Fulkerson algorithm.
Noong 2010, ang mga mananaliksik na sina Jonathan Kellner at
Alexander Mondra mula sa MIT kasama ang kanyang
mga kasamahan na si Daniel Spielman mula sa Yale
Nagpakita ang University at Shen-Hua Tenem mula sa University of Southern California
isa pang pagpapabuti sa algorithm.

Binigyan ng nakadirekta na graph
(network ng transportasyon) G=(V, E), vertex
graph s (pinagmulan) at vertex t (lubog).
Ang bawat arko (i, j) ay itinalaga ng isang tiyak
kapasidad na may(i,j) 0 (wala
pagkawala ng pangkalahatan ay isinasaalang-alang namin ito
halaga ng integer),
pagtukoy sa pinakamataas na halaga
batis na maaaring dumaloy
ang arko na ito.

Daloy
V
mga network
tinawag
integer function na f(i, j) na ibinigay
sa hanay ng mga arko E at pagkakaroon
ang mga sumusunod na katangian:
1. Limitasyon sa daloy ng bandwidth
kakayahan
Para sa anumang arko (i, j) E,
hindi pagkakapantay-pantay f(i, j) c(i, j).

2. Pag-save ng Stream
Para sa anumang vertex q V,
pinanghahawakan ang pagkakapantay-pantay
qs
At
q t
f (i, q) f (q, j)
ako V
(i , q) E
jV
(q , j)E
Iyon ay, ang kabuuan ng daloy na pumapasok sa q ay katumbas ng
ang kabuuan ng daloy na umaalis sa q (daloy nang walang
pagkalugi at ipon)

Kailangang tukuyin ang halaga
maximum na daloy, na
maaaring laktawan mula sa pinagmulan s hanggang
drain t, at ang pamamahagi nito kasama ang mga arko.

Halimbawa
May pabrika si Lycky Puck sa Vancouver.
(source s), na gumagawa ng hockey pucks, at sa
Winnipeg - bodega (stock t) kung saan nakaimbak ang mga washer na ito.
Ang kumpanya ay umuupa ng espasyo sa mga trak ng ibang mga kumpanya
para sa paghahatid ng mga washers mula sa pabrika hanggang sa bodega. Dahil ang
naglalakbay ang mga trak sa ilang partikular na ruta (mga gilid)
sa pagitan ng mga lungsod (mga taluktok) at may limitado
kapasidad ng pag-angat, lata ng Lycky Puck
magdala ng hindi hihigit sa c(u,v) na mga kahon bawat araw sa pagitan ng bawat isa
isang pares ng mga lungsod u at v. Hindi kaya ng Lycky Puck Company
mga ruta at kapasidad ng epekto. kanya
Ang gawain ay upang matukoy kung ano ang pinakamalaking bilang
ang mga kahon bawat araw ay maaaring ipadala at pagkatapos ay gawin
eksakto ang halagang ito, dahil hindi ito makatuwiran
gumawa ng higit pang mga washer kaysa sa maaaring ipadala
stock.

Mga pamamaraan para sa paglutas ng problema
Linear programming
Kinakatawan ang pinakamataas na problema sa daloy bilang isang problema
linear programming. Ang mga variable ay
dumadaloy sa mga gilid, at ang mga paghihigpit ay upang mapanatili ang daloy
at limitasyon sa kapasidad.
Algoritmo ng Ford-Fulkerson
Maghanap ng anumang dumaraming landas. Palakihin ang daloy ng
sa lahat ng mga gilid nito hanggang sa pinakamababa sa kanilang nalalabi
throughput. Ulitin hanggang
Mayroong dumaraming landas. Gumagana lamang ang algorithm
para sa buong kapasidad.

10.

Halimbawa 1
Ipaalam sa amin bumalangkas ang problema ng maximum
daloy sa mga tuntunin ng linear programming.
Hayaang XKM ang dami ng transportasyon mula sa puntong K hanggang sa puntong M.
K = 0,1,2,3, M = 1,2,3,4, at posible ang transportasyon
lamang sa item na may mas mataas na numero. Kaya, kabuuan
mayroong 9 na variable ng XKM, katulad ng X01, X02, X03, X12
, X13, X14, X23, X24, X34.
s=0
t=4

11.

Problema sa linear programming,
naglalayong i-maximize ang daloy, ay may anyo:
F → max,
Х01 +Х02 +Х03 =F
-X01 +X12 +X13 +X14 = 0
-X02 -X12 +X23 +X24 = 0
-X03 -X13 -X23 +X34 = 0
-Х14 -Х24 -Х34 = - F
X01 ≤ 2
X02 ≤ 3
X03 ≤ 1
X12 ≤ 4
X13 ≤ 1
X14 ≤ 3
X23 ≤ 1
X24 ≤ 2
X34 ≤ 2
XKM ≥ 0, K, M = 0, 1, 2, 3, 4
F≥0.

12.

Sa pamamagitan ng hiwa
tumawag ng isang hanay ng mga arko
pag-alis ng kung saan mula sa network ay humahantong sa
"pagsira" sa lahat ng mga landas na humahantong mula s hanggang t.
Ang throughput ng cut ay
kabuuang kapasidad ng mga arko, nito
mga bahagi.
!!! Maghanap ng mga pagbawas sa halimbawa 1

13.

Theorem ng L. Ford at D. Fulkerson:
Ang magnitude ng bawat daloy mula s hanggang t ay hindi
nakatataas
pumasa
mga kakayahan
minimal na hiwa na naghihiwalay sa s at t,
at ang daloy na umaabot sa halagang ito ay
umiiral.
(Halaga
maximum
daloy
V
transportasyon
mga network
katumbas ng
laki
minimal na paghiwa sa loob nito)
!!! Hanapin ang pinakamababang hiwa sa halimbawa 1

14.

Mula sa isang algorithmic na punto ng view, ito
ang teorama ay hindi produktibo.
Bumuo ng lahat ng mga subset ng mga arko at
pagsusuri,
ay
kung
isa pa
subset sa pamamagitan ng cut – "frontal solution",
humantong sa mataas na kumplikado algorithm.
Bukod sa, itong katotohanan Di nakakatulong
humanap ng paraan para maipamahagi ang maximum
dumaloy sa mga arko.

15.

Algoritmo ng Ford-Fulkerson
"Tag Technique" ni L. Ford at D. Fulkerson
ay pare-pareho
(paulit-ulit, lapad-unang paghahanap) pagbuo
maximum na daloy sa pamamagitan ng paghahanap sa bawat isa
hakbang ng tumataas na kadena, iyon ay, ang landas kasama
na maaaring magpapataas ng daloy.
Sa kasong ito, ang mga node (mga vertex ng graph)
ay espesyal na minarkahan. Kaya naman
lumitaw ang katagang "label".

16.

Algoritmo ng Ford-Fulkerson
Ano ang label
mga taluktok?
ang unang digit sa label ay ang numero
ang rurok kung saan dumadaloy ang daloy
binigay na vertex;
ang pangalawang digit sa label ay numerical
ang halaga ng daloy na maaaring
dumaan sa tuktok na ito.

17.

Algoritmo ng Ford-Fulkerson
Sa bawat hakbang ng network vertex algorithm
maaaring nasa isa sa tatlong estado:
walang label ang vertex;
ang vertex ay binibigyan ng label at hindi
tiningnan, ibig sabihin, hindi lahat ng katabi nito
ang mga tuktok ay naproseso;
ang vertex ay binibigyan ng label at ito
tiningnan.

18.

Algoritmo ng Ford-Fulkerson
Sa sandaling maging top-sink
minarkahan, ito ay nagpapahiwatig na
isa pang chain na tumataas ang daloy
natagpuan, panghuling kabuuang daloy
kailangang dagdagan ng dami ng daloy
natagpuan ang chain, at pumunta sa
sa susunod na hakbang ng algorithm.

19.

Algoritmo ng Ford-Fulkerson
Ang arc e=(u, v) ng network ay tinatanggap
arc mula u hanggang v na may kaugnayan sa daloy f, kung
e=(u, v) at f(e) tuwid);
e=(v, u) at f(e)>0 (mga arko ng pangalawang uri,
reverse).
Ang pangalawang kondisyon ay nagsasabi na
mga arko na kasama sa
vertex u, kung saan “nilaktawan na
hindi zero na daloy."

Kapag nagpapalitan ng impormasyon sa pagitan ng mga subscriber ng isang network ng computer, sa panahon ng magkatulad na mga kalkulasyon sa isang multi-machine complex, kapag ang solusyon sa isang problema ay ipinamamahagi sa ilang mga processor, kapag gumagamit ng nakabahaging memorya sa isang computer network, kapag ang bawat processor ay tumatanggap limitadong pag-access sa karaniwang mga module ng memorya, ang gawain ay nagmumula sa pagpapadala ng maximum na dami ng impormasyon sa isang naibigay na tagal ng panahon.

Sa panahon ng pagpapatakbo ng isang sistema ng transportasyon, kapag ang mga yunit ng transportasyon ay ipinagpapalit sa pagitan ng mga node ng network, ang gawain ng paglilipat ng maximum na bilang ng mga yunit ng transportasyon sa isang naibigay na tagal ng panahon ay lumitaw.

Kapag naglilipat ng enerhiya sa mga de-koryenteng network, mga likido sa mga sistema ng pipeline, ang problema ay lumitaw sa pamamahagi at pagpapadala ng maximum na dami ng enerhiya o sangkap sa isang naibigay na tagal ng panahon.

Ang isang espesyal na tampok ng network ay ang pagkakaroon ng isang source vertex at isang sink vertex, ang oryentasyon ng lahat ng mga segment ng linya sa graph at ang kawalan ng mga loop at maramihang mga arko.

Ang dami ng impormasyon, enerhiya o bagay na inilipat sa isang network mula sa node x i hanggang sa node x j ay tinatawag daloy at ipahiwatig ang j ij .

Ang pinakamalaking daloy na madadaanan ng arko (x i, x j) ay tinatawag throughput mga arko at tinutukoy ng ij.

Malinaw na ang 0 £ j ij £ na may ij .

Sa source vertex x 0, ang flow value ay ang kabuuan ng mga daloy sa lahat ng arc na nagmumula sa vertex x 0, i.e. j=å i j 0i + .

Sa sink vertex x k, ang flow value ay ang kabuuan ng mga daloy sa lahat ng arc na pumapasok sa vertex x k, i.e. j=å i j ik - .

Para sa anumang intermediate vertex x i, ang kabuuan ng mga papalabas na daloy ay katumbas ng kabuuan ng mga papasok na daloy, i.e. å j j ij + =å k j ik - .

Sa Fig. Ipinapakita ng Figure 3.29 ang isang conditional network na naglalaman ng source vertex x 0, sink vertex x k at dalawang intermediate vertex x i at x j. Sa bawat arko, ang daloy at kapasidad ng kaukulang arko ay ipinahiwatig sa mga panaklong. Sa kasong ito, ang daloy na ibinibigay sa network ay katumbas ng j=(j 0i +j 0j), ang daloy na inalis mula sa network ay katumbas ng j=(j ik +j jk), ang daloy mula sa vertex x i hanggang sa vertex x j ay katumbas ng j ij. Para sa vertex x i mayroon tayong j 0i =(j ij +j ik), para sa vertex x j - j jk =(j 0j +j ij).



Kung ang hanay ng mga vertex ng isang graph ay nahahati sa dalawang magkahiwalay na subset, ang isa ay naglalaman ng source vertex at ang isa ay sink vertex, pagkatapos ay ang hanay ng mga arko na nagkokonekta sa dalawang set na ito ay bubuo paghiwa A i , ang kapasidad nito ay katumbas ng kabuuan ng kapasidad ng mga arko. Maaaring may ilang mga naturang pagbawas.

Ang talahanayan ay nagpapakita ng apat na mga seksyon para sa network sa Fig. 3.29

Paghiwa kapasidad ng arko Cij throughput
Mula sa 0 i C 0 j C i j C i k kasama si jk gupitin ang C(A i)
A 1 С 0i + С 0j
A 2 С 0j +С ij +С ik
A 3 C ik + C jk
A 4 С 0i +С ij +С jk

Halimbawa, para sa cut A 1 mayroon kaming X'=(x 0) at X\X'=(x i, x j, x k), para sa A 2 - X'=(x 0, x i) at X\X' =( x j, x k), para sa A 3 - X'=(x 0, x i, x j) at X\X'=(x k), para sa A 4 - X'=(x 0, x j) at X\X'=( x i, x k).

Malinaw, ang maximum na daloy ay nililimitahan ng pinakamababang throughput ng seksyon, i.e.

j max =min(С(A i))

Kaya, ang pinakamataas na daloy sa isang network na may ibinigay na kapasidad ng mga arko ay matatagpuan sa pamamagitan ng pagkalkula ng kapasidad ng mga pagbawas at pagpili ng pinakamababa sa kanila. Gayunpaman, sa solusyon na ito, ang pamamahagi ng daloy kasama ang mga arko ay nananatiling hindi kilala.

Maraming mga algorithm ang binuo upang hanapin ang pamamahagi ng daloy sa mga arko. Ang isang espesyal na lugar sa kanila ay inookupahan ng algorithm ng Ford-Fulkerson, ang kakanyahan nito ay markahan ang mga vertices ng graph.

Ang label ng isang graph vertex ay nagpapahiwatig ng posibilidad ng pagbabago ng daloy sa tuktok na ito at nagpapahiwatig ng pinagmulan ng pagbabagong ito. Sa Fig. 3.30 ay nagpapakita ng isang fragment ng network na nagpapaliwanag sa kakanyahan ng algorithm.

Kung sa kahabaan ng arko (x s, x i) posibleng tumaas ang daloy (j si< c si), то вершину х i следует пометить +s , что указывает на источник увеличения потока.

Kung sa kahabaan ng arko (x i, x j) posibleng tumaas ang daloy j ij< c ij , то вершину х j пометить +i . Это означает, что приращение потока Dj si пойдет по направлению дуги (х i , х j) от вершины х s .

Kung ang arko (x s, x i) ay puspos, i.e. j si =c si, kung gayon ang markang +s ay hindi mailalagay sa tuktok x i. Samakatuwid, kung ang vertex x i ay hindi minarkahan, ang vertex x j ay hindi maaaring lagyan ng label na +i.

Kung sa kahabaan ng arko (x t, x j) posible ang pagtaas ng daloy, i.e. j tj< c tj , то вершину х j следует пометить +t , что указывает на источник увеличения потока.

Kung ang vertex x j ay hindi minarkahan ng +i, pagkatapos ay upang mapataas ang daloy sa isang fragment ng network, dapat mong bawasan ang daloy sa arc (x i, x j) at idirekta ito sa iba pang mga arko ng fragment patungo sa drain. Upang ipahiwatig ito, ang isang label - j ay inilalagay sa vertex x i. Nangangahulugan ito na sa pangkalahatang pagtaas ng daloy sa lugar (x i, x j), dapat itong bawasan ng halaga ng Dj tj.

Kung ang arko (x t, x j) ay puspos, i.e. j tj =c tj , pagkatapos ay hindi mailalagay ang +t label sa vertex x j . Samakatuwid, kung ang vertex x j ay hindi minarkahan, ang vertex x i ay hindi maaaring lagyan ng label -j.

Kung ang parehong mga arko (x s, x i) at (x t, x j) ay puspos, na nangangahulugan na imposibleng dagdagan ang daloy ng Dj si at Dj tj, kung gayon imposibleng maglagay ng mga label sa vertices x i at x j at ipagpatuloy ang pagmamarka ng susunod na network vertex sa lababo vertex.

Ito ay kung paano nakakamit ang maximum na halaga ng daloy mula sa source vertices x s at x t along arcs hanggang sa sink vertices x i at x j.

Algoritmo ng Ford-Fulkerson:

hakbang 1: magtalaga ng mga indeks 0,1,2,...k sa lahat ng vertices ng graph; kung saan ang 0 ay ang index ng source vertex ng graph, ang k ay ang index ng sink vertex ng graph;

hakbang 2: italaga ang label na "0" sa inisyal na vertex;

hakbang 3: lahat ng walang markang vertex х i, kung saan ang mga unsaturated arc ay napupunta mula sa minarkahang vertex х s, ay minarkahan ng index na "+s", na nagpapahiwatig ng posibilidad ng pagtaas ng daloy mula sa vertex х s kasama ang arc (х s, х i );

hakbang 4: markahan ang lahat ng walang markang vertice x i mula sa kung saan ang mga arc (puspos o unsaturated) pumunta sa minarkahang vertex x j na may index na "-j", na nagpapahiwatig ng posibilidad na bawasan ang daloy sa vertex x j kasama ang arc (x i, x j);

hakbang 5: kung bilang resulta ng mga operasyong ito ang sink vertex x k ay minarkahan, pagkatapos ay sa pagitan ng paunang at panghuling vertex ng network ay mayroong ruta, ang lahat ng mga vertex ay naiiba at, hanggang sa isang palatandaan, ay minarkahan ng mga indeks ng nakaraang vertices, na bumubuo ng isang transition kung saan maaari mong taasan ang daloy at magpatuloy sa hakbang 6, kung hindi, tapos na ito.

hakbang 6: taasan ang daloy sa rutang nabuo sa hakbang 5 nang paisa-isa at pumunta sa hakbang 3.

Ang isang tanda ng pagtatapos ng algorithm ay ang imposibilidad ng pagmamarka ng isang lababo na vertex.

Halimbawa: Sa Fig. 3.31 ang graph ay ibinigay. Hanapin ang halaga ng maximum na daloy at ang pamamahagi nito sa network.

Sa bawat arko (x i, x j) ang halaga ng daloy at kapasidad ay ipinahiwatig - (j ij, c ij).

Ang lahat ng mga kalkulasyon ay ibinubuod sa dalawang talahanayan: talahanayan a)

x i hakbang ng pag-ulit
x 0
x 1 +0 +0 +0 +0, -3 -3 - -
x 2 +0;+3 +0;+3 +0 +0 +0 +0 -
x 3 +0;+1 +0;+1 +0;+1 +0 +0 - -
x k +1;+2;+3 +1;+2 +1;+2 +1;+2 +1,+2 +2 -

talahanayan b)

(x i, x j) kasama si ij hakbang ng pag-ulit
(x 0 , x 1)
(x 0 , x 2)
(x 0, x 3)
(x 1, x 3)
(x 1, x k)
(x 2 , x k)
(x 3, x 2)
(x 3 , x k)

Sa talahanayan a) sa bawat hakbang ng pag-ulit, ang mga posibleng label ay ipinahiwatig para sa bawat vertex ng graph, at sa talahanayan b) ang mga pagtaas ng daloy sa mga arko (x i, x j) ay ibinibigay. Ang mga saturated arc ng graph ay naka-highlight sa bold.

Bilang resulta ng unang hakbang sa pag-ulit, posible ang mga sumusunod na transition: n 0k =((x k, x 1, x 0); (x k, x 2, x 0); (x k, x 2, x 3, x 0 );( x k, x 2, x 3, x 1, x 0);

(x k, x 3, x 0); (x k, x 3, x 1, x 0)). Hayaang mapili ang n 0k =(x k, x 3, x 0). Ang pagdami ng daloy sa Dj=1 ay dumadaan sa rutang m=((x 0, x 3), (x 3, x k)).

Sa pangalawang hakbang, posible ang parehong mga paglipat. Hayaang piliin ang transition n 0k = (x k, x 3, x 0). Ang pagdami ng daloy sa Dj=1 ay dumadaan sa rutang m=((x 0, x 3), (x 3, x k)). Sa kasong ito, ang arko (x 3, x k) ay lumalabas na puspos, ibig sabihin, j 3k =c 3k =2.

Sa ikatlong hakbang, posible ang mga transition: n 0k = ((x k, x 1, x 0); (x k, x 2, x 0); (x k, x 2, x 3, x 0); (x k, x 2, x 3, x 1, x 0)). Hayaang mapili ang n 0k =(x k, x 2, x 3, x 1, x 0). Ang pagdami ng daloy sa Dj=1 ay napupunta sa rutang m=((x 0 , x 1), (x 1 , x 3), (x 3 , x 2), (x 2 , x k)). Sa kasong ito, ang arko (x 3, x 2) ay lumalabas na puspos, ibig sabihin, j 32 =c 32 =1.

Sa ikaapat na hakbang, posible ang mga transition: n 0k = ((x k, x 1, x 0); (x k, x 2, x 0)). Hayaang mapili ang n ok =(x k, x 1, x 0). Ang pagdami ng daloy sa Dj=1 ay napupunta sa rutang m=((x 0 , x 1), (x 1 , x k)),. Sa kasong ito, ang arko (x 0, x 1) ay lumalabas na puspos, ibig sabihin, j 01 =c 01 =2.

Sa ikalimang hakbang, posible ang mga transition: n 0k = ((x k, x 1, -x 3, x 0); (x k, x 2, x 0)). Hayaang mapili ang n ok =(x k, x 1, -x 3, x 0). Ang pagdami ng daloy sa Dj=1 ay napupunta sa rutang m=((x 0 , x 3), (x 3 , x 1), (x 1 , x k))),. Sa kasong ito, ang arko (x 0, x 3) ay lumalabas na puspos, ibig sabihin, j 03 =c 03 =3.

Sa ikaanim na hakbang, isang paglipat lamang n 0k = (x k, x 2, x 0) ang posible, dahil ang mga arko (x 0, x 1) at (x 0, x 3) ay puspos. Ang pagdami ng daloy ng Dj=1 ay napupunta sa rutang m=((x 0 , x 2), (x 2 , x k)),. Sa kasong ito, ang arko (x 0, x 2) ay lumalabas na puspos, ibig sabihin, j 02 =c 02 =1.

Sa ikapitong hakbang, walang isang solong paglipat mula sa x o hanggang x k ang posible, dahil ang mga arko (x 0, x 1), (x 0, x 3) at (x 0, x 2) ay puspos at imposibleng ilagay mga label sa vertices x 1, x 2 , at x 3 .