Metoda de determinare a debitului maxim. Un exemplu de găsire a debitului maxim folosind metoda Ford-Fulkerson

Cicluri hamiltoniene

Graficul este dat sub forma unei matrice, unde celulele specifică costul deplasării între puncte. Simbolul ∞ este plasat pe diagonala principală pentru a elimina o cale fără sens în sine.

Deoarece Dacă matricea rezultată conține o coloană fără elemente zero, atunci vom găsi elementul minim din ea și îl vom scădea din toate elementele acestei coloane.

A B C D
A
B
C
D

Să însumăm toate elementele scăzute și să obținem limita inferioară a ciclului in= 2+2+3+2+1=10

1.2. Să evaluăm toate elementele zero ale matricei.

Este convenabil să prezentați estimarea zerourilor într-un tabel.

A B C D
A
B
C
D

θ=max γ=γ A C =2

1.3. Să împărțim setul de căi în două subseturi: Q A.C.– trasee care conțin arc (AC) și Q A.C.– trasee care nu conţin arc (AC). Pentru al doilea subset limita inferioară va fi: în / = în + θ =10+2=12.

Pentru a calcula limita pentru primul submult, trecem la matrice cu un ordin de mărime mai jos, tăind rândul A și coloana C. În noua matrice pentru a elimina calea inversă (CA), punem semnul ∞ în celula corespunzătoare.

Să calculăm limita matricei rezultate 2+0=2

și adăugați-l la marginea de jos a buclei. Această sumă în // =10+2=12 și va fi limita pentru primul subset.

1.4. Să comparăm limitele tuturor vârfurilor suspendate și să selectăm vârful cu cea mai mică limită. Dacă există două dintre aceste vârfuri, alegeți oricare dintre ele. Acesta este vârful Q A.C., a cărui limită inferioară =12.



Să alegem maximul estimărilor θ=max γ=γ BD =3

în / =12+3=15.

1.6. Efectuăm toate punctele ulterioare în mod similar cu cele anterioare.

Să alegem maximul estimărilor θ=max γ=γ C B =

în / =in+ θ=∞

A
D

Toate rândurile și coloanele acestei matrice conțin zerouri. Prin urmare, limita rămâne egală cu 12.

SARCINĂ. Aflați valoarea debitului maxim pe rețeaua de transport.

FORMULAREA PROBLEMEI.

Luați în considerare problema de transport în rețea ( I,D,G) cu capacități de arc date c(i,j).

Să selectăm două vârfuri fixe: s- sursa si t– scurgere. Transmite în flux în rețea s→t să numim funcția numerică f, definită pe o mulțime de arce și care satisface următoarele ecuații și inegalități liniare:

0≤ f(i,j) ≤c(i,j) pentru orice (i,j)

Necesar pentru a maximiza o variabilă X

Tăiați Lîntr-o rețea care separă vârfurile s t numită mulţimea arcelor

Oricum s→t conține cel puțin un arc tăiat.

CRITERII DE OPTIMITATE: pe o rețea reală, valoarea unui flux arbitrar nu depășește debitul tăieturii, iar valoarea debitului maxim este egală cu debitul minim al tăierii.

EXEMPLU 3.12.

M 9 K

M 8K

EXEMPLU 3.13.

M2K

SOLUŢIE :

Capacitatea arcului de ieșire (T,B) depășește capacitatea totală a arcelor care intră în vârful corespunzător. Pentru ca rețeaua să devină reală, înlocuim c(T,B)=5.

Să găsim și să calculăm valoarea capacităților de producție ale tuturor tăierilor. (K,V) – (T,V) tăiat cu debit minim =6. Prin urmare, debitul maxim =6.

O rețea cu mai multe surse și chiuvete poate fi redusă la o rețea cu o singură sursă și chiuvetă.

EXEMPLU. Să fie mai multe surse S și chiuvete T (problema de transport). Să extindem rețeaua adăugând două noduri s*, t* și toate arcele (s*, S) , (T,t*). Să definim funcția de capacitate prin setare

METODA DE PLASARE A MARCILOR.

1. Fluxul inițial f(i,j) = 0.
Să atribuim etichete vârfurilor acestei rețele care vor avea forma (i+, ε) sau
(i - , ε). Să marchem sursa (-, ∞), acestea . ε(s)= ∞.

2. Pentru orice vârf marcat i selectați toate vârfurile neetichetate j pentru care f(i,j) și adăugați note la ele (i+, ε(j)), Unde ε(j)=min[ε(i), f(i,j)]. Acele vârfuri care vor rămâne nemarcate, dar pentru care f(i,j)>0, atribui nota (i-, ε(j)).

Repetăm ​​această operațiune până când scurgerea este marcată. Dacă fluxul rămâne neetichetat, atunci debitul găsit este maxim, iar setul de arce care leagă vârfurile marcate cu cele nemarcate formează o tăietură minimă.

