Kapitel 9: Netværksmodeller - lah@sam.sdu.dk
Kapitel 9: Netværksmodeller - lah@sam.sdu.dk
Kapitel 9: Netværksmodeller - lah@sam.sdu.dk
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Kapitel</strong> 9: <strong>Netværksmodeller</strong><br />
Terminologi:<br />
Et netværk eller en graf bestar ° af et sæt punkter samt et sæt linier, der forbinder par af punkter;<br />
netværket betegnes som komplet, hvis ethvert par af punkter er forbundet.<br />
Punkterne betegnes noder;<br />
lad N betegne sættet af noder.<br />
-> Enhver node kan i et stort antal applikationer betegnes som enten<br />
demand-, transshipment-, eller udbudsnode.<br />
Linierne, der forbinder par af noder, betegnes kanter (arcs); lad A betegne sættet af kanter.<br />
-> Enhver kant er i et stort antal applikationer karakteriseret ved en<br />
længde og/eller en øvre/nedre grænse for flowet langs pagældende °<br />
kant.<br />
Grafen kan da beskrives ved sættet af noder og kanter og dertil hørende parametre C:.<br />
-> G(N, A, C).<br />
Orienterede vs. ikke-orienterede netværker:<br />
Kanter betegnes orienterede, hvis de alene kan passeres i en og kun en retning; netværket<br />
betegnes orienteret, hvis alle kanter er orienterede.<br />
Kanter betegnes ikke-orienterede, hvis de kan passeres i begge retninger; netværket betegnes<br />
ikke-orienteret, hvis dette gælder for samtlige kanter.<br />
Stier og cykler:<br />
En sti mellem 2 noder er en sekvens af orienterede og/eller ikke orienterede distinkte kanter, der<br />
forbinder de 2 noder.<br />
En orienteret sti fra node i til node j er en sekvens af forbindende kanter, der tillader et flow fra<br />
node i til node j; en orienteret sti ma ° saledes °<br />
ikke indeholde kanter orienteret fra j mod i.
En ikke-orienteret sti fra node i til node j er en sekvens af forbindende kanter, der ikke<br />
nødvendigvis tillader et flow fra node i til node j; en ikke-orienteret sti kan saledes ° indeholde<br />
kanter orienteret fra j mod i.<br />
En cycle er en sti, som begynder og ender i samme node.<br />
2 noder betegnes connected,<br />
hvis der eksisterer en sti mellem dem.<br />
Et netværk, hvorom gælder at ethvert par af noder er connected, betegnes et connected<br />
netværk.<br />
Træer og udspændende træer:<br />
Ethvert sæt af kanter noder i netværket, hvorom gælder<br />
i) der eksisterer en sti mellem ethvert par af modsvarende noder, og<br />
ii) ingen sadan ° sti udgør en cycle<br />
betegnes et træ.<br />
Et træ kan dyrkes med udgangspunkt i en vilkarlig ° kant; de hertil modsvarende noder betegnes<br />
forbundne, og de øvrige ikke-forbundne. Hertil adderes successivt yderligere kanter, en ad<br />
gangen, idet enhver yderligere kant skal forbinde en p.t. forbundet node med en p.t. ikkeforbundet<br />
node. Denne konstruktion sikrer, at der eksisterer netop 'en sti imellem ethvert par af<br />
forbundne noder, og at ingen sadan ° sti udgør en cycle.<br />
Træet gøres successivt større ved additionen af nye kanter.<br />
Lad betegne antallet af noder i netværket. Ethvert par af noder er forbundet med en sti, nar °<br />
træet bestar ° af 1 kanter; et sadant ° træ betegnes et udspændende træ.<br />
Netværksproblemfelter:<br />
1) Korteste Vej Problemet<br />
2) Bestemmelse af et Minimalt Udspændende Træ<br />
3) Maximum Flow Problemet<br />
Korteste Vej Problemet:
Udgangspunktet er her et netværk med ¸N ¸noder ( ¸N ¸angiver 5+/>/8 af indexsættet<br />
N, d.v.s. antallet af elementer i dette sæt, her altså antallet af noder i netværket), hvoraf nogle par<br />
er indbyrdes forbundet af en kant med en given længde. Problemet består nu i at finde den<br />
korteste vej mellem en på forhånd angivet source node og enhver anden node i netværket.<br />
Problemet løses ved en såkaldt labeling algoritme. I iteration 1 identificeres den node, der ligger<br />
tættest på source noden, og i en vilkårlig iteration k den node som er 'k'te tættest' på source<br />
noden. Algoritmen kan enten implementeres med udgangspunkt i en tegning af netværket som i<br />
lærebogen eller i tabelform.<br />
I det følgende bruges korteste vej algorimen til løsning af problemet defineret ved Figur 9.1. i<br />
lærebogen:<br />
kandidat node tentativ label permanent label senest mærket node forgænger<br />
iteration 0 1 [0, S] 1<br />
iteration 1<br />
2<br />
œ<br />
3<br />
[15, 1]<br />
œ<br />
[10, 1]<br />
3->[10, 1] 3<br />
1<br />
iteration 2<br />
2<br />
œ<br />
5<br />
Ú [15, 1]<br />
Û<br />
œ<br />
[13, 3] r<br />
Ü [14, 3]<br />
2->[13, 3] 2 3<br />
Ú4 Ú[19,<br />
2]<br />
iteration 3 Û 5 Û [14, 3] 5->[14, 3] 5 3<br />
Ü7 Ü[30,<br />
2]<br />
iteration 4<br />
Ú 4<br />
Û 6<br />
Ü 7<br />
Ú<br />
Ý œ<br />
Û<br />
Ý<br />
Ü<br />
œ<br />
Ú<br />
Û<br />
Ü œ<br />
Ò19,<br />
2]<br />
[18, 5] r<br />
[16, 5]<br />
[30, 2]<br />
6->[16, 5] 6 5<br />
iteration 5<br />
4<br />
7<br />
[18, 5]<br />
[30, 2]<br />
[22, 6] r<br />
4->[18, 5] 4 5<br />
iteration 6 7 [22, 6] 7->[22, 6] 7 6<br />
Algoritme:<br />
1) Giv node 1 permanent label [0, S]. Lad kandidatlisten bestå af alle ikke-permanent<br />
labeled noder, der er forbundet med en kant til node 1.Gå til 2).<br />
2) Gentag til kandidatlisten er tom:<br />
Lad kandidatlisten bestå af alle ikke-permanent labeled noder, der er forbundet med en<br />
kant til en permanent labeled node. Lad K(t) betegne et indexset for mængden af<br />
noder i kandidatlisten i iteration t. For enhver node i kandidatlisten 5 beregnes for<br />
enhver permanent labeled node forbundet med en kant til pågældende kandidat 35
den totale vejlængde ved bevægelse fra node 1 (source noden) langs den korteste<br />
vej til 35 og videre langs kanten fra 35 til 5 som SP"3 c 3 5 , hvor SP "3 er længden<br />
5 5 5<br />
af den korteste vej fra 1 til 35 og c 3 5 er længden af kanten fra 35 til 5. Node 5<br />
5<br />
mærkes tentativt med den korteste blandt disse vejlængder og indeks for<br />
modsvarende permanent labeled node.<br />
Identificer den node i kandidatlisten med minimal SP c . Gør denne nodes<br />
"3 3 5<br />
5 5<br />
p.t.tentative labe permanent.<br />
Betragt først iteration 1. K(1) består af noderne {2, 3}, fordi de som de eneste er forbundet til<br />
node 1. Den korteste vej fra node 1 over sættet af p.t. permanent labeled noder (d.v.s. node 1<br />
selv) til node 2 består i at gå fra 1 til 2; længden af denne vej er 0 15 med node 1 som sidste<br />
node før ankomst til node 2; node 2 lables derfor tentativt [15, 1]. Tilsvarende for node 3, der<br />
lables [10, 1]. 10 er mindre end 15; node 3 er derfor tættest på node 1, og den label gøres<br />
permanent.<br />
Betragt nu iteration 2. K(2) består af noderne {2, 5}, fordi de som de eneste er forbundet til de<br />
permanent labeled noder 1 og 3. Den korteste vej fra node 1 over sættet af p.t. permanent<br />
labeled noder (d.v.s. node 1 og 3) til node 2 kan enten bestå i at gå direkte fra 1 til 2 eller fra 1<br />
over 3 til 2. Den første mulighed er fanget i det allerede givne tentative label af node 2 med [15,<br />
1] og vejlængden ved den anden mulighed er 10 3 med node 3 som sidste node før ankomst til<br />
node 2; node 2 lables derfor også tentativt [13, 3]. 13 er kortere end 15, så det tentative label<br />
[15, 1] slettes. Node 5 lables [14, 3], fordi den korteste vej fra 1 til 3 har længden 10 og<br />
længden af kanten fra 3 til 5 er 4. Node 2 er således tættere på node 1 end node 5, fordi den<br />
korteste vej til node 2 har længden 14. Node 2's tentative label [14, 3] gøres derfor permanent.<br />
Og vi har i iteration 2 fundet den næst tætteste node til 1.<br />
Betragt iteration 4. K(4) består af noderne {4, 6, 7}. Node 4 har 2 tentative labels. [19, 2]<br />
slettes, fordi vejen til node 4 over node 5 er kortere. Node 6 er den 4. tætteste node, fordi 16 er<br />
mindre end 18 og 30. Node 6's label [16, 5] gøres derfor permanent.<br />
Hvad er den korteste vej fra node 1 til f.eks. node 7? Node 7 har en label på [22, 6]. Det<br />
betyder, at den korteste vej fra node 1 til node 7 har længden 22, og at vi kommer til node 7 fra<br />
node 6. Men node 6 er labeled [16, 5]. Vi kommer altså til node 6 fra node 5 og har tilbagelagt<br />
vejlængden 16 ved ankomst til node 6. Label for node 5 fortæller at vi kom til 5 fra 3, og label fra<br />
node 3 at vi kom fra 1 til 3. Vi skal altså traversere kanterne 1-3, 3-5, 5-6 og 6-7 for at gå den<br />
korteste vej fra 1 til 7.<br />
LP-formulering af korteste vej problem:<br />
Lad vejlængder angive omkostninger svarende til at sende en vareenhed langs en given kant. Da<br />
er bestemmelsen af den korteste vej fra en source node til en på forhånd kendt terminal eller sink<br />
node ækvivalent til at finde den billigst mulige måde at sende en vareenhed fra fra source til sink.<br />
Dette giver anledning til følgende LP-formulering:
min ! c x<br />
Ð3ß4Ñ−E<br />
34 34<br />
s.t. ! x 1<br />
4<br />
Ð=ß4Ñ−E<br />
=4 œ<br />
! x34 ! x43 œ0 for alle 3− N, 3Á=ß3Á><br />
4 4<br />
Ð3ß4Ñ−E Ð4ß3Ñ−E<br />
! x4> œ 1<br />
4<br />
Ð4ß>Ñ−E<br />
1 x 34<br />
!ß Ð3ß4Ñ−E<br />
Bemærk: Altid heltallige løsninger p.g.a. netværksstrukturen!<br />
Minimal Spanning Tree Algoritme:<br />
1) Lad NC betegne sættet af p.t. ikke forbundne noder, d.v.s. NC œ N, og lad C<br />
betegne sættet af p.t. forbundne noder, d.v.s. C œg.<br />
Vælg en vilkårlig node og<br />
forbind denne til dens tætteste nabo. Fjern disse 2 noder fra NC og indfør dem i C.<br />
Gå til 2).<br />
2) Gentag til NC er tom:<br />
Identificer den p.t. ikke forbundne node i NC som er tættest på en p.t. forbunden<br />
node i C; ties brydes tilfældigt. Lad 38C være den hermed identificerede p.t. ikkeforbundne<br />
node i NC og lad 3- være den ligeledes identificerede forbundne node i<br />
C, der er tættest på 3 ÞForbind 3 og 3 og fjern node 3 fra NC og indfør den i C.<br />
8C - 8C 8C<br />
3) Stop; det hermed etablerede træ er et minimalt udspændende træ.<br />
Brug selv algoritmen på problemet defineret ved Figur 9.13.<br />
Bemærk: I første iteration indføres 2 af ¸N ¸ noder i C og i hver efterfølgende iteration 1 node.<br />
Algoritmen terminerer derfor efter ¸N¸ kanter.<br />
1 iterationer, og et udspændende træ består af ¸N¸ 1<br />
Maximum Flow problemet:<br />
Udgangspunkt:
Orienteret/ikke-orienteret sammenhængende netværk.<br />
1 node er defineret som udbudsnode.<br />
1 node er defineret som efterspørgselsnode.<br />
Alle øvrige noder er transshipment/intermediate noder.<br />
Hver kant har en tilknyttet kapacitet, der angiver det maximale flow i en bestemt retning.<br />
Problemet er nu at bestemme det maximale flow gennem fra udbudsnode (eller source) til<br />
efterspørgselsnode (eller sink) med de givne kapaciteter.<br />
Algoritmen er baseret på bestemmelse af såkaldte J69AE?17/8>381T+>2= eller FAPs. En<br />
FAP er en sti fra source til sink med ledig kapacitet langs alle fremadrettede kanter.<br />
Betragt den orienterede kant fra 3 til 4:<br />
0<br />
3‰ ------------------------> ‰4<br />
6<br />
Tallet 6 angiver, at kanten ( 3ß 4)<br />
har en fremadrettet kapacitet på 6 enheder, d.v.s. at det er muligt<br />
at sende 6 enheder fra node 3 til node 4.<br />
Tallet 0 angiver tilsvarende, at det ikke er muligt<br />
at sende noget fra 4 til 3.<br />
Lad os nu forestille os, at vi sender 4 enheder fra 3 til 4.<br />
Residualkapaciteterne er da givet ved<br />
0 4<br />
3‰ ------------------------> ‰4<br />
6 4<br />
hvilket selvfølgelig er det samme som<br />
4<br />
3‰ ------------------------> ‰4<br />
2<br />
Det er altså muligt at sende yderligere 2 enheder fra 3 til 4.<br />
Men det er også nu muligt at sende 4<br />
enheder fra 4 til 3. Det sker rent praktisk ved at lade være med at sende dem fra 3 til 4 i første omgang.<br />
Lad os se på følgende sti fra source ( = ) til sink ( > ):<br />
0 0 4 0<br />
=‰ ------------> ‰ ------------> ‰ ‰><br />
7 3 0 3<br />
Det er ikke en FAP, fordi den fremadrettede kapacitet på den tredie kant er 0.
Lad os nu forestille os, at flowet på de viste kanter er 2 (fra = til den første node), 0 (mellem første og<br />
anden node), 4 (fra tredie til anden node), og 1 (fra tredie node til > ). Da er residualkapaciteterne givet<br />
ved<br />
2 0 0 1<br />
=‰ ------------> ‰ ------------> ‰ ‰><br />
5 3 4 2<br />
Bemærk: Flow ind skal være lig med flow ud i enhver intermediate node. Første node må<br />
derfor sende 2 enheder ud til andre noder i netværket, anden node må sende 4 enheder ud, og<br />
tredie node må modtage 5 enheder fra andre noder i netværket.<br />
Nu er stien fra = til > en FAP, fordi der er en ledig fremadrettet kapacitet i enhver node (nemlig hhv.<br />
5, 3, 4 og 2). Det er derfor muligt at øge flowet fra = til > langs denne sti.<br />
Den maksimale tilvækst er givet ved den minimale ledige fremsdrettede kapacitet langs stien, d.v.s.<br />
min(5, 3, 4, 2) œ 2. Øges flowet langs stien med 2 enheder, sendes 2 2 fra = til den første node,<br />
0 2 mellem første og anden node, 2 fra tredie til anden node, og 3 fra tredie node til > . Da er<br />
residualkapaciteterne givet ved<br />
4 2 2 3<br />
=‰ ------------> ‰ ------------> ‰ ‰><br />
3 1 2 0<br />
Max-Flow Algoritmen:<br />
1) Initialiser netværket, d.v.s. angiv indexsæt for kanter T, angiv kapaciteter -34 for alle<br />
kanter (, 3 4) i T og sæt aktuelt flow lig 0. Gå til 2).<br />
2) Find en FAP.<br />
Stop hvis ingen FAPs; aktuelt flow er maximalt.<br />
Ellers lad ( = , 3 , 3 , ...., 3 , > ) definere FAP og gå til 3).<br />
1 # 5<br />
3) Øg flow så meget som muligt langs aktuel FAP, der består af kanterne<br />
T (, ), ( ), ...., ( )<br />
JET œÖ= 3 3 ß3 3 ß>×<br />
" " # 5<br />
Den maximale flowtilvækst ˜ er givet ved den minimale ledige fremadrettede<br />
kapacitet på FAP, d.v.s.<br />
˜ œ min -34<br />
( 3ß4) − TJET Opdater kapaciteter:
Ú -34<br />
for alle kanter ej på FAP<br />
-34 œÛ-34<br />
˜for<br />
alle fremadrettede kanter på FAP<br />
Ü - ˜for<br />
alle tilbagerettede kanter på FAP<br />
34<br />
Opdater flow: aktuelt flowœaktuelt flow ˜<br />
Gå til 2).<br />
Det er i små netværker let at finde FAPs ved visuel inspektion. I større netværker kan følgende<br />
systematiske procedure bruges:<br />
1) Lad indexsættet W bestå af elementet {1}, og lad indexsættet W8/B><br />
være tomt.<br />
2) Gentag successivt for nye mærkede noder, d.v.s. for noder i indexsættet W,<br />
indtil<br />
sinknoden mærkes eller ingen ny node kan mærkes:<br />
for 3−W begin<br />
Mærk enhver p.t. ikke mærket node 4, der kan nås fra3langs en enkelt<br />
fremadrettet kant med ledig kapacitet, '3'. Introducer 4i W8/B><br />
end<br />
Sæt Wœg<br />
WœW8/B><br />
W œg<br />
8/B><br />
3) Hvis sinknoden mærkes, er der fundet en FAP fra source til sink.<br />
I modsat fald findes ingen FAP, og det aktuelle flow er maximalt. Sættet af kanter der<br />
forbinder en mærket node med en ikke-mærket node definerer i den situation et såkaldt<br />
73837+6>-?>=/> .<br />
LP-formulering af Max-Flow Problemet:<br />
max @<br />
s.t. ! x<br />
4<br />
Ð=ß4Ñ−E<br />
=4 œ@<br />
! x34 ! x43 œ0 for alle 3− N, 3Á=ß3Á><br />
4 4<br />
Ð3ß4Ñ−E Ð4ß3Ñ−E<br />
!<br />
4<br />
Ð4ß>Ñ−E<br />
x4><br />
œ@<br />
0 x 34 34<br />
Ÿ Ÿ? ß Ð3ß4Ñ−E
I den formulering måler variablen @ den størst mulige mængde flow, der kan sende fra source til<br />
sink. ? ßÐ3ß4Ñ−E, er upper bound på flowet langs kanten ( 3ß 4) i retningen fra 3 til 4.<br />
34<br />
LP-formulering af det mere generelle balancerede Min Cost Flow Problem:<br />
min ! c<br />
(3ß4Ñ−E<br />
B<br />
34 34<br />
s.t. ! x ! x œb for alle 3−N<br />
34 43 3<br />
4 4<br />
Ð3ß4Ñ−E Ð4ß3Ñ−E<br />
0 x 34 34<br />
Ÿ Ÿ? ß Ð3ß4Ñ−E<br />
Her måler parametrene b 3 nettoudbud i node 3:<br />
b30 -> 3supply<br />
node<br />
b30 -> 3demand<br />
node<br />
b3œ0 -> 3transshipment/intermediate<br />
node<br />
Problemet betegnes balanceret, idet det forudsættes<br />
! b 0<br />
3<br />
3 œ<br />
Er dette krav ikke opfyldt, findes der ikke brugbare løsninger med bibetingelserne formuleret som<br />
ligheder!