timer - turtles - netlogo: cómo hacer que las tortugas se detengan durante un número determinado de tics y luego continuar
netlogo library (2)
Este es solo un ejemplo, ¿Cuántas garrapatas deben permanecer en el área amarilla? Asumí 15 tics y les pedí a las tortugas que también imprimieran su número de tilde en su etiqueta. Si funciona demasiado rápido, podrían perderse su estancia, así que ajuste la velocidad de funcionamiento para que su modelo vea cuándo se quedan y cuándo se mueven. Puedes tener diferentes métodos para continuar, en este solo mueven 1 parche hacia adelante.
turtles-own [count-down]
to setup
clear-all
ask patches with [count neighbors != 8]
[set pcolor blue]
create-turtles 20
ask turtles
[setxy random-xcor random-ycor
pen-down
set count-down 15
]
ask n-of 20 patches
[ set pcolor yellow ]
reset-ticks
end
to go
move-turtles
tick
if ticks >= 720 [stop]
end
to move-turtles
ask turtles
[ ifelse pcolor != yellow
[continue]
[stay]
]
end
To continue
rt random 10
fd 1
end
to stay
set count-down count-down - 1 ;decrement-timer
set label count-down
if count-down = 0
[
Continue
set label ""
reset-count-down
]
end
to reset-count-down
set count-down 15
end
Estoy tratando de crear un modelo donde las tortugas caminen al azar (pero con una tendencia hacia el movimiento hacia adelante) hasta que aterricen en un parche de color amarillo que representa un objeto cebado.
Cuando una tortuga aterriza en uno de los parches amarillos, me gustaría que se detenga en ese parche y permanezca allí durante 15 tics mientras ''investiga'' el cebo.
Después de que hayan transcurrido 15 ticks, quiero que las tortugas continúen moviéndose como de costumbre hasta que encuentren otro parche amarillo.
Intenté modificar partes de este modelo de tarjeta estacionado en netlogo modeling commons pero no pude darle sentido (soy nuevo en netlogo) http://modelingcommons.org/browse/one_model/3205#model_tabs_browse_procedures
También he intentado implementar un temporizador de cuenta atrás como se describe en este hilo. ¿Cómo se puede crear un temporizador de cuenta regresiva en NetLogo?
Sin embargo, recibo un error de tiempo de ejecución ''Solo el observador puede PREGUNTAR el conjunto de todas las tortugas'' cuando intento ejecutar la simulación. ¿Alguien puede decirme dónde me estoy equivocando? ¡Probablemente en varios lugares! Gracias.
Aquí está el código que está causando el error de tiempo de ejecución:
turtles-own [count-down]
to setup
clear-all
ask patches with [count neighbors != 8]
[set pcolor blue]
create-turtles 20
ask turtles
[setxy random-xcor random-ycor
pen-down]
ask n-of 20 patches
[ set pcolor yellow ]
reset-ticks
end
to go
move-turtles
tick
if ticks >= 720 [stop]
end
to move-turtles
ask turtles
[ ifelse pcolor != yellow
[continue]
[stay]
]
end
to continue
ask turtles
[rt -90 + random 181]
ask turtles
[ifelse [pcolor] of patch-ahead 1 = blue [ lt random-float 360 ]
[fd 1]
]
end
to stay
ask turtles
[
setup-timer
decrement-timer
if timer-expired? [continue]
]
end
to setup-timer
set count-down 15
end
to decrement-timer
set count-down count-down - 1
end
to-report timer-expired?
report ( count-down <= 0 )
end
Para responder solo a la parte sobre "Solo el observador puede PEDIR el conjunto de todas las tortugas", ese mensaje de error ocurre si lo hace:
ask turtles [
ask turtles [
do-something
]
]
Esto no está permitido en NetLogo porque casi siempre es accidental en lugar de intencional. Probablemente solo quisiste que cada tortuga "hiciera algo" una vez; probablemente no quisiste decir que cada tortuga "haga algo" por cada posible par de dos tortugas.
Es menos obvio que estás pidiendo a todas las tortugas que pregunten a todas las tortugas si se divide entre los procedimientos. Entonces, por ejemplo, si escribes:
to go
ask turtles [ my-procedure ]
end
to my-procedure
ask turtles [ do-something ]
end
Todavía está mal por la misma razón, pero no es tan fácil de ver que solo de echarle un vistazo.
Tu código sigue este último patrón. Tienes:
to move-turtles
ask turtles [
...
continue
...
]
end
to continue
ask turtles [
rt -90
...
]
end
No creo que quieras ask turtles
en el procedimiento de continue
. Como llamas al procedimiento dentro de las ask turtles
, ya es un procedimiento de tortuga. Sugeriría escribirlo como:
to continue ;; turtle procedure
rt -90
...
end
El comentario te recuerda que está destinado a ser dirigido por tortugas. (Seguimos este estilo en todos los modelos de la Biblioteca de modelos).