В моей модели в настоящее время у меня есть монитор в интерфейсе, который подсчитывает общее количество черепах (в моем случае оленей) за каждый тик. Можно ли иметь другой монитор, который подсчитывает количество оленей после выполнения определенной строки кода? Например, вот фрагмент кода:
to catch-fawns-source
let fawn-hunting-rate (fawn-harvest-rate-source)
if any? fawns-on source-patches
[ ask fawns-on source-patches [
if random-float 1.0001 < (fawn-hunting-rate)
[ set harvest (harvest + 1)
set fawn-harvest (fawn-harvest + 1)
set source-harvest (source-harvest + 1)
die ] ]
]
end
В данном случае это то место, где у меня собирают оленят. Этот код одинаков для моих взрослых и молодых оленей мужского и женского пола. Итак, есть ли способ отслеживать свое население после того, как будет выполнен этот фрагмент кода (и другие идентичные для подростков и взрослых)?
Я не уверен, понадобится ли мне какое-либо расширение Netlogo (если оно применимо к этому) или я мог бы каким-то образом добавить еще одну глобальную переменную и строки кода, которые выполняют эту задачу.
Спасибо за вашу помощь, как всегда!
Я думаю, вы можете обойтись еще одной переменной global
, которую вы просто обновляете так часто, как хотите. В качестве очень простого примера рассмотрим эту настройку:
globals [ most-recent-pop-check ]
to setup
ca
crt 10
set most-recent-pop-check count turtles
reset-ticks
end
Здесь most-recent-pop-check
будет обновляться только при необходимости, тогда вы можете просто настроить монитор для отображения этой переменной. В этом примере значение будет изменяться только каждые 25 тиков - см. Комментарии для более подробной информации:
to go
ask turtles [
; Turtles may die
if random-float 1 < 0.25 [
die
]
; Throw in some density-dependence to control population size
if random-float 1 < ( 0.5 * ( 1 - ( count turtles / 500 ) ) ) [
hatch random 2 + 1
]
]
; If the ticks are not 0, and if the remainder after dividing
; the ticks by 0 is 0, update the most-recent-pop-check
; variable to reflect the current turtle population.
if ticks != 0 and ticks mod 25 = 0 [
set most-recent-pop-check count turtles
]
tick
end
Конечно, в вашем случае вместо того, чтобы обновление происходило в зависимости от количества тиков, просто пусть оно происходит каждый раз, когда вы запускаете фрагмент кода, который вам нужен.
@AmandaV - К сожалению, если вы не увидите больше кода вашей модели, ничего не придет в голову. Возможно, проблема с расписанием, когда вы звоните в tick
? Не уверен, но не стесняйтесь обновить свой вопрос с помощью игрушечной версии вашей модели, которая воспроизводит проблему, которую вы описываете, - просто чтобы убедиться, показывает ли опубликованный мной пример кода ожидаемое поведение?
Да, ваш код обновляет размер популяции каждые 25 тиков, сделайте то, что ожидалось. Я опубликую аналогичный вопрос с игрушечной версией моей модели, и, возможно, это поможет разобраться в проблеме. Спасибо за вашу помощь!
У меня небольшие проблемы с тем, чтобы эта логика работала на меня. Для простоты предположим, что я просто хочу подсчитать количество оленей в исходных патчах после того, как код, который я написал выше, был выполнен. Я попытался создать глобальную переменную под названием «fawnsource-after-gather» и поместил эту строку кода: «set fawnsource-after-gather count fawns-on source patch» после «die» в приведенном выше коде. Но монитор с «подсчетом пятен-исходников» дает те же числа, что и другой монитор с «fawnsource-after-gather». Любые идеи о том, что мне не хватает?