How to let the patches be unpassable by the turtles/agents? Gymnasium model. Codes provided but not working

StackOverflow https://stackoverflow.com/questions/21499607

  •  05-10-2022
  •  | 
  •  

Question

enter image description here

Hi, I'm wondering if anyone knows the exact code to not let the patches enter the gymnasium. I closed all the gates labeled as red patches and the black patches are the walls.

The problem here is that I tried these different codes yet the patches still pass through the walls. Can anyone help me?

Do take note that I tried these methods one at a time to determine if any of the ff. worked.

Much help would be appreciated to the person/people that can help me.

ask turtles[
ifelse [pcolor] of patch-left-and-ahead 1 1 = red [rt random-float 180 ] 
[ let f random 5
ifelse [pcolor] of patch-right-and-ahead 1 1  = black [rt random-float 180 ] 
[ let g random 5

ifelse [pcolor] of  patch-at-heading-and-distance 1 1 = red [rt random-float 180 ] 
[let h  random 5

ifelse [pcolor] of  patch-at-heading-and-distance 1 1  = black [rt random-float 180]          
[let i  random 5

ifelse [pcolor] of  patch-ahead 1  = red [rt random-float 180 ] 
[let h  random 5

ifelse [pcolor] of  patch-ahead 1  = black [rt random-float 180 ] 
[let i  random 5

ifelse [pcolor] of   patch-left-and-ahead 1 1 = red [fd random-float 5]
[fd f]

ifelse [pcolor] of   patch-right-and-ahead 1 1 = red [fd random-float 5]
[fd g]

ifelse  [pcolor] of  patch-at-heading-and-distance 1 1 = red [fd random-float 5]
[fd h]

ifelse  [pcolor] of  patch-at-heading-and-distance 1 1 = black [fd  random-float 5]
[fd i]

ifelse  [pcolor] of  patch-ahead 1  = red [fd random-float 5]
[fd h]

ifelse  [pcolor] of  patch-ahead 1  = black [fd  random-float 5]
[fd i]

]
]
]
]
]

As requested here's the code for the patch:

to setup-world
set pcolor white

;;FLOOR------------------------------------------------------------------------------
if ( pycor < 91  and pycor > 10) and ( pxcor < 91 and pxcor > 7 ) [ set pcolor 8]
if ( pycor < 90  and pycor > 11) and ( pxcor = 7 ) [ set pcolor 8]
if ( pycor < 89  and pycor > 12) and ( pxcor = 6 ) [ set pcolor 8]
if ( pycor < 88  and pycor > 13) and ( pxcor = 5 ) [ set pcolor 8]
if ( pycor < 87  and pycor > 14) and ( pxcor = 4 ) [ set pcolor 8]
if ( pycor < 86  and pycor > 15) and ( pxcor = 3 ) [ set pcolor 8]
if ( pycor < 85  and pycor > 16) and ( pxcor = 2 ) [ set pcolor 8]
if ( pycor < 84  and pycor > 17) and ( pxcor = 1 ) [ set pcolor 8]
if ( pycor < 83  and pycor > 18) and ( pxcor = 0 ) [ set pcolor 8]
if ( pycor < 82  and pycor > 19) and ( pxcor = -1 ) [ set pcolor 8]
if ( pycor < 81  and pycor > 20) and ( pxcor = -2 ) [ set pcolor 8]
if ( pycor < 80  and pycor > 21) and ( pxcor = -3 ) [ set pcolor 8]
if ( pycor < 79  and pycor > 22) and ( pxcor = -4 ) [ set pcolor 8]
if ( pycor < 78  and pycor > 23) and ( pxcor = -5 ) [ set pcolor 8]
if ( pycor < 77  and pycor > 24) and ( pxcor = -6 ) [ set pcolor 8]
if ( pycor < 76  and pycor > 25) and ( pxcor = -7 ) [ set pcolor 8]
;;basketball -----------------------------------------------------------------------
if ( pycor < 68  and pycor > 33) and ( pxcor < 85 and pxcor > 9  ) [ set pcolor 37]

;;UP --------------------------------------------------------------------------------

if ( pycor = 90 ) and ( pxcor < 85 and pxcor > 7  ) [ set pcolor brown ]

if ( pycor = 88 ) and ( pxcor < 82 and pxcor > 14  ) [ set pcolor brown ]   
if ( pycor = 88 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 88 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]


if ( pycor = 86 ) and ( pxcor < 82 and pxcor > 14  ) [ set pcolor brown ]
if ( pycor = 86 ) and ( pxcor < 15 and pxcor > 10  ) [ set pcolor grey ]
if ( pycor = 86 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]

if ( pycor = 84 ) and ( pxcor < 82 and pxcor > 14  ) [ set pcolor brown ]
if ( pycor = 84 ) and ( pxcor < 15 and pxcor > 10  ) [ set pcolor grey ]
if ( pycor = 84 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]

if ( pycor = 82 ) and ( pxcor < 82 and pxcor > 14  ) [ set pcolor brown ]
if ( pycor = 82 ) and ( pxcor < 15 and pxcor > 10  ) [ set pcolor grey ]
if ( pycor = 82 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]

if ( pycor = 80 ) and ( pxcor < 36 and pxcor > 14  ) [ set pcolor brown ]
if ( pycor = 80 ) and ( pxcor < 15 and pxcor > 10  ) [ set pcolor grey ]
if ( pycor = 80 ) and ( pxcor < 81 and pxcor > 60  ) [ set pcolor brown ]
if ( pycor = 80 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]

if ( pycor = 78 ) and ( pxcor < 36 and pxcor > 14  ) [ set pcolor brown ]
if ( pycor = 78 ) and ( pxcor < 15 and pxcor > 10  ) [ set pcolor grey ]
if ( pycor = 78 ) and ( pxcor < 81 and pxcor > 60  ) [ set pcolor brown ]
if ( pycor = 78 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]

;;DOWN -------------------------------------------------------------------------

if ( pycor = 11 ) and ( pxcor < 85 and pxcor > 7  ) [ set pcolor brown ]

if ( pycor = 13 ) and ( pxcor < 82 and pxcor > 14  ) [ set pcolor brown ]   
if ( pycor = 13 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 13 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]

if ( pycor = 15 ) and ( pxcor < 82 and pxcor > 14  ) [ set pcolor brown ]   
if ( pycor = 15 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 15 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]

if ( pycor = 17 ) and ( pxcor < 82 and pxcor > 14  ) [ set pcolor brown ]   
if ( pycor = 17 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 17 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]

if ( pycor = 19 ) and ( pxcor < 82 and pxcor > 14  ) [ set pcolor brown ]   
if ( pycor = 19 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 19 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]

if ( pycor = 21 ) and ( pxcor < 82 and pxcor > 14  ) [ set pcolor brown ]   
if ( pycor = 21 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 21 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]

if ( pycor = 23 ) and ( pxcor < 82 and pxcor > 14  ) [ set pcolor brown ]   
if ( pycor = 23 ) and ( pxcor < 15 and pxcor > 10) [ set pcolor grey ]
if ( pycor = 23 ) and ( pxcor < 85 and pxcor > 80) [ set pcolor grey ]

;;CORNER DOWN RIGHT--------------------------------------------------------------------

if ( pycor = 12 and pxcor = 7) [ set pcolor brown ]
if ( pycor = 13 and pxcor = 6) [ set pcolor brown ]
if ( pycor = 14 and pxcor = 5) [ set pcolor brown ]

if ( pycor = 13 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 13 and pxcor = 9) [ set pcolor brown ]

if ( pycor = 14 and pxcor = 8) [ set pcolor brown ]
if ( pycor = 15 and pxcor = 7) [ set pcolor brown ]
if ( pycor = 16 and pxcor = 6) [ set pcolor brown ]
if ( pycor = 15 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 16 and pxcor = 9) [ set pcolor brown ]
if ( pycor = 17 and pxcor = 8) [ set pcolor brown ]
if ( pycor = 18 and pxcor = 7) [ set pcolor brown ]

if ( pycor = 18 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 19 and pxcor = 9) [ set pcolor brown ]
if ( pycor = 20 and pxcor = 8) [ set pcolor brown ]

;;CORNER UP RIGHT---------------------------------------------------------
if ( pycor = 87 and pxcor = 5) [ set pcolor brown ]
if ( pycor = 88 and pxcor = 6) [ set pcolor brown ]
if ( pycor = 89 and pxcor = 7) [ set pcolor brown ] 

if ( pycor = 88 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 88 and pxcor = 9) [ set pcolor brown ]
if ( pycor = 87 and pxcor = 8) [ set pcolor brown ]
if ( pycor = 86 and pxcor = 7) [ set pcolor brown ]
if ( pycor = 85 and pxcor = 6) [ set pcolor brown ]

if ( pycor = 86 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 85 and pxcor = 9) [ set pcolor brown ]
if ( pycor = 84 and pxcor = 8) [ set pcolor brown ]
if ( pycor = 83 and pxcor = 7) [ set pcolor brown ]

if ( pycor = 83 and pxcor = 10) [ set pcolor brown ]
if ( pycor = 82 and pxcor = 9) [ set pcolor brown ]
if ( pycor = 81 and pxcor = 8) [ set pcolor brown ]


;;CENTER CORNER DOWN---------------------------------------------------------------- 
if ( pycor = 29 and pxcor = -1) [ set pcolor brown ]
if ( pycor = 28 and pxcor = 0) [ set pcolor brown ]
if ( pycor = 27 and pxcor = 1) [ set pcolor brown ]

if ( pycor = 29 and pxcor = -4) [ set pcolor brown ]
if ( pycor = 28 and pxcor = -3) [ set pcolor brown ]
if ( pycor = 27 and pxcor = -2) [ set pcolor brown ]
if ( pycor = 26 and pxcor = -1) [ set pcolor brown ]

if ( pycor = 29 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 28 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 27 and pxcor = -5) [ set pcolor brown ]
if ( pycor = 26 and pxcor = -4) [ set pcolor brown ]
if ( pycor = 25 and pxcor = -3) [ set pcolor brown ]

if ( pycor = 26 and pxcor = -7) [ set pcolor brown ]
if ( pycor = 25 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 24 and pxcor = -5) [ set pcolor brown ]

;;CENTER CORNER UP-------------------------------------------------------
if ( pycor = 72 and pxcor = -1) [ set pcolor brown ]
if ( pycor = 73 and pxcor = 0) [ set pcolor brown ]
if ( pycor = 74 and pxcor = 1) [ set pcolor brown ]

if ( pycor = 72 and pxcor = -4) [ set pcolor brown ]
if ( pycor = 73 and pxcor = -3) [ set pcolor brown ]
if ( pycor = 74 and pxcor = -2) [ set pcolor brown ]
if ( pycor = 75 and pxcor = -1) [ set pcolor brown ]

if ( pycor = 72 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 73 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 74 and pxcor = -5) [ set pcolor brown ]
if ( pycor = 75 and pxcor = -4) [ set pcolor brown ]
if ( pycor = 76 and pxcor = -3) [ set pcolor brown ]

if ( pycor = 75 and pxcor = -7) [ set pcolor brown ]
if ( pycor = 76 and pxcor = -6) [ set pcolor brown ]
if ( pycor = 77 and pxcor = -5) [ set pcolor brown ]




;;center -------------------------------------------------------------------------
if ( pxcor = -8 ) and ( pycor < 75 and pycor > 26  ) [ set pcolor brown ]

if ( pxcor = -6 ) and ( pycor < 67 and pycor > 34  ) [ set pcolor brown ]
if ( pxcor = -6 ) and ( pycor < 35 and pycor > 29  ) [ set pcolor grey ]
if ( pxcor = -6 ) and ( pycor < 72 and pycor > 66  ) [ set pcolor grey ]

if ( pxcor = -4 ) and ( pycor < 67 and pycor > 34  ) [ set pcolor brown ]
if ( pxcor = -4 ) and ( pycor < 35 and pycor > 29  ) [ set pcolor grey ]
if ( pxcor = -4 ) and ( pycor < 72 and pycor > 66  ) [ set pcolor grey ]

if ( pxcor = -2 ) and ( pycor < 67 and pycor > 34  ) [ set pcolor brown ]
if ( pxcor = -2 ) and ( pycor < 35 and pycor > 29  ) [ set pcolor grey ]
if ( pxcor = -2 ) and ( pycor < 72 and pycor > 66  ) [ set pcolor grey ]

if ( pxcor = 0 ) and ( pycor < 47 and pycor > 34  ) [ set pcolor brown ]
if ( pxcor = 0 ) and ( pycor < 67 and pycor > 54  ) [ set pcolor brown ]
if ( pxcor = 0 ) and ( pycor < 35 and pycor > 29  ) [ set pcolor grey ]
if ( pxcor = 0 ) and ( pycor < 72 and pycor > 66  ) [ set pcolor grey ]

if ( pxcor = 2 ) and ( pycor < 62 and pycor > 54  ) [ set pcolor brown ]
if ( pxcor = 2 ) and ( pycor < 47 and pycor > 38  ) [ set pcolor brown ]
if ( pxcor = 2 ) and ( pycor < 35 and pycor > 29  ) [ set pcolor grey ]
if ( pxcor = 2 ) and ( pycor < 72 and pycor > 66  ) [ set pcolor grey ]

if ( pxcor = 4 ) and ( pycor < 62 and pycor > 54  ) [ set pcolor brown ]
if ( pxcor = 4 ) and ( pycor < 47 and pycor > 38  ) [ set pcolor brown ]
if ( pxcor = 4 ) and ( pycor < 35 and pycor > 29  ) [ set pcolor grey ]
if ( pxcor = 4 ) and ( pycor < 72 and pycor > 66  ) [ set pcolor grey ]


if ( pxcor = 6 ) and ( pycor < 62 and pycor > 54  ) [ set pcolor brown ]
if ( pxcor = 6 ) and ( pycor < 47 and pycor > 38  ) [ set pcolor brown ]
if ( pxcor = 6 ) and ( pycor < 35 and pycor > 29  ) [ set pcolor grey ]
if ( pxcor = 6 ) and ( pycor < 72 and pycor > 66  ) [ set pcolor grey ]   

;;WaLL----------------------------------------------------------------------

if ( pycor = 10 ) and ( pxcor < 85 and pxcor > 7  ) [ set pcolor black ]
if ( pycor = 91 ) and ( pxcor < 85 and pxcor > 7  ) [ set pcolor black ]

if ( pxcor = -9 ) and ( pycor < 76 and pycor > 25  ) [ set pcolor black ]

if ( pxcor = 91 ) and ( pycor < 34 and pycor > 9  ) [ set pcolor black ]
if ( pxcor = 91 ) and ( pycor < 92 and pycor > 67  ) [ set pcolor black ]

;;stage
if ( pxcor = 98) and ( pycor < 68 and pycor > 33  ) [ set pcolor black ]
if ( pycor = 33 ) and ( pxcor < 99 and pxcor > 91  ) [ set pcolor black ]
if ( pycor = 68 ) and ( pxcor < 99 and pxcor > 91  ) [ set pcolor black ]


if ( pycor = 11 and pxcor = 7) [ set pcolor black ]
if ( pycor = 12 and pxcor = 6) [ set pcolor black ]
if ( pycor = 13 and pxcor = 5) [ set pcolor black ]
if ( pycor = 14 and pxcor = 4) [ set pcolor black ]
if ( pycor = 15 and pxcor = 3) [ set pcolor black ]

if ( pycor = 22 and pxcor = -4) [ set pcolor black ]
if ( pycor = 23 and pxcor = -5) [ set pcolor black ]
if ( pycor = 24 and pxcor = -6) [ set pcolor black ]
if ( pycor = 25 and pxcor = -7) [ set pcolor black ]
if ( pycor = 26 and pxcor = -8) [ set pcolor black ]


if ( pycor = 90 and pxcor = 7) [ set pcolor black ]
if ( pycor = 89 and pxcor = 6) [ set pcolor black ]
if ( pycor = 88 and pxcor = 5) [ set pcolor black ]
if ( pycor = 87 and pxcor = 4) [ set pcolor black ]
if ( pycor = 86 and pxcor = 3) [ set pcolor black ]  

if ( pycor = 79 and pxcor = -4) [ set pcolor black ]
if ( pycor = 78 and pxcor = -5) [ set pcolor black ]
if ( pycor = 77 and pxcor = -6) [ set pcolor black ]
if ( pycor = 76 and pxcor = -7) [ set pcolor black ]
if ( pycor = 75 and pxcor = -8) [ set pcolor black ]

;;stage--------------------------------------------------------------------------------  
if ( pycor < 68  and pycor > 33) and ( pxcor < 98 and pxcor > 90  ) [ set pcolor 37 ]

;;lines-------------------------------------------------------------------------------
if ( pycor = 66 ) and ( pxcor < 82 and pxcor > 11 ) [ set pcolor yellow ]
if ( pycor = 35 ) and ( pxcor < 82 and pxcor > 11 ) [ set pcolor yellow ]
if ( pxcor = 12 ) and ( pycor < 67 and pycor > 34 ) [ set pcolor yellow ]
if ( pxcor = 82 ) and ( pycor < 67 and pycor > 34 ) [ set pcolor yellow ]
if ( pxcor = 47 ) and ( pycor < 67 and pycor > 34 ) [ set pcolor yellow ]

;;gates are closed initially ---------------------------------------------------------- 
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor red ] 
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor red ] 
; lower left, right door

