Tsunami evacuation

Tsunami evacuation preview image

1 collaborator

Default-person Adam Slucki (Author)

Tags

behavioral decision making 

Tagged by Adam Slucki over 9 years ago

evacuation 

Tagged by Adam Slucki over 9 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 5.0.5 • Viewed 1139 times • Downloaded 103 times • Run 0 times
Download the 'Tsunami evacuation' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

turtles-own [group speed cooperation initSpeed flight EP_knowledge chosenEP direction rescue_attempt initXcor initYcor newInformation my_EP]
patches-own [EvacuationPoint]
globals [saved cooperativeCitizen safeSpot time10 time30 time50 time80 time95 time_final survivors tempXcor tempYcor 
         meanXcor10 meanYcor10 meanXcor30 meanYcor30 meanXcor50 meanYcor50 meanXcor80 meanYcor80 meanXcor95 meanYcor95 meanXcor_final meanYcor_final
         stdXcor10  stdYcor10  stdXcor30  stdYcor30  stdXcor50  stdYcor50  stdXcor80  stdYcor80  stdXcor95  stdYcor95  stdXcor_final  stdYcor_final
         coo10 coo30 coo50 coo80 coo95 coo_final]

;;Environment setup

to mapa
  ca
  import-pcolors "map.png"
  crt citizens [set color black
          setxy random-xcor random-ycor
          set group random group_count
          set speed (random-normal 0.14 0.015) * 5 
          set initSpeed speed
          set EP_knowledge random-poisson av_EP_knowledge 
          set my_EP patch 100 -100
          set newInformation 0
          set direction heading
        ]
  
 
  ask turtles [
    move-to one-of patches with [pcolor = 67.4 and not any? other turtles-here] 
  ]
  
  ask n-of (count turtles * cooperative_citizens / 100) turtles [set cooperation true]
  
  let safePlace (list (patch -80 38) (patch -63 33) (patch -62 62) 
                              (patch -30 77) (patch -7 86) (patch 5 52)
                              (patch 17 45) (patch 30 51) (patch 60 57) (patch 78 20))
  
  foreach safePlace [ask ?[set pcolor white
                                   set EvacuationPoint 1]]
  
  set safeSpot patches with [EvacuationPoint = 1]
  
  ;;main street, business center where should be more people than in other places
  ask n-of (count turtles * 0.4) turtles [
     move-to one-of patches with [pcolor = 67.4 and distance patch -18 5 < 35 and not any? other turtles-here]
  ]
  
  ask turtles
       [set initXcor xcor
        set initYcor ycor
       ]
                
  
  reset-ticks 
end 

;;Main loop

to go
  ask turtles [
   
    look_for_a_safe_spot
    form_a_group
    run_away
    rescue
    go_arround
    move
    stop_here
    die_here
 
 ]
  
  ifelse saved >= citizens * 0.1 and time10 = 0
       [set time10 ticks * 5
         
        if length tempXcor >= 2
             [set meanXcor10 mean tempXcor
              set meanYcor10 mean tempYcor
              set stdXcor10 standard-deviation tempXcor
              set stdYcor10 standard-deviation tempYcor]
        set coo10 cooperativeCitizen / saved * 100
        
        set tempXcor (list)
        set tempYcor (list)
        ]
       
       [ifelse saved >= citizens * 0.3 and time30 = 0
            [set time30 ticks * 5
             
             if length tempXcor >= 2 
                  [set meanXcor30 mean tempXcor
                  set meanYcor30 mean tempYcor
                  set stdXcor30 standard-deviation tempXcor
                  set stdYcor30 standard-deviation tempYcor]
             set coo30 cooperativeCitizen / saved * 100
            
             set tempXcor (list)
             set tempYcor (list)]
            
            [ifelse saved >= citizens * 0.5 and time50 = 0
                  [set time50 ticks * 5
                  
                   if length tempXcor >= 2 
                        [set meanXcor50 mean tempXcor
                        set meanYcor50 mean tempYcor
                        set stdXcor50 standard-deviation tempXcor
                        set stdYcor50 standard-deviation tempYcor]
                   set coo50 cooperativeCitizen / saved * 100
                   
                   set tempXcor (list)
                   set tempYcor (list)]
                  
                  [ifelse saved >= citizens * 0.8 and time80 = 0
                       [set time80 ticks * 5
                        
                        if length tempXcor >= 2 
                             [set meanXcor80 mean tempXcor
                              set meanYcor80 mean tempYcor
                              set stdXcor80 standard-deviation tempXcor
                              set stdYcor80 standard-deviation tempYcor]
                        
                        set coo80 cooperativeCitizen / saved * 100
                        
                        set tempXcor (list)
                        set tempYcor (list)]
                       
                       [ifelse saved >= citizens * 0.95 and time95 = 0
                             [set time95 ticks * 5
                               
                              if length tempXcor >= 2
                                   [set meanXcor95 mean tempXcor
                                    set meanYcor95 mean tempYcor
                                    set stdXcor95 standard-deviation tempXcor
                                    set stdYcor95 standard-deviation tempYcor]
                              
                              set coo95 cooperativeCitizen / saved * 100
                              
                              set tempXcor (list)
                              set tempYcor (list)]
                             
                             [if count turtles = 0
                                  [set time_final ticks * 5
                                    
                                   if length tempXcor >= 2
                                        [set meanXcor_final mean tempXcor
                                        set meanYcor_final mean tempYcor
                                        set stdXcor_final standard-deviation tempXcor
                                        set stdYcor_final standard-deviation tempYcor]
                                        
                                   set coo_final cooperativeCitizen / saved * 100
                                    
                                   set survivors saved / citizens * 100
                                   stop]
                                 
                             ]
                             
                             
                       ]
                  ]
            ] 
       ] 
  
  
  tsunami

  tick
