MERS in Hospital

MERS in Hospital preview image

1 collaborator

Default-person Hyesop Shin (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.0.4 • Viewed 446 times • Downloaded 46 times • Run 0 times
Download the 'MERS in Hospital' 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

breed [patients patient]
breed [docs doc]
breed [nurses nurse]
breed [people person]

patches-own [hospital?
             emergency?
             room?
             door
             jung
             cho
             radio
]

turtles-own [exposed?
             exposured_length
             infected?
             health
             ]



docs-own [sex
          age
          count-down

            ]

nurses-own [sex
            age

            ]

patients-own [sex
              age
              count-down

              ]

to setup
  ca
  reset-ticks



ask patches
  [set pcolor grey
    if (pxcor >= -27 and pxcor <= 28)  and (pycor >= -18 and pycor <= 18) [set pcolor white]
    if (pxcor >= -28 and pxcor <= -18) and (pycor >= -18 and pycor <= -8) [set pcolor grey]
    if (pxcor >= -10 and pxcor <= -9)  or (pycor >= 1 and pycor <= 2) [set pcolor 69.8 ] ; moving track
    if (pxcor >= -8  and pxcor <= 4)  and (pycor >= -5 and pycor <= -4) [set pcolor 69.8] ; moving track
    if (pxcor = -24) and (pycor = 3) [set pcolor 69.8] ; moving track
    if (pxcor = -3)  and (pycor = 3) [set pcolor 69.8] ; moving track
    ;if (pxcor = 5)   and (pycor = 3) [set pcolor 69.8] ; moving track
    if (pxcor = 21)  and (pycor = 3) [set pcolor 69.8] ; moving track

    if (pxcor >= -30 and pxcor <= -28) and (pycor >= 1  and pycor <= 2)  [set pcolor blue] ; Gate 1
    if (pxcor >= -10 and pxcor <= -9)  and (pycor >= -20 and pycor <= -19) [set pcolor blue] ; Gate 2
    if (pxcor >= 4 and pxcor <= 10)    and (pycor >= -20 and pycor <= -19) [set pcolor blue + 1] ; Emergency gate
    if (pxcor >= 29 and pxcor <= 30)   and (pycor >= 1 and pycor <= 2)  [set pcolor blue] ; Byolgwan Corridor
    if (pxcor >= -10 and pxcor <= -9)   and (pycor >= 19 and pycor <= 20)  [set pcolor blue] ; Gate 3
    ifelse pcolor != grey [set hospital? true][set hospital? false]

    if (pxcor >= -25 and pxcor <= -20) and (pycor >= 4 and pycor <= 14) [set pcolor green + 2 set jung 1] ;orthopedics(Junghyung)
    if (pxcor >= -6 and pxcor <= -1) and (pycor >= 4 and pycor <= 14) [set pcolor green + 2 set cho 1] ;cardiography(Choumpa)
    if (pxcor >= 15 and pxcor <= 25)  and (pycor >= 4 and pycor <= 14) [set pcolor green + 2 set radio 1] ;Radiology
    if (pxcor >= 4 and pxcor <= 15)  and (pycor >= -18 and pycor <= -4) [set pcolor green + 1] ;Emergency room
    if (pxcor >= 11 and pxcor <= 15) and (pycor >= -18 and pycor <= -17) [set pcolor white]
    ifelse pcolor = green + 1 [set emergency? true][ifelse pcolor = blue  + 1 [set emergency? true][set emergency? false]]
    ifelse pcolor = green + 2 [set room? true][set room? false]
    ifelse (pxcor = 3) and (pycor = -5) [set door true set pcolor 69.7][set door false]

   ]
;Make emergency beds
ask n-of beds patches with [(pxcor = 4 or pxcor = 15) and (pycor >= -15 and pycor <= -6)]
                         [if [pcolor] of neighbors != green + 1  [set pcolor 109]]

setup-docs
setup-nurses
setup-patients
setup-virus
end 

to setup-docs
  set-default-shape docs "person doctor"
  create-docs (no-of-docs - 2) [set color black
                               set size 2
                               setxy random-xcor random-ycor]

  create-docs 2 [set color black + 1
                 set size 2
                 setxy random-xcor random-ycor]


  ask docs with [color = black][ifelse [pcolor] of patch-here = grey
                               [move-to one-of patches with [hospital? = true and pcolor = 69.8]]
                               [move-to one-of patches with [hospital? = true and pcolor = 69.8]]
                               set age 25 + random 10
                               ifelse age > 30 [set sex "Male"][set sex "Female"]
                               ]

  ask docs with [color = black + 1][ifelse [emergency?] of patch-here = false [move-to one-of patches with [emergency? = true]]
                                   [move-to one-of patches with [emergency? = true]]
                                    set sex "Male" set age 25 + random 6 set health 70 + random 30]
end 

to setup-nurses
  set-default-shape nurses "person service"
  create-nurses (no-of-nurses * 2 / 3 ) [set color yellow + 1
                                         set size 2
                                    ;setxy random-xcor random-ycor
                                    ]

  ask nurses with [color = yellow + 1][ ifelse [hospital?] of patch-here = false
                  [move-to one-of patches with [hospital? = true and emergency? = false and door = false and room? = true ]]
                  [move-to one-of patches with [hospital? = true and emergency? = false and door = false and room? = true ]]
                                      if [hospital?] of patch-here = true [set sex "Female" set age 20 + random 30 set health 50 + random 50]
                                      ]


  create-nurses (no-of-nurses / 3) [set color brown + 2
                                    set size 2
                                    set health 50 + random 50
                                    ;set target min-one-of docs [distance myself]
                                    setxy random-xcor random-ycor]
                    ask nurses with [color = brown + 2][ ifelse [hospital?] of patch-here = false
                        [move-to one-of patches with [hospital? = true and pcolor = 69.8]]
                        [move-to one-of patches with [hospital? = true and pcolor = 69.8]]

                        ]
end 

to setup-patients
  set-default-shape patients "person"
  create-patients no-of-patients [set size 2
                                  set color pink
                                  set health 20 + random 40
                                  setxy random-xcor random-ycor ]
;every 10 [ask n-of 5 patches with [emergency? = true and pcolor = blue + 1] [ sprout 2 [set shape "person" set size 2 set color pink ]]]


  ask patients [ifelse [pcolor] of patch-here != black
               [move-to one-of patches with [emergency? = true and pcolor = blue + 1] ]
               [setxy xcor ycor
                ]]
end 

to setup-virus
  ask one-of patients with [emergency? = true and health < 35][set color 117 set exposed? true]
end 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to go
if(all? patients [infected? = true])[stop]
if(ticks > 300) [stop]
if(count patients with [[emergency?] of patch-here] = 0) [stop]

doctor-visit
duty
inroom
move-nurse
move-patients
quarantine
tick
end 

to move-patients
  ask patients with[[emergency?] of patch-here = true] [ifelse [pcolor] of patch-here = blue + 1 [move-to one-of patches with [emergency? = true and pcolor != blue + 1]]
                                                         [move-to one-of patches with [emergency? = true and pcolor != blue + 1]]
                                                          ]

  ask patients with [[emergency?] of patch-here = true and [pcolor] of patch-here != blue + 1]
                    [ifelse emergency? = true and pcolor != blue + 1
                    [move-to one-of patches with [emergency? = true and pcolor != blue + 1 or pcolor = 109]]
                    [move-to one-of patches with [emergency? = true and pcolor != blue + 1 or pcolor = 109]]
                     set health health - 1
                    ; set count-down count-down + 1
                    ; set label count-down
                     ]

  if(classify = "freedom")
  [ask patients with[[emergency?] of patch-here = true] [if any? docs in-radius 2 [
                      set count-down count-down + 1   ;increment-timer
                      set label count-down]
                      if count-down > length-of-stay [move-to one-of patches with [door = true] set label ""]]]



   ask patients with [pxcor = -10][set heading 180 fd 1]
   ask patients with [pxcor =  -9][set heading 0 fd 1 ]
   ask patients with [pycor = 1][set heading 90 fd 1 ]
   ask patients with [pycor = 2][set heading 270 fd 1 ]
  ; ask patients with [pycor = -5][set heading 270 fd 1 ]
  ; ask patients with [pycor = -4][set heading 270 fd 1 ]

   ask patients with [[door] of patch-here = true][set heading 270 fd 1 ]
  ; ask patients with [pycor >= -5 and pycor <= -4 and pxcor > -9 and pxcor < 4][set heading 270 fd 1 ]
   ask patients with [pxcor >= -9 and pxcor <= 2 and pycor = -5][set heading 270 fd 1 ]


 ;junction
 ask patients with [pxcor = -9 and pycor = 0]
                             [let dice random 4
                               if(dice = 0) [move-to patch -8 1]
                               if(dice = 1) [move-to patch -9 3]
                               if(dice = 2) [move-to patch -11 2]
                               if(dice = 3) [move-to patch -10 0]
                               ] ;central junction

 ask patients with [pxcor = -7 and pycor = -4]
                             [let dice random 2
                               if(dice = 0) [move-to patch -9 -3]
                               if(dice = 1) [move-to patch -10 -6] ] ;emergency junction


 ask docs with [pxcor = -9  and pycor = -5][set heading 270 * random 2 fd 1]
 ask patients with [pxcor = -10 and pycor = -5][set heading 180 fd 1] ;emergency
 ask patients with [pxcor = -28 and pycor = 2][set heading 180 fd 1] ;gate u-turn
 ask patients with [pxcor = 29 and pycor  = 1][set heading 0 fd 1]   ;gate u-turn
 ask patients with [pxcor = -9 and pycor = 19][set heading 270 fd 1] ;gate u-turn
 ask patients with [pxcor = -10 and pycor = -19][set heading 90 fd 1];gate u-turn


;junghyungwegwa wander
 ask patients with [pxcor = -24 and pycor >= 2 and pycor <= 3][
               if [jung] of patch-here = 0 [move-to one-of patches with [jung = 1]]]
 ask patients with [[jung] of patch-here = 1][ifelse [jung] of patch-here != 1 [move-to one-of patches with [jung = 1]]
                                                         [move-to one-of patches with [jung = 1]]
                          if any? docs in-radius 5 [set health health + 10]
                          set count-down count-down + 1   ;increment-timer
                          set label count-down
                          if count-down > 50 [move-to patch -18 1]
                          ]


;choumpa wander
 ask patients with [pxcor = -3 and pycor = 1 + random 3][
               if [cho] of patch-here = 0 [move-to one-of patches with [cho = 1]]]
 ask patients with [[cho] of patch-here = 1][ ifelse [cho] of patch-here != 1 [move-to one-of patches with [cho = 1]]
                                                         [move-to one-of patches with [cho = 1]]
                          if any? docs in-radius 5 [set health health + 10]
                          set count-down count-down + 1   ;increment-timer
                          set label count-down
                          if count-down > 50 [move-to patch -7 2]
                          ]


;radio wander
 ask patients with [pxcor = 21 and pycor >= 2 and pycor <= 3][
                if [radio] of patch-here = 0 [move-to one-of patches with [radio = 1]]]
 ask patients with [[radio] of patch-here = 1][ ifelse [radio] of patch-here != 1 [move-to one-of patches with [radio = 1]]
                                                             [move-to one-of patches with [radio = 1]]
                            if any? docs in-radius 5 [set health health + 10]
                            set count-down count-down + 1   ;increment-timer
                            set label count-down
                            if count-down > 50 [move-to patch 18 2 ]
                           ]


exposure
infect
end 

to duty
  ask docs with [color = black + 1 ][ifelse [emergency?] of patch-here = false
                                    [move-to one-of patches with [emergency? = true]]
                                    [setxy xcor ycor] set heading random 360 fd 0.5

                                    ;if [pcolor] of patches in-radius 1 = 109 ;classify types of disease
                                    ;[ask patients [ set health health + 1]]


  ]
end 

to doctor-visit
  ask docs with [pxcor = -10][set heading 180 fd 1 set label ""]
  ask docs with [pxcor =  -9][set heading 0 fd 1 set label ""]
  ask docs with [pycor = 1][set heading 90 fd 1 set label ""]
  ask docs with [pycor = 2][set heading 270 fd 1 set label ""]
  ask docs with [pycor = -5][set heading 90 fd 1 set label ""]
  ask docs with [pxcor >= -9 and pxcor <= 2 and pycor = -4][set heading 270 fd 1 set label ""]


 ;junction
 ask docs with [pxcor >= -10 and pxcor <= -9 and pycor >= 1 and pycor <= 2][set heading (random 4 * 90 ) fd 1] ;central junction
 ask docs with [pxcor = -10 and pycor = -5][set heading 180 fd 1] ;emergency
 ask docs with [pxcor = -9  and pycor = -5][set heading 270 * random 2 fd 1]

 ask docs with [pxcor = -28 and pycor = 2][set heading 180 fd 1] ;gate u-turn
 ask docs with [pxcor = 29 and pycor  = 1][set heading 0 fd 1]   ;gate u-turn
 ask docs with [pxcor = -9 and pycor = 19][set heading 270 fd 1] ;gate u-turn
 ask docs with [pxcor = -10 and pycor = -19][set heading 90 fd 1];gate u-turn
 ask docs with [door = true][move-to patch 2 -4]; emergency u-turn



;junghyungwegwa visit
 ask docs with [pxcor = -24 and pycor >= 1 and pycor <= 3][
               if [jung] of patch-here = 0 [move-to one-of patches with [jung = 1]]]


 ask docs with [[jung] of patch-here = 1][ifelse [jung] of patch-here != 1 [move-to one-of patches with [jung = 1]]
                                                                           [move-to one-of patches with [jung = 1]]

                          set count-down count-down + 1   ;increment-timer
                           set label count-down
                           if count-down > 50 [move-to patch -18 1 ] ]


;choumpa visit
 ask docs with [pxcor = -3 and pycor = 1 + random 2][
               if [cho] of patch-here = 0 [move-to one-of patches with [cho = 1]]]

 ask docs with [[cho] of patch-here = 1][ ifelse [cho] of patch-here != 1 [move-to one-of patches with [cho = 1]]
                                                         [move-to one-of patches with [cho = 1]]
                          set count-down count-down + 1   ;increment-timer
                          set label count-down
                          if count-down > 50 [move-to patch -7 2]]


;radio visit
 ask docs with [pxcor = 21 and pycor = 1 + random 2][
                if [radio] of patch-here = 0 [move-to one-of patches with [radio = 1]]]

 ask docs with [[radio] of patch-here = 1][ ifelse [radio] of patch-here != 1 [move-to one-of patches with [radio = 1]]
                                                             [move-to one-of patches with [radio = 1]]
                            set count-down count-down + 1   ;increment-timer
                            set label count-down
                            if count-down > 50 [move-to patch 18 2 ]]
end 

to inroom
    ask nurses with [color = yellow + 1][
    if [hospital?] of patch-here = false [move-to one-of patches with [hospital? = true and jung = 1 or cho = 1 or radio = 1]]]

    ask nurses with [[jung] of patch-here = 1][ifelse [jung] of patch-here != 1 [move-to one-of patches with [jung = 1]]
                                                                                [move-to one-of patches with [jung = 1]]]

    ask nurses with [[cho] of patch-here = 1][ifelse [cho] of patch-here != 1 [move-to one-of patches with [cho = 1]]
                                                                              [move-to one-of patches with [cho = 1]]]

    ask nurses with [[radio] of patch-here = 1][ifelse [radio] of patch-here != 1 [move-to one-of patches with [radio = 1]]
                                                                                  [move-to one-of patches with [radio = 1]]]
end 

to move-nurse
  ask nurses with [color = brown + 2 and pxcor = -10][set heading 180 fd 1]
  ask nurses with [color = brown + 2 and pxcor =  -9][set heading 0 fd 1]
  ask nurses with [color = brown + 2 and pycor = 1][set heading 90 fd 1]
  ask nurses with [color = brown + 2 and pycor = 2][set heading 270 fd 1]
  ask nurses with [color = brown + 2 and pycor = -5][set heading 90 fd 1]
  ask nurses with [color = brown + 2 and pxcor >= -9 and pxcor <= 2 and pycor = -4][set heading 270 fd 1]

 ;junction
 ask nurses with [color = brown + 2 and pxcor >= -10 and pxcor <= -9 and pycor >= 1 and pycor <= 2][set heading (random 4 * 90 ) fd 1] ;central junction
 ask nurses with [color = brown + 2 and pxcor = -10 and pycor = -5][set heading 180 fd 1] ;emergency
 ask nurses with [color = brown + 2 and pxcor = -9  and pycor = -5][set heading 270 * random 2 fd 1]
 ask nurses with [color = brown + 2 and pxcor = -24 or pxcor = -3 or pxcor = 21 and pycor = 3][set heading 180 fd 1]


 ask nurses with [color = brown + 2 and pxcor = -28 and pycor = 2][set heading 180 fd 1] ;gate u-turn
 ask nurses with [color = brown + 2 and pxcor = 29 and pycor  = 1][set heading 0 fd 1]   ;gate u-turn
 ask nurses with [color = brown + 2 and pxcor = -9 and pycor = 19][set heading 270 fd 1] ;gate u-turn
 ask nurses with [color = brown + 2 and pxcor = -10 and pycor = -19][set heading 90 fd 1];gate u-turn
 ask nurses with [color = brown + 2 and door = true][move-to patch 2 -4]; emergency u-turn
end 

to exposure
  ask turtles with [exposed? = true and health < 20][
  let transmit one-of turtles in-radius 1
          if transmit != nobody
          [ ask transmit [
            if (random-float 100 > prob-of-infection)
            [ set color 117 set exposed? true]]]]
end 

to infect
  let incubation (random 100)
  ask turtles with [exposed? = true]
  [if exposured_length > incubation [set color red set infected? true]
    set exposured_length exposured_length + 1]
end 

to quarantine
  if(classify = "quarantine")
  [ask patients with [[emergency?] of patch-here = true ] [if any? docs in-radius 2 [
                      set count-down count-down + 1   ;increment-timer
                      set label count-down]]


   ask patients with [count-down > length-of-stay][
                      ifelse infected? = true or exposed? = true [move-to one-of patches with [jung = 1]][
                      move-to one-of patches with [cho = 1 or radio = 1]] set label ""]


   ask patients with [[jung] of patch-here = 1][ifelse [jung] of patch-here != 1 [move-to one-of patches with [jung = 1]]
                                                                                [move-to one-of patches with [jung = 1]] set label ""]

    ask patients with [[cho] of patch-here = 1][ifelse [cho] of patch-here != 1 [move-to one-of patches with [cho = 1]]
                                                                              [move-to one-of patches with [cho = 1]] set label ""]

    ask patients with [[radio] of patch-here = 1][ifelse [radio] of patch-here != 1 [move-to one-of patches with [radio = 1]]
                                                                                  [move-to one-of patches with [radio = 1]]set label ""]

                      ]
end 

There are 2 versions of this model.

Uploaded by When Description Download
Hyesop Shin about 4 years ago tweaked a few buttons Download this version
Hyesop Shin about 8 years ago Initial upload Download this version

Attached files

File Type Description Last updated
MERS in Hospital.png preview Preview for 'MERS in Hospital' about 8 years ago, by Hyesop Shin Download

This model does not have any ancestors.

This model does not have any descendants.