#netlogo
#netlogo
Вопрос:
Я пытаюсь создать симуляцию распространения Covid19 в течение нескольких месяцев: май и июнь Код, который я использую для создания черепах и запуска симуляции, показан ниже:
to gh-month
if month="May"//month is a chooser in interface tabe
[
clear-all
create-turtles 3000
[
setxy random-xcor random-ycor
set shape forma
set color blue
]
set no_infected 106
ask n-of 1 turtles with [color = blue]
[
set infectedTurtle? True
set color red
]
set percentage(no_infected / 3000)* 100
]
if month="June"
[
clear-all
create-turtles 3000
[
setxy random-xcor random-ycor
set shape forma
set color blue
]
set no_infected 2030
ask n-of 1 turtles with [color = blue]
[
set infectedTurtle? True
set color red
]
set percentage(no_infected / 3000)* 100
]
end
А команды setup и go приведены ниже
to setup
gh-month
end
to go
reset-ticks ;; netlogo time
ask turtles [
forward 0.005 ;; moving turtles command and speed
]
ask turtles with [color = red] [
ask other turtles-here [
if random 100 < percentage[set color red]
]
]
set %infected (count turtles with [color = red] / count turtles) * 100
if %infected= percentage[stop]//percentage is declared above also is a monitor in interface tab
end
Мой вопрос после начала симуляции, почему для месяца «Май» остановлен на основе заданного условия (если% заражен = процент [стоп]), а для июня нет, он увеличивается до 100% и не останавливается при заданных условиях.
Спасибо всем
Ответ №1:
У вас есть базовое непонимание того, как время работает в NetLogo, поэтому есть несколько проблем. Вы также написали слишком много кода сразу. Например, просто создайте черепах и заставьте их работать, прежде чем они будут перемещаться, и заставьте их работать, прежде чем пытаться использовать разные месяцы.
NetLogo работает со счетчиком или часами. Каждый tick
увеличивает счетчик. Это reset-ticks
часть инициализации, потому что она устанавливает счетчик в 0 и делает его доступным. Команда tick
переводит часы вперед и обычно является последней командой в процедуре, которая содержит все события, которые происходят за день (или час, или что бы ни обозначала галочка). Поэтому для процедуры go требуется команда tick
, а не команда reset-ticks
.