if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor red ] 
; lower right, left door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor red ] 
; lower right, right door

if ( pycor = 16 and pxcor = 2) [ set pcolor red ] ; upper left  , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor red ] ; upper left  , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor red ] ; upper left  , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor red ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor red ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor red ] ; upper left , left door

if ( pycor = 85 and pxcor = 2) [ set pcolor red ] ; upper right , right door
if ( pycor = 84 and pxcor = 1) [ set pcolor red ] ; upper right , right door
if ( pycor = 83 and pxcor = 0) [ set pcolor red ] ; upper right , right door
if ( pycor = 82 and pxcor = -1) [ set pcolor red ] ; upper right , left door
if ( pycor = 81 and pxcor = -2) [ set pcolor red ] ; upper right , left door
if ( pycor = 80 and pxcor = -3) [ set pcolor red ] ; upper right , left door

if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor green ] 
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor green ] 
; lower left, right door

if lower-left = "Half"
[
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor red ] 
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor green ] 
; lower left, right door
]

if lower-left = "Close"
[
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor red ] 
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor red ] 
; lower left, right door
]
;;-------------------------------------------------------------------------------------

;; lower right------------------------------------------------------------------------- 
if lower-right = "Open"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor green ] 
; lower right, left door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor green ] 
; lower right, right door
]

