NW:延伸龟在半径范围内

时间:2015-08-21 23:59:10

标签: netlogo

我创建了一个镜像来反映道路网络的图形(即G =(V,E))。这包括许多结点,末端和中间节点(V)。终端节点有1个链路(E),中间节点2和2个以上的节点。

我要做的是确定图形的各个部分,这些部分形成终端结或结点节点之间的连接。我正在考虑使用nw:in-radius-in-radius来做到这一点,但这需要指定一个固定的搜索范围。我想知道有没有人

  • 知道如何识别其他连接点/终点节点的距离 远离搜索节点,以便我可以在半径中的乌龟函数中指定它?
  • 或者想要更好地识别网络部分?

一旦我确定了这些部分,我就会将位于它们周围的海龟存放在一个清单中以供日后使用。

2 个答案:

答案 0 :(得分:1)

我不认为nw:turtles-in-radius会对你有所帮助。这不是一个简单的问题。我找到了一种相当复杂的方法。也许其他人会想出更简单的东西。

设置就在那里进行测试:

extensions [ nw ]
to setup
  clear-all
  ; generate a simple network for testing
  nw:generate-ring turtles links 5
  ask n-of 2 turtles [
    hatch 1 [
      create-link-with myself
      hatch 1 [ create-link-with myself ]
    ]
  ]
  ask turtles [ set label who ]
  repeat 1000 [ layout-spring turtles links 0.2 5 1 ]
end

其余的是由一群记者组成的,这些记者以相当实用的方式撰写:

to go
  let nodes [ self ] of turtles with [ not is-intermediate? ]
  let sections unique-sections reduce sentence map my-sections nodes
  foreach sections print
end

to-report my-sections [ node ]
  report map [ section-from node ? ] [ sort link-neighbors ] of node
end

to-report section-from [ n1 n2 ]
  report ifelse-value [ is-intermediate? ] of n2 [
    fput n1 section-from n2 
      [ one-of link-neighbors with [ self != n1 ] ] of n2
  ] [
    list n1 n2
  ]
end

to-report is-intermediate?
  report count my-links = 2
end

to-report unique-sections [ all-sections ]
  let sections []
  foreach all-sections [
    if not member? reverse ? sections [
      set sections lput ? sections
    ]
  ]
  report sections
end

如果您不希望它们是独一无二的,您可以将来电置于unique-sections

答案 1 :(得分:0)

首先感谢尼古拉斯。

最后,在看了一下图论之后,我决定使用弱组件簇路由。为了识别集群,我将上下文设置为仅具有两个连接的节点。因此删除联结和终点节点。然后我使用了nw:weak-component-clusters。这给了我每个组件中存在的海龟列表。然后,我遍历此列表并为每个龟集提供唯一标识符。我现在有一个节点列表,知道它与谁链接。