根据当前节点使海龟移动到另一个节点

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。

我可以通过访问 wlocationprevlocationwho 变量来做到这一点吗?

我想你想要这样的东西。目前还不清楚你想如何选择下一个位置的概率值,所以我做了一些有利于标题 '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