根据当前节点使海龟移动到另一个节点
Make turtles move to another node depending on their current node
我有一个由链接连接的节点网络。智能体在该网络中随机移动,即它们向前和向后移动的概率相等。这是我将海龟移动到附近随机节点的代码:
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 在右边。我想要类似“如果乌龟在节点 2 上,移动到节点 3,p=x,节点 4,p=y,或节点 5,p=z。
我可以通过访问 wlocation
和 prevlocation
的 who
变量来做到这一点吗?
我想你想要这样的东西。目前还不清楚你想如何选择下一个位置的概率值,所以我做了一些有利于标题 'up' 的事情。为了清楚地表明节点和步行者是不同类型的海龟,我添加了明确的 breed
语句,我假设您的代码中有这些语句。这未经测试或语法检查。
诀窍是在将 prevlocation 的值更改为当前位置之前计算出接下来可能去的地方。然后你可以将它从潜在的下一个地方的代理集中排除。
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
我有一个由链接连接的节点网络。智能体在该网络中随机移动,即它们向前和向后移动的概率相等。这是我将海龟移动到附近随机节点的代码:
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 在右边。我想要类似“如果乌龟在节点 2 上,移动到节点 3,p=x,节点 4,p=y,或节点 5,p=z。
我可以通过访问 wlocation
和 prevlocation
的 who
变量来做到这一点吗?
我想你想要这样的东西。目前还不清楚你想如何选择下一个位置的概率值,所以我做了一些有利于标题 'up' 的事情。为了清楚地表明节点和步行者是不同类型的海龟,我添加了明确的 breed
语句,我假设您的代码中有这些语句。这未经测试或语法检查。
诀窍是在将 prevlocation 的值更改为当前位置之前计算出接下来可能去的地方。然后你可以将它从潜在的下一个地方的代理集中排除。
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