3. Lăsați stocul să fie etichetat (j+, ε(t)), Apoi f(j,t)înlocui cu f(j,t)+ε(t). Dacă stocul este marcat (j-, ε(t)), Acea f(j,t)înlocui cu f(j,t)-ε(t). Să mergem sus j. Dacă j are un semn (i+, ε(j)), apoi înlocuim f(i,j) pe f(i,j)+ε(t), si daca (i-, ε(j)), f(j,i)înlocui cu f(j,i)-ε(t). Să mergem sus i. Repetăm ​​această operație până ajungem la sursă s. Schimbarea debitului se oprește, toate marcajele sunt șterse și treceți la pasul 2

EXEMPLU 3.14.

M 4K

1 pas A → (-, ∞) M → (A+,8) P → (A+,3) K → (P+,3) T → (P+,3) B → (T+,3) f(T,B)=3 f(P,T)=3 f(A,P)=3 f(P,K)=0 f(A,M)=0 f(M,P)=0 f(M,K)=0 f(M,T)=0 f(K,T)=0 f( K,B)=0
Pasul 2 A → (-, ∞) M → (A+,8) P → (M+,1) K → (M+,4) T → (M+,2) f(K,B)=3 f(M,K)=3 f(A,M)=3 f(T,B)=3 f(P,T)=3 f(A,P)=3 f(P,K)=0 f(M,T)=0 f(M,P)=0 f(K,T)=0
Pasul 3 A → (-, ∞) M → (A+,5) P → (M+,1) K → (M+,1) T → (M+,2) B → (T+,2) f(T,B)=5 f(M,T)=2 f(A,M)=5 f(K,B)=3 f(M,K)=3 f(P,T)=3 f(A,P)=3 f(P,K)=0 f(M,P)=0 f(K,T)=0
Pasul 4 A → (-, ∞) M → (A+,3) P → (M+,1) K → (M+,1) T → (P+,1) B → (T+,1) f(A,M)=6 f(T,B)=6 f(P,T)=4 f(M,P)=1 f(M,T)=2 f(K,B)=3 f(M,K)=3 f(A,P)=3 f(P,K)=0 f(K,T)=0
Pasul 5 A → (-, ∞) M → (A+,2) P → (M-,1) K → (M+,1) T → (K+,1) B → (T+,1) f(A,M)=7 f(M,K)=4 f(K,T)=1 f(T,B)=7 f(P,T)=4 f(M,P)=1 f( M,T)=2 f(K,B)=3 f(A,P)=3 f(P,K)=0
Pasul 6 A → (-, ∞) M → (A+,1) Debitul este optim f=10 Tăiere minimă: MT-MR-MLA

SARCINĂ. Găsiți cel mai mare flux din rețea

ALGORITM

Să notăm vârful s= x 0 . Toate celelalte sunt x i.

Etapa 1.

1. Alegeți orice cale ale cărei arce nu sunt saturate.

2. Creștem cantitatea de curgere de-a lungul acestei căi cu una până când nu există un arc saturat în ea.

Continuăm procesul de creștere a debitului până când se construiește debitul complet, adică. orice cale va conține cel puțin un arc saturat.

Etapa 2.

2. Dacă х i este deja un vârf marcat, atunci se marchează (+i) toate vârfurile neetichetate la care merg arcele nesaturate de la х i, iar cu indicele (–i) toate vârfurile nemarcate de la care merg arcele cu flux diferit de zero. la х i.

3. Dacă în urma acestui proces este marcat un vârf t, apoi între sȘi t există o cale ale cărei toate vârfurile sunt marcate cu numerele vârfurilor anterioare. Creștem debitul în toate arcurile acestei căi cu unul dacă, atunci când trecem de la s La t orientarea arcului coincide cu direcția de mișcare și se reduce cu unu dacă arcul are orientarea opusă. Să trecem la pasul 1.

4. Când vârful t este imposibil de marcat procesul este terminat și fluxul rezultat este cel mai mare flux al rețelei.

NOTĂ. Puteți trece la etapa 2 fără a finaliza prima etapă (vezi exemplul 3.16).

EXEMPLU 3.15.

9

SOLUŢIE:

S-a găsit un flux complet pe o anumită rețea de transport. Arcurile saturate sunt evidențiate

În această rețea, puteți marca și vârful final, iar rezultatul marcajului va fi același. Schimbând fluxul, obținem o rețea în care este imposibil să se marcheze vârful final, deci debitul din acesta este cel mai mare și egal cu 10.

EXEMPLU 3.16.

8 2 1

Un flux incomplet a fost găsit pe o anumită rețea de transport

Să marchem rețeaua și să creștem fluxul în ea conform algoritmului. Primim

În această rețea, puteți marca și vârful final, iar rezultatul marcajului va fi același. Schimbând fluxul, obținem o rețea în care este imposibil să se marcheze vârful final, deci debitul din acesta este cel mai mare și egal cu 6.

Secțiunea IV. PROGRAMARE DINAMICĂ.

Programarea dinamică este utilizată pentru a găsi soluții optime în mai multe etape. De exemplu, planificarea pe termen lung pentru înlocuirea echipamentelor; activităţile industriei de-a lungul unui număr de ani. Utilizează principiul optimității, conform căruia orice soluție parțială nouă trebuie să fie optimă în raport cu starea atinsă.

Este mai bine să rezolvi o problemă simplă de mai multe ori decât să rezolvi una dificilă o singură dată.

PROBLEMA 1. Despre traseul cel mai avantajos între două puncte.