if lower-right = "Half"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor green ] 
; lower right, right door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor red ] 
; lower right, left door
]

if lower-right = "Close"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor red ] 
; lower right, left door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor red ] 
; lower right, right door
]
;;-------------------------------------------------------------------------------------

;; upper left--------------------------------------------------------------------------
if upper-left = "Open"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor green ] ; upper left  , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor green ] ; upper left  , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor green ] ; upper left  , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor green ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor green ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor green ] ; upper left , left door
]

if upper-left = "Half"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor green ] ; upper left  , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor green ] ; upper left  , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor green ] ; upper left  , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor red ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor red ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor red ] ; upper left , left door
]

if upper-left = "Close"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor red ] ; upper left  , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor red ] ; upper left  , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor red ] ; upper left  , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor red ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor red ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor red ] ; upper left , left door
]
;; ------------------------------------------------------------------------------

;; upper right-------------------------------------------------------------------
if upper-right = "Open"
[
if ( pycor = 85 and pxcor = 2) [ set pcolor green ] ; upper right , right door
if ( pycor = 84 and pxcor = 1) [ set pcolor green ] ; upper right , right door
if ( pycor = 83 and pxcor = 0) [ set pcolor green ] ; upper right , right door
if ( pycor = 82 and pxcor = -1) [ set pcolor green ] ; upper right , left door
if ( pycor = 81 and pxcor = -2) [ set pcolor green ] ; upper right , left door
if ( pycor = 80 and pxcor = -3) [ set pcolor green ] ; upper right , left door
]

