Գրաֆների տեսության մեջ **հոսքի ցանցը** (*flow network*), որը նաև կոչվում է տրանսպոտային ցանց, ուղղված գրաֆ է, որտեղ ամեն ծայրը ունի որոշակի թողունակություն, և որտեղ այդ ծայրերը ստանում են հոսք։ Հոսքի քանակը եզրերի վրա չի կարող գերազանցել եզրի թողունակությունը։ Հաճախ գործառնությունների հետազոտությունում (Operations Research) ուղիղ գրաֆն անվանվում է «ցանց», գագաթները կոչվում են «հանգույցներ», իսկ եզրերը կոչվում են «աղեղներ»։

Հոսքը պետք է բավարարի այն սահմանափակումները, որ որոշ հոսքերի գումարը դեպի հանգույց հավասար է դրանից դուրս եկող հոսքեի գումարին, բացառությամբ այն դեպքերի, երբ դա «աղբյուրն» է՝ հիմքը, որն ունի ավելի շատ դուրս եկող հոսք, կամ ընդունիչն է, վերջինս էլ ունի ավելի շատ մուտքային հոսք։ Ցանցը կարող է օգտագործվել որպես երթևեկության մոդել ճանապարհային համակարգի մեջ, հեղուկներ խողովակների մեջ, հոսանքներ էլեկտրական միացման մեջ կամ որևէ նման մի բան, որի մեջ ինչ-որ բան «ճանապարհորդում» է ցանցային հանգույցների միջոցով։

Նկարագրություն
--------------

{\displaystyle \ G(V,E)} -ն վերջավոր ուղղահայաց գրաֆ է, որում ամեն ծայրը {\displaystyle \ (u,v)\in E} ունի ոչ բացասական, իրական արժեքով թողունակություն՝ {\displaystyle \ c(u,v)}։ Եթե {\displaystyle \ (u,v)\not \in E} մենք ենթադրում ենք, որ {\displaystyle \ c(u,v)=0}։ Մենք տարբերակում ենք երկու գագաթներ՝ ինֆորմացիայի աղբյուրը {\displaystyle \ s}-ը և ընդունիչը {\displaystyle \ t}-ն։ Հոսքային ցանցը իրական ֆունկցիա է {\displaystyle \ f:V\times V\rightarrow \mathbb {R} } հետևյալ երեք հատկություններով բոլոր {\displaystyle \ u} և {\displaystyle \ v} հանգույցների համար։

|  |  |
| --- | --- |
| **Թողունակության սահմանափակումներ** (Capacity constraints)։ | {\displaystyle \ f(u,v)\leq c(u,v)}։ Հոսքը եզրով չի կարող գերազանցել իր թողունակությունը։ |
| **Շեղման սիմետրիկություն՝ համաչափություն** (Skew symmetry)։ | {\displaystyle \ f(u,v)=-f(v,u)}. Ցանցային հոսքը {\displaystyle \ u}ից դեպի {\displaystyle \ v}պետք է լինի հակադիր {\displaystyle \ v}-ից դեպի {\displaystyle \ u} ցանցային հոսքին (տես օրինակը)։ |
| **Հոսքի պահպանություն** (Flow conservation)։ | {\displaystyle \ \sum \_{w\in V}f(u,w)=0}, քանի դեռ {\displaystyle \ u=s} կամ {\displaystyle \ u=t}։ Ցանցային հոսքը դեպի հանգույց 0 է, բացառությամբ աղբյուրի (source), որը "արտադրում է" հոսք, և ընդունիչի, որը "սպառում", օգտագործում է հոսքը։ |

Նկատենք, որ {\displaystyle \ f(u,v)}-ն *հոսքային ցանցն* է {\displaystyle \ u}-ից դեպի {\displaystyle \ v}։ Եթե գրաֆն իրենից ներկայացնում է ֆիզիկական ցանց և եթե գոյություն ունի իրական հոսք, օրինակ, 4 միավոր {\displaystyle \ u}-ից դեպի {\displaystyle \ v}, և 3 միավորի իրական հոսք {\displaystyle \ v}-ից դեպի {\displaystyle \ u}, մենք ունենք {\displaystyle \ f(u,v)=1} և {\displaystyle \ f(v,u)=-1}։