Este necesară construirea unei căi care să leagă două puncte A și B, dintre care al doilea se află la nord-est de primul. Pentru simplitate, să presupunem că trasarea unei căi constă dintr-o serie de pași, iar la fiecare pas ne putem deplasa fie spre nord, fie spre est. Apoi orice cale este o linie întreruptă în trepte, ale cărei segmente sunt paralele cu una dintre axele de coordonate. Costurile de construire a fiecăreia dintre aceste secțiuni sunt cunoscute.

EXEMPLU 4.1. Găsiți calea minimă de la A la B.


Ultimul pas este realizarea T.V. Înainte de ultimul pas, am putea fi în puncte de unde am putea ajunge la T.V. într-un singur pas. Există două astfel de puncte (sistemul ar putea fi într-una din două stări). Pentru fiecare dintre ele, există o singură opțiune pentru a ajunge la t.V: pentru unul - deplasați-vă spre est; pentru celălalt – spre nord. Să scriem costurile 4 și 3 în fiecare caz.

4

Acum să optimizăm penultimul pas. După pasul anterior, am putea ajunge în unul dintre cele trei puncte: C 1, C 2, C 3.

Pentru punctul C 1, există un singur control (să-l marchem cu o săgeată) - deplasați-vă spre est, iar costurile vor fi 2 (la acest pas) + 4 (la următorul pas) = ​​6. În mod similar, pentru articolul C 3 costurile vor fi 2+3=5. Pentru t.C 2 există două comenzi: mergi spre est sau spre nord. În primul caz, costurile vor fi 3+3=6, iar în al doilea caz – 1+4=5. Aceasta înseamnă că controlul optim condiționat este să mergi spre nord. Să-l marchem cu o săgeată și să introducem costurile corespunzătoare.

2 4

SARCINA 2. Despre încărcarea mașinii (despre rucsac).

Sunt N articole. Greutate cunoscută un i și valoare φ i fiecare obiect. Necesar pentru a umple un rucsac capabil să susțină o greutate ≤ R , un astfel de set de articole care ar avea cea mai mare valoare.

Procesul de încărcare a unui rucsac poate fi împărțit în N pași. La fiecare pas decidem intrebarea: sa luam sau nu acest articol? La fiecare pas sunt doar 2 controale: control =1, daca luam acest item; și 0 – dacă nu o luăm.

Starea sistemului înainte de pasul următor este caracterizată de greutatea S, care rămâne încă la dispoziția noastră până la sfârșitul încărcării complete după ce pașii anteriori au fost finalizați (unele articole au fost deja încărcate), adică. cantitatea de spațiu liber din rucsac.

ALGORITM.

1. Să începem de la ultimul pas. Să facem diverse presupuneri despre spațiul liber din rucsac: S=0,1,…R. Să punem ultimul articol în rucsac dacă are suficient spațiu de depozitare.

2. La fiecare pas anterior, pentru toate stările posibile S, avem în vedere 2 opțiuni: luați sau nu luați obiectul. Să găsim câștigul în fiecare caz ca suma câștigurilor la pasul curent și la următorul pas deja optimizat. Vom introduce rezultatele în tabelul auxiliar.

3. La prima etapă, considerăm doar singura stare posibilă S=R.

4. Să găsim o soluție „deplasându-ne înapoi”, adică. Luând controlul optim la prima etapă, schimbăm starea sistemului la a doua etapă: S=R– x 1 a 1și alegeți controlul optim x 2 pentru această stare. etc.

EXEMPLU 4.2.

Datele inițiale

P1 P2 P3 P4
greutate un i
costj i

Masa principală

S i=4 i=3 i=2 i=1
x 4 W 4 x 3 W 3 x 2 W 2 x 1 W 1

Masa auxiliara.

stat X A S- A j i (x) W i+1 (S- A) j i (x)+ W i+1 (S- A)
i=3 S=5
S=6
S=7
S=8
S=9
S=10
i=2 S=5
S=6
S=7
S=8
S=9
S=10
i=1 S=10

Răspuns: x 4 =0; x 3 =1; x 2 =0; x 1 =1; W=15

SARCINA 3. Cu privire la distribuirea resurselor.

Există N întreprinderi P 1, P 2,… P N, fiecare generând venituri φ k (x) dacă i se alocă o resursă în valoare de x. Se cere distribuirea resursei disponibile în cantitatea A între obiecte astfel încât venitul total să fie maxim.

Fie x k cantitatea de resursă alocată întreprinderii a k-a. Apoi problema luată în considerare este redusă la o problemă convențională de programare neliniară.

Să formulăm problema ca o problemă de programare dinamică.

Pentru primul pas vom face investiția fondurilor în întreprinderea P 1, pentru al doilea - în P 2 etc. Sistemul gestionat în acest caz este fondurile care sunt distribuite. Starea sistemului înainte de fiecare pas este caracterizată de un parametru - stocul disponibil de fonduri neinvestite încă. În această problemă, controalele etapelor sunt fondurile alocate întreprinderilor. Este necesar să se găsească controlul optim (x 1, x 2,...x N), la care venitul total este maxim:

