2014-10-06 2 views
3

Я хотел бы получить сумму конкретных весов только в патчах с черепахами, присутствующими в соответствующем районе Мур. Мой подход заключается в разработке суммы продуктов между списком веса и списком двоичных переменных. Я создал список весов в окрестностях для каждого патчаNetLogo- случайность в списке для идентификации черепах в соседстве

Let weight_list [ 1 2 3 4 5 6 7 8]; weights of the moore neighborhood for specific patch 

Затем я создал список с двоичным переменным (1, если черепаха присутствует в соседнем пластыре, 0 в противном случае),

ask patches with [ any? turtles-here ] [let turtle_present 1 ] 
ask patches with [ not any? turtles-here] [let turtle_present 0 ] 
ask patches[ set binary_list [ turtle_present ] of neighbors ] 

Я попытался размножить этот binary_list с их соответствующими весами и получить сумму, например sum (binary_list * weight_list)

Моя проблема в том, что binary_list сортируется в случайном порядке. Например. если у меня есть 2 черепахи по соседству, список может показать [01100000] или [01000100]. Эта случайность не позволяет мне умножаться с их соответствующими весами. Это может быть глупый вопрос, но я относительно новый пользователь NetLogo. Буду признателен за любую помощь, спасибо

+0

Какой вес должен соответствовать соседству? –

+0

Каждое весовое число соответствует основным направлениям зоны борева [1 = NW, 2 = W, 3 = SW, 4 = S, 5 = SE, 6 = E, 7 = NE и 8 = N], например, если I есть черепаха на севере и юге от конкретного патча, я хотел бы получить как выход [8 + 4] = 12 –

ответ

1

Определенно не глупый вопрос. Работа со отсортированными списками агентов обычно требует немного обходного пути, и это не всегда особенно интуитивно.

Если вы сортируете патчи, они выйдут отсортированы в верхнем левом углу, заполняя строки слева направо. Поэтому учтите это для вашего weight-list. Поскольку мы не можем запрашивать списки, чтобы делать такие вещи, как мы можем с помощью агентов, нам нужно будет перебирать список с помощью map, прося каждый патч сообщать о своих соседях.

Есть куча разных способов сделать это, но мое предложение было бы написать репортер вдоль линий этого:

to-report neighbor-list 
    report map [[ifelse-value any? turtles-here [1][0]] of ?] 
      sort neighbors 
end 

В этот момент вы можете просто задать патч (или черепаху , так как они имеют прямой доступ к «своим переменным патча» для своего списка-соседей, и он отправит вам список из 1 и 0 в последовательном порядке.

+0

Спасибо Артур за ваш ответ, но я не вижу, как это может мне помочь. Используя ваш код, я получил список [11111111] для патчей с черепахами и список нулей для патчей без черепах. Он не сообщает патчи соседей с черепахами в последовательном порядке. –

+0

См. Обновленный код с добавленным '[...] из?' –

+0

Извините, '' '' себя'''' должен был быть '' '' self''''. Однако отредактированный код Seth с '' 'map''' является гораздо более чистым решением. Спасибо @SethTisue! –

Смежные вопросы