Ծայրի **մնացորդային թողունակությունը** {\displaystyle \ c\_{f}(u,v)=c(u,v)-f(u,v)}-ն է։ Սա նկարագրում է **մնացորդային ցանցը**` որոշված {\displaystyle \ G\_{f}(V,E\_{f})}-ով, որը տալիս է *հասանելի* թողունակության որոշակի քանակություն։ Տեսնենք, որ դա մնացորդային ցանցում կարող է լինել ծայր {\displaystyle \ u}-իվ դեպի {\displaystyle \ v}, նույնիսկ եթե չկա ոչ մի ծայր` եզր {\displaystyle \ u}-ից դեպի {\displaystyle \ v} սկզբնական (օրիգինալ) ցանցում։ Հոսքերը հակադիր ուղղություններում կրճատվում (չեղարկվում) են՝ *նվազեցնելով* հոսքը {\displaystyle \ v}-ից դեպի {\displaystyle \ u}, նույնն է, թե *ավելացվում են* հոսքերը {\displaystyle \ u} -ից դեպի {\displaystyle \ v}։ **Աճող ճանապարհը**  ուղի է {\displaystyle \ (u\_{1},u\_{2},\dots ,u\_{k})} մնացորդային ցանցում, որտեղ {\displaystyle \ u\_{1}=s}, {\displaystyle \ u\_{k}=t}, և {\displaystyle \ c\_{f}(u\_{i},u\_{i+1})>0}. Ցանցն ունի մաքսիմում հոսք, այն և միայն այն դեօքում, եթե չկա աճող ճանապարհ մնացորդային ցանցում։

Եթե որևէ մեկին անհրաժեշտ է մոդելավորել ցանց ավելի քան մեկ սկզբնաղբյուրներով, ապա այդ աղբյուրը՝ **supersource**-ը ներկայացվում է գրաֆի տեսքով։ Սա պարունակում է գագաթ, որը ծայերով կապված է յուրաքանչյուր սկզբնաղբյուրի հետ անսահման թողունակությամբ, այսպիսով ստեղծվում է գլոբալ սկզբնաղբյուրի տպավորություն։ Ընդունիչների համար նմանատիպ կառուցվածքն էլ կոչվում է գերընդունիչ՝ **supersink**.

Օրինակ
------

Հոսքային ցանց, որը ցույց է տալիս հոսքը և թողունակությունը
Աջում մենք տեսնում ենք հոսքային ցանցը՝ նշված s-ով, սկզբնաղբյուրը t-ով, և չորս լրացուցիչ հանգույցներ։ Հոսքը և թողունակությունը նշանակված է {\displaystyle f/c}-ով։ Տեսնենք, թե ինչպես է ցանցն ապահովում շեղման համաչափությունը, թողունակության սահմանափակումները և հոսքի պաշտպանությունը։ Հոսքի ամբողջ գումարը s-ից դեպի t 5 միավոր է, որը կարող ենք հեշտությամբ նկատել այն փաստից, որ ամբողջ ելքային հոսքը s-ից 5 միավոր է, որը նաև մուտքային հոսքն է դեպի t։ Մենք գիտենք, որ ոչ մի հոսք չի հայտնվում կամ անհետանում ցանկացած հանգույցներում։

Մնացորդային ցանց վերևի հոսքային ցանցի համար, որը ցույց է տալիս մնացորդային թողունակությունները
Ներքևում տեսնում ենք տրված հոսքի համար մնացորդային ցանց։ Տեսնենք, թե ինչպես է, որ կա դրական մնացորդային թողունակություն ծայրերի վրա, որտեղ սկզբնական թողունակությունը 0 է, օրինակ ծայրի համար {\displaystyle (d,c)} է։ Այս հոսքը մաքսիմում հոսք չէ։ Այստեղ ճանապարհներում կա հասանելի թողունակություն {\displaystyle (s,a,c,t)}, {\displaystyle (s,a,b,d,t)} և {\displaystyle (s,a,b,d,c,t)}, որոնք աճող ճանապարհներ են։ Մնացորդային թողունակության առաջին ճանապարհը հետևյալն է՝
{\displaystyle \min(c(s,a)-f(s,a),c(a,c)-f(a,c),c(c,t)-f(c,t))}{\displaystyle =\min(5-3,3-2,2-1)=\min(2,1,1)=1}։ Նկատենք, որ այդ աճող ճանապարհը {\displaystyle (s,a,b,d,c,t)} գոյություն չունի սկզբնական (օրիգինալ) ցանցում, բայց մենք կարող ենք ուղարկել հոսք դրա միջով և դեռ ստանալ իրական հոսք։

Եթե սա իրական հոսք է, փաստորեն հնարավոր է լինի 2-ի հոսք a-ից դեպի b, և 1-ի հոսք b-ից դեպի a, բայց մենք միայն օժանդակում ենք **ցանցային** հոսքը։

Կիրառություններ
---------------

Պատկերացնենք մի շարք ջրատար խողովակներ ցանցին համապատասխան։ Յուրաքանչյուր խողովակ ունի որոշակի տրամագիծ, այսպիսով այն կարող է օժանդակել որոշ քանակությամբ ջրի հոսքը։ Այնտեղ, որտեղ խողովակները հանդիպում են, ջրի ամբողջ քանակությունը լցվում է դրանց մեջ, և այդ միացումը պետք է հավասար լինի ջրի դուրս եկող քանակությանը։ Մենք ունենք ջրի մուտք, որը մեր սկզբնաղբյուրն է (source), և ջրի ելք, որը մեր ընդունիչն է։ Հոսքն էլ պետք է լինի ջրելու այն հնարավոր եղանակը, որպեսզի հասնենք մուտքից դեպի ելքին։