1,1 0,5
S=3 0,1 0,5 1,1 1,5
S=4 0,1 0,5 2,1 1,5
S=5 0,1 0,5 2,5 3,1 2,5 2,5
i=1 S=5 0,5 1,5 3,1 1,1 3,1 3,5 2,1 2,6

Răspuns: x 1 =1; x 3 =0; x 3 =4; W=3,5

ALGORITM GENERALIZAT

1. Descrieți sistemul. Adică, aflați ce parametri caracterizează starea sistemului controlat înainte de fiecare pas. Este important să puteți seta sarcina corect și „modest”, fără a o supraîncărca cu detalii inutile, simplificând pe cât posibil descrierea sistemului controlat.

2. Împărțiți operația în pași (etape). Toate restricțiile rezonabile impuse conducerii trebuie luate în considerare aici. Pasul trebuie să fie suficient de mic, astfel încât procedura de optimizare a controlului pasului să fie destul de simplă; iar pasul, în același timp, să nu fie prea mic pentru a nu face calcule inutile care complică procedura de găsire a soluției optime, dar să nu conducă la o modificare semnificativă a optimului funcției obiectiv.

3. Aflați setul de comenzi de pas x i pentru fiecare pas și restricțiile impuse acestora.

4. Determinați ce câștig aduce controlul x i la pasul i, dacă înainte de aceasta sistemul era în starea S, adică. notează funcțiile de plată:

w i =f i (S, x i)

5. Determinați cum se modifică starea sistemului sub influența controlului x i la prima etapă, adică. scrieți funcții de schimbare a stării.

S / =φ i (S, x i)

6. Notați principala ecuație de programare dinamică recurentă, exprimând câștigul optim condiționat printr-o funcție deja cunoscută

W i (S)= max(f i (S, x i)+W i+1 (φ i (S, x i)))

7. Efectuați optimizarea condiționată a ultimului pas, făcând diverse ipoteze despre modul în care s-a încheiat penultimul pas și pentru fiecare dintre aceste ipoteze găsiți controlul condiționat (selectat în funcție de condiția ca pasul să se încheie cu ceva) optim la ultimul pas.

W m (S)= max(f m (S, x m))

8. Efectuați optimizarea condiționată, începând de la penultimul pas și terminând cu primul pas (backing back).

9. Efectuați optimizarea controlului necondiționat, „citind” recomandările corespunzătoare la fiecare pas: luați controlul optim găsit în primul pas și schimbați starea sistemului, găsiți controlul optim pentru starea găsită în a doua etapă etc. până la ultimul pas.

PRINCIPIUL OPTIMALITATII. Oricare ar fi starea sistemului înainte de pasul următor, este necesar să alegeți controlul la acest pas, astfel încât câștigul la acest pas plus câștigul optim la toate etapele ulterioare să fie maxim.

Principiul programării dinamice nu presupune ca fiecare pas să fie optimizat separat, independent de ceilalți. Ce rost are să alegem un control a cărui eficacitate este maximă la un anumit pas, dacă acest pas ne va lipsi de posibilitatea de a câștiga bine la pașii ulterioare?

În practică, există cazuri când o operațiune trebuie să fie planificată pentru o perioadă de timp nedefinită. Modelul pentru un astfel de caz este un proces controlat în pași infiniti, în care toți pașii sunt egali. Aici funcția câștigătoare și funcția de schimbare a stării nu depind de numărul pasului.

Secțiunea V. MODELARE SIMULARE