if upper-right = "Half"
[
if ( pycor = 85 and pxcor = 2) [ set pcolor red ] ; upper right , left door 
if ( pycor = 84 and pxcor = 1) [ set pcolor red ] ; upper right , left door 
if ( pycor = 83 and pxcor = 0) [ set pcolor red ] ; upper right , left door 
if ( pycor = 82 and pxcor = -1) [ set pcolor green ] ; upper right , right door
if ( pycor = 81 and pxcor = -2) [ set pcolor green ] ; upper right , right door
if ( pycor = 80 and pxcor = -3) [ set pcolor green ] ; upper right , right door
]

if upper-right = "Close"
[
if ( pycor = 85 and pxcor = 2) [ set pcolor red ] ; upper right , right door
if ( pycor = 84 and pxcor = 1) [ set pcolor red ] ; upper right , right door
if ( pycor = 83 and pxcor = 0) [ set pcolor red ] ; upper right , right door
if ( pycor = 82 and pxcor = -1) [ set pcolor red ] ; upper right , left door
if ( pycor = 81 and pxcor = -2) [ set pcolor red ] ; upper right , left door
if ( pycor = 80 and pxcor = -3) [ set pcolor red ] ; upper right , left door
]   
;; ----------------------------------------------------------------------------

end    


to setupgate