Հոսքեր կարող ենք համարել տրանսպորտային ցանցում մարդկանց կամ էլեկտրականությունը էլեկտարական բաշխման համակարգում։ Նմանատիպ ֆիզիկական ցանցերում մուտքային հոսքը ցանկացած միջանկյալ հանգույցում, պետք է հավասար լինի այդ հանգույցի ելքային հոսքին։ Այս պաշտպանության սահմանափակումը ձևակերպվում է որպես Կիրչհոֆի հոսանքի օրենք (Kirchhoff's current law)։

Հոսքային ցանցերը կիրառվում են նաև էկոլոգիայում։ Ցանցային էկոհամակարգի դաշտի վերլուծությունը՝ մշակված Ռոբերտ Ուլյանովիչի և ուրիշների կողմից, ներառում է իր մեջ հասկացություններ ինֆորմացիայի տեսությունից և ջերմադինամիկաից ուսումնասիրելու այս ցանցերի էվոլյուցիան ժամանակի ընթացքում։

Ամենապարզ և ամենատարածված խնդիրրը, որը լուծվում է օգտագործելով ցանցային հոսքերը, դա այսպես կոչված մաքսիմում հոսքը գտնելն է, վերջինս էլ տրված գրաֆում ապահովում է ամենաշատ հնարավոր հոսքը աղբյուրից դեպի ընդունիչ։ Կան շատ ուրիշ խնդիրներ, որոնք լուծվում են մաքսիմում հոսքի ալգորիթմի օգնությամբ։ Մաքսիմում հոսքի խնդիրները կարող են լուծվել Ֆորդ-Ֆուլկերսոնի ալգորիթմի հիման վրա։ Մաքսիմում հոսքի մինիմում կրճատման թեորեմը ապացուցում է, որ մաքսիմում ցանցային հոսքը գտնելը հավասարազոր է մինիմում թողունակության կրճատումը գտնելուն, որը առանձնացնում է աղբյուրն ու ընդունիչը։

Բազմապրանքային հոսքերի խնդրում մենք ունենք բազմաթիվ աղբյուրներ և ընդունիչներ, և տարբեր "ապրանքատեսակներ", որոնք հոսքեր են տրված աղբյուրից դեպի ընդունիչը։ Այսպիսի օրինակ կարող են հանդիսանալ տարբեր ապրանքները, որոնք արտադրվել են տարբեր գործարաններում և պետք է մատակարարվեն տարբեր հաճախորդներին *նույն* տրանսպորտային ցանցով։

Մինիմում արժեքի հոսքի խնդրում ամեն ծայր {\displaystyle u,v} ունի տրված արժեք՝ {\displaystyle k(u,v)}, ինչպես նաև հոսքը ուղարկելու արժեքը՝ {\displaystyle f(u,v)} ծայրերով՝ {\displaystyle f(u,v)\cdot k(u,v)}. Այս խնդրի նպատակն է ուղարկել տրված հոսքի քանակությունը աղբյուրից դեպի ընդունիչ հնարավոր ցածր գներով։

Շրջանառության խնդրում մենք ունենք ավելի ցածր սահման {\displaystyle l(u,v)} ծայրերին, ի հավելումն ավելի բարձր սահմանի {\displaystyle c(u,v)}։ Ամեն ծայր ունի իր արժեքը։ Հաճախ հոսքի պաշտպանությունը պահում է *բոլոր* հանգույցները շրջանառության մեջ, և գոյություն ունի կապ ընդունիչից դեպի աղբյուրը։ Այս եղանակով մենք կարող ենք որոշել ամբողջ հոսքը {\displaystyle l(t,s)}-ով և {\displaystyle c(t,s)}-ով։ Հոսքը *շրջանառվում է* ցանցով, ինչպես տեսնում ենք խնդրի անվան մեջ։

Աղբյուրներ
----------

* Հոդվածի սկզբնական տարբերակը թարգմանվել է անգլերեն վիքիպեդիայի համանուն հոդվածից։

Արտաքին հղումներ
----------------

* Մաքսիմում հոսքի խնդիրը Archived 2008-01-11 at the Wayback Machine.
* Իրական գրաֆի օրինակներ
* Lemon C++գրադարան մաքսիմում հոսքերով, մինիմում արժեքի շրջանառության ալգորիթմներ
* QuickGraph Archived 2018-01-21 at the Wayback Machine. Գրաֆների կառուցվածքներ, ալգորիթմներ .Net-ի համար