Rozšíření simulace building escape (NetLogo)

From Simulace.info
Revision as of 14:53, 5 June 2016 by Xhejj23 (talk | contribs) (Kód procedur)
Jump to: navigation, search


Tato práce je rozšířením učebního příklad building escape vyučovaném na kurzu 4IT495 Simulace systémů.

Definice problému

Zadání

Název simulace: Rozšíření simulace Building escape

Předmět: 4IT495 Simulace systémů (LS 2015/2016)

Autor: Bc. Jakub Hejduk

Typ modelu: multiagentní

Modelovací nástroj: NetLogo 5.3.1

Definice

Simulace se bude týkat rozšíření učební úlohy Building escape. Ta v současném stavu poskytuje prázdnou místnost, ze které se snaží lidé uprchnout před požárem. Tento základní motiv bude rozšířen o přidání překážek, okolo kterých budou muset lidé chodit, taktéž přidání místností, ze kterých budou muset vylézt, případně chodeb k únikovým východům, kde se budou lidé štosovat. Taktéž bude přidáno okno, ze kterého bude možnost vyskočit ven a spoléhat, že budou hasiči mít připravenou plachtu, do které člověk spadne. Tato možnost bude podléhat náhodě, např. 10% z celku bude mít odvahu skočit a v 50% se skok povede. Všechny překážky a místnosti budou z druhu materiálu, předpokladem je beton, dřevo a sádrokarton, přičemž sádrokarton prohoří nejrychleji, naopak beton nejpomaleji. Možností rozšíření je přítomnost hydrantu, ze kterého bude možnost, dle jeho kapacity, část ohně uhasit a zamezit šíření do uhašené strany. Nastavení počtu místností, překážek, ohňů, lidí bude k dispozici. Některé prvky budou ovšem limitovány z prostorových důvodů.

Metoda

Celá simulace se odehrává v simulačním prostředí Netlogo 5.3.1. Toto simulační prostředí umožňuje vytvořit různé podmínky pro danou simulaci a testovat jejich vázjemné rozdíly. Lze vytvořit agenty, kterých se simulace týká, nastavit jejich parametry a dle těchto parametrů ovlivňovat jejich chování v prostředí. To samé se týká prostředí, které lze měnit na základě různých ovládacích prvků. Netlogo poskytuje mnoho možností co se týká uživatelského prostředí a jeho ovládání, proto je vhodné pro tento druh simulace.

Předpoklady

  • Simulace se odehrává v uzavřené místnosti
  • Lidé nemají jinou možnost východu z místnosti než východy či oknem
  • Počet překážek v nastavení simulace je limitován
  • Překážky se navzájem mohou prolínat

Model

Základní model(původní)

V základní verzi simulace je jednoduchá logika. Lidé jsou náhodně vygenerováni na plochu místnosti, která je prázdná. K dispozici mají dva východy situované v dolním levém, respektive pravém rohu. Následně se vygeneruje požár, který má kruhový tvar. Při spuštění simulace se následně lidé snaží dostat k nejbližšímu východu a zachránit se. Požár se šíří a případně přeřízne cestu unikajícím lidem. V této simulaci nebylo řešeno, jestli je před člověkem oheň, nebo ne. Automaticky do něj vběhl a uhořel. Pokud se lidé shlukli v hloučku, je možnost, že bude člověk ušlapán. Tento model byl rozšířen o skutečnosti popsané níže.

Agenti a atributy původního modelu

  • People (Lidé) - představují osoby, které jsou uvězněni v prostoru s požárem a chtejí se zachránit.
    • pace (rychlost) - představuje samotnout rychlost člověka, respektive kolik kroků udělá při jednom ticku (jedné iteraci simulace). Tento atribut je generovan z normálního rozdělení s parametry 1 0.2
    • headx - představuje horizontální souřadnici, kam člověk poběží. Jedná se tedy o atribut doorx nebližšího východu.
    • heady - představuje vertikální souřadnici, kam člověk poběží. Jedná se tedy o atribut doory nebližšího východu.
  • Exits (Východy) - představují východy, do kterých se lidé musí dostat.
    • doorx - představuje horizontální souřadnici východu. Slouží k určení, kam má člověk směřovat.
    • doory - představuje vertikální souřadnici východu. Slouží k určení, kam má člověk směřovat.

