我创建了一个镜像来反映道路网络的图形(即G =(V,E))。这包括许多结点,末端和中间节点(V)。终端节点有1个链路(E),中间节点2和2个以上的节点。
我要做的是确定图形的各个部分,这些部分形成终端结或结点节点之间的连接。我正在考虑使用nw:in-radius-in-radius来做到这一点,但这需要指定一个固定的搜索范围。我想知道有没有人
一旦我确定了这些部分,我就会将位于它们周围的海龟存放在一个清单中以供日后使用。
答案 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。这给了我每个组件中存在的海龟列表。然后,我遍历此列表并为每个龟集提供唯一标识符。我现在有一个节点列表,知道它与谁链接。