Caz extrem: dacă matricea este toată de aceeași culoare - răspunsul este 0.
Să adăugăm o sursă fictivă și să drenăm. De la sursă la toate vârfurile albe desenăm margini cu o greutate de B (costul revopsirii lor în negru). De la vârfurile negre la scurgere desenăm margini cu o greutate de W (costul revopsirii în alb). Și între toate vârfurile învecinate (fie că sunt aceleași sau culori diferite) plasăm o muchie cu o greutate de G (linie gri). Valoarea debitului maxim va fi răspunsul la problemă.
Sursa: Olimpiada școlară de informatică din întreaga Ucraina, 2007, Ziua 1
  • Problema constrângerii vârfurilor. Să presupunem că trebuie să găsim valoarea debitului maxim și se impune o restricție asupra vârfurilor cu privire la cât de mult pot trece.
    Soluţie
    Tot ce ne trebuie este să împărțim fiecare vârf în două, iar între ele să punem o muchie cu o greutate egală cu limitarea capacității acestui vârf.
  • Incizie minimă. Dan Contele. Câte vârfuri trebuie eliminate astfel încât să nu existe cale de la A la B?
    Soluţie
    În problema clasică de tăiere minimă, marginile trebuie îndepărtate. Nici o problemă! Să împărțim vârfurile în 2 și să punem o muchie între ele cu o greutate de 1. Apoi răspunsul la problemă este găsirea tăieturii minime în grafic (care este debitul maxim).
    Sursa: Școala de iarnă din Harkov despre programare, 2009, Ziua 3
  • Scriitor de poezie. Există un automat finit determinist cu o stare inițială A și o stare finală B. Fiecare tranziție este specificată printr-un triplu de numere (i, j, k), o tranziție de la starea i la starea j de-a lungul muchiei k.
    După trecerea prin automat de la i la j de-a lungul muchiei k, toate tranzițiile de la i de-a lungul muchiei k, precum și toate tranzițiile la j de-a lungul muchiei k, sunt șterse. Trebuie să imprimați numărul de căi de la A la B de-a lungul unui astfel de automat.
    Soluţie
    Problema se rezumă la găsirea numărului maxim de căi fără ca mai mult de o margine de aceeași culoare să iasă dintr-un vârf. Să reducem problema la găsirea debitului maxim. Pentru fiecare vârf, vom crea k+1 vârfuri în rețeaua reconstruită. Primul vârf va fi intrarea, vârfurile rămase vor reprezenta culorile. Din vârful de intrare desenăm de-a lungul unei muchii cu capacitatea 1 la fiecare dintre k vârfuri corespunzătoare culorii. Din vârfurile corespunzătoare culorii i desenăm toate marginile culorii i la intrările capetelor muchiilor. După ce am găsit debitul maxim într-o astfel de rețea, obținem numărul maxim de căi care satisfac proprietatea necesară.
  • Colectarea monedelor. Mânca n colecționari și m tipuri de monede. Pentru a vă alătura clubului, trebuie să aveți cel puțin o monedă de fiecare tip. Tu (ești numărul 1) poți schimba monede existente cu colecționari. Orice colecționar va schimba o monedă cu moneda sa A la moneda ta b dacă are Mai mult un tip de monedă Ași nu există o singură monedă ca b. Tu, la rândul tău, poți încălca această regulă. Trebuie să aduni cât mai multe tipuri de monede în funcție de o situație cunoscută de la toți colecționarii.
    Soluţie
    Să construim o rețea. Să creăm câte un vârf pentru fiecare tip de monedă. Aceste vârfuri vor corespunde monedelor tale. Trebuie să colectăm cât mai multe monede unice, așa că tragem marginea de capacitate 1 la chiuvetă din fiecare astfel de vârf. La vârfurile corespunzătoare monedelor pe care le aveți inițial, vom trage o margine a cărei capacitate este egală cu numărul de astfel de monede pe care le aveți.
    Pentru fiecare membru al clubului (cu excepția unuia, adică tu) vom crea câte un vârf. Acest vârf poate accepta cel mult o monedă pe care nu o are și poate da
    cel mult k-1 monede, dintre care are k (k > 1). Desigur, membrul clubului dă o monedă în schimbul uneia primite.
    Astfel, fiecărui astfel de vârf este necesar să se tragă o margine de capacitate de 1 dintre vârfurile corespunzătoare monedelor pe care acest membru al clubului nu le are. Și din aceste vârfuri trebuie să desenați muchii cu capacitatea k i - 1 până la vârful i, corespunzătoare monedelor din care un membru al clubului are mai multe.
    Rețeaua construită reflectă procesele de schimb din club. Fluxul maxim într-o astfel de rețea va fi egal cu numărul maxim de monede care pot fi colectate de dvs.
    Sursa: Școala de iarnă din Harkov despre programare, 2009, Ziua 4
  • Circulaţie. Sistemul de răcire a reactorului este un set de conducte care leagă unitățile. Lichidul curge prin țevi, iar pentru fiecare țeavă direcția în care ar trebui să curgă prin ea este strict definită. Componentele sistemului de răcire sunt numerotate de la 1 la N. Sistemul de răcire trebuie proiectat astfel încât pentru fiecare componentă pe unitatea de timp, cantitatea de lichid care curge în componentă să fie egală cu cantitatea de lichid care iese din componentă. . Fiecare conductă are o capacitate c ij . În plus, pentru a asigura o răcire suficientă, este necesar ca cel puțin l ij unități de lichid să curgă prin conductă pe unitate de timp. Adică, pentru o conductă care duce de la nodul i la nodul j, trebuie satisfăcut l ij ≤ f ij ≤ c ij.
    Este oferită o descriere a sistemului de răcire. Este necesar să aflați cum poate fi trecut lichidul prin țevi, astfel încât să fie îndeplinite toate condițiile specificate.
    Soluţie
    Aceasta este o problemă de găsire a circulației într-o rețea cu restricții mai mici date pe margini. Dacă un flux trebuie să treacă de-a lungul marginii (u, v) în segmentul , atunci rețeaua reconstruită va avea trei margini (de la, până la, greutate): (u, v, r - l), (S, v, l) , (u, T, l). S, T - a introdus suplimentar dren și, respectiv, sursă. De fapt, trecem de-a lungul marginii debitul minim necesar, apoi îl echilibrăm astfel încât să obținem circulație.
  • Rezolvați problema găsirii debitului maxim într-o rețea de transport folosind algoritmul Ford-Fulkerson și construiți o secțiune de rețea S.
    Date inițiale:
    Având în vedere o rețea S(X,U)
    - sursa rețelei; - dren de rețea, unde ∈X; ∈X.
    Valorile capacității arcului sunt specificate în direcția de orientare a arcului: de la indicele i la indicele j.

    r = 39; r = 44; r = 33; r = 53; r = 10;
    r = 18; r = 95; r = 16; r = 23; r = 61;
    r = 81; r = 71; r = 25; r = 15; r = 20

    1. Setați un debit zero pe rețea (pe toate arcurile, valoarea debitului este 0). Debitul zero este debitul inițial permis în rețea. Valoarea debitului pe fiecare arc va fi indicată în afara capacității arcului.). Valoarea debitului egală cu „0” nu este specificată.
    2. Selectați în rețea (arbitrar) o cale care duce de la vârful x0 la vârful x7:
    X0-X1-X4-X6-X7
    3. Găsiți și crește debitul cu această cantitate. Edge X1-X4 este marcat ca considerat.


    4. Alegeți o altă cale, de exemplu: X0-X2-X5-X7, găsiți și crește debitul cu această cantitate. Edge X0-X2 este marcat ca considerat.


    5. Alegeți o altă cale, de exemplu: X0-X3-X2-X5-X7, găsiți și măriți debitul cu această cantitate. Edge X3-X2 este marcat ca considerat.


    6. Nu mai există căi de la X0 la X7, să însumăm creșterea debitului: 25+10+20=55.
    Concluzie: debitul maxim este de 55.

    2) Construiți o secțiune a rețelei S.
    Procedura de „marcare a vârfurilor”.
    Stare inițială: toate nodurile sunt neetichetate.
    Vârfului X0 i se atribuie o etichetă. Toate vârfurile pentru care arcul nu este saturat li se atribuie semne (cercuri roșii)


    Definim arce tăiate minime: acestea sunt arce ale căror începuturi sunt la vârfuri marcate și ale căror sfârșite sunt la vârfuri neetichetate.
    Acestea sunt arcurile:
    Astfel, tăierea minimă a acestei rețele
    Calculul valorii debitului maxim

    La planificarea distribuției raționale a produselor în rețeaua de distribuție, este necesară coordonarea capacității canalului cu nevoile clienților și cu capacitatea fabricii de producție. Această clasă de probleme se rezolvă prin găsirea debitului maxim.

    Să considerăm o rețea de distribuție (Fig. 4.21), în care punctele 0 (intrarea, de exemplu, depozitul unui producător de produse finite) și P (ieșire, centre de distribuție, depozite ale organizațiilor de comerț cu ridicata și cu amănuntul, consumatori) și fiecare arc (segment) puncte de legătură i Și j, se asociaza numarul dij > 0, numit debitului arcuri. Valoarea debitului caracterizează cantitatea maximă admisă de flux de material care poate trece de-a lungul arcului corespunzător pe unitatea de timp.

    Orez. 4.21.

    Cantitatea de produse care trec de-a lungul unui arc de la i inainte de j , îl vom numi un flux de-a lungul arcului ( i ,j ) și notat cu . Este evident că

    Dacă luăm în considerare că întregul flux de material care intră în punctul intermediar al rețelei trebuie să iasă complet din acesta, obținem

    Din cerința naturală de egalitate a fluxurilor la intrare și la ieșire avem

    Vom numi valoarea lui Z valoarea debitului în rețea și vom pune problema maximizării Z în condițiile de mai sus.

    Găsirea debitului maxim se reduce la găsirea debitului tăieturii minime.

    Să luăm în considerare un algoritm de căutare universal sub formă de matrice.

    Etapa inițială a algoritmului constă în construirea unei matrice D 0, în care sunt introduse valorile de debit (pentru un arc neorientat luăm valorile simetrice ale elementelor matricei).

    Principalii pași ai algoritmului sunt găsirea unei anumite căi și corectarea fluxului de-a lungul acestei căi.

    Când găsim o cale, folosim un proces de marcare. Marcam cu simbolul * rândul și coloana zero a matricei (intrare în rețea). În a 0-a linie căutăm , marcați coloanele corespunzătoare cu indici

    și mutați etichetele coloanelor pe rânduri. Apoi luăm al-lea rând marcat, căutăm în el o coloană nemarcată cu , la care potrivim etichetele de index

    Transferăm etichetele coloanei pe rânduri și continuăm acest proces până când este marcată a n-a coloană.

    Apoi, folosind indici, aflăm calea care a condus la vârful η-lea folosind indici și reducem capacitatea arcelor drumului (elementele matricei) cu V n și crește elementele simetrice cu aceeași cantitate.

    Această procedură continuă până la marcare n -topurile nu vor deveni imposibile.

    Fluxul maxim poate fi găsit prin scăderea din matricea originală D 0, obţinută după corectarea de mai sus a matricei de capacitate:

    Exemplul 4.4

    Producția este situată în Moscova. Pentru a distribui produse, compania atrage intermediari care lucrează cu compania prin centre de distribuție la diferite niveluri. În partea europeană a Rusiei există o întreprindere angro 1, deservită de un centru de distribuție central. Întreprinderea de vânzare cu ridicata 2 operează în străinătate apropiată (Ucraina, Belarus) și este deservită de un centru de distribuție regional. Compania are proprii clienți pe piața locală (Moscova și regiunea Moscovei) - retaileri care primesc produse din centrul de distribuție al orașului. Centrele de distribuție regionale și orașe sunt reaprovizionate din centrul de distribuție central.

    Să evidențiem un fragment al rețelei de distribuție:

    • depozitul de produse finite al unei întreprinderi de producție;
    • centru central de distribuție;
    • centru regional de distribuție;
    • centrul de distribuție al orașului;
    • două întreprinderi angro;
    • punct de vânzare cu amănuntul deținut de companie;
    • consumatori.

    Orez. 4.22.

    Să desemnăm fiecare legătură a rețelei de distribuție cu un număr și să punem capacitatea deasupra arcurilor. Capacitatea de transfer, în funcție de tipul de legătură, poate fi exprimată în termeni de volumul capacității de producție, nevoia (cererea) planificată a consumatorilor și capacitatea pieței.

    Graficul rețelei de distribuție a produselor este prezentat în Fig. 4.23. Să construim o matrice D 0, în care introducem valorile capacităților de debit ale legăturilor rețelei de distribuție (Fig. 4.24).

    Orez. 4.23.

    Orez. 4.24.

    Din rândul zero marchem vârfurile (rândurile-coloane) 1, 2 și 3 cu indici μ = 0 și V, egal cu 30,10 și 10.

    Din linia marcată 1, marcați vârfurile 4 și 5 cu indici μ = 1 și V4 = min (30,15) = 15, V5 = min (30,10) = 10.

    Din linia 3 se marchează vârful 6 și, în final, din linia 4 – vârful 7 (Fig. 4.25).

    Orez. 4.25.

    Mergând înapoi de-a lungul μ găsim calea: până la vârful 7 de la 4, până la vârful 4 de la 1, până la vârful 1 de la 0; elemente de reglare D 0 pe valoarea debitului V7 = 15.

    Următorul pas oferă o cale cu flux 5 (Fig. 4.26).

    Orez. 4.26.

    Următorul pas oferă rezultatul prezentat în Fig. 4.27.

    Orez. 4.27.

    Nu mai este posibilă marcarea. De aici obținem matricea debitului maxim (Fig. 4.28).

    Orez. 4.28.

    Ca urmare a aplicării algoritmului de găsire a debitului maxim în rețea, rezultatele prezentate în Fig. 4.29. Perechile de numere din paranteze prezentate pe arcele graficului indică debitul maxim al arcului și volumul recomandat de bunuri furnizate rețelei.

    Algoritm pentru calcularea debitului maxim în rețele

    PASUL 1. Misiuni inițiale. Valoarea curentă A t Debitului maxim din rețea i se atribuie valoarea 0. PASUL 2. Selectarea rutelor independente în rețea și determinarea fluxurilor în acestea. Din întregul set de rute posibile din rețea, de la sursă la absorbție, selectăm rute independente M 1 , … , M k, neavând vârfuri comune cu excepția celui inițial (sursa v și) și final (scurgere v cu). Pentru fiecare traseu selectat M i(1 £ i£ k) determina debitul maxim A(M i).PASUL 3. Corectarea valorii curente a debitului maxim din retea. Adăugăm cele găsite pe PASUL 2 valorile debitelor maxime pe trasee independente M 1 , … , M k la debitul maxim total actual al rețelei: A t:= A t + A(M 1)+ A(M 2)+…+ A(M k)PASUL 4. Corecția rețelei. Găsit pe PASUL 2 debite maxime A(M 1), … , A(M k)scăzut din capacitatea arcelor de rețea corespunzătoare. Arcurile cu capacitate reziduală zero sunt îndepărtate. PASUL 5. Verificarea finalizării algoritmului. Dacă după corectare nu mai există rute de la sursă în rețea v și a stoca v cu, atunci debitul maxim necesar în rețea este egal cu curentul găsit A:= A t, algoritmul se termină deoarece toată capacitatea rețelei a fost epuizată. Dacă în rețeaua ajustată există rute de la sursă v și a stoca v cu, apoi du-te la PASUL 2și continuarea execuției algoritmului . Exemplul 2. Găsiți debitul maxim în rețea din Fig. 1.15 utilizând acest algoritm. Soluție.PASUL 1. Atribuții inițiale. A t: = 0.

    Iterare. PASUL 2. Selectarea rutelor independente în rețea și determinarea fluxurilor în acestea. La fel de M 1 ia traseul( v și =V 1 , V 2 , V 5 , v s =V 7), considerat în exemplul 1. Pentru el A(M 1) = 10.

    De asemenea, este ușor să izolați independent M 1 traseu M 2 = (v și =V 1 , V 3 , V 6 , v s =V 7). Să calculăm debitul maxim pentru acesta și să ajustăm debitul arcurilor: A(M 2)= min{d 13 ,d 36 ,d 67 } = min{45, 40, 30} = 30. d 13¢ =d 13 - 30 = 15,d 36 ¢ =d 36 - 30 = 10,d 67 ¢ =d 67 - 30 = 0.

    PASUL 3. Corectarea valorii curente a debitului maxim din retea. A t:= A t + A(M 1)+ A(M 2) = 0 + 10+ 30 = 40.PASUL 4. Corecția rețelei. Găsit pe PASUL 2 debite maxime A(M 1), A(M 2) în trasee M 1 , M 2 se scade din capacitatea arcurilor lor. Arcurile cu capacitate reziduală zero sunt îndepărtate. Rezultatul este dat în Fig. 1.16 a. a) b) Fig. 1.16. Rezultatul corectării rețelei după iterații euȘi IISTEP 5. Verificarea finalizării algoritmului.În rețeaua ajustată (Fig. 1.16 a) există trasee de la sursă v și a stoca v cu, De exemplu M 3 = (v și =V 1 , V 4 , V 2 , V 5 , v s =V 7). Continuarea executiei algoritmului .

    II iterație. PASUL 2. Ca singura cale independentă pe care o luăm M 3 = (v și =V 1 , V 4 , V 2 , V 5 , v s =V 7). Pentru el:

    A(M 3)= min{d 14 ,d 42 ,d 25 ,d 57 } = min{15, 10, 10, 15} = 10.

    d 14¢ =d 14 - 10 = 5,d 42¢ =d 42 - 10 = 0,d 25 ¢ =d 25 - 10 = 0,d 57 ¢ =d 57 - 10 = 5.

    PASUL 3. A t:= A t + A(M 3) = 40 + 10= 50.

    PASUL 4. Corecția rețelei. Debit maxim A(M 3) scade din arcurile traseului M 13 . Rezultatul este dat în Fig. 1.16 b.

    PASUL 5. Nu mai există rute de la sursă la chiuvetă în rețeaua ajustată. A:= A t:= 50, finalizarea algoritmului. Răspuns: debitul maxim în rețea din fig. 1.15 este 50.

    Dacă în rețea sunt specificate mai multe surse, aceasta se completează prin introducerea unei noi surse comune, care este conectată la sursele originale prin arce cu capacitate nelimitată. Apoi problema este rezolvată folosind algoritmul obișnuit. Fluxurile necesare prin sursele originale vor fi fluxuri de-a lungul arcelor nou adăugate care intră în ele dintr-o nouă sursă comună. Faceți același lucru dacă în rețea există mai multe scurgeri.

    Planificarea rețelei

    Orice sarcină de proiectare sau construcție a unui obiect destul de complex ( proiect) poate fi împărțit într-un număr de etape componente mai mici. Timpul întregului proiect depinde de alegerea corectă a secvenței acestor pași.

    Întreaga gamă de acțiuni pentru implementarea proiectului este prezentată ca un set evenimenteȘi lucrări. Evenimentele sunt numite etape individuale ale unui proiect. Munca este procesul de finalizare. Întregul complex de evenimente și lucrări necesare finalizării proiectului poate fi reprezentat sub forma unei rețele bipolare G =({v și, v z} , V, X), în care:

    si tot evenimente marcat de un set de vârfuri V, evidenţiate printre ei eveniment inițial v și(începutul lucrului) și eveniment final v z(finalizarea întregului proiect), definesc vârfurile interne ale rețelei evenimente intermediare- etapele care trebuie parcurse pe parcursul implementării proiectului,

    b) totul muncă sunt indicate prin arce care leagă perechi de evenimente - vârfuri.

    Reprezentarea grafică a acestei rețele se numește diagrama rețelei. Pentru a indica secvența acțiunilor, introduceți și diagrama de rețea opere fictive, care nu sunt asociate cu efectuarea niciunei acțiuni. Lucrările corespunzătoare sunt indicate prin arce întrerupte.

    Ca exemplu, luați în considerare organizarea unei anumite producții. Proiectul necesită următoarele lucrări:

    I) cercetare de marketing, II) cercetare pre-proiectare a echipamentelor, III) organizarea unei rețele de vânzare, IV) realizarea unei campanii de publicitate, V) elaborarea specificațiilor tehnice pentru echipamente de producție, VI) elaborarea documentației tehnice pentru spațiile de producție și comunicații, VII) achiziționarea de echipamente standard, VIII) proiectarea și fabricarea echipamentelor nestandard, IX) construcția instalațiilor de producție și instalarea comunicațiilor, X) instalarea echipamentelor standard, XI) instalarea echipamentelor nestandard, XII) punerea în funcțiune.

    Aceste lucrări le vom nota în diagrama de rețea prin arce cu numere corespunzătoare.

    Evenimentele din acest proiect vor fi următoarele:

    1) începerea lucrărilor (eveniment inițial), 2) finalizarea cercetării de marketing, 3) finalizarea cercetării pre-proiect, 4) organizarea unei rețele de vânzări, 5) organizarea unei campanii de publicitate, 6) pregătirea specificațiilor tehnice pentru producție echipamente, 7) finalizarea elaborării documentației tehnice pentru spațiile de producție și comunicații, 8) finalizarea achiziției de echipamente standard, 9) finalizarea proiectării și fabricației echipamentelor nestandardizate, 10) finalizarea construcției instalațiilor de producție și instalarea comunicațiilor, 11) finalizarea lucrărilor de instalare a echipamentelor și punerea în funcțiune,

    12) finalizarea proiectului (eveniment final).

    Asociem nodurile cu numere corespunzătoare evenimentelor. Programul rețelei pentru proiect este prezentat în Fig. 1.17:



    Fig.1.17. Programul rețelei proiectului

    CATEGORII

    ARTICOLE POPULARE

    2024 „kingad.ru” - examinarea cu ultrasunete a organelor umane