Parametry původního modelu

  • excaped-people - představuje počet zachráněných lidí.
  • burned-people - představuje počet uhořelých lidí.
  • crushed-people - představuje počet ušlapaných lidí.

Rozšíření modelu

Původní model odpovídal na otázku počtu zachráněných při různém počtu lidí, avšak místnost nebývá prázdná. Proto na řadu přichází pár rozšíření, které pomohou simulaci obohatit. Jako první je přidání překážek, okolo kterých lidé budou muset chodit. Je to simulace reálnějších podmínek, kde jsou v místnosti umístěny různé překážky, které ve finále člověk musí obcházet. Tyto překážky ovšem také mohou shořet. Překážky jsou vyrobeny z různých materiálů, konkrétně ze tří a to beton, dřevo a plast. Každý z materiálů má různý stupeň prohoření, respektive dřevo a plast prohoří daleko snáze, než beton. O prohoření dále. Další částí rozšíření simulace je možnost přidání do simulace úzké chodby, která vede k dvěma východům. Pokud se tedy chtějí lidé zachránit, je nutno do této chodby vstoupit. A právě chování v chodbě, respektive ještě více uzavřeném prostoru je dalším reálnějším rozšířením. Do simulace bylo přidáno okno, ze kterého lze vyskočit. Je to druhá možnost záchrany, místo východů, které budou přeplněné. K tomu, aby člověk vyskočil z okna musí mít ale kuráž. Pod oknem by měli čekat hasiči, potažmo lidé s plachtou. Úspěšnost skoku ale není 100%. Je tu tedy jisté riziko. Dále se v modelu nachází možnost běhu lidí. Běh znamená, že lidé budou mít zvýšenou rychlost, ale podléhají riziku, že zakopnou a zlomí si nohu. V tom případě se jim razantně sníží rychlost, jelikož kvůli bolesti a fraktuře nebudou moci normálně chodit. Co se týká naivity lidí, kteří v základním modelu vběhli do ohně, byť ho viděli před sebou, tak v rozšířeném modelu je toto lépe ošetřeno. Pokud člověk vidí před sebou oheň, nevběhne do něj jako sebevrah, ale snaží se ho obejít, případně zůstane na svém místě. Určité riziko ovšem existuje a to, že se oheň prudce rozšíří i na místo, kde stojí člověk. V tom případě chytne a má špatně řečeno smůlu. Pokud kličkuje mezi ohněm má nastavený počet životů, který když mu vyprší, tak uhoří, respektive zemře. V rozšíření byla taktéž přidána možnost nastavení počtu východů.

Agenti a atributy

Následující jsou agenti a atributy, o které byla simulace rozšířena.

  • People (lidé) - rožšíření o:
    • stubled - boolean(pravda/nepravda) atribut, který označuje u člověka, zdali zakopl a zlomil si nohu, či nikoliv.
    • brave - označuje člověka, který se nebojí skočit z okna a taky tak udělá.
    • life - označuje počet životů, když člověk kličkuje mezi ohněm.
  • Obstacles (Překážky) - představuje agenta překážky, která je umístěná v prostoru a lidé okolo ní chodí.
    • material - představuje materiál, ze kterého je překážka vyrobena.
    • obstaclex - představuje horizontální souřadnici středu překážky.
    • obstacley - představuje vertikální souřadnici středu překážky.
  • Windows (Okna) - představuje agenta okna, ze kterého mohou lidé vyskočit.
    • windowx - představuje horizontální souřadnici středu okna.
    • windowy - představuje vertikální souřadnici středu okna.
  • Walls (Zdi) - představuje zdi chodby, která vede ke dvěma východům.
    • wallx - představuje horizontální souřadnici pravého konce zdi.
    • wally - představuje vertikální souřadnici pravého konce zdi.
    • alignment - určuje, zdali je zeď postavená vertikálně, nebo horizontálně. Možné nastavení: 1 - vertikální, 2 - horizontální jdoucí doleva, 3 - horizontální jdoucí doprava.

