#netlogo #agent-based-modeling
#netlogo #моделирование на основе агентов
Вопрос:
надеюсь, вы сможете мне помочь! У меня есть вопрос NetLogo о следующем коде:
breed [tourists tourist]
turtles-own [satisfaction]
to setup
clear-all
reset-ticks
end
to go
tick
ask n-of initial-number-tourists patches
[
sprout 1 [
set color white
set size 1
]
]
ask turtles
[ let nearest min-one-of turtles [distance myself]
if-else distance nearest < 0.0000001 [ set satisfaction 0 ]
[ set satisfaction 1 ]
]
ask turtles with [satisfaction = 0] [die]
end
Намерение состоит в том, чтобы прорастать «начальное число туристов» в начале каждого тика. Затем они вычисляют свое «удовлетворение» на основе, если черепахи закрываются, и позволяют черепахам, у которых удовлетворенность равна 0, умереть. Затем оставшиеся черепахи (которые удовлетворены) будут снова выведены, и их удовлетворение будет вычислено снова.
Однако код работает с неожиданными результатами. Происходит то, что все черепахи прорастают, и все они умирают каждый тик. Следующий тик; они снова прорастают, и все снова умирают. Даже если я установлю пороговое значение расстояния действительно низким, как я сделал в предоставленном мной коде.
Надеюсь, вы сможете мне помочь!! С уважением
Ответ №1:
Проблема, с которой вы сталкиваетесь, заключается в том, что ближайшая черепаха к каждой черепахе — это она сама! Таким образом, расстояние до nearest
всегда равно нулю, и удовлетворение будет установлено равным нулю для каждой черепахи. То, что вы хотите, является самым близким среди other
черепах,
let nearest min-one-of other turtles [distance myself]
(Ваш порог расстояния будет означать, что все черепахи будут иметь satisfaction
значение 1, но я предполагаю, что это то, чего вы хотели достичь в своем тестировании. Поскольку черепахи прорастают в центрах исправлений, пороговое значение < 1.0
будет выполнять то же самое.)
Второстепенный момент: соглашение заключается в том, чтобы помещать tick
в конец, а не в начало go
процедуры.
Комментарии:
1. Большое вам спасибо! Это имеет большой смысл, и теперь это работает лучше! Единственное, что я хотел бы прорастить черепах, которые были «удовлетворены» в предыдущем тике, в следующем тике. То, как я делаю это сейчас, удовлетворенные черепахи добавляются к первоначальному числу черепах. Я хотел бы заменить начальное число только удовлетворенными черепахами. Должен ли я делать это в том же тике?
2. Позвольте мне посмотреть, понимаю ли я, чего вы хотите. Допустим, вы начинаете с 20 черепах в первом тике, и 8 удовлетворены. затем 12 умрет. На следующем тике вы хотите, чтобы те же 8 удовлетворенных черепах были в тех же местах и 12 новых (изначально неудовлетворенных, поскольку удовлетворение инициализируется нулем)? Или вы хотите, чтобы только 8 черепах были в тех же местах и все еще были удовлетворены, или 8 черепах в новых местах, или …?
3. Спасибо за ваш комментарий! Да, я хочу, чтобы 8 новых черепах (те, которые были удовлетворены) выросли в новом месте в следующем тике. Чтобы было более понятно: модель о туристах на пляже. Предполагается, что те, которые были удовлетворены в день 1 (галочка 1), вернутся на день 2 (галочка 2), но затем в другом месте. Затем их удовлетворение вычисляется снова, таким же образом. Возможно ли это?
4. Привет, Чарльз, мне было интересно, видел ли ты мой последний комментарий! Я все еще сталкиваюсь с проблемой с моим кодом: проблема в том, что турист не уходит в конце тика. Я знаю, что это потому, что я снова их прорастаю, но я не знаю, как сделать это по-другому.. Я думаю, что это действительно легко решить, но не могу найти правильное решение
5. Если туристы должны сохранить свою личность и любые переменные, связанные с ними, не могли бы вы просто переместить их в новое (случайное) место в начале следующего тика (дня), а затем привлечь новых туристов и на этот день? Предполагая, что вы не хотите, чтобы на участке было больше одного туриста, вы можете попросить только участки без черепахи, чтобы на них появился первый посетитель.