Переместить агентов в узлах

Я пытаюсь переместить своих агентов из одной вершины моей дорожной сети в другую со следующим кодом. Однако я получил сообщение об ошибке: MOVE-TO ожидал, что ввод будет агентом, но вместо этого получил НИКТО.

Если новое местоположение уже определено, какой этот код является частью набора агентов slocation, в чем проблема?

to go
ask citizens [start-movement]
move
end

to start-movement
let nearest-node min-one-of nodes [distance myself]
set slocation nearest-node
move-to slocation
end

    to move
    ask citizens 
    [let new-location one-of [link-neighbors] of slocation
    move-to new-location
    set slocation new-location]
    end

person Sss    schedule 04.04.2018    source источник
comment
Пожалуйста, подтвердите, что узлы — это порода черепах, и что slocation указан в операторе nodes-own. Возможно ли, что в выбранном месте на самом деле нет link-neighbors? Возможно count nodes with [not any?] link-neighbors чтобы убедиться.   -  person JenB    schedule 04.04.2018
comment
Я создал ноды породы, но для перемещающихся граждан это собственное местоположение, иначе я получил бы ошибку.   -  person Sss    schedule 04.04.2018
comment
Ошибка, которую я получил при создании узлов породы и собственного местоположения граждан, ОТНОСИТСЯ к ожидаемому вводу агента или набора агентов, но вместо этого получил число 0.   -  person Sss    schedule 04.04.2018
comment
Ладно, а граждане тоже порода черепах? И citizens-own включает местоположение?   -  person JenB    schedule 04.04.2018


Ответы (1)


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

breed [ citizens citizen ]
citizens-own [slocation]
breed [ nodes node ]

to setup
  clear-all
  create-nodes 20 [ set color blue setxy random-xcor random-ycor ]
  ask nodes [ create-links-with n-of 2 other nodes ]
  create-citizens 1 [ set size 3 set color red ]
end

to go
  ask citizens [start-movement]
  move
end

to start-movement
  let nearest-node min-one-of nodes [distance myself]
  set slocation nearest-node
  move-to slocation
end

to move
  ask citizens 
  [ let new-location one-of [link-neighbors] of slocation
    move-to new-location
    set slocation new-location
  ]
end

Это прекрасно работает. Как я предположил в своем комментарии, наиболее вероятная проблема заключается в том, что один из ваших граждан начал работу с узла без каких-либо соседей по ссылке. Способ проверить это show count nodes with [not any? link-neighbors]. Ошибка говорит о том, что не удалось найти агентов в наборе соседей по ссылке.

Если узлы нужны только для обозначения дорог, просто удалите те, которые не обозначают дороги. Если есть и другие узлы, то вам нужно ограничить ваших граждан узлами, которые являются дорожными путевыми точками.

person JenB    schedule 04.04.2018