Parametry

Následující jsou parametry, o které byla simulace rozšířena.

  • jumpOK-people - indikuje počet lidí, kteří se skokem z okna zachránili.
  • jumpKO-people - indukuje počet lidí, kteří se skokem z okna zabili.

Grafické prostředí

Ovládání a monitory

  • Původní
    • Ovládací prvky
      • Persons - umožňuje nastavit počet generovaných lidí.
    • Monitory
      • escaped-people / persons - relativní četnost uprchlých lidí.
      • crushed-people / persons - relativní četnost ušlapaných lidí.
      • burned-people / persons - relativní četnost uhořelých lidí.
      • escaped-people - absolutní četnost uprchlých lidí.
      • crushed-people - absolutní četnost ušlapanýnch lidí.
      • burned-people - absolutní četnost uhořelých lidí.
  • Rozšíření
    • Ovládací prvky
      • count_of_exits - umožňuje nastavit počet východů. Počet je limitován pouze na čtyři, inkrement jedna, minimální hodnota jedna, protože v místnosti musí být východ.
      • count_of_obstacles - umožňuje nastavit počet překážek. Počet je limitován na dvacet, inkrement jedna, minimální hodnota nula.
      • obstacle_size - možnost nastavení velikosti překážek. Velikost je limitována na deset, inkrement jedna, minimální hodnota jedna.
      • wall_on - přepínač na pravda/nepravda. Tímto přepínačem lze přidat zmiňovanou chodbu k spodním dvěma východům. Pokud je on, chodba se vykreslí, pokud je off, chodba v simulaci nebude. Nastavení chodby musí být provedeno před stisknutím tlačítka setup!
      • people_running - přepínač na pravda/nepravda. Tímto přepínačem lze nastavit v průběhu simulace, zdali lidé běží, či ne. Přínáší to s sebou riziko pádu a zlomeniny.
      • avoid_fire_tiles - přepínač na pravda/nepravda. Tímto je zajištěna naivita, respektive vyhýbání se ohni (při stavu pravda člověk nevběhne do ohně jako sebevrah).
    • Monitory
      • jumpOK-people - absolutní četnost zachráněných lidí skokem z okna.
      • jumpKO-people - absolutní četnost zemřelých lidí skokem z okna.
      • plot1 - vývoj absolutních počtů zachráněných, zemřelých (dle druhu) a počtu lidí k záchraně (kteří jsou stále v systému).

Průběh simulace

Kód procedur

  • to setup-exits
to setup-exits

  create-exits count_of_exits ; creating exits and coordinates of each exit
  if count_of_exits = 1 [
  ask exit 0 [
    set doorx 1
    set doory 1
    ]
  ]
  if count_of_exits = 2 [
  ask exit 0 [
    set doorx 1
    set doory 1
    ]
  ask exit 1 [
    set doorx 63
    set doory 1
    ]
  ]
  if count_of_exits = 3 [
  ask exit 0 [
    set doorx 1
    set doory 1
    ]
  ask exit 1 [
    set doorx 63
    set doory 1
    ]
  ask exit 2 [
    set doorx 1
    set doory 63
    ]
  ]
  if count_of_exits = 4 [
  ask exit 0 [
    set doorx 1
    set doory 1
    ]
  ask exit 1 [
    set doorx 63
    set doory 1
    ]
  ask exit 2 [
    set doorx 1
    set doory 63
    ]
  ask exit 3 [
    set doorx 63
    set doory 63
    ]
  ]
  ask exits [
    setxy doorx doory
    hide-turtle
    ]

end


  • to setup-obstacles
to setup-obstacles
  create-obstacles count_of_obstacles

  ask obstacles [
    let matobst random 100
    set obstaclex random-pxcor
    set obstacley random-pycor
    if wall_on = true[
      if obstacley < 7 [
        set obstacley obstacley + 7
      ]
      if ((obstaclex > 27) and (obstaclex < 37)) and ((obstacley <= 25) and (obstacley >= 3)) [ ;ensuring that obstacle will not be in a way of walls
        set obstaclex obstaclex - 10
      ]
    ]
    if matobst >= 33 and matobst < 66 [ ; setting the material type
      set material "concrete"
      ]
    if matobst < 33 [
      set material "pvc"
      ]
    if matobst >= 66 [
      ]
    setxy obstaclex obstacley
    set shape "square"
    hide-turtle
    ]
