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

时间:2018-08-29 06:16:17

标签: netlogo

我有一个通过链接连接的节点网络。座席在该网络中随机移动,即他们具有相同的后退和前进可能性。这是将海龟移动到附近随机节点的代码:

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。

我可以通过访问whowlocation的{​​{1}}变量来做到这一点吗?

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