Se sammenfatning af rapport

Flugtveje
A312
Jens Stokholm Høngaard
Kristian Pilegaard Jensen
Thomas Birch Mogensen
Niels Asger Aunsborg
Nicolai Vesterholt Søndergaard
Daniel Agerskov Heidemann Jensen
11. maj 2010
I
II
Det Teknisk-Naturvidenskabelige Basis˚
ar
Naturvidenskab
Strandvejen 12-14
Telefon 96 35 97 31
Fax 98 13 63 93
http://tnb.aau.dk
Titel:
Synopsis:
Flugtveje
Tema:
Algoritmer og netværk
Deltagere:
Jens Stokholm Høngaard
Projektperiode:
P2, for˚
arssemesteret 2010
Kristian Pilegaard Jensen
Projektgruppe:
A312
Thomas Birch Mogensen
Vejledere:
Niels Asger Aunsborg
Hans H¨
uttel og Marion Berg Christiansen
Nicolai Vesterholt Søndergaard
Oplagstal: 1
Daniel Agerskov Hejdemann Jensen
Sidetal: 25
Bilagsantal og –art: 1 tekst
Afsluttet den 25. Maj 2010
Rapportens indhold er frit tilgængeligt, men offentliggørelse (med kildeangivelse) m˚
a kun ske
efter aftale med forfatterne.
III
IV
Indhold
1 Problemanalyse
1
1.1
Initierende problem . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Krav til løsning . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.3
Overvejelser om model af problemstilling . . . . . . . . . . . . . .
1
2 Grafteori
2.1
2.2
3
Anvendelse af grafteori . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.1
Knuder . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.2
Kanter . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
Eksempel p˚
a afbildning . . . . . . . . . . . . . . . . . . . . . . .
4
3 Flugtvejsproblemet
5
3.1
Definitioner af parametre . . . . . . . . . . . . . . . . . . . . . .
5
3.2
Gevinsten af en flugtplan . . . . . . . . . . . . . . . . . . . . . .
6
3.2.1
7
Det konkrete flugtvejsproblem . . . . . . . . . . . . . . . .
4 Hvordan reagerer mennesker ved brand
7
5 Korteste-vej algoritmer
8
5.1
Store O-notation . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
5.2
Dijkstras algoritme . . . . . . . . . . . . . . . . . . . . . . . . . .
9
5.2.1
5.3
Tidskompleksitet . . . . . . . . . . . . . . . . . . . . . . . 10
Bellman-Ford . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.3.1
Tidskompleksitet . . . . . . . . . . . . . . . . . . . . . . . 11
5.4
APSP algoritmer generelt . . . . . . . . . . . . . . . . . . . . . . 11
5.5
Floyds algoritme . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.6
5.5.1
Eksempel p˚
a Floyds algoritme
. . . . . . . . . . . . . . . 12
5.5.2
Tidskompleksitet . . . . . . . . . . . . . . . . . . . . . . . 14
Valg af algoritme . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6 Frameworket
15
6.1
Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.2
Edge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.3
Eksempel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6.4
PathFinder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7 Største strømnings-problemet
7.1
18
Ford-Fulkersons metode . . . . . . . . . . . . . . . . . . . . . . . 19
7.1.1
Pseudokode . . . . . . . . . . . . . . . . . . . . . . . . . . 20
V
8 Arkitekt værktøjer
20
8.1
ArchiCAD 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
8.2
Smartdraw 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
8.3
Google Sketch-up . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
8.4
Samlet vurdering . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
9 Metode
21
10 Interview
22
10.1 M˚
al og overvejelser . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.2 Spørgsm˚
al: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.3 Kommentarer til spørgsm˚
al: . . . . . . . . . . . . . . . . . . . . . 23
Litteratur
25
VI
1
1.1
Problemanalyse
Initierende problem
Det ses med jævne mellemrum, at folk dør i brand eller at brandsikkerheden
for et hotel, forsamlingshus eller lignende ikke er i orden. Man hører af og til
om folk, der g˚
ar ud via den forkerte udgang, n˚
ar brandalarmen lyder. Dette kan
føre til noget s˚
a tragisk som tab af liv. Hvordan kan man forhindre dette? Der
er ikke mange mennesker, som kigger p˚
a evakueringsplanerne for den bygning,
de er i, s˚
a de benytter ikke den optimale udvej ved en katastrofe. S˚
a hvordan
kan man finde denne optimale udvej udfra, hvor man st˚
ar og hvordan kan give
denne infomation til folk?
1.2
Krav til løsning
Vi vil gerne skrive et program, der kan finde den optimale flugtrute og formidle denne information. Dog kan s˚
adan en viden formidles p˚
a mange m˚
ader.
En løsning kunne være at programmet kunne bruges via en mobil enhed som
en smartphone eller PDA. Brugeren af programmet kunne finde den optimale
nødudgang i en given bygning i tilfælde af brand. En anden mulighed kunne
være at nogle uddannede guider kunne bruge programmet som et hjælpemiddel
til at føre folk ud af en brændende bygning. Ved at give programmet til guiderne
kan de hjælpe folk, der ikke selv kan finde ud ved egen h˚
and. Guiderne kunne
have et ansvarsomr˚
ade hvor de skulle sørge for at alle folk i dette omr˚
ade kommer ud. En tredje mulighed kunne være at bruge et fysisk kort i stedet for en
mobil enhed. Her kan man i en evakuringssituation læse p˚
a et kort i nærheden
og finde den optimale flugtrute.
Disse løsninger er til brug ved evakuring, men programmet kunne ogs˚
a bruges uden for krisetider. En bygning kunne testes med programmet for at se
om hvor god dens flugtplaner er. S˚
a m˚
aske kan programmet bruges til at teste
lovmæssige krav. Dette kunne ogs˚
a bruges i forbindelse af design af bygninger.
Her kunne det være et værktøj til at overskueliggøre lovmæssige krav.
1.3
Overvejelser om model af problemstilling
Hvad forst˚
ar man ved den optimale vej? Er den optimale vej, den man kender
eller er den som er kortest? Det er svært at sige og der er ogs˚
a flere ting
at tage højde for. Hvis man har en flugtrute, der kun ligger fem meter væk,
er det ikke nødvendigvis den optimale flugtrute. Denne flugtrute kan være s˚
a
snæver, at folk ikke kan komme hen til udgangen. En optimal flugtrute afhænger
derfor ikke kun af dens længde, men ogs˚
a af dens kapacitet. Den optimale
flugtrute kan alts˚
a opdeles i to problemer, navnligt længde og kapacitet. Dette
er begge problemer der kan beskrives grafteoretisk som korteste-vej problemet
og strømningsproblemet.
Har vi en ikke-orienteret graf G = (V, E) har hver kant tildelt et tal, s˚
adan en
graf kaldes en vægtet graf.[1] Har vi en vej S mellem to knuder i en vægtet graf
har vi længden af vejen L som en funktion x : E → R hvor det er gældende:
1
L=
X
xvj j ∈ R
v∈V
Korteste-vej-problemet best˚
ar i finde den vej mellem to knuder s˚
aledes at L
bliver mindst mulig. Alts˚
a er vejen med den mindste L den optimale vej.
Der findes et grafteoretisk problem kaldet det maksimale strømningsproblem.
Har vi en ikke-orienteret graf G = (V, E) har hver kant en kapacitet hvor uv ∈
R+ . Desuden har vi to knuder kaldet s for kilden og r for afløbet. Strømmningen
i grafen G er en funktion x : E → R+ hvor det er gældende[2]:
X
P
xwv − (w,v)∈E xvw = 0
∀v ∈ V \{r, s} :
(w,v)∈E
∀(v, w) ∈ E : 0 ≤ xvw ≤ uvw
Den optimale vej er her den vej med den største strømmning mellem s og r.
Vi har brug for at finde den optimale vej i forhold til b˚
ade strømmningen
og en vejs længde. Er der en m˚
ade hvorp˚
a disse problemer kan anskues som et
fælles problem. For at løse dette problem kunne man omregne kapaciteten og
længderne til samme enhed. Før vi kan gøre dette skal kapaciteten defineres.
Bredden af en flugtrute definerer vi som kapacitet og m˚
ales i hvor mange
mennesker, der kan komme igennem per sekund. N˚
ar man taler kapacitet er
der flere forskellige ting, man kan mene. Er det gangen hen til flugtdøren, man
taler om eller er det selve dørens kapacitet? Man kan iagttager to forskellige
flugtruter.
• En flugtrute der har en gang med høj kapacitet og en dør med lille kapacitet.
• En flugtrute der har en gang med lav kapacitet og en dør med høj kapacitet.
Ved den første type vil gangen have en højere kapacitet end døren. Her
vil mange mennesker kunne komme hen til en nødudgang, men pga. dørens
lave kapacitet vil der opst˚
a en flaskehals-situation. Her kunne det ske, at de
flygtende ville trampe hinanden ned. Med den anden type vil dørens kapacitet
kunne rumme flere af de flygtende mennesker. Vi vil derfor ikke f˚
a flaskehalsproblemet som ved den forrige løsning. Er denne løsning s˚
a bedre? De flygtende
vil m˚
aske ikke trampe hinanden ned i selve udgangen, men der er derimod en
fare for, at det vil ske i gangen med den lave kapacitet. Alts˚
a er typen, hvor vi
har en gang med lavere kapacitet være lige s˚
a d˚
arlig som den første type. Dog
kan man sige, at s˚
adan et design aldrig vil forekomme, hvor døren har en højere
kapacitet end den gang, der fører hen til den. Vi vil derfor kun koncentrere os
om den første type og vil definere kapaciteten af flugtruten som kapaciteten
af de døre, man g˚
ar igennem. Det kan ikke udelukkes, at gangenes kapacitet
har betydning for den optimale rute, men vi har valgt at se bort fra det. Da
kapaciteten nu er defineret, kan man begynde at omregne længde og kapacitet
til samme enhed.
2
Kapaciteten har enheden mennesker pr. sekund og længderne har enheden
meter. Vi vælger at omregne til sekunder s˚
aledes, at det er muligt at f˚
a et estimat af den tid flugtruten tager. For at regne længderne om til sekunder m˚
a man
g˚
a udfra, at menneskerne i en evakuringssituation flygter med en bestemt hastighed. For at f˚
a kapaciteten i sekunder skal man blot vide hvor mange flygtende
der er. Selvom de to variable er omregnet til samme enhed er det s˚
a korrekt
at anskue kapaciteten i forhold til et korteste vej-problem og længderne som
et strømningsproblem? I korteste vej-problemet er enheden for vægtningen underordnet, s˚
a længe alle vægte er tal med samme enhed. Strømningsproblemet
kan kun anvende kapacitet. Derfor vil vi anskue det samlede problem som et
korteste vej-problem.
Nu kender vi de variable, man skal tage hensyn til, n˚
ar man skal finde den
optimale flugtrute. Man kunne lave en udtømmende søgning og derved finde den
optimale flugtrute. Problemet er bare, at en s˚
adan søgning er utrolig ineffektiv.
Inden for grafteori findes der dog allerede algoritmer til at finde korteste vej,
som er mere effektive. Her betyder det ikke, at korteste vej er det eneste, man
kan bruge algoritmerne til. Man kan vægte de forskellige kanter med vores enhed
og derved finde den optimale vej.
2
Grafteori
Inden vi kan gribe problemet om korteste vej an, m˚
a vi først se p˚
a grafteori.
Det første vi har valgt at definere er orienterede grafer.
Definition 1. En orienteret graf G er et par G = (V, E), hvor V er en mængde
af knuder, E er en mængde af kanter. En kant e ∈ E er et ordnet par e =
(v1 , v2 ), hvor v1 ∈ V, v2 ∈ V . Vi siger, at e starter i v1 og slutter i v2 .
En orienteret graf best˚
ar alts˚
a af en mængde kanter og knuder. N˚
ar man
tegner en graf, tegner man som regel knuder som prikker og kanter som streger,
der forbinder to knuder. Man angiver en kants orientering med en pil.
Definition 2. En ikke-orienteret graf G er et par G = (V, E) hvor V er en
mængde af knuder og E er en mængde af kanter. En kant er et uordnet par
e = v1 , v2 , hvor v1 ∈ V, v2 ∈ V .
Definition 3. Lad G = (V, E) være en orienteret graf. En vej er en følge af
knuder (v1 , ..., vk ), hvor for alle (vi , vi+1 ) ∈ E for alle i, hvor 1 ≤ i ≤ k − 1.
2.1
Anvendelse af grafteori
Vi vil i dette afsnit forklare hvordan vi afbilder knuder og kanter i en model
over en bygning.
2.1.1
Knuder
Vi definerer knuder som steder, hvor man kan opholde sig. Den enkelte knude vil
derfor repræsentere et rum eller en del af et rum. Den mængde plads en knude
repræsentere svare til samme størrelse som et gennemsnitligt grupperum. Alle
3
grupperum kan alts˚
a vises som en enkelt knude og større arealer. Som gange
bliver repræsenteret som en række knuder. Vi vælger at dele store rum og gange
op i flere knuder. Havde vi valgt at heæe gangene kun var en knude, skulle alle
de flygtende mennesker hen til denne ene knude, det ville der for være svært
at sige noget præcist om afstanden fra et bestemt gruppe rum til udgangen,
da gangen repræsentere et stort omr˚
ade. S˚
a de store lokaler deles op for at
gøre modellen mere præcis. For man kunne forestille sig, at alle ville vælge den
samme flugtvej, hvis de befandt sig i et lokale, hvor der kun g˚
ar en knude ud
fra. Da disse lokaler har flere døre, virker det ogs˚
a naturligt at udnytte dette,
fordi at med flere knuder ville de flygtende kunne tage forskellige veje.
2.1.2
Kanter
I flugtplanen repræsenterer kanter mulige veje mellem knuderne. Hvis vi havde
valgt kun at bruge enkelte knuder ved gange og større rum, ville vi f˚
a kanter som
gik igennem væggene. Da vi har valgt at dele rummene op, f˚
ar vi ikke kanter
der g˚
ar igennem væggene og derfor en model, der grafisk giver mere mening.
2.2
Eksempel p˚
a afbildning
Figur 1: Strandvejen 12-14, 2. etage
• I grafen repræsenterer Gx en del af en gang.
• Ux er udgange.
4
• Tx er toiletter.
• Depx er depoter.
• Numrene som 312 er grupperum og kontorer.
• Vx efter et rum angiver, at rummet er delt op i forskellige dele.
3
Flugtvejsproblemet
Vi vil i dette afsnit beskrive de parametre og funktioner, der er en del af vores
flugtvejsproblem, derefter vil vi definere vores parametre.
• Givet en ikke-orienteret graf G = (V, E)
• Kilder S ⊆ V afløb D ⊆ V
• Passagefunktion t : E → R+
• Strømningsfunktion f : E → R+
• Befolkningsfunktion b : S → N
En flugtplan P er en mængde af veje i G, der alle er p˚
a formen.
(s, ..., d) hvor s ∈ S og d ∈ D.
3.1
Definitioner af parametre
Definition 4. Vi antager dette givet.
• G = (V, E), ikke-orienteret graf
• Passagetidsfunktionen t : E → R+
• En vej θ i G.
Vi vil nu definere passagetiden T (θ)
• T (θ) er et tal.
• T (θ) er defineret s˚
aledes det opfylder
T (θ) =
T (θ) angiver den tid en vej θ tager.
Definition 5. Vi antager dette givet.
• G = (V, E), ikke-orienteret graf
• Strømningsfunktion f : E → R+
5
P
e∈θ
t(e)
• En vej θ i G.
Vi vil nu definere strømningen F (θ)
• F (θ) er et tal.
• F (θ) er defineret s˚
aledes det opfylder
F (θ) = min f (e)
e∈θ
I forhold til flugtvejsproblemet skal kilder forst˚
as som de knuder, hvor de
flygtende starter deres flugt og nødudgangene er her afløbene. Vi finder den
mindste kapacitet for en flugtrute, da en flugtrute er begrænset af sit smalleste
sted. Den mindste kapacitet fortæller derfor, hvor mange personer en given
flugtrute kan rumme.
Definition 6. Vi antager dette givet.
• G = (V, E), ikke-orienteret graf
• Befolkningsfunktion b : S → N
Vi vil nu definere befolkningen B(S)
• B(S) er defineret s˚
aledes at
B(S) =
X
b(s).
s∈S
Nu har vi de parametre, der gør, at vi kan finde gevinsten for en flugtplan.
3.2
Gevinsten af en flugtplan
Definition 7. Vi antager dette givet.
• G = (V, E), ikke-orienteret graf
• En vej θ i G.
• Strømningen F (θ)
• Passagetiden T (θ)
Vi vil nu definere gevinsten C(θ)
• C(θ) er et tal.
• C(θ) er defineret s˚
aledes det opfylder
C(θ) = F (θ) · T (θ)
6
Gevinsten angiver, hvor mange mennesker der kan komme igennem en given
vej.
Den totale gevinst f˚
as ved at summere gevinsten af alle vejene i en flugtplan
P:
C(P ) =
X
C(θ)
θ∈P
Den totale gevinst angiver, hvor mange mennesker en flugtplan kan rumme.
3.2.1
Det konkrete flugtvejsproblem
Det første vi vil gøre er at finde ud af, om en given flugtplan P kan f˚
a sin
befolkning ud p˚
a en tid under m.
Definition 8. Vi antager dette givet.
• Givet en graf G = (V, E)
• Passagetid T (θ)
• Befolkning B(S)
• En tidsgrænse m
• Gevinsten C(P )
Vi vil nu definere kravet for en flugtplan P . P er tilstrækkelig hvis
• T (θ) ≤ m.
X
•
C(θ) ≥ B(S)
θ∈P
Da gevinsten af en optimal flugtvej er kompliceret at regne p˚
a vil vi prøve
at forsimple problemet. Hvis man ser bort fra kapaciteten i første omgang, vil
den korteste vej altid være den optimale. Derfor har vi valgt at starte med at
kigge p˚
a flugtvejsproblemet som et korteste vej-problem. Alts˚
a har vi valgt at
sætte kapaciteten af alle kanter i grafen til ∞. Vi vil nu kigge lidt p˚
a nogle
algoritmer, som omhandler korteste vej-problemet.
4
Hvordan reagerer mennesker ved brand
Vi har fastsl˚
aet at vores m˚
algruppe er, de personer der til dagligt st˚
ar for at
designe bygningerne. Dermed kan det være meget nyttigt at finde ud af hvordan
er menneskers adfærd under stressede og faretruende situationer. Det første man
ville tro er, at folk ville g˚
ar i panik og dermed ikke tænke rationelt.
Ifølge Lea Winerman er det dog ikke det, som sker, n˚
ar en brand opst˚
ar.
Hun siger, det er en myte, for ved terrorangrebet p˚
a World Trade Center brugte
de fleste lang tid p˚
a at finde ud af, hvad der skete og p˚
a søge infomation om
situationen. Ved faretruende situationer er mennesket for skeptisk[3]. Enten kan
historien om en brand eller lignende være for absurd eller s˚
a tager man det ikke
7
seriøst. Nogen ville m˚
aske tro, det bare var en brandøvelse og fortsætte deres
arbejde. S˚
a det vil alts˚
a sige, at mennesker forholder sig roligt under brand.
Hvis folk generelt tager det roligt, n˚
ar de skal ud, hvorfor er det s˚
a væsenligt
at designe bygningerne anderledes end, man har gjort tidligere? Det har ved et
forsøg vist sig, at folk som regel tager den samme vej ud, som de kommer ind
af selv under disse speciele omstændigheder. Det er et problem, fordi det øgere
presset p˚
a nogle flugtveje. Forsøget[4] er lavet i en IKEA, her imiterede man en
brandøvelse. Testpersonerne skulle n˚
ar alarmen gik igang finde ud af bygningen.
Her viste det sig at over halvdelen af forsøgspersonerne valgte at tage den vej,
som de kom indad ogs˚
a selvom, denne udgang var dobbelt s˚
a langt væk som
den nærmeste branddør.
Vi bruger dermed denne antagelse, om at folk tager den kendte vej ud. Det
vil ud fra denne antagelse ikke gøre en bygning mere sikker, hvis der er mange
flugtveje, fordi folk alligevel tager den flugtvej, de kender. For at undg˚
a dette
flaskehals problem, vil en bedre løsning være at fokusere p˚
a f˚
a flugtudgange,
men med en stor kapacitet.
Der er en siste ting man skal tage højde for er hvordan folk bevæger sig i
grupper ”flok”, for hvis en flugtvej siger at 5 personer skal løbe den ene vej for
at komme ud, og en person skal løbe en anden vej for at komme ud, vil de s˚
a
gøre det eller vil de alle sammen løbe den samme vej. I et forsøg[5] har man
taget en gruppe personer og sagt til dem at de ikke m˚
a snakke sammen og at de
skulle g˚
a med en arms længte til hinnanen, ellers skulle de bare g˚
a rundt i en
hal. I den gruppe hade man puttet nogle personer der hade f˚
aet instruktioner
p˚
a at de skulle g˚
a en bestemt vej.
Da forsøget startede blev der der uden at de snakkede sammen lavet en kæde
af mennesker som fuldte de personer der hade f˚
aet at vide hvor de skulle g˚
a.
Forsøget blev gentaget flere gange med flere og flere personer og mindre og
minder antal personer der fik at vide hvor de skulle g˚
a.// det viste sig at en
flok p˚
a 200 personer eller flere med 5 % fik at vide hvor de skulle g˚
a. Var de 5
% nok til at kunne bestemme hvor floken skulle g˚
a hen.
5
Korteste-vej algoritmer
I vores projekt har vi tænkt os at finde den optimale flugtvej. Som beskrevet
i afsnittet før best˚
ar vores flugtvejsproblem af et maksimal strømningsproblem
og et korteste-vej problem. I dette afsnit vil vi gennemg˚
a forskellige kortestevej algoritmer og derefter finde frem til hvilken algoritme, vi vil bruge. For
at kunne vurdere hvilken algoritme vi vil bruge, vil vi ogs˚
a komme ind p˚
a
tidskompleksiteten af algoritmerne.
fælles for alle korteste vej algoritmer er at der er en general del i alle udgaverne er.
J u s t e r ( u , v , w)
8
Hvis
L(u, v) > L(u, w) + L(w, v)
S˚
a
L(u, v) := L(u, w) + L(w, v)
Denne del af algoritmen tjekker om en vej fra u til v er større en en vej fra
u til w plus vejen fra w til v.
Hvis dette er tilfældet skal den lave vægten p˚
a vej fra u til v om til lægten
fra u til v gemmen w. Vi har valgt at kigge p˚
a tre algoritmer som er Dijkstras,
Bellman-Fords og Floyds algoritme som alle bruger den den her del i algoritmen.
5.1
Store O-notation
Store O-notation bruger til at gøre worstcase problemer nemmere, ved at estimere algoritmens vækst rate.
N˚
ar man bruger store O-notation vælger man at se bort fra flere ting som:
• Hvilket hardware der bruges.
• Hvilket sprog programmet er skrevet i.
• Hvilket system programmet køres p˚
a.
• At alle operationer ikke tager lige lang tid[1].
Worstcase er det tilfælde hvor en algortime skal bruge flest beregninger for at
blive udført. Store O til en algortime skrives som O(n) hvor jo større udvikling
af n, desto flere beregninger skal algortimen bruge. Det vil sige at ved O(2 · n)
skal man for hvert n bruge to beregninger.
Vi vil bruge Store O-notation som en af faktorene til at bedømme hvilken
at følgende tre algoritmer som er den optimale i forhold til vores problem.
5.2
Dijkstras algoritme
Dijkstras algoritme blev udviklet af Edsger Wybe Dijkstra i 1959, og er en
algoritme, der kan finde den korteste vej fra ´et punkt til samtlige andre punkter.
Algoritmen kan anvendes p˚
a uorienterede grafer med positive vægte, men kan
nemt laves om til brug ved orienterede grafer[1].
Har vi en orienteret vægtet graf med positive vægte, anvendes Dijkstras
algoritme s˚
aledes. Man starter med at vælge et startknude v1 ∈ V . Vi betegner længden fra v1 til en vilk˚
arlig knude vk som L(v1 , vk ), desuden betegner vi
vægten kanten mellem to knuder vi og vj som w(vi , vj ). En mængde af knuder
S, beskriver hvilke knuder vi har gennemløbet.
Algoritmen starter med at sætte længden mellem v1 og alle v ∈ V til uendelig, dog sættes længden v1 til nul, da længden til startpunktet er nul. S sættes
til at være tom.
Givet en vægtet i k k e −o r i e n t e r e t g r a f G(V, E)
med p o s i t i v e vægte , hvor v1 ∈ V
9
er startpunktet
f o r i := 1 t o n
L(vi ):= ∞
L(v1 ) := 0
S:=∅
Herefter kører en while-løkke, der først stopper, n˚
ar alle v ∈ V er v ∈ S.
Ville man have en version af Dijkstras algoritme som kunne finde korteste vej
mellem to knuder, kunne man i stedet for stoppe loopet, n˚
ar en given knude
var indeholdt i mængden S. Loopet startes ved at en given knude vk med
L(vk ) mindst tilføjes til S. Her vil v1 altid blive tilføjet i første iteration, da
L(v1 ) = 0. Derefter sker der en sammenligning af vægtene af alle kanterne
g˚
aende fra u til naboknuderne. Findes der at L(u)+w(u, v) < L(v), s˚
a opdateres
L(v) := L(u) + w(u, v).
while a l l e v ∈
/ S
begin
u := v − v e r en knude som i k k e l i g g e r i
S med L( u ) mindst mulig .
u tilføjes i S
f o r a l l e knuder v ∈
/ S
J u s t e r L(u, v)
end ( A l l e mærkerne L(v)f orv ∈ V ) e r o p d a t e r e t s˚
a
de e r k o r t e s t m u l i g e )
5.2.1
Tidskompleksitet
for i := 1 til |v| − 1
for all kanter (n, v)
dette giver als˚
a
O(n)
O(m)
O(n · m)
Da vi er interesseret i worstcase, hvor vi har en graf med n knuder og hvor
alle knuder er forbundet med hinannen s˚
a vi har at m = n−1,hvor m er antallet
af knuder forbundet til n det vil give os en tidskompleksitet p˚
a O(n · n − 1)
og da vi bruger store O notation, giver det os en samlet tidskompleksitet p˚
a
2
O(n ).
5.3
Bellman-Ford
Bellman-Ford algoritmen kan finde den korteste vej fra en knude til alle andre
knuder i en graf[6]. Kravet for grafen er at der ikke findes nogen negative kredse. En negativ kreds er en kreds, hvor summen af alle vægtene p˚
a kanterne i
kredsen er negativ. Dette krav medfører ogs˚
a, at grafen skal være orienteret.
Ellers har vi en negativ kreds for hver kant med negativ vægt.
10
Algoritmen starter som Dijkstras algoritme med at sætte længden fra startknuden til alle andre knuder til uendelig. Længden til startknuden sættes til
0.
Givet en vægtet o r i e n t e r e t g r a f G(V, E) ,
hvor v1 ∈ V
er startpunktet
f o r i := 1 t o n
L(vi ):= ∞
L( v 1 ) :=0
Det næste trin i algoritmen er at alle længderne fra startpunktet til alle
andre knuder opdateres s˚
aledes at de er kortest mulig. Forskellen fra Dijkstras
algoritme er at denne algoritme ikke gr˚
adigt vælger en knude der i øjeblikket er
kortest hen til, men opdaterer alle længderne. Dette er grunden til at den kan
h˚
andtere negative vægte.
f o r i = 1 t o |V | − 1
f o r a l l e k a n t e r (u, v) ∈ E
J u s t e r L(u, v)
Det sidste trin tjekker om grafen indeholder nogen negative kredse. Ved
dette trin bør alle de korteste veje fra startknuden til alle andre knuder være
fundet. Hvis der ved dette trin kan findes en kortere vej, betyder det at der
findes en negativ kreds i grafen.
f o r a l l e k a n t e r (u, v) ∈ E
i f L(u) + w(u, v) < L(v)
S˚
a f i n d e s d e r en n e g a t i v k r e d s .
5.3.1
Tidskompleksitet
Som med Dijkstras er tidskompleksiteten udregninget ved,
for i := 1 til |v| − 1 O(n)
for all kanter (n, v)
O(m)
dette giver als˚
a
O(n · m)
Da f˚
ar vi en samlet tidskompleksitet p˚
a O(n2 ).
5.4
APSP algoritmer generelt
’All pairs shortest path’-problemet drejer sig om, at beregne afstande og korteste veje mellem samtlige par af knuder i en graf af formen G = (V, E). V er
mængden af alle knuder i grafen og E er mængden af alle kanter i grafen.[7]
Efter kørsel af en APSP-algoritme f˚
ar man to n × n − matricer hvor n er antallet af knuder i grafen. Lader vi (u, v) beskrive et par af knuderne, s˚
a kan den
ene matrix betegnes ved D(u, v) og er en vægtet nabo matrix hvilket vil sige,
at den indeholder alle afstande mellem samtlige par af knuder i grafen. Den
11
anden matrix kaldes R(u, v). Mens den første matrix holder styr p˚
a afstande,
s˚
a fortæller den anden matrix os i hvilken retning, alts˚
a til hvilken nabo, man
skal g˚
a til, for at følge den korteste vej.
5.5
Floyds algoritme
Et eksempel p˚
a en APSP-algoritme er Floyds algoritme. I det følgende er den
beskrevet i pseudokode, hvor R betegner matrixen med naboer, som vi i det
foreg˚
aende blev beskrevet med R(u, v), og N som opdateres med korteste afstande mellem knudepar (u, v), som vi tidligere kaldte D(u, v)[8]. Denne udgave
af Floyds algoritme tager højde for negative længder med if-sætningen ’if N(i,j)
> N(i,k) + N(k,j) then’.
p r o c e d u r e Floyd (G) ;
begin
N:= M;
f o r k in 1 . . n loop
f o r i in 1 . . n loop
f o r j in 1 . . n loop
J u s t e r %$L ( i , j ) $%
end i f ;
end l o o p ;
end l o o p ;
end l o o p ;
end Floyd ;
Algoritmen starter med at kigge p˚
a løkken j, og tjekker alle andre knuder
om det er muligt at lave en kortere vej fra denne knude. Efter den har gjort det
vil den g˚
a videre med i for, at tjekke om der er kommet nogle nye steder hvor
det er blivet muligt, at lave en kortere vej fra i til de andre knuder og det vil
den blive ved med, indtil den er kommet igennem alle knuderne[9].
5.5.1
Eksempel p˚
a Floyds algoritme
Figur 2: ikke-orienteret vægtet graf
[1]
12

 
∞ 4 2 ∞ ∞ ∞
(a, a)
 4 ∞ 1 5 ∞ ∞  (a, b)

 
 2 1 ∞ 8 10 ∞  (a, c)

 
