Difference between revisions of "Multiagentní simulace explozí"
(100 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | Tato stránka slouží jako výzkumná zpráva simulace '''" | + | Tato stránka slouží jako výzkumná zpráva simulace '''"Vliv přetlaku vzniklého explozí výbušniny"''' k semestrálnímu projektu pro předmět 4IT495 Simulace systémů (LS 2014/2015) na VŠE v Praze (Fakulta: FIS, Katedra: KIT, Obor: Informační systémy a technologie). |
− | + | *'''Název simulace''': Vliv přetlaku vzniklého explozí výbušniny | |
− | *'''Název simulace''': | ||
*'''Předmět''': 4IT495 Simulace systémů (LS 2014/2015) | *'''Předmět''': 4IT495 Simulace systémů (LS 2014/2015) | ||
Line 10: | Line 9: | ||
*'''Typ modelu''': Multiagentní | *'''Typ modelu''': Multiagentní | ||
− | *'''Modelovací nástroj''': [ | + | *'''Modelovací nástroj''': [https://ccl.northwestern.edu/netlogo/index.shtml Netlogo 5.2] |
=Definice problému= | =Definice problému= | ||
+ | [[File:overpressure.jpg|thumb|Znázornění závislosti přetlaku na času od vzniku exploze]] | ||
+ | Exploze je fyzikální jev, při kterém dochází mimo jiné k náhlému a prudkému lokálnímu zvýšení '''tlaku'''. Tato změna tlaku se následně šíří do okolí jako tlaková vlna.<ref>Výbuch. Wikipedia: the free encyclopedia [online]. San Francisco (CA): Wikimedia Foundation, 25. 2. 2015 [cit. 2015-06-07]. Dostupné z: http://cs.wikipedia.org/wiki/V%C3%BDbuch</ref> Jedním z nejdůležitějších parametrů je hodnota přetlaku <math>\Delta{P}</math>, tj. rozdílu oproti okolnímu tlaku, kterou exploze vyvolá. Tento parametr je používán v řadě příruček, technických dokumentací a odborných manuálů pro zhodnocení způsobených škod. Abstrahuje se například od tvaru tlakové vlny, doby působení na objekt atd.<ref name="blast effects">GELFAND, Boris a M. SILNIKOV. BLAST EFFECTS CAUSED BY EXPLOSIONS. 2004. Dostupné z: http://www.dtic.mil/cgi-bin/GetTRDoc?AD=ADA433657</ref> Maximální hodnotu přetlaku můžeme vypočítat jako funkci hmotnosti výbušniny a vzdálenosti od místa exploze zavedením tzv. škálované vzdálenosti:<ref name="explosion">ELSAYED, Nabil Mohamed a James L ATKINS. Explosion and blast-related injuries: effects of explosion and blast from military operations and acts of terrorism. Boston: Academic Press/Elsevier, 2008, xv, 380 p. ISBN 01-236-9514-7.</ref> | ||
+ | |||
+ | <math>Z=\frac{R}{W^\frac{1}{3}}</math> | ||
+ | |||
+ | kde: | ||
+ | *<math>R</math> ... vzdálenost od místa exploze | ||
+ | *<math>W</math> ... hmotnost výbušniny v ekvivalentu kg TNT | ||
+ | |||
+ | Existuje řada rovnic pro určení hodnoty maximálního statického přetlaku <math>p_s \sim Z</math>. Nejznámějšími semiempirickými modely jsou rovnice Brodeho a Henrycha. Přesnějším je model Henrycha, který rozlišuje tři zóny: blízkou, střední a vzdálenou.<ref name="explosion">ELSAYED, Nabil Mohamed a James L ATKINS. Explosion and blast-related injuries: effects of explosion and blast from military operations and acts of terrorism. Boston: Academic Press/Elsevier, 2008, xv, 380 p. ISBN 01-236-9514-7.</ref> | ||
+ | |||
+ | <math>p_s=\frac{1407,2}{Z} + \frac{554,0}{Z^2} - \frac{35,7}{Z^3} + \frac{0,625}{Z^4}</math> pro <math>0,05 \le Z \le 0,3</math> | ||
+ | |||
+ | <math>p_s=\frac{619,4}{Z} - \frac{32,6}{Z^2} + \frac{213,2}{Z^3}</math> pro <math>0,3 \le Z \le 1,0</math> | ||
+ | |||
+ | <math>p_s=\frac{66,2}{Z} + \frac{405,0}{Z^2} - \frac{328,8}{Z^3}</math> pro <math>1,0 \le Z \le 10,0</math> | ||
+ | |||
+ | kde: | ||
+ | *<math>p_s</math> ... hodnota přetlaku v kPa | ||
=Metoda= | =Metoda= | ||
+ | Multiagentní simulace není zřejmě nejvhodnější pro tento typ modelu, nicméně je z mého pohledu nejvhodnější v porovnání s ostatními modely probíranými v kurzu. Nástroj pro provedení simulace také neodpovídá komplexitě oblasti, ale je jediným nástrojem, který byl v kurzu pro multiagentní simulace používán. Ze všech probíraných modelů mě nejvíce zaujaly právě multiagentní - mimo jiné z důvodu nástroje NetLogo, které na mě působilo uživatelsky přívětivě a poskytovalo řadu funkcionalit, mezi které v nepolední řadě patřilo uživatelské rozhraní se zajímavými grafickými prvky. Na samotných multiagentních simulacích mě zaujala komplexita, která vychází z interakcí agentů s okolím a mezi sebou navzájem. | ||
=Model= | =Model= | ||
+ | ==Předpoklady a omezení== | ||
+ | *Model se zabývá působením přetlaku na objekty (lidé, budovy, ostatní překážky) | ||
+ | *Pro výpočet přetlaku je použit obecný vzorec, který určuje hodnotu přetlaku v kPa v závislosti na hmotnosti nálože v ekvivalentu kg TNT a vzdálenosti objektu od místa exploze | ||
+ | *Model předpokládá tlakovou vlnu kulovitého tvaru | ||
+ | *Model nebere v úvahu nerovnosti terénu | ||
+ | *Model nezohledňuje teplotu a tlak okolního prostředí, ve kterém proběhne výbuch - parametry, které také ovlivňují hodnotu přetlaku | ||
+ | *Model nepracuje s odrazy nebo ohybem vlnění na překážkách, pouze v určitém smyslu zohledňuje absorpci vlnění překážkou | ||
+ | *Model uvažuje výbušninu bez střepin, tj. výbuch se projeví pouze jako tlaková vlna | ||
+ | *Model nezohledňuje dobu působení přetlaku na objekt | ||
+ | ==Vlastní model== | ||
+ | ===Entity modelu=== | ||
+ | *'''breed [wave-particles wave-particle]''' ... částice tlakové vlny | ||
+ | *'''breed [explosives explosive]''' ... výbušnina | ||
+ | *'''breed [people person]''' ... lidé | ||
+ | *'''breed [walls wall]''' ... zdi | ||
+ | *'''breed [houses house]''' ... domy | ||
+ | *'''breed [windows window]''' ... okna v domech | ||
+ | |||
+ | ===Vlastnosti entit=== | ||
+ | *'''wave-particles-own [overpressure wave-id]''' ... hodnota přetlaku v okolí částice a "id" tlakové vlny | ||
+ | |||
+ | ===Procedury=== | ||
+ | *'''setup''' | ||
+ | <pre> | ||
+ | to-setup | ||
+ | clear-all | ||
+ | set-default-shape wave-particles "dot" | ||
+ | setup-explosives | ||
+ | build-houses houses-amount | ||
+ | build-walls walls-amount | ||
+ | setup-people people-amount | ||
+ | reset-ticks | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | V této proceduře se nejprve vynulují výsledky předchozího běhu modelu. Následně se nastaví výchozí tvar částicím emitovaných výbušninou, nastaví se výbušnina, postaví se domy, zdi a rozmístí se lidé. Na konci procedury se resetuje čítač kroků. | ||
+ | |||
+ | |||
+ | *'''go''' | ||
+ | <pre> | ||
+ | to go | ||
+ | if ticks > 55 [stop] | ||
+ | ask explosives [explode] | ||
+ | ask wave-particles [ | ||
+ | set overpressure over_pressure TNT-weight distancexy 0 0 | ||
+ | if color = green [set overpressure overpressure * (random-float 0.5)] | ||
+ | if not can-move? 2 [ ht ] | ||
+ | fd 1 | ||
+ | impact-houses | ||
+ | impact-windows | ||
+ | impact-walls | ||
+ | impact-people | ||
+ | if wave-id > 1 [die] | ||
+ | ] | ||
+ | tick | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Procedura kontroluje, zda čítač kroků nepřesáhl hodnotu 55, tj. hodnotu, kdy poslední částice dosáhne hranice sledovaného světa. Pokud je podmínka splněna, model se zastaví. Na dalším řádku voláme proceduru explode, která způsobí výbuch a vznik tlakové vlny v podobě částic. V následující části procedury se nastaví částici hodnota přetlaku v závislosti na hmotnosti výbušniny v ekvivalentu kg TNT a vzdálenosti od centra, kde je výbušnina umístěna. Následuje podmínka kontrolující barvu částice - za určitých podmínek popsaných dále se částice zbarví zeleně a sníží hodnotu svého přetlaku až o polovinu. Další podmínka se týká možnosti posunu částice o dvě jednotky dopředu - tuto podmínku jsem přidal z estetických důvodů. Předtím se totiž stávalo, že se model zastavoval, ale na obrazovce byly patrny ještě některé částice. V dalším kódu se částice posune o vzdálenost jedna dopředu a působí na objekty. Poslední podmínka zodpovídá za to, že vidíme pouze první dvě sady částic, což vyvolává dojem tlakové vlny. Tato podmínka je také důležitá pro optimalizaci výkonnosti modelu, protože výrazně omezuje počet aktuálních částic, čímž model značně zrychluje. | ||
+ | |||
+ | |||
+ | *'''build-houses''' | ||
+ | <pre> | ||
+ | to build-houses [h] | ||
+ | create-houses h | ||
+ | ask houses[ | ||
+ | set shape "square" | ||
+ | set color grey | ||
+ | set size 10 | ||
+ | setxy (min-pxcor + (size / 2) - 1 + random ((max-pxcor * 2) - ((size / 2) + 2))) (min-pycor + (size / 2) - 1 + random ((max-pycor * 2) - ((size / 2) + 2))) | ||
+ | if xcor >= -5 and xcor <= 0 [set xcor xcor - 20] | ||
+ | if xcor <= 5 and xcor > 0 [set xcor xcor + 20] | ||
+ | if ycor >= -5 and ycor <= 0 [set ycor ycor - 7] | ||
+ | if ycor <= 5 and ycor > 0 [set ycor ycor + 7] | ||
+ | |||
+ | make-windows 1 (- size / 5) (- size / 2.6) (size / 3) 0 | ||
+ | make-windows 1 (size / 5) (- size / 2.6) (size / 3) 0 | ||
+ | make-windows 1 (size / 5) (size / 2.6) (size / 3) 0 | ||
+ | make-windows 1 (- size / 5) (size / 2.6) (size / 3) 0 | ||
+ | |||
+ | make-windows 1 (- size / 2.6) (- size / 5) (size / 3) 90 | ||
+ | make-windows 1 (- size / 2.6) (size / 5) (size / 3) 90 | ||
+ | make-windows 1 (size / 2.6) (size / 5) (size / 3) 90 | ||
+ | make-windows 1 (size / 2.6) (- size / 5) (size / 3) 90 | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Procedura přijímá argument obsahující počet vytvářených domů. Půdorys domu je čtverec o velikosti hrany 10. Umístění domu je řešeno tak, aby se nenacházel na místě výbušniny a zároveň aby nepřesáhl hranice světa. V proceduře se volá procedura make-windows, která domu vytvoří okna. | ||
+ | |||
+ | |||
+ | *'''make-windows''' | ||
+ | <pre> | ||
+ | to make-windows [w x y s h] | ||
+ | hatch-windows w [ | ||
+ | setxy (xcor + x) (ycor + y) | ||
+ | set shape "window" | ||
+ | set color blue | ||
+ | set size s | ||
+ | set heading h | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Tato procedura obsahuje 5 parametrů: počet vytvářených oken, souřadnice x a y velikost a směr. Okna se vytváří procedurou hatch, která umožní jejich vytvoření v rámci nějakého existujícího agenta. V tomto případě jsem ji použil, abych mohl okna jednoduše rozmístit v rámci existujícího domu. Pokud bych okna vytvářel mimo dům, bylo by jejich pozicování složitější. | ||
+ | |||
+ | |||
+ | *'''build-walls''' | ||
+ | <pre> | ||
+ | to build-walls [w] | ||
+ | create-walls w | ||
+ | ask walls[ | ||
+ | setxy random-xcor random-ycor | ||
+ | move-to one-of patches with [not any? explosives in-radius 5 and not any? houses in-radius 5] | ||
+ | set shape "wall" | ||
+ | set color gray | ||
+ | set size 5 + random 6 | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Procedura přijme argument s počtem vytvářených zdí. Rozmístění je náhodné, avšak maximálně ve vzdálenosti 5 od výbušniny a/nebo domu. Velikost je vrozsahu od 5 do 10. | ||
+ | |||
+ | |||
+ | *'''setup-people''' | ||
+ | <pre> | ||
+ | to setup-people [p] | ||
+ | create-people p | ||
+ | ask people[ | ||
+ | setxy random-xcor random-ycor | ||
+ | move-to one-of patches with [not any? people in-radius 1 and not any? walls in-radius 3 and not any? houses in-radius 5] | ||
+ | set shape "person" | ||
+ | set color green | ||
+ | set size 1 | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Procedura vytvoří p lidí, které náhodně rozmístí, avšak maximálně ve vzdálenosti 1 jeden od druhého a/nebo 3 od zdi a/nebo 5 od domu. Nastaví se tvar, barva a velikost. | ||
+ | |||
+ | |||
+ | *'''setup-explosives''' | ||
+ | <pre> | ||
+ | to setup-explosives | ||
+ | create-explosives 1 | ||
+ | ask explosives[ | ||
+ | set shape "target" | ||
+ | set color blue | ||
+ | set size 1 | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Jednoduchá procedura pro vytvoření výbušniny. | ||
+ | |||
+ | |||
+ | *'''impact-windows''' | ||
+ | <pre> | ||
+ | to impact-windows | ||
+ | if any? windows in-radius 1 and overpressure >= 40 | ||
+ | [ask windows in-radius 1 with [shape = "window"] [set color black]] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | V této proceduře zjišťujeme, zda se ve vzdálenosti maximálně 1 od částice s hodnotou přetlaku 40 kPa nachází okno. Pokud ano, okno se zabarví černě - rozbije se. Zdánlivě zbytečná kontrola, že je tvar je typu "okno" se hodí v případě, kdy existují 2 částice, které mají okno ve stanoveném dosahu, ale každá částice spadá do jiného intervalu přetlaku určujícího míru poškození. Tuto skutečnost jsem poprvé zpozoroval u lidí, které jsem nazval "blikači". Docházelo k tomu, že člověk "blikal", tj. dvě částice ovlivňovaly člověka podle své hodnoty přetlaku a člověk tak přeblikával např. z mrtvého do těžce zraněného. Určení tvaru tak zamezí přeblikávání mezi dvěma stavy. | ||
+ | |||
+ | |||
+ | *'''impact-houses''' | ||
+ | <pre> | ||
+ | to impact-houses | ||
+ | if any? houses in-radius 3 and overpressure >= 250 | ||
+ | [ask houses in-radius 3 with [shape = "square"] [set shape "heavily_damaged_house"] | ||
+ | set color green] | ||
+ | if any? houses in-radius 3 and overpressure < 250 and overpressure >= 40 | ||
+ | [ask houses in-radius 3 with [shape = "square"] [set shape "damaged_house"] | ||
+ | set color green] | ||
+ | if any? houses in-radius 3 and overpressure < 40 | ||
+ | [set color green] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Podobně jako u oken se zde zjišťuje vzdálenost a hodnota přetlaku. Vzdálenost je zde nastavena vyšší, protože se vždy bere vzdálenost od centra želvy. U domu s velikostí 10 je tedy dobré nastavit vyšší hodnotu vzdálenosti. Navíc obsahuje procedura prvek absorpce - viz výše. Částice za domem mají menší hodnotu přetlaku, protože dům značnou část absorbuje. | ||
+ | |||
+ | |||
+ | *'''impact-people''' | ||
+ | <pre> | ||
+ | to impact-people | ||
+ | ifelse overpressure >= 350 and any? people in-radius 1 | ||
+ | [ask people in-radius 1 with [shape = "person"] [set shape "face sad" set color red]] | ||
+ | [ifelse (overpressure < 350 and overpressure >= 100 and any? people in-radius 1) | ||
+ | [ask people in-radius 1 with [shape = "person"] [set shape "face neutral" set color orange]] | ||
+ | [ask people in-radius 1 with [shape = "person"] [set shape "face happy" set color green]] | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Procedura je analogická dvěma předchozím. Kontrola tvaru pomáhá předcházet vzniku "blikačů" - viz procedura '''impact-windows'''. | ||
+ | |||
+ | |||
+ | *'''impact-walls''' | ||
+ | <pre> | ||
+ | to impact-walls | ||
+ | if any? walls in-radius 2 and overpressure >= 250 | ||
+ | and (not((abs((subtract-headings heading [heading] of wall first [who] of walls in-radius 2))) < 125 | ||
+ | and (abs((subtract-headings heading [heading] of wall first [who] of walls in-radius 2))) > 55)) | ||
+ | [ask walls in-radius 2 with [shape = "wall"] [set shape "destroyed_wall"] | ||
+ | set color green | ||
+ | ] | ||
+ | if any? walls in-radius 2 and overpressure < 250 and overpressure >= 40 | ||
+ | and (not((abs((subtract-headings heading [heading] of wall first [who] of walls in-radius 2))) < 125 | ||
+ | and (abs((subtract-headings heading [heading] of wall first [who] of walls in-radius 2))) > 55)) | ||
+ | [ask walls in-radius 2 with [shape = "wall"] [set shape "damaged_wall"] | ||
+ | set color green | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Oproti předchozím "impact" procedurám zohledňuje tato procedura i pozici objektu. Pokud je zeď v pozici, kdy částice "tečou" téměř rovnoběžně se zdí, nedojde k jejímu poškození, protože přetlak působí na tak malou část, že vliv je zanedbatelný. | ||
+ | |||
+ | |||
+ | *'''explode''' | ||
+ | <pre> | ||
+ | to explode | ||
+ | let i 0 | ||
+ | let num-wave-particles 180.0 | ||
+ | hatch-wave-particles num-wave-particles [ | ||
+ | set wave-id ticks | ||
+ | set color yellow | ||
+ | set size 1 | ||
+ | set i i + 1 | ||
+ | set heading i * ( 360.0 / num-wave-particles ) | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Procedura vytváří částice "v kruhu" kolem místa exploze. Do wave-id se ukládá hodnota kroku, což poté umožní zobrazit pouze první 2 "kruhy" částic, čímž se model výrazně zrychlí. | ||
+ | |||
+ | |||
+ | *'''over-pressure''' | ||
+ | <pre> | ||
+ | to-report over_pressure [m r] | ||
+ | let z (r / (m ^ (1 / 3))) | ||
+ | ifelse r = 0 | ||
+ | [report 999999999999999] | ||
+ | [ifelse z <= 0.3 | ||
+ | [report 1407.2 * ((m ^ (1 / 3)) / r) + 554 * ((m ^ (2 / 3)) / (r ^ 2)) - 35.7 * (m / (r ^ 3)) + 0.625 * ((m ^ (4 / 3)) / (r ^ 4))] | ||
+ | [ifelse z > 0.3 and z <= 1 | ||
+ | [report 619.4 * ((m ^ (1 / 3)) / r) - 32.6 * ((m ^ (2 / 3)) / (r ^ 2)) + 213.2 * (m / (r ^ 3))] | ||
+ | [report 66.2 * ((m ^ (1 / 3)) / r) + 405 * ((m ^ (2 / 3)) / (r ^ 2)) - 328.8 * (m / (r ^ 3))] | ||
+ | ] | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Jedná se o tzv. reporter, tj. proceduru, která pouze vrací nějakou hodnotu. Jako argumenty přijímá hmotnost výbušniny v kg TNT a vzdálenost od místa výbuchu. Jde o implementaci modelu Henrycha - viz výše. Procedura vrací hodnotu přetlaku v kPa. | ||
+ | |||
+ | ===Grafické prvky=== | ||
+ | '''SLIDERY''' | ||
+ | *'''people-amount''' ... nastavuje počet lidí na mapě | ||
+ | *'''walls-amount''' ... nastavuje počet zdí na mapě | ||
+ | *'''houses-amount''' ... nastavuje počet domů na mapě | ||
+ | *'''TNT-weight''' ... nastavuje hmotnost výbušniny v kg TNT | ||
+ | |||
+ | |||
+ | '''MONITORY''' | ||
+ | *'''people density''' ... hustota lidí na 10 metrů čtverečních | ||
+ | *'''death / heavy injury / light injury/unharmed''' ... počet mrtvých / těžce zraněných / lehce zraněných/nezraněných osob | ||
+ | *'''heavily damaged / damaged houses''' ... počet těžce poškozených / poškozených domů | ||
+ | *'''destroyed / damaged walls''' ... počet zničených / poškozených zdí | ||
+ | |||
+ | ==Slabiny modelu, možnosti vylepšení a rozšíření== | ||
+ | Za nejvýznamnější slabiny považuji tyto dvě následující: | ||
+ | *'''Vzorec pro výpočet přetlaku''' | ||
+ | *'''Mezní hodnoty pro určení poškození''' | ||
+ | |||
+ | V prvním případě je to z toho důvodu, že se jedná o vzorec značně obecný, který dokonce ani nespecifikuje, zda je výbušnina umístěna na zemi nebo ve vzduchu. Výrazným vylepšením modelu by bylo nalezení vzorce, který alespoň zohledňuje umístění na zemi. | ||
+ | |||
+ | Ve druhém případě je důvod ten, že určení těchto mezních hodnot je v podstatě základem pro následné zjišťování míry poškození zasažených objektů. Na internetu je k dispozici celá řada tabulek, ale velkým problémem je značná nejednotnost. V tomto modelu jsem vycházel zejména z informací uvedených v <ref name="blast effects">GELFAND, Boris a M. SILNIKOV. BLAST EFFECTS CAUSED BY EXPLOSIONS. 2004. Dostupné z: http://www.dtic.mil/cgi-bin/GetTRDoc?AD=ADA433657</ref><ref>Overpressure Levels of Concern. Office of Response and Restoration [online]. 2015 [cit. 2015-06-07]. Dostupné z: http://response.restoration.noaa.gov/oil-and-chemical-spills/chemical-spills/resources/overpressure-levels-concern.html</ref> a <ref>ENGAGER,. Common set of equations. Sciencemadness [online]. [cit. 2015-06-07]. Dostupné z: http://www.sciencemadness.org/talk/viewthread.php?tid=15150</ref>. | ||
=Výsledky= | =Výsledky= | ||
+ | ==Exploze s maximálním počtem lidí bez překážek s 10/100/1000 kg TNT== | ||
+ | [[File:bez_prekazek_10TNT.jpg|frame|none|Výsledek deseti měření při explozi 10 kg TNT - pouze osoby]] | ||
+ | [[File:bez_prekazek_100TNT.jpg|frame|none|Výsledek deseti měření při explozi 100 kg TNT - pouze osoby]] | ||
+ | [[File:bez_prekazek_1000TNT.jpg|frame|none|Výsledek deseti měření při explozi 1000 kg TNT - pouze osoby]] | ||
+ | |||
+ | Dle výsledků je patrné, že s exponenciálním růstem hmotnosti výbušniny roste počet obětí / zraněných pomaleji. Tento jev se dá vysvětlit tím, že s růstem vzdálenosti od místa exploze přetlak značně klesá. | ||
+ | |||
+ | ==Exploze s maximálním počtem lidí a překážek s 10/100/1000 kg TNT== | ||
+ | [[File:max_prekazek_10TNT.jpg|frame|none|Výsledek deseti měření při explozi 10 kg TNT - maximální počet překážek]] | ||
+ | [[File:max_prekazek_100TNT.jpg|frame|none|Výsledek deseti měření při explozi 100 kg TNT - maximální počet překážek]] | ||
+ | [[File:max_prekazek_1000TNT.jpg|frame|none|Výsledek deseti měření při explozi 1000 kg TNT - maximální počet překážek]] | ||
+ | |||
+ | V tomto případě nepozorujeme efekt ze zeslabení přetlaku na překážkách. Lze to vysvětlit tím, že model je nastaven tak, že překážky kolem místa výbušniny posouvá mimo svůj dosah výrazněji než osoby. V místě exploze je tak mezi osobou a výbušninou zřídka nějaká překážka, takže dostáváme podobné výsledky jako bez překážek. Efekt by se mohl projevit v případě většího množství překážek nebo v případě mírnějších restrikcí kladených na umístění překážek v místě výbušniny. Opět lze ale pozorovat, že počet obětí / zraněných nesleduje stejný růst jako hmotnost výbušniny. | ||
=Závěr= | =Závěr= | ||
+ | Cílem této simulace bylo zjistit, jakým způsobem ovlivňuje přetlak vzniklý explozí výbušniny různé objekty (lidé, budovy a jiné překážky) a jaký je vztah mezi hmotností výbušniny a mírou poškození objektu. Ve výsledkové části jsem se zaměřil především na působení přetlaku na lidi. Nehledě na to, že model je z důvodů uvedených v sekci [[#Slabiny modelu, možnosti vylepšení a rozšíření|Slabiny modelu, možnosti vylepšení a rozšíření]] zcela jistě zkreslený, lze pozorovat výsledky, které by se projevily zřejmě i v případě přesnějšího modelu, a to, že s exponenciálním růstem hmotnosti výbušniny neroste počet obětí / zraněných stejně, ale pomaleji. Důvodem je to, že s růstem vzdálenosti od místa exploze přetlak značně klesá. | ||
=Kód= | =Kód= | ||
+ | *[[File:explosions.nlogo]] | ||
+ | |||
+ | = Reference = | ||
+ | <references/> |
Latest revision as of 19:01, 7 June 2015
Tato stránka slouží jako výzkumná zpráva simulace "Vliv přetlaku vzniklého explozí výbušniny" k semestrálnímu projektu pro předmět 4IT495 Simulace systémů (LS 2014/2015) na VŠE v Praze (Fakulta: FIS, Katedra: KIT, Obor: Informační systémy a technologie).
- Název simulace: Vliv přetlaku vzniklého explozí výbušniny
- Předmět: 4IT495 Simulace systémů (LS 2014/2015)
- Autor: Bc. Maxim Rytych, xrytm00
- Typ modelu: Multiagentní
- Modelovací nástroj: Netlogo 5.2
Definice problému
Exploze je fyzikální jev, při kterém dochází mimo jiné k náhlému a prudkému lokálnímu zvýšení tlaku. Tato změna tlaku se následně šíří do okolí jako tlaková vlna.[1] Jedním z nejdůležitějších parametrů je hodnota přetlaku Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \Delta{P}} , tj. rozdílu oproti okolnímu tlaku, kterou exploze vyvolá. Tento parametr je používán v řadě příruček, technických dokumentací a odborných manuálů pro zhodnocení způsobených škod. Abstrahuje se například od tvaru tlakové vlny, doby působení na objekt atd.[2] Maximální hodnotu přetlaku můžeme vypočítat jako funkci hmotnosti výbušniny a vzdálenosti od místa exploze zavedením tzv. škálované vzdálenosti:[3]
Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle Z=\frac{R}{W^\frac{1}{3}}}
kde:
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle R} ... vzdálenost od místa exploze
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle W} ... hmotnost výbušniny v ekvivalentu kg TNT
Existuje řada rovnic pro určení hodnoty maximálního statického přetlaku Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle p_s \sim Z} . Nejznámějšími semiempirickými modely jsou rovnice Brodeho a Henrycha. Přesnějším je model Henrycha, který rozlišuje tři zóny: blízkou, střední a vzdálenou.[3]
Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle p_s=\frac{1407,2}{Z} + \frac{554,0}{Z^2} - \frac{35,7}{Z^3} + \frac{0,625}{Z^4}} pro Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle 0,05 \le Z \le 0,3}
Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle p_s=\frac{619,4}{Z} - \frac{32,6}{Z^2} + \frac{213,2}{Z^3}} pro Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle 0,3 \le Z \le 1,0}
Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle p_s=\frac{66,2}{Z} + \frac{405,0}{Z^2} - \frac{328,8}{Z^3}} pro Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle 1,0 \le Z \le 10,0}
kde:
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle p_s} ... hodnota přetlaku v kPa
Metoda
Multiagentní simulace není zřejmě nejvhodnější pro tento typ modelu, nicméně je z mého pohledu nejvhodnější v porovnání s ostatními modely probíranými v kurzu. Nástroj pro provedení simulace také neodpovídá komplexitě oblasti, ale je jediným nástrojem, který byl v kurzu pro multiagentní simulace používán. Ze všech probíraných modelů mě nejvíce zaujaly právě multiagentní - mimo jiné z důvodu nástroje NetLogo, které na mě působilo uživatelsky přívětivě a poskytovalo řadu funkcionalit, mezi které v nepolední řadě patřilo uživatelské rozhraní se zajímavými grafickými prvky. Na samotných multiagentních simulacích mě zaujala komplexita, která vychází z interakcí agentů s okolím a mezi sebou navzájem.
Model
Předpoklady a omezení
- Model se zabývá působením přetlaku na objekty (lidé, budovy, ostatní překážky)
- Pro výpočet přetlaku je použit obecný vzorec, který určuje hodnotu přetlaku v kPa v závislosti na hmotnosti nálože v ekvivalentu kg TNT a vzdálenosti objektu od místa exploze
- Model předpokládá tlakovou vlnu kulovitého tvaru
- Model nebere v úvahu nerovnosti terénu
- Model nezohledňuje teplotu a tlak okolního prostředí, ve kterém proběhne výbuch - parametry, které také ovlivňují hodnotu přetlaku
- Model nepracuje s odrazy nebo ohybem vlnění na překážkách, pouze v určitém smyslu zohledňuje absorpci vlnění překážkou
- Model uvažuje výbušninu bez střepin, tj. výbuch se projeví pouze jako tlaková vlna
- Model nezohledňuje dobu působení přetlaku na objekt
Vlastní model
Entity modelu
- breed [wave-particles wave-particle] ... částice tlakové vlny
- breed [explosives explosive] ... výbušnina
- breed [people person] ... lidé
- breed [walls wall] ... zdi
- breed [houses house] ... domy
- breed [windows window] ... okna v domech
Vlastnosti entit
- wave-particles-own [overpressure wave-id] ... hodnota přetlaku v okolí částice a "id" tlakové vlny
Procedury
- setup
to-setup clear-all set-default-shape wave-particles "dot" setup-explosives build-houses houses-amount build-walls walls-amount setup-people people-amount reset-ticks end
V této proceduře se nejprve vynulují výsledky předchozího běhu modelu. Následně se nastaví výchozí tvar částicím emitovaných výbušninou, nastaví se výbušnina, postaví se domy, zdi a rozmístí se lidé. Na konci procedury se resetuje čítač kroků.
- go
to go if ticks > 55 [stop] ask explosives [explode] ask wave-particles [ set overpressure over_pressure TNT-weight distancexy 0 0 if color = green [set overpressure overpressure * (random-float 0.5)] if not can-move? 2 [ ht ] fd 1 impact-houses impact-windows impact-walls impact-people if wave-id > 1 [die] ] tick end
Procedura kontroluje, zda čítač kroků nepřesáhl hodnotu 55, tj. hodnotu, kdy poslední částice dosáhne hranice sledovaného světa. Pokud je podmínka splněna, model se zastaví. Na dalším řádku voláme proceduru explode, která způsobí výbuch a vznik tlakové vlny v podobě částic. V následující části procedury se nastaví částici hodnota přetlaku v závislosti na hmotnosti výbušniny v ekvivalentu kg TNT a vzdálenosti od centra, kde je výbušnina umístěna. Následuje podmínka kontrolující barvu částice - za určitých podmínek popsaných dále se částice zbarví zeleně a sníží hodnotu svého přetlaku až o polovinu. Další podmínka se týká možnosti posunu částice o dvě jednotky dopředu - tuto podmínku jsem přidal z estetických důvodů. Předtím se totiž stávalo, že se model zastavoval, ale na obrazovce byly patrny ještě některé částice. V dalším kódu se částice posune o vzdálenost jedna dopředu a působí na objekty. Poslední podmínka zodpovídá za to, že vidíme pouze první dvě sady částic, což vyvolává dojem tlakové vlny. Tato podmínka je také důležitá pro optimalizaci výkonnosti modelu, protože výrazně omezuje počet aktuálních částic, čímž model značně zrychluje.
- build-houses
to build-houses [h] create-houses h ask houses[ set shape "square" set color grey set size 10 setxy (min-pxcor + (size / 2) - 1 + random ((max-pxcor * 2) - ((size / 2) + 2))) (min-pycor + (size / 2) - 1 + random ((max-pycor * 2) - ((size / 2) + 2))) if xcor >= -5 and xcor <= 0 [set xcor xcor - 20] if xcor <= 5 and xcor > 0 [set xcor xcor + 20] if ycor >= -5 and ycor <= 0 [set ycor ycor - 7] if ycor <= 5 and ycor > 0 [set ycor ycor + 7] make-windows 1 (- size / 5) (- size / 2.6) (size / 3) 0 make-windows 1 (size / 5) (- size / 2.6) (size / 3) 0 make-windows 1 (size / 5) (size / 2.6) (size / 3) 0 make-windows 1 (- size / 5) (size / 2.6) (size / 3) 0 make-windows 1 (- size / 2.6) (- size / 5) (size / 3) 90 make-windows 1 (- size / 2.6) (size / 5) (size / 3) 90 make-windows 1 (size / 2.6) (size / 5) (size / 3) 90 make-windows 1 (size / 2.6) (- size / 5) (size / 3) 90 ] end
Procedura přijímá argument obsahující počet vytvářených domů. Půdorys domu je čtverec o velikosti hrany 10. Umístění domu je řešeno tak, aby se nenacházel na místě výbušniny a zároveň aby nepřesáhl hranice světa. V proceduře se volá procedura make-windows, která domu vytvoří okna.
- make-windows
to make-windows [w x y s h] hatch-windows w [ setxy (xcor + x) (ycor + y) set shape "window" set color blue set size s set heading h ] end
Tato procedura obsahuje 5 parametrů: počet vytvářených oken, souřadnice x a y velikost a směr. Okna se vytváří procedurou hatch, která umožní jejich vytvoření v rámci nějakého existujícího agenta. V tomto případě jsem ji použil, abych mohl okna jednoduše rozmístit v rámci existujícího domu. Pokud bych okna vytvářel mimo dům, bylo by jejich pozicování složitější.
- build-walls
to build-walls [w] create-walls w ask walls[ setxy random-xcor random-ycor move-to one-of patches with [not any? explosives in-radius 5 and not any? houses in-radius 5] set shape "wall" set color gray set size 5 + random 6 ] end
Procedura přijme argument s počtem vytvářených zdí. Rozmístění je náhodné, avšak maximálně ve vzdálenosti 5 od výbušniny a/nebo domu. Velikost je vrozsahu od 5 do 10.
- setup-people
to setup-people [p] create-people p ask people[ setxy random-xcor random-ycor move-to one-of patches with [not any? people in-radius 1 and not any? walls in-radius 3 and not any? houses in-radius 5] set shape "person" set color green set size 1 ] end
Procedura vytvoří p lidí, které náhodně rozmístí, avšak maximálně ve vzdálenosti 1 jeden od druhého a/nebo 3 od zdi a/nebo 5 od domu. Nastaví se tvar, barva a velikost.
- setup-explosives
to setup-explosives create-explosives 1 ask explosives[ set shape "target" set color blue set size 1 ] end
Jednoduchá procedura pro vytvoření výbušniny.
- impact-windows
to impact-windows if any? windows in-radius 1 and overpressure >= 40 [ask windows in-radius 1 with [shape = "window"] [set color black]] end
V této proceduře zjišťujeme, zda se ve vzdálenosti maximálně 1 od částice s hodnotou přetlaku 40 kPa nachází okno. Pokud ano, okno se zabarví černě - rozbije se. Zdánlivě zbytečná kontrola, že je tvar je typu "okno" se hodí v případě, kdy existují 2 částice, které mají okno ve stanoveném dosahu, ale každá částice spadá do jiného intervalu přetlaku určujícího míru poškození. Tuto skutečnost jsem poprvé zpozoroval u lidí, které jsem nazval "blikači". Docházelo k tomu, že člověk "blikal", tj. dvě částice ovlivňovaly člověka podle své hodnoty přetlaku a člověk tak přeblikával např. z mrtvého do těžce zraněného. Určení tvaru tak zamezí přeblikávání mezi dvěma stavy.
- impact-houses
to impact-houses if any? houses in-radius 3 and overpressure >= 250 [ask houses in-radius 3 with [shape = "square"] [set shape "heavily_damaged_house"] set color green] if any? houses in-radius 3 and overpressure < 250 and overpressure >= 40 [ask houses in-radius 3 with [shape = "square"] [set shape "damaged_house"] set color green] if any? houses in-radius 3 and overpressure < 40 [set color green] end
Podobně jako u oken se zde zjišťuje vzdálenost a hodnota přetlaku. Vzdálenost je zde nastavena vyšší, protože se vždy bere vzdálenost od centra želvy. U domu s velikostí 10 je tedy dobré nastavit vyšší hodnotu vzdálenosti. Navíc obsahuje procedura prvek absorpce - viz výše. Částice za domem mají menší hodnotu přetlaku, protože dům značnou část absorbuje.
- impact-people
to impact-people ifelse overpressure >= 350 and any? people in-radius 1 [ask people in-radius 1 with [shape = "person"] [set shape "face sad" set color red]] [ifelse (overpressure < 350 and overpressure >= 100 and any? people in-radius 1) [ask people in-radius 1 with [shape = "person"] [set shape "face neutral" set color orange]] [ask people in-radius 1 with [shape = "person"] [set shape "face happy" set color green]] ] end
Procedura je analogická dvěma předchozím. Kontrola tvaru pomáhá předcházet vzniku "blikačů" - viz procedura impact-windows.
- impact-walls
to impact-walls if any? walls in-radius 2 and overpressure >= 250 and (not((abs((subtract-headings heading [heading] of wall first [who] of walls in-radius 2))) < 125 and (abs((subtract-headings heading [heading] of wall first [who] of walls in-radius 2))) > 55)) [ask walls in-radius 2 with [shape = "wall"] [set shape "destroyed_wall"] set color green ] if any? walls in-radius 2 and overpressure < 250 and overpressure >= 40 and (not((abs((subtract-headings heading [heading] of wall first [who] of walls in-radius 2))) < 125 and (abs((subtract-headings heading [heading] of wall first [who] of walls in-radius 2))) > 55)) [ask walls in-radius 2 with [shape = "wall"] [set shape "damaged_wall"] set color green ] end
Oproti předchozím "impact" procedurám zohledňuje tato procedura i pozici objektu. Pokud je zeď v pozici, kdy částice "tečou" téměř rovnoběžně se zdí, nedojde k jejímu poškození, protože přetlak působí na tak malou část, že vliv je zanedbatelný.
- explode
to explode let i 0 let num-wave-particles 180.0 hatch-wave-particles num-wave-particles [ set wave-id ticks set color yellow set size 1 set i i + 1 set heading i * ( 360.0 / num-wave-particles ) ] end
Procedura vytváří částice "v kruhu" kolem místa exploze. Do wave-id se ukládá hodnota kroku, což poté umožní zobrazit pouze první 2 "kruhy" částic, čímž se model výrazně zrychlí.
- over-pressure
to-report over_pressure [m r] let z (r / (m ^ (1 / 3))) ifelse r = 0 [report 999999999999999] [ifelse z <= 0.3 [report 1407.2 * ((m ^ (1 / 3)) / r) + 554 * ((m ^ (2 / 3)) / (r ^ 2)) - 35.7 * (m / (r ^ 3)) + 0.625 * ((m ^ (4 / 3)) / (r ^ 4))] [ifelse z > 0.3 and z <= 1 [report 619.4 * ((m ^ (1 / 3)) / r) - 32.6 * ((m ^ (2 / 3)) / (r ^ 2)) + 213.2 * (m / (r ^ 3))] [report 66.2 * ((m ^ (1 / 3)) / r) + 405 * ((m ^ (2 / 3)) / (r ^ 2)) - 328.8 * (m / (r ^ 3))] ] ] end
Jedná se o tzv. reporter, tj. proceduru, která pouze vrací nějakou hodnotu. Jako argumenty přijímá hmotnost výbušniny v kg TNT a vzdálenost od místa výbuchu. Jde o implementaci modelu Henrycha - viz výše. Procedura vrací hodnotu přetlaku v kPa.
Grafické prvky
SLIDERY
- people-amount ... nastavuje počet lidí na mapě
- walls-amount ... nastavuje počet zdí na mapě
- houses-amount ... nastavuje počet domů na mapě
- TNT-weight ... nastavuje hmotnost výbušniny v kg TNT
MONITORY
- people density ... hustota lidí na 10 metrů čtverečních
- death / heavy injury / light injury/unharmed ... počet mrtvých / těžce zraněných / lehce zraněných/nezraněných osob
- heavily damaged / damaged houses ... počet těžce poškozených / poškozených domů
- destroyed / damaged walls ... počet zničených / poškozených zdí
Slabiny modelu, možnosti vylepšení a rozšíření
Za nejvýznamnější slabiny považuji tyto dvě následující:
- Vzorec pro výpočet přetlaku
- Mezní hodnoty pro určení poškození
V prvním případě je to z toho důvodu, že se jedná o vzorec značně obecný, který dokonce ani nespecifikuje, zda je výbušnina umístěna na zemi nebo ve vzduchu. Výrazným vylepšením modelu by bylo nalezení vzorce, který alespoň zohledňuje umístění na zemi.
Ve druhém případě je důvod ten, že určení těchto mezních hodnot je v podstatě základem pro následné zjišťování míry poškození zasažených objektů. Na internetu je k dispozici celá řada tabulek, ale velkým problémem je značná nejednotnost. V tomto modelu jsem vycházel zejména z informací uvedených v [2][4] a [5].
Výsledky
Exploze s maximálním počtem lidí bez překážek s 10/100/1000 kg TNT
Dle výsledků je patrné, že s exponenciálním růstem hmotnosti výbušniny roste počet obětí / zraněných pomaleji. Tento jev se dá vysvětlit tím, že s růstem vzdálenosti od místa exploze přetlak značně klesá.
Exploze s maximálním počtem lidí a překážek s 10/100/1000 kg TNT
V tomto případě nepozorujeme efekt ze zeslabení přetlaku na překážkách. Lze to vysvětlit tím, že model je nastaven tak, že překážky kolem místa výbušniny posouvá mimo svůj dosah výrazněji než osoby. V místě exploze je tak mezi osobou a výbušninou zřídka nějaká překážka, takže dostáváme podobné výsledky jako bez překážek. Efekt by se mohl projevit v případě většího množství překážek nebo v případě mírnějších restrikcí kladených na umístění překážek v místě výbušniny. Opět lze ale pozorovat, že počet obětí / zraněných nesleduje stejný růst jako hmotnost výbušniny.
Závěr
Cílem této simulace bylo zjistit, jakým způsobem ovlivňuje přetlak vzniklý explozí výbušniny různé objekty (lidé, budovy a jiné překážky) a jaký je vztah mezi hmotností výbušniny a mírou poškození objektu. Ve výsledkové části jsem se zaměřil především na působení přetlaku na lidi. Nehledě na to, že model je z důvodů uvedených v sekci Slabiny modelu, možnosti vylepšení a rozšíření zcela jistě zkreslený, lze pozorovat výsledky, které by se projevily zřejmě i v případě přesnějšího modelu, a to, že s exponenciálním růstem hmotnosti výbušniny neroste počet obětí / zraněných stejně, ale pomaleji. Důvodem je to, že s růstem vzdálenosti od místa exploze přetlak značně klesá.
Kód
Reference
- ↑ Výbuch. Wikipedia: the free encyclopedia [online]. San Francisco (CA): Wikimedia Foundation, 25. 2. 2015 [cit. 2015-06-07]. Dostupné z: http://cs.wikipedia.org/wiki/V%C3%BDbuch
- ↑ 2.0 2.1 GELFAND, Boris a M. SILNIKOV. BLAST EFFECTS CAUSED BY EXPLOSIONS. 2004. Dostupné z: http://www.dtic.mil/cgi-bin/GetTRDoc?AD=ADA433657
- ↑ 3.0 3.1 ELSAYED, Nabil Mohamed a James L ATKINS. Explosion and blast-related injuries: effects of explosion and blast from military operations and acts of terrorism. Boston: Academic Press/Elsevier, 2008, xv, 380 p. ISBN 01-236-9514-7.
- ↑ Overpressure Levels of Concern. Office of Response and Restoration [online]. 2015 [cit. 2015-06-07]. Dostupné z: http://response.restoration.noaa.gov/oil-and-chemical-spills/chemical-spills/resources/overpressure-levels-concern.html
- ↑ ENGAGER,. Common set of equations. Sciencemadness [online]. [cit. 2015-06-07]. Dostupné z: http://www.sciencemadness.org/talk/viewthread.php?tid=15150