【问题标题】:Make turtles move to another node depending on their current node让海龟根据当前节点移动到另一个节点
【发布时间】:2018-08-29 06:16:17
【问题描述】:

我有一个由链接连接的节点网络。代理在这个网络中随机移动,即他们有相同的概率来回前进。这是我将海龟移动到附近随机节点的代码:

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 上,则使用 p=x 移动到节点 3,使用 p=y 移动到节点 4,或者使用 p=z 移动到节点 5。

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

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    我想你想要这样的东西。不清楚你想如何选择概率值来选择下一个位置,所以我做了一些有利于“向上”的事情。为了清楚地表明节点和步行者是不同类型的海龟,我添加了明确的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
    

    【讨论】:

    • let targets [link-neighbors] of wlocation with [self != prevlocation] 行,我收到一个错误WITH expected input to be an agentset but got the turtle (node 6) instead。我将设置每个节点的概率,例如在某些节点上,向左走的概率可能比向右走或直走的概率高。一开始概率是相等的。
    • 我现在收到NODES breed does not own variable PREVLOCATION
    最近更新 更多