∞ 5 8 ∞ 2 6  = (a, d)

 
∞ ∞ 10 2 ∞ 3   (a, e)
∞ ∞ ∞ 6 3 ∞
(a, z)
Grafen

1
1

1

1

1
1
(b, a)
(b, b)
(b, c)
(b, d)
(b, e)
(b, z)
(c, a)
(c, b)
(c, c)
(c, d)
(c, e)
(c, z)
(d, a)
(d, b)
(d, c)
(d, d)
(d, e)
(d, z)
(e, a)
(e, b)
(e, c)
(e, d)
(e, e)
(e, z)

(z, a)
(z, b) 

(z, c) 

(z, d)

(z, e) 
(z, z)
2 i matrixform. D(0)

2 3 4 5 6
2 3 4 5 6

2 3 4 5 6

2 3 4 5 6

2 3 4 5 6
2 3 4 5 6
R(0) matrixen
N˚
ar man køre Floyds algoritme første gang kigger man p˚
a i = 1. Værdien
af i bruges til at markere den korteste vej gennem en knuden. Alle de steder
i R hvor der st˚
ar 1 skal man g˚
a igennem knuden a for at finde den korteste
vej. Havde i været 2 skulle vi g˚
a igennem 2. Floyds algoritme for i = 1 starter
alts˚
a med at kigge p˚
a a, derfor kigger man p˚
a første række og kolonne. S˚
a løber
man igennem for at finde alle de nye korteste vej gennem a. I første række og
kolonne, alts˚
a (2, 1) og (1, 2), ser vi tallet 4 kigger man i (2, 2) er tallet ∞ da
summen af (2, 1)+(1, 2) er 8, og da 8 < ∞ s˚
a sættes den ny kortestevej i (2, 2) til
8. S˚
a opdateres R(2, 2) til 1 da i = 1. Ligeledes opdateres D(3, 3) og R(3, 3)[10].
Hvordan R matrixen bruges til at finde den korteste vej kommer vi tilbage
til i slutningen af dette afsnit. Til at starte med beskæftiger vi os med at f˚
a den
til at indeholde de rigtige veje.