ask patches [

;;exits--------------------------------------------------------------------------------
;; Point of view is when the agents are outside the Gymnasium.
;; lower left--------------------------------------------------------------------------
if lower-left = "Open"
[
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor green ] 
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor green ] 
; lower left, right door
]

if lower-left = "Half"
[
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor red ] 
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor green ] 
; lower left, right door
]

if lower-left = "Close"
[
if ( pycor = 10 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor red ] 
; lower left, left door
if ( pycor = 10 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor red ] 
; lower left, right door
]
;;-------------------------------------------------------------------------------------

;; lower right-------------------------------------------------------------------------
if lower-right = "Open"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor green ] 
; lower right, left door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor green ] 
; lower right, right door
]

if lower-right = "Half"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor green ] 
; lower right, right door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor red ] 
; lower right, left door
]

if lower-right = "Close"
[
if ( pycor = 91 ) and ( pxcor < 88 and pxcor > 84  ) [ set pcolor red ] 
; lower right, left door
if ( pycor = 91 ) and ( pxcor < 91 and pxcor > 87  ) [ set pcolor red ] 
; lower right, right door
]
;;-------------------------------------------------------------------------------------

;; upper left--------------------------------------------------------------------------
if upper-left = "Open"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor green ] ; upper left  , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor green ] ; upper left  , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor green ] ; upper left  , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor green ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor green ] ; upper left , left door 
if ( pycor = 21 and pxcor = -3) [ set pcolor green ] ; upper left , left door
]

