我正在尝试将我的代理从我的道路网络的一个顶点移动到另一个代码,其中包含以下代码。但是,我收到了一个错误,说 MOVE-TO预期输入是代理,但却得到了NOBODY。
如果新位置已经定义了此代码作为 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
答案 0 :(得分:3)
这是一个完整的最低工作示例,用于复制代码并添加使其运行所需的设置和品种信息。
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]
。错误是说它无法在链接邻居集中找到任何代理。
如果节点仅用于标记道路,则只需删除任何未标记道路的节点。如果还有其他节点,那么您需要将您的公民限制为道路航点的节点。