∞ 4 2 ∞ ∞ ∞
 4 8 1 5 ∞ ∞


 2 1 4 8 10 ∞


∞ 5 8 ∞ 2 6 


∞ ∞ 10 2 ∞ 3 
∞ ∞ ∞ 6 3 ∞
Grafen figur 2 i matrixform. D(1)


1 2 3 4 5 6
1 1 3 4 5 6


1 2 1 4 5 6


1 2 3 4 5 6


1 2 3 4 5 6
1 2 3 4 5 6
13
R(1) matrixen
S˚
adan forsætter man til i = 6 er løbet igennem, da har man de færdige
matricer. Grunden til det er i = 6 er fordi der er 6 knuder i grafen, s˚
a man
gennem løber løkken en gang per knude til man ikke har flere knuder i grafen.
De færdige matricer ser s˚
aledes ud:


4 3 2 8 10 13
 3 2 1 5 7 10


 2 1 2 6 8 11


8 5 6 4 2 5


10 7 8 2 4 3 
13 10 11 5
3
6
Grafen figur 2 i matrixform. D(6)


3 3 3 3 4 5
3 3 3 4 4 5


1 2 2 2 4 5


2 2 2 2 5 5


4 4 4 4 4 6
5 5 5 5 5 5
R(6) matrixen
Hvis man s˚
a gerne vil finde den korteste vej fra a til z, starter man i R(6)
med at kigge p˚
a (6, 1), svarende til z hvor der st˚
ar 5 hvilket betyder at man skal
g˚
a til e alts˚
a (5, 1) bemærk at v ikke ændre sig da vi stadig ønsker at finde vej
til a. Dette fortsættes ind til man f˚
ar det samme tal i u som i v. Vejen bliver
alts˚
a a, c, b, d, e, z med en længde p˚
a 13.
5.5.2
Tidskompleksitet
Tidskompleksitet for Floyds algoritme er O(n3 )[9]. Da algoritmen tjekker 3
løkker, k, i og j igennem, hvor worstcase for alle tre er n justeringer, f˚
ar man
3
udregningen O(n · n · n) = O(n ).
5.6
Valg af algoritme
Den første algoritme vi kiggede p˚
a var Dijkstras algoritme, den havde den ulempe at den ikke kan regne p˚
a negative kanter. Men da vi ikke har negative kanter
i grafer over bygninger, kan vi se bort fra dette. Tidskompleksiteten for Dijkstras var O(n2 ).
Bellman-Ford algoritmens eneste forskel fra Dijkstras er at Bellman-Ford kan
tage negative kanter, som tidliger nævnt har vi ikke brug for dette, derfor vil vi
ikke kigge mere p˚
a den. Den siste algoritme vi har beskæftiget os med er Floyds
algoritme den har en tidskompleksitet p˚
a O(n3 ). Den største forskel p˚
a Floyds
i forhold til Dijkstras er at mens Dijkstras kun finder korteste vej fra en knude
14
til alle andre. s˚
a finder Floyds korteste vej mellem alle knuder. Hvis man kigger
p˚
a grafen vi har lavet over strandvejen 121, kan man se vi har tre udgange. I en
flugtplan vil vi være interesseret i at finde korteste vej fra alle knuder til disse
tre udgange. Med andre ord fra alle kilder til alle dræn. Hvis vi vælger floyds
til at finde alle korteste veje vil det tage O(n3 ) tid. For Dijkstras ville det tage
O(3 · n2 ) da vi skal gennemløbe algoritmen en gang for hvert dræn. Derfor har
vi valgt Dijkstras.
6
Frameworket
Vi vil her fortælle hvordan vi har sat vores program op. Dette er en beskrivelse
af vores framework, hvor man kan oprette knuder, kanter og veje.
6.1
Nodes
N˚
ar vi skal tilføje en ny knude til vores graf gøres dette som set i koden her:
p u b l i c S t r i n g name ;
p u b l i c L i s t <Edge> n e i g h b o u r s = new A r r a y L i s t <Edge >() ;
p u b l i c Node ( S t r i n g nodeName )
{
name = nodeName ;
}
Dette betyder at vi først giver knuden et navn. S˚
a opretter vi en liste som
indeholder alle de naboer knuden har, alts˚
a alle de knuder der er forbundet til
selve denne knuden. Som det st˚
ar her er denne liste tom, det er klassen Edge
der fortæller noget om hvilke knuder den faktisk har som naboer.
6.2
Edge
Det er klassen Edges som siger noget om hvilke knuder der hænger sammen.
Denne klasse for kanter tager fire paramenter:
• Hvilken knude den kommer fra.
• Hvilken knude den g˚
ar til.
• Længde af kanten.
• Kantens kapacitet.
N˚
ar klassen har f˚
aet de fire parameter, kan den tilføje de forskellige knuders
naboliste.
p u b l i c Edge ( Node fromNode , Node toNode , f l o a t
lengthOfEdge , f l o a t c a pa c i t yO f E d ge )
{
fromNode . n e i g h b o u r s . add ( new
Edge ( toNode , lengthOfEdge , c ap a c i t yO f E dg e ) ) ;
15
toNode . n e i g h b o u r s . add ( new
Edge ( fromNode , lengthOfEdge , c a p ac i t y Of E d g e ) ) ;
}
p u b l i c Edge ( Node toNode , f l o a t lengthOfEdge , f l o a t
c a pa c i t y Of E d g e )
{
t a r g e t = toNode ;
l e n g t h = lengthOfEdge ;
c a p a c i t y = c a p ac i t y O fE d g e ;
}
Først tilføjes kanten fra start knuden til slut knuden, og da længden fra a
til b er den samme som fra b til a i vores graf, tilføjer vi en kant mere som g˚
ar
den anden vej med samme længde.
6.3
Eksempel
S˚
adan kunne en lille graf med tre knuder se ud.
Node a = new Node ( ” a ” ) ;
Node b = new Node ( ” b ” ) ;
Node c = new Node ( ” c ” ) ;
e d g e s . add ( new Edge ( a , b , 5 , 1 0 ) ) ;
e d g e s . add ( new Edge ( a , c , 6 , 3 ) ) ;
e d g e s . add ( new Edge ( b , c , 7 , 2 ) ) ;
Det kan ses ud fra de tre kanter vi tilføjer, at det er muligt at komme fra
en knude til alle de andre knuder. Man ser ogs˚
a at alle kanterne har en længde
og en kapacitet. Første tal er længden, det andet er kapaciteten.
Nu da graf-delen er p˚
a plads kan vi begynde at kigge p˚
a implamenteringen af
Dijkstra’s.
6.4
PathFinder
Hvis man kigger p˚
a psudokoden til Dijkstras algoritme5.2.
f o r ( Node node : graph )
{
node . minDistance = Double . POSITIVE INFINITY ;
}
Man kan se at vi starter med at sætte længden fra start knuden til alle andre
knuder til uendelig, da vi endnu ikke kender den korteste vej.
s t a r t N o d e . minDistance = 0 . ;
d o u b l e minDistance ;
Node currentNode = s t a r t N o d e ;
L i s t <Path> s h o r t e s t P a t h s = new A r r a y L i s t <Path >() ;
L i s t <Node> n o d e s S e a r c h e d = new A r r a y L i s t <Node >() ;
16
Man sætter minDistancen for vores start knude til at være nul, da der ikke
er længde til vores start knude. CurrentN ode er den knude vi befinder os i,
som til at starte med er startN ode, fordi vi starter i start knuden. Samtidig
laver vi to lister, hvor den en, shortestP ath, holder styr p˚
a korstest vej og den
anden, nodesSearched, holder styr p˚
a de knuder, vi har tjekket.
Nu kan vi s˚
a begynde at kigge lidt p˚
a hovedløkken i Dijkstras5.2.
while ( ! nodesSearched . c o n t a i n s A l l ( targetNodes ) )
{
minDistance = Double . POSITIVE INFINITY ;
f o r ( Node node : graph )
{
i f ( n o d e s S e a r c h e d . c o n t a i n s ( node ) )
{
continue ;
}
e l s e i f ( node . minDistance < minDistance )
{
currentNode = node ;
minDistance = node . minDistance ;
}
}
n o d e s S e a r c h e d . add ( currentNode ) ;
S˚
a længe de kanter vi gerne vil hen til, ikke er i listen af kanter, vi allerede
har kigget p˚
a. Skal minimums afstanden være uendelig, da vi ikke har beregnet
en vej til knuden. Herefter tjekker vi alle knuder igennem, hvis den knude vi
er kommet til i grafen, er en af de knuder vi allerede har tjekket, skal den
g˚
a videre til næste knude. Hvis den knude vi er kommet til, ikke er en af
de knuder vi allerede har tjekket, og hvis knudens lændge er mindre end den
lændgen, der allerede er fundet til denne knude. Sætter vi minimums lændgen til
knudens lændge, fordi hvis den nye vej vi har fundet til knuden, har en mindre
længde end den tidligere længde, har vi fundet en kortere vej. Samtidig sætter
vi currentN ode til node, da det er den knude vi arbejder med i for-løkken.
Tilsidst tilføjer vi knuden, til vores listen nodesSearched.
f o r ( Edge n e i g h b o u r : currentNode . n e i g h b o u r s )
{
i f ( nodesSearched . contains ( neighbour . t a r g e t ) )
{
continue ;
}
i f ( ( currentNode . minDistance +
neighbour . length ) <
n e i g h b o u r . t a r g e t . minDistance )
{
17
n e i g h b o u r . t a r g e t . minDistance =
( currentNode . minDistance +
neighbour . length ) ;
neighbour . t a r g e t . previous =
currentNode ;
}
}
Bemærk at denne for-løkke er inde i while-løkke fra tidligere. Vi tjekker alle
naboerne igennem for den knude, vi arbjeder med, hvis at den nabo vi er kommet til allerede er tjekket igennem, skal vi bare g˚
a videre med næste nabo. Hvis
den knude vi er kommet tils minimums længde og dens nabos længde er mindre
end længden fra knudens nabo til slut knuden, s˚
a har vi fundet en kortere vej.
Derfor skal længden fra knudens nabo til slut knuden være den knude vi er
kommet tils længde og knudens længde. Vi sætter den tidligere knude til den
knude vi er kommet til, for at tjekke vej.
f o r ( Node t a r g e t : t a r g e t N o d e s )
{
Path path = new Path ( ) ;
f o r ( Node node = t a r g e t ; node !=
n u l l ; node = node . p r e v i o u s )
{
path . nodes . add ( node ) ;
}
C o l l e c t i o n s . r e v e r s e ( path . nodes ) ;
path . c a l c u l a t e L e n g t h ( ) ;
s h o r t e s t P a t h s . add ( path ) ;
System . out . p r i n t l n ( path . ge t Le n g th ( ) ) ;
}
return shortestPaths ;
}
Her laver vi en ny vej for alle dræn, hvor vi tjekker hele vejen igennem
og sammenligner vejene. Da vejen g˚
ar fra dræn til kilder, bruger vi metoden
reverse, for at f˚
a vejen til at g˚
a fra kilder til dræn. Samtidig beregner vi længden
og tilføjere vejen til shortestP aths.
7
Største strømnings-problemet
Da vi gerne vil finde ud af, hvor stor strøming en flugtplan tillader, vil vi her
se p˚
a største strømnings-problemet. Strømningen for en flugtplan kan fortælle
os, om alle menneskerne i flugtplanen kan komme ud. Herunder vil vi ogs˚
a gennemg˚
a Ford-Fulkersons metode.
Et strømningsnetværk er en vægtet orienteret graf G = (V, E), hvor alle
e ∈ E har en positiv vægt, kaldet kapaciteten c(u, v), hvor u ∈ V og v ∈ V . To
18
knuder s ⊆ V og d ⊆ V kaldes for kilder og dræn.
For et strømningsnetværk skal der gælde: Strømingen for en given kant m˚
a
ikke overstige dens kapacitet:
For alle u, v ∈ V skal c(u, v) ≥ f (u, v)
For alle knuder skal den strømning, der kommer ind være lig den strømning,
der g˚
ar ud. Undtagen for kilder og dræn:
X
For alle v ∈ V \{s, t} skal
f (v) = 0
v∈V
Bevæger vi os modsat orientering f˚
ar vi en strømning med negativ fortegn:
For alle u, v ∈ V skal f (u, v) = −f (v, u)
Definition 9. Givet er:
• Et strømningsnetværk G = (V, E)
• En strømningsfunktion f : E → R+
Her er den samlede strømning af et strømningsnetværk |f | defineret som:
X
|f | =
f (e)
e∈E
Definition 10. Givet er:
• Et strømningsnetværk G = (V, E)
• En strømningsfunktion f : E → R+
Her er den resterende kapacitet cr defineret som:
cr (u, v) = c(u, v) − f (u, v)
Finder vi for et strømningsnetværk G = (V, E), den resterende kapacitet
for alle kanter, kan vi lave et nyt strømningsnetværk, hvor c(u, v) = cr (u, v) for
alle (u, v) ∈ E. Dette netværk kalder vi et rest-netværk Gr = (V, E). En vej fra
en kilde til et dræn i s˚
adan et strømningsnetværk kalder vi en rest-vej pr .
7.1
Ford-Fulkersons metode
Vi vil her beskrive Ford-Fulkersons metode, som kan finde den største strømning
for en given graf G = (V, E). Ideen bag metoden er at lave et rest-netværk for
den givne graf og derefter forøge strømningen gennem grafen indtil der ikke kan
findes flere rest-veje. Dette skulle give os den største strømning gennem grafen.
Vi vil her vise at dette er sandt:
Givet er et strømningsnetværk G = (V, E) og en afledt rest-graf Gr = (V, E).
Lad os antage, at vi har fundet den største strømning |f | for G, men at der
stadig er en rest-vej tilbage i Gr . S˚
a vil |f | + fr , hvor fr er den strømning,
der kan g˚
a igennem rest-vejen, være større end den antagede største strømning.
Vi har derfor at den største strømning af G f˚
as, n˚
ar der ikke er flere rest-veje
tilbage.
19
7.1.1
Pseudokode
Her kommer en meget basal implementering af Ford-Fulkersons metode.
Givet e t s t r ø m n i n g s n e t v æ r k G = (V, E) .
En k i l d e og e t dræn .
f o r a l l e k a n t e r (u, v) ∈ E
f (u, v) = 0
f (v, u) = 0
w h i l e d e r e k s i s t e r e r en r e s t −v e j mellem k i l d e n
og drænet i r e s t −g r a f e n Gr
f o r a l l e r e s t −v e j e θ i Gr
f o r a l l e k a n t e r (u, v) ∈ θ
f (u, v)+ = F (θ)
f (v, u) = −f (u, v)
Som beskrevet her kan denne algoritme kun finde strømningen fra en kilde
til et dræn. Da vi i vores projekt vil finde veje mellem flere kilder og dræn skal
vi have rettet det. For flere dræn og kilder ændrer man ikke p˚
a koden, men
tilgengæld p˚
a grafen.
Givet et strømningsnetværk G = (V, E), hvor kilder og dræn er s ∈ V og
d ∈ V . S˚
a findes der en mængde af kilder kaldet superkilde S og en mængde af
dræn kaldet. superdræn D. Hvor der gælder, at for alle s ∈ V er s ∈ S og for
alle d ∈ V er d ∈ D. Alle kanterne fra kilderne til superkilden og drænene til
superdrænet vil være vægtet med uendelig kapacitet.
8
Arkitekt værktøjer
Vi vil i dette afsnit se nærmere p˚
a enkelte programmer som er egnet til plantegning og design af bygninger. Det vi vil se p˚
a er hvilke features programmet
har og om det tager højde for nogen form for flugtveje. Til sidst vil vi analysere
p˚
a programmerne, om i hvor stor grad de er brugbare og hvilke forbedringer,
vi kan se.
8.1
ArchiCAD 13
ArchiCAD 13 er et meget avanceret program med ufatteligt mange funktioner,
desværre er alle funktionerne med til at gøre programmet meget forvirrende. I
vores forsøg p˚
a at lave en bygning, var det er lave døre og rum intet problem.
Problemmet derimod opstod da vi skulle prøve at lave tag p˚
a bygningen, men
kan argumentere for at et tag ikke er vigtigt n˚
ar man snakker flugtveje. Dette leder os hen til det vi egentlige undersøgte om dette program tager højde
for flugtveje. I vores tid med programmet fandt vi aldrig frem til noget med
flugtveje, hvilke vi i øvrigt ikke tror eksistere i programmet. Programmet virker
nemlig ikke vildt realistisk, da man sagtens kan en bygning som ikke vil kunne
20
bygges. Fordelen med ArchiCAD 13 er at man kan se sin bygning i 3D. Til sidst
bør det nævnes at ArchiCAD 13 ikke er det helt billigste program.
8.2
Smartdraw 2010
I modsætning til ArchiCAD 13 s˚
a er Smartdraw 2010 et meget lightweight program, dejligt nemt at finde rundt i. Det skal dog siges at det s˚
a heller ikke har
nær s˚
a mange funktioner som ArchiCAD 13. Derudover kan man heller ikke
se sin bygning i 3D, det man ser er en plantegning, hvilke i princippet ogs˚
a er
det man skal bruge n˚
ar vi snakker flugtveje. I Smartdraw 2010 er der en masse
eksempler p˚
a bygninger til r˚
adighed. Et par af disse eksempler er flugtplaner,
hvor der sørges for at f˚
a alle fra bygningen ud og endda ud af flugtveje som ser
ud til at være de optimale. Der er alts˚
a i Smartdraw 2010 tænkt p˚
a flugtveje,
men ikke tænkt s˚
a meget at man selv kan lave optimale flugtveje i sin egen
bygning. Smartdraw 2010 er heller ikke helt billigt dog langt fra lige s˚
a dyrt
som ArchiCAD 13.
8.3
Google Sketch-up
Google sketch-up er et gratis program hvor der dog kan købes en PRO udgave. Vi har valgt at tage Google Sketch-up med for at vise et gratis tilbud til
arkitekter. Dette program er ligsom Smartdraw 2010 dejligt simpelt og lige til
at g˚
a til. I Google Sketch-up kan man b˚
ade lave plantegninger og tegne i 3D,
det negative er s˚
a at det ligesom ArchiCAD 13 er meget urealistisk. I forhold
til flugtveje, har vi ikk fundet skyggen af features der giver brugeren mulighed
for at lave flugtveje.
8.4
Samlet vurdering
Disse 3 programmer udgør et bredt udvalg af hvad der er p˚
a markedet af denne
type programmer. P˚
a den baggrund kan vi sige at der s˚
a vidt vi er orienteret
ikke bliver taget højde for flugtveje i disse programmer. Det ville dog muligvis
ikke være vildt svært at implementere en flugtvejs feature i programmerne, da
programmerne allerede kan udregne længde og er dermed ikk langt fra kapacitet.
9
Metode
Rapporten best˚
ar af en datalogisk, en matematisk og en diskret matematik
vinkling. Da vi ønsker at finde en optimal vej ud af en bygning, er det oplagt
at benytte diskret matematik til at forklare grafteori. Vi benytter matematik
til at opstille definitioner af grafteoriske begreber s˚
asom kanter og knuder. Ved
at have disse definitioner fastsatte, kunne vi begynde at lave et program, der
kunne beregne den optimale vej. Der er lavet mange forskellige algoritmer til at
21
beregne den korteste vej, men vi ønsker at finde den optimale vej. Det betyder,
at vi bliver nød til at arbejde med variablen kapacitet. S˚
a vores algoritme bliver
nød til kun at være inspireret af korteste vej algoritmer.
Vores m˚
algruppe ændrede sig igennem hele projektet, i starten var vores
m˚
algruppe de flygtende personer, der allesammen skulle have tilgang til programmet. Dette gik vi væk fra igen, da det var svært at sende folk i forskellige
retninger, hvis programmet ikke fandt alle de andre personer i bygningen. Det
forudsatte ogs˚
a, at alle personerne skulle have programmet og derudover være
i stand til at benytte det. S˚
a vi ændrede m˚
algruppen, s˚
a det var folk fra personalet der skulle st˚
a for at guide personerne ud, vha. programmet. Dette løste
problemet, men det betød ogs˚
a at guiderne, kom sidst ud. S˚
a i stedet for at have
personalet som m˚
algruppe, besluttede vi os for at bruge arkitekter som primær
m˚
algruppe. Derfor m˚
atte vi finde ud af hvad arkitekterne gjorde for at sikre
flugtpersonerne ved brand, s˚
a vi fik arrangeret et interview med en arkitekt.
Vi har brugt bøger og internetsider som kilde. Under grafteoriafsnittet har
vi brugt vores diskret matematik bog. Grunden til det er, at vi kender bogens
begreber fra undervisningen. Nogle af grafteoriens begreber kan variere fra bog
til bog. Vi er klar over, at internetsider ikke altid er p˚
alidelige, men vi har været
kritisk overfor dem. De internetsider vi har valgt at bruge har vi vurderet til at
være p˚
alidelige. Vores kilde ?? er vurderet p˚
a baggrund af forfatteren, der er
Erhvers- og Byggestyrelsen.
Før mødet med en arkitekt fra Friis-Moltke, gjorde vi os overvejelser om
hvad vi gerne ville ha’ ud af vores interview.
En anden del af vores kontekstsdel er, hvordan personer opfører sig ved
brand.
10
10.1
Interview
M˚
al og overvejelser
M˚
alet med dette interview er at finde ud af om, arkitekter har behov for et program, der kan finde den optimale flugtvej ud af en bygning. I den sammenhæng
vil det ogs˚
a være relevant at finde ud af, hvad de gør for at designe bygninger,
p˚
a en m˚
ade s˚
a folk kan komme sikkert ud, og om menneskelig adfærd bliver
medregnet. Det vil ogs˚
a være relevant for os at høre hvilke love, der er vigtige,
n˚
ar man skal designe bygninger. Da der kunne ske at være nogle ting, vi m˚
atte
tage højde for. Til sidst vil vi gerne finde ud af, hvilke krav en arkitekt har til
et flugtvejsprogram.
10.2
Spørgsm˚
al:
1. Hvilke faktorer tager I højde for n˚
ar I tegner en bygning?
2. Tager i højde for flugtveje? Hvordan tager I højde for det?
22
3. Hvilke love og retningslinjer overvejer i? Og hvorfor? Hvorfor netop dem?
Er det alle retningslinjer omkring flugtveje, eller er der nogle I kan fravælge?
4. Er det nogensinde sket at I har tegnet en bygning og brandmyndighederne
har afvist den? Og hvorfor?
5. Hvad gør I for at forhindre dette?
6. Laver i beregninger p˚
a flugtruter og evakueringstider? Og hvordan gør I
det?
7. Føler i nogensinde at det er nødvendigt at g˚
a p˚
a kompromis for at sikre
flugtruter?
8. Føler i at lovgivningen er for stram eller burde ændres? P˚
a hvilke omr˚
ader
og hvorfor?
9. Hvor meget og hvordan arbejder I sammen med brandmyndighederne?
10. Der findes en del værktøjer til udregning af optimale flugtveje (her kan I
godt nævne et par eksempler), er det nogle I benytter jer af?
11. Hvis ja, hvad hedder dette program, og hvorfor har I valgt at bruge det?
12. Hvilke forbedringer kunne I ønske jer af programmet?
13. Hvis nej, har I overvejet dette? Og hvorfor bruger I ikke et værktøj?
14. Hvad skulle et program minimum kunne afhjælpe for at I ville bruge det?
15. Overvejer I menneskelig psykologi og adfærd ved krisesituationer, n˚
ar I
tegner bygninger? Og hvordan?
10.3
Kommentarer til spørgsm˚
al:
1. Bredt spørgsm˚
al der lægger op til en meget generel indsigt i tankegangen
der ligger til grund for tegningen af bygningen. Meget for at komme igang
med samtalen, og komme ind p˚
a det overornede emne.
2. Indsnævrende spørgsm˚
al der forsøger at undersøge om flugtveje overhovedet er noget arkitekter overhovedet overvejer. I forlængelse af det første
spørgsm˚
al, vil det rette samtalen mod vores fokuspunkt.
3. Kan muligvis kaste lys over nogle af de ting vi har været ude af stand til
at finde.
4. Undersøger hvor godt sikret en bygning er n˚
ar den først bliver tegnet. Om
sikkerheden skal passes ind efter bygningen eller omvendt.
5. Nærmest bare at afklarende spørgsm˚
al til fire, der g˚
ar p˚
a hvilke procedurer
og kriterier de har for sig selv med henhold til at sikre flugtveje.
23
6. Initierende spørgsm˚
al der g˚
ar p˚
a hvor meget det er en del af deres praksis
at mere eller mindre præcis at udregne endelige flugtruter. Dette vil give
en indsigt i hvor vant arkitekter er til at tænke i de baner og problemer
som vi arbejder med.
7. Føler arkitekter at lovgivningen er i vejen for design af bygninger, eller
ser de det som en del af deres profession at tænke over flugtveje.
8. Meget samme grund som sekseren. Kunne eventuelt bruges til at høre om
9. Spørgsm˚
al der kan være med til at belyse hvor meget kontakt arkitekterne
har med dem der skal godkende flugtplaner.
10. Dette er et spørgsm˚
al der g˚
ar p˚
a om programmer som vores er benyttede
blandt arkitekter, med henblik p˚
a om vi kan regne med at arkitekter er
vant til at benytte lignende programmer (usability).
11. Det er interessant at vide hvilket program de bruger, og hvilke funktioner
det er arkitekter ser som vigtige i et program.
12. G˚
ar p˚
a hvilke problemer nuværende værktøjer lignende til vores har.
13. Dette spørgsm˚
al g˚
ar p˚
a hvilke ting vi skal tage højde for i vores program
for at have mulighed for at lave et program der vil bliver benyttet.
14. Undersøger hvilke ting er de vigtigste ved et s˚
adan program s˚
a vi kan
være sikker p˚
a enten at f˚
a det med i programmet, eller i hvert fald omtale
det.
15. Et eksempel kunne være fænomenet med at mennesker som regel tager
den udgang de er vant til.
Spørgsm˚
al 9-13 g˚
ar p˚
a ting der vil hjælpe os til at vide hvilke funktioner vi
skal have med i programmet, og hvilke vi skal diskutere.
Litteratur
[1] K. H. Rosen, Discrete Mathematics and Its Applications Sixth Edition.
McGraw-Hill, 2007.
[2] J. Larsen, Jesper Clausen, “The max flow problem.” [Online]. Available:
http://www.imada.sdo.dk/∼jbj/DM85/maxflow.pdf
[3] L. Winerman, “Fightin fire with psycholology.” [Online]. Available:
http://www.apa.org/monitor/sep04/fighting.aspx
[4] J. Wiley, “Fire and materials.” [Online]. Available: http://www3.
interscience.wiley.com/journal/71000844/issue
[5] R. H. PHD, “Herd mentality explained,” 2008. [Online]. Available: http://
psychcentral.com/news/2008/02/15/herd-mentality-explained/1922.html
24
[6] C. E. Leiserson, “Introduction to algorithms, lecture 18.” [Online]. Available: http://www.cs.arizona.edu/classes/cs445/spring05/ShortestPath2.
prn.pdf
[7] M.-Y. Kao, Encyclopedia of Algorithms.
LLC, 2008.
[8] J.-C. Fournier, Graph Theory and Applications. John Wiley and Sons Inc,
2009.
[9] R. Sedgewick, Algorithms in Java Third Edition Part 5: Graph Algorithms.
Addison Wesley, 2003.
[10] P.
Symonds,
“floyds[1].”
[Online].
Available:
http:
//www.excellencegateway.org.uk/media/ferl and aclearn/ferl/resources/
colleges/petersymonds/filedownload/dhand/floyds/floyds[1].ppt
25