if upper-left = "Half"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor green ] ; upper left  , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor green ] ; upper left  , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor green ] ; upper left  , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor red ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor red ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor red ] ; upper left , left door
]

if upper-left = "Close"
[
if ( pycor = 16 and pxcor = 2) [ set pcolor red ] ; upper left  , right door
if ( pycor = 17 and pxcor = 1) [ set pcolor red ] ; upper left  , right door
if ( pycor = 18 and pxcor = 0) [ set pcolor red ] ; upper left  , right door
if ( pycor = 19 and pxcor = -1) [ set pcolor red ] ; upper left , left door
if ( pycor = 20 and pxcor = -2) [ set pcolor red ] ; upper left , left door
if ( pycor = 21 and pxcor = -3) [ set pcolor red ] ; upper left , left door
]
;; ------------------------------------------------------------------------------

;; upper right-------------------------------------------------------------------
if upper-right = "Open"
[
if ( pycor = 85 and pxcor = 2) [ set pcolor green ] ; upper right , right door
if ( pycor = 84 and pxcor = 1) [ set pcolor green ] ; upper right , right door
if ( pycor = 83 and pxcor = 0) [ set pcolor green ] ; upper right , right door
if ( pycor = 82 and pxcor = -1) [ set pcolor green ] ; upper right , left door
if ( pycor = 81 and pxcor = -2) [ set pcolor green ] ; upper right , left door
if ( pycor = 80 and pxcor = -3) [ set pcolor green ] ; upper right , left door
]

