我有一个包含道路网络的景观,如下图所示。
我想计算连接它们之间每个颜色多边形(例如黑色多边形)的平均道路数量(或图中的白线)。 在网络中,链路对应于道路,节点对应于彩色多边形,并且我认为计算彩色多边形之间的平均道路数意味着计算网络的平均节点度。例如,在图中,两个黑色多边形由两条道路连接。那么,黑色多边形的程度是2.是否可以使用Netlogo的扩展名来计算节点度?
提前感谢您的帮助。
答案 0 :(得分:1)
普通NetLogo包含link
个代理,即使没有扩展名也可以链接海龟。计算程度通常只是做[ count my-links ] of node
的问题,其中node
是你想知道程度的海龟。但是,在NetLogo中,海龟不能通过多个链接进行连接。解决此问题的典型解决方法是创建links-own
变量(就像turtles-own
或patches-own
变量一样)。此变量通常称为weight
,但您可以随意调用它。在这种情况下,您可以[ sum [ weight ] of my-links ] of node
来计算学位。
这就是假设你有一个你的道路的网络表示,它听起来并不像你那样。此外,我不确定您尝试表示的是网络,因为(如图所示)道路在交叉路口处分支。因此,可以通过单个(对于"单一")道路连接两个以上的多边形。这通常称为超网络或hypergraph。然而,这可能是一个比你想要的更重的重量概念。
现在,我并不完全确定你真正想要计算的是什么。是吗:
假设每条道路宽度为1像素,连接到多边形的道路数量将非常容易计算。你可以这么做:
count (patch-set [ neighbors4 with [ is-road? ] ] of polygon)
其中polygon
是一个包含多边形补丁的补丁集,is-road?
是一个报告者,为道路补丁返回true
,为非道路补丁返回false
(这可能是pcolor = white
)。请注意,如果道路宽于1个补丁,或者同一条道路可以触及其他位置的多边形,则会中断。如果是这样的话,请告诉我,我会将其扩展为可以考虑的内容。
直接连接到多边形的多边形数量更难。基本的想法是沿着道路走,直到你击中其他多边形并计算你击中的数字。这个代码有些棘手。我认为最好的方法是使用两个补丁集frontier
和explored
以及找到的多边形列表。 frontier
应初始化为每个道路补丁触摸多边形。每次迭代,让多边形接触frontier
并将它们添加到找到的多边形列表中(如果它们尚未存在)。将frontier
添加到explored
。获取所有不在frontier
中的explored
的道路补丁。将frontier
设置为这组新补丁。继续前进,直到frontier
为空。这是breadth-first search的版本。可能有更好的方法来做到这一点。