Я работаю над моделью землепользования, включающей лесной мир, где черепахи (мелкие фермеры и компании) могут превращать лес в пахотные земли. Я хотел бы представить функцию, которая позволяет черепахам «владеть» патчами, которые они конвертируют, и иметь возможность вернуться к ним позже, чтобы сертифицировать эти патчи. Основная проблема заключается в том, что, когда черепахи перемещаются на участки с сельскохозяйственными угодьями, чтобы получить их сертификацию, они не только перемещаются к тем, которые «принадлежат» им, но и перепрыгивают через весь мир на участки с другими землями черепах и сертифицируют их. Я пробовал несколько разных обходных путей, но, похоже, со временем столкнулся с теми же двумя проблемами:
# 1 - ошибка: невозможно использовать who в контексте патча
Я хотел использовать переменную 'who', чтобы пометить участки земли как принадлежащие черепахе, которая преобразовала участок, например, черепаха 0 отправляется в лес, превращает ее в землю, и этот участок земли должен быть «принадлежат» черепахе 0, т. е. переменная, принадлежащая участкам, должна быть эквивалентна «кто» черепахи. Проблема здесь в том, что «кто» является собственной переменной черепах. Поэтому, когда я использую его в контексте патча, он выдает ошибку. Например, ask smallholders [move-to one-of patches with [[owner = who]]
-> ошибка.
# 2 - не удается установить глобальную переменную = 'who'
Два, я пытался Обойти это можно с помощью прокси-переменной: глобальная переменная с именем 'owner-ID'. Я бы использовал set owner-ID who
, чтобы впечатать индивидуальный номер черепахи в идентификатор владельца. Похоже, это работает до некоторой степени, а именно, что переменная 'владельца' патчей соответствует черепахе, которая конвертировала патч. Он также работает при подсчете количества патчей сертифицированных и обычных черепах на полях (см. Команду set-land-ownership
ниже). Тем не менее, когда запускаются команды smallholders-certify-crop-land
, черепахи не придерживаются патчей, которыми они владеют, а «прыгают» по всему миру. При запросе черепах через командный центр ask turtles [print owner-ID]
все они возвращают одно и то же значение идентификатора владельца. Я чувствую, что в моей командной строке перехода может быть ошибка, но я просто не могу ее найти.
Сводка и вопрос Я хочу, чтобы патчи для сельскохозяйственных земель принадлежали «черепахи, которые преобразовали их и хотят, чтобы черепахи перемещались только к участкам, которыми они« владеют »при сертификации участков на полях, а не к участкам, которые им не принадлежат. Я предполагаю, что мои вопросы вращаются вокруг того, возможно ли каким-либо образом использовать переменную who в патч-контексте. И, если нет, то каким может быть хороший обходной путь для этой проблемы.
Соответствующий код приведен ниже (я надеюсь)!
Большое спасибо и надеюсь, что все в безопасности! Мариус
globals [owner-ID]
turtles-own [conventional-land-ownership certified-land-ownership]
patches-own [owned-by owner certified?]
to setup [
ask patches [
set pcolor green ;; green = forest
set certified? "no"
set owner "nobody"
]
]
to go
ask turtles [set-land-ownership]
ask smallholders [check-smallholder-status]
tick
end
to set-land-ownership
ask smallholders [
set owner-ID who
set conventional-land-ownership count patches with [owner = owner-ID and certified? = "no"]
set certified-land-ownership count patches with [owner = owner-ID and certified? = "yes"]
]
end
to check-smallholder-status
if wealth >= 0 and (conventional-land-ownership + certified-land-ownership) < SH_max-land-ownership [
smallholders-choose-activity
]
if wealth < 0 [
set color red
set shape "cow skull"
]
if (conventional-land-ownership + certified-land-ownership) >= SH_max-land-ownership [
set color orange + 2
]
end
;; smallholders-choose-activities is a reporter-based command where turtles choose the most economical option available. One of the outcomes is: smallholders-certify-crop-land
to smallholders-certify-crop-land
let available-patch max-one-of patches with [owner = owner-ID and certified? = "no"] [count neighbors with [certified? = "yes"]]
ifelse not any? turtles-on available-patch [
move-to available-patch
]
[]
set wealth wealth - smallholder-certification-cost
set pcolor brown + 1
set certified? "yes"
end