end 



;; Agents look fot the closest one of the evacuation points that they know

to look_for_a_safe_spot
  
   set heading direction
   ;let my_EP one-of patches in-cone 400 1 with [EvacuationPoint = 1]
   let my_safeSpot min-one-of n-of EP_knowledge safeSpot [distance myself] 
   let other_one one-of other turtles in-cone (radius / 10) 360
 
 
      
  if (my_safeSpot != nobody and flight = 0 and chosenEP = 0) 
  or ( my_safeSpot != nobody and newInformation = 1 and distance my_safeSpot < distance my_EP)
    [face my_safeSpot
      set chosenEP 1
      set my_EP my_safeSpot
      set newInformation 0
      set direction heading]
    
  if EP_knowledge = 0 and other_one != nobody and not any? other turtles-here
     [face other_one
      set direction [heading] of other_one]
end 



;; Agents may try to form groups. In this case they obtain knowledge about EP locations from the best
;; informed gropu member 

to form_a_group
  
  if (cooperation = true) and (count other turtles in-cone 1 360) < min_group_members and [pcolor] of patch-here > 64
      [let groupCenter max-one-of other turtles in-cone (radius / 10) 120 [count other turtles in-cone 1 360]
       let my_knowledge EP_knowledge
    
          if groupCenter != nobody and [cooperation] of groupCenter = true
             [face groupCenter
              ask groupCenter [set color blue
              set speed mean [speed] of turtles in-cone 1 360
              let max_knowledge max-one-of turtles in-cone 1 360 [EP_knowledge]
                   if my_knowledge < [EP_knowledge] of max_knowledge
                      [set EP_knowledge [EP_knowledge] of max_knowledge
                        set newInformation 1]
                               ]
            ]
       ]
end 

to run_away
  
  let dryPatch one-of patches in-cone 1 360 with [pcolor < 75]
  
  ifelse one-of patches in-cone 1 360 != nobody and [pcolor] of one-of patches in-cone 3 120 = 95.1 and dryPatch != nobody
  [ face dryPatch
    set flight 1
    set speed speed + 0.2
  ]
  [set flight 0]
end 


;; Agents may try to rescue other ones that are related with them (relation is determined by group number difference)

to rescue
   
   let my_direction direction
   lt 180
   let my_group group
   let my_knowledge EP_knowledge
   let my_speed speed
   let friend one-of turtles in-cone 1.5 180 with [abs(group - my_group) < max_group_diff and (distance myself > 0.6)] 
   
   
  ifelse friend != nobody and [rescue_attempt] of friend = 0
     [face friend
       set color pink
       
          ifelse [EP_knowledge] of friend > my_knowledge
              [set EP_knowledge [EP_knowledge] of friend
                set newInformation 1]
              [ask friend [set EP_knowledge my_knowledge]
               set rescue_attempt 1 
               set direction my_direction
               set newInformation 1
              ]
    
          ifelse [speed] of friend > my_speed
              [set speed [speed] of friend]
              [ask friend [set speed my_speed]]
    ]
    [rt 180
      set color black]
end 


;; Agents turn around when they reach inacessible terrain

to go_arround
  
 if (patch-ahead 2 != nobody and [pcolor] of patch-ahead 2 = 74.4) or patch-ahead 2 = nobody
  [lt 180
    set direction heading]
end 

to move
  
  fd speed
end 

to stop_here
    if [pcolor] of patch-here < 27
       [set saved saved + 1
        
        if cooperation = true 
            [set cooperativeCitizen cooperativeCitizen + 1]
        
        ifelse not is-list? tempXcor or empty? tempXcor
            [set tempXcor (list initXcor)
             set tempYcor (list initYcor)]
            [set tempXcor lput initXcor tempXcor
             set tempYcor lput initYcor tempYcor]
        die] 
end 

to die_here
  if [pcolor] of patch-here = 95.1
     [die]
end 

to tsunami
  
 if ticks > 180
    [ask patches with [pcolor = 95.1]
    [ask patches in-radius 3.5 with [pcolor > 64] [set pcolor 95.1] ]
    ]
  
  if (count patches with [pcolor > 64 and pcolor < 70]) = 0 and random-float 0.9 < 0.3
      [ask patches with [pcolor = 95.1]
      [ask neighbors with [pcolor > 40] [set pcolor 95.1] ]
      ]
end 

There are 3 versions of this model.

Uploaded by When Description Download
Adam Slucki over 9 years ago faster simulation Download this version
Adam Slucki over 9 years ago improved deccision process Download this version
Adam Slucki over 9 years ago Initial upload Download this version

Attached files

File Type Description Last updated
map.png png model world over 9 years ago, by Adam Slucki Download
Tsunami evacuation.png preview Preview for 'Tsunami evacuation' over 9 years ago, by Adam Slucki Download

This model does not have any ancestors.

This model does not have any descendants.