Модификация моего последнего ответа вам:
to setup
ca
ask patches with [pxcor > 0 ] [
set pcolor white
]
crt 1
end
to go
ask turtles [
let blacklist patches with [ pcolor = black ]
let northpatches patches with [ pycor > 0 ]
let northred ( northpatches with [ member? self blacklist = false ] )
ask northred [ set pcolor red ]
let border northred with [ any? neighbors4 with [ pcolor != red ] ]
ask border [
set pcolor blue
]
print count border
]
end
Вы можете обозначить участки границы / периметра как любые участки территории с соседями, которые не территории. Для вас это может выглядеть примерно так:
ask turtles [
print count territory with [ any? neighbors4 with [owner != myself ]
]
]
Опять же, я не могу протестировать его без вашей настройки, поэтому вам придется изменить.
Изменено ниже
Чтобы подсчитать края участков, которые находятся на границе, вы можете попросить их подсчитать свои neighbors4
, принадлежащие другой черепахе. Затем они могут добавить их к длине периметра черепахи. Например:
to assess-perimeter ;;; must be called by a turtle
print ("Assessing perimeter")
let current-turtle who
let temp-per-len 0
let border-patches patches with [ owner = current-turtle and any? neighbors4 with [ owner != current-turtle ] ]
show (word "I have " count border-patches " border patches")
ask border-patches [
;; One way to get each border patch to check each of its neighbors
let nobodies 4 - count neighbors4 ;; if any patches are on the edge of the world, returns the number of those edges
let non-territory-edges count neighbors4 with [ owner != current-turtle ]
let border-edges nobodies + non-territory-edges
set temp-per-len temp-per-len + border-edges
]
show (word "My perimeter length: " temp-per-len )
set perimeter-length temp-per-len
end
Если это называется после того, как все черепахи выбрали весь свой домашний ареал, идея состоит в том, что каждая черепаха оценивает границу своего домашнего ареала. Затем каждый из этих участков границы подсчитывает свои neighbors4
, у которых есть другой владелец. Я использовал «temp-per-len» как суммирующую переменную внутри цикла, которая затем используется для установки turtles-own
«длины периметра». Полный код модели, включая настройки и определения, можно найти здесь. Обратите внимание: вам придется загрузить или скопировать код, модель слишком громоздкая, чтобы хорошо работать в формате HTML.
Кроме того, я на самом деле не считал, чтобы убедиться, что это работает идеально - я сделал быструю версию и скрестил пальцы, но я думаю, что идея имеет смысл и, надеюсь, поможет вам начать.
person
Luke C
schedule
28.03.2017