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
© Copyright 2024