我有一个通过链接连接的节点网络。座席在该网络中随机移动,即他们具有相同的后退和前进可能性。这是将海龟移动到附近随机节点的代码:
to start-movement
let nearest-node min-one-of nodes [distance myself]
set wlocation nearest-node
move-to wlocation
end
to move
ask walkers
[
set prevlocation wlocation
if any? [link-neighbors] of wlocation [
let new-location one-of [link-neighbors] of wlocation
move-to new-location
set wlocation new-location
]
]
end
当乌龟移动到某个节点时,我想检查它们的来源,然后有可能将它们移动到另一个节点,该节点不是前一个节点。例如,它们从节点1移到节点2。节点3在右边,节点4在直线上,节点5在右边。我想要类似“如果turtle在节点2上,则以p = x移至节点3,以p = y移至节点4,或以p = z移至节点5。
我可以通过访问who
和wlocation
的{{1}}变量来做到这一点吗?
答案 0 :(得分:3)
我认为您想要这样的东西。目前尚不清楚您如何选择下一个位置的概率值,因此我做了一些有助于“向上”的事情。为了清楚说明节点和步行者是不同类型的海龟,我添加了明确的breed
语句,我认为您在代码中已经包含这些语句。未经测试或未检查语法。
诀窍是在将预置位置的值更改为当前位置之前,找出可能要移至的下一个位置。然后,您可以将其从潜在下一个地点的代理集中排除。
breed [nodes node]
breed [walkers walker]
walkers-own [prevlocation wlocation]
to start-movement ; walker procedure
set wlocation min-one-of nodes [distance myself]
move-to wlocation
end
to move
ask walkers
[ let targets ([link-neighbors] of wlocation) with [self != [prevlocation] of myself]
set prevlocation wlocation
if any? targets
[ set wlocation ifelse-value random-float 1 < 0.3
[ max-one-of targets [y-cor] ]
[ one-of targets ]
move-to wlocation
]
]
end