end


  • to setup-windows
to setup-windows
  create-windows 1

  ask windows [
    set windowx 32
    set windowy 63
    setxy windowx windowy
    hide-turtle
    ]
end


  • to setup-room
to setup-room

  ask patches [
    set pcolor brown + 4

    let x pxcor
    let y pycor
    let help_material 0
    ask exits [
      if (x > (doorx - 2)) and (x < (doorx + 2)) and (y > (doory - 2)) and (y < (doory + 2)) [
        ask myself [
          set pcolor green]
      ]

    ]
    ask windows [ ; painting up the window with blue color
      if (x > (windowx - 2)) and (x < (windowx + 2)) and (y > (windowy - 2)) and (y < (windowy + 2))[
      ask myself [
        set pcolor blue]
        ]
      ]

    ask obstacles[ ; painting up the obstacles with a color coresponding to material
      if (x > (obstaclex - obstacle_size)) and (x < (obstaclex + obstacle_size)) and (y > (obstacley - obstacle_size)) and (y < (obstacley + obstacle_size))[
        if material = "concrete" [
          set help_material 1
          ]
        if material = "pvc"[
          set help_material 2
          ]
        if material = "wood"[
          set help_material 3
          ]
      ask myself [
        if help_material = 1 [
          set pcolor grey
          ]
        if help_material = 2[
          set pcolor white
          ]
        if help_material = 3[
          set pcolor brown
          ]
        ]
        ]
      ]
    if wall_on = true [ ; if walls are on, painting the walls for a path to exits0 and 1
      ask walls [
        if alignment = 0 [
          if (x > (wallx - 1)) and (x < (wallx + 1)) and (y > (wally - 22)) and (y < (wally + 2)) [
            ask myself [
              set pcolor grey]
      ]]
        if alignment = 1[
          if (x > (wallx - 28)) and (x < (wallx + 1)) and (y > (wally - 1)) and (y < (wally + 1)) [
            ask myself [
              set pcolor grey]
      ]
          ]
        if alignment = 2[
          if (x > (wallx - 1)) and (x < (wallx + 28)) and (y > (wally - 1)) and (y < (wally + 1)) [
            ask myself [
              set pcolor grey]
      ]
          ]
    ]

      ]
    ]

end
  • to setup-people
to setup-people

  create-people persons

  ask people [
    move-to one-of patches with [ pcolor = brown + 4 ]
    set size 2
    set pace random-normal 1 0.2
    set stumbled false
    set brave random 100
    set life random-normal 2 1

    let min-dist 1000000


    ifelse brave < 1 [ ;setting way to window and jump out of it
      ask windows [
        set min-exit self
        ]
      set headx [windowx] of min-exit
      set heady [windowy] of min-exit
      ]
    [
    ask exits [
      if distance myself < min-dist [
        set min-dist distance myself
        set min-exit self
        ]
      ]
    set headx [doorx] of min-exit
    set heady [doory] of min-exit
    ]
    if wall_on = true [ ; if wall is on, setting coordinates to go to the entry
      if ((headx = 1 and heady = 1) or (headx = 63 and heady = 1)) and (ycor > 3) and ((xcor < 27) or (xcor > 37))[
        set headx 32
        set heady 28
      ]
      if (((headx = 1 and heady = 1) or (headx = 63 and heady = 1)) and ((ycor > 3) and (ycor < 25)) and ((xcor > 27) and (xcor < 37)))[
        set headx 32
    set heady 0
      ]
    ]
  ]
end


  • to blow-up
to blow-up

  let firex random-xcor
  let firey random-xcor

  ask patches [
    if ((firex - pxcor) ^ 2 + (firey - pycor) ^ 2 <= 10) [
        set pcolor red
        ]

    ]

end
  • to

Výsledky

Závěr

Kód