在下面的补丁中复制链接品种变量

时间:2018-03-29 21:28:23

标签: netlogo

我有一个节点和链接网络。这个数字

enter image description here

是对世界的捕捉。该图表示城市的街道。我已经导入了一个带有gis扩展名的shapefile。灰线是链接,黑点是节点,红点代表人。人们前往下一个节点。在街角,红点通过检查链接所拥有的变量popularity来选择下一条街道。

links品种有一个变量popularity,我想在下面的补丁中复制其值。

如果我尝试,例如,这样的东西来访问链接下的补丁会产生错误

ask links [show [(list pxcor pycor)] of patch-here]

另一种方法可以是从补丁访问链接变量流行度,但我不知道如何做到这一点。

我想要这个的原因是因为我想在文件中写入流行度值矩阵,并且它在矩阵中的位置应该与世界中链接的位置相对应。因此,链接下面的补丁会给我矩阵形式。我有一个程序,每个补丁都将补丁的值写入文件中。但是,我不知道如何将popularity值从链接传递到它下面的补丁。

有没有办法将链接拥有的变量复制到其补丁中?

此致

1 个答案:

答案 0 :(得分:2)

如果有人有更好的方法(或者可以简化我的代码),请随意。这是一个完整的工作示例。将其复制到一个空的NetLogo模型中并运行它以使其工作。

setup过程只是创建一些带有适当测试值的节点和链接,然后调用transfer-link-values过程,这就是我想要的。然后setup过程将值放入补丁标签中以显示它们并查看结果。

transfer-link-values过程的工作方式是在链接的一端创建一只乌龟,然后乌龟移动到链接的另一端,随着它传递值。当它到达另一端时,乌龟就会死亡。

patches-own [patch-popularity]
links-own [link-popularity]

to setup
  clear-all
  create-turtles 10 [ setxy random-xcor random-ycor]
  while [ any? turtles with [not any? my-links] ]
  [ let to-pair turtles with [not any? my-links]
    let thisNode one-of to-pair
    ask thisNode
    [ create-link-with one-of other to-pair
      [ set link-popularity 5 + random 5 ]
    ]
  ]

  transfer-link-values
  ask patches [ if patch-popularity != 0 [set plabel patch-popularity ] ]
end

to transfer-link-values
  ask links
  [ let start-node one-of both-ends
    let this-link self
    let end-node nobody
    ask start-node [ set end-node [other-end] of this-link ]
    let transfer-value link-popularity
    ask start-node
    [ hatch 1
      [ face end-node
        if transfer-value > patch-popularity
          [ ask patch-here [ set patch-popularity transfer-value ] ]
        while [ not member? end-node turtles-here ]
        [ forward 1
          if transfer-value > patch-popularity
            [ ask patch-here [ set patch-popularity transfer-value ] ]
        ]
        if transfer-value > patch-popularity
            [ ask patch-here [ set patch-popularity transfer-value ] ]
        die
      ]
    ]
  ]
end