if upper-right = "Half"
[
if ( pycor = 85 and pxcor = 2) [ set pcolor red ] ; upper right , left door 
if ( pycor = 84 and pxcor = 1) [ set pcolor red ] ; upper right , left door 
if ( pycor = 83 and pxcor = 0) [ set pcolor red ] ; upper right , left door 
if ( pycor = 82 and pxcor = -1) [ set pcolor green ] ; upper right , right door
if ( pycor = 81 and pxcor = -2) [ set pcolor green ] ; upper right , right door
if ( pycor = 80 and pxcor = -3) [ set pcolor green ] ; upper right , right door
]

 if upper-right = "Close"
 [
 if ( pycor = 85 and pxcor = 2) [ set pcolor red ] ; upper right , right door
 if ( pycor = 84 and pxcor = 1) [ set pcolor red ] ; upper right , right door
 if ( pycor = 83 and pxcor = 0) [ set pcolor red ] ; upper right , right door
 if ( pycor = 82 and pxcor = -1) [ set pcolor red ] ; upper right , left door
 if ( pycor = 81 and pxcor = -2) [ set pcolor red ] ; upper right , left door
 if ( pycor = 80 and pxcor = -3) [ set pcolor red ] ; upper right , left door
 ]   
 ;; ----------------------------------------------------------------------------

 ]

 end    
Was it helpful?

Solution

its a nice design :)

The way you want to do it should work only in cases that you check exactly the patch which FD moves the turtle on that patch. I have noticed that you check patch-ahead 1 but you ask your turtle to fd random 5 which does not check the patch-ahead random 5 and jumps from red patches. There might be many other way to do what you want, and most often I have seen the same approach that you used, if you want that method to work you should check the patch in correct distance not just patch ahead.

There is another way to do same thing, I am not sure how agents are choosing the door they want to move toward to but I have assigned a property called closest-door and filled it with one of patches with [Pcolor = green], then I have asked agent to check the patches with its walking-speed and see if they are white and they are in right direction the agent will move to those patches.

turtles-own
[closest-door]

to setup 
....

create-turtles [

.....
    set closest-door min-one-of patches with [pcolor = green][ distance myself] ; nearest door
    set closest-door  one-of patches with [pcolor = green] ; any open door


]


to go
  ask turtles
  [move-toward-gym  closest-door random 5]
end
to move-toward-gym [my-door walking-speed]
  if my-door!= nobody [
face my-door
let possible-moves patches with [distance myself = walking-speed and pcolor = white]
let t min-one-of possible-moves [distance my-door]

if t != nobody [move-to t ]
]
end

Update:

First, for a version control you can use Github and you will never get lost with changes in your code :)

Second, let me know what kind of errors you get, the function move-toward-gym only works if there is a green patch available for agents.

https://www.dropbox.com/s/j8qe7omoediwysw/out.mov

Update:

I have just noticed you asked for my entire code:

turtles-own
[closest-door

]

globals 
[lower-left
  lower-right
  upper-left
  upper-right
  ]


to setup
  clear-all
 movie-cancel
  movie-start "out.mov"
  ask patches [setup-world]
  set lower-left "Open"
    set lower-right "Open"
    set upper-left "Open"
    set upper-right "Open"
    set upper-left "Open"
  create-turtles 100  [
 set size 2

    move-to one-of patches with [
     pcolor = white


    ]
    set closest-door min-one-of patches with [pcolor = green][ distance myself] ; nearest door
    set closest-door  one-of patches with [pcolor = green] ; any open door



  ]
reset-ticks
end

to go

      if ticks < 50 
  [
  movie-grab-view
  ]


  ask turtles  
  [move-toward-gym  closest-door random 5]

  if ticks = 50 [movie-close]

  tick
end
to move-toward-gym [my-door walking-speed]
  if my-door != nobody
  [
face my-door
let possible-moves patches with [distance myself = walking-speed and pcolor = white]
let t min-one-of possible-moves [distance my-door]
ifelse  t != nobody [move-to t] []

if any? patches with [distance myself = walking-speed and pcolor = green]
[move-to one-of patches with [pcolor = green]
  ]]
end

OTHER TIPS

A couple relevant code examples (in the Code Examples section of the NetLogo Models Library) are Look Ahead Example and Next Patch Example.

Look Ahead Example shows one way to keep your turtles from bumping into walls. It might also be useful as a testbed for trying out more complicated rules for turtle motion in the presence of walls.

Next Patch Example should help improve your understanding of why the math and logic of turtles moving "continuously" over a patch grid is more complicated than you might expect at first.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top