2014-11-14 91 views
1

我有一个景观,包括一个道路网络,如下图所示。节点在网络中的程度

enter image description here

我想计算链接每种颜色的多边形(例如,黑色多边形)它们之间的道路(或图中的白线)的平均数目。 在网络中,链接对应一条路,一个节点对应一个彩色多边形,我认为计算彩色多边形之间的平均道路数意味着计算网络的平均节点度。例如,在图中,两个黑色多边形通过两条道路相连。因此,黑色多边形的度数为2.是否可以使用Netlogo的扩展Network来计算节点度数?

在此先感谢您的帮助。

回答

0

正常NetLogo包含link即使没有扩展名链接海龟的代理。计算度通常只是做一个事情[ count my-links ] of node其中node是你想知道的龟的程度。但是,在NetLogo中,海龟不能通过多个链接连接。典型的解决方法是创建一个links-own变量(就像turtles-ownpatches-own变量)。这个变量通常被称为weight,但是你可以随心所欲地调用它。在这种情况下,你会做[ sum [ weight ] of my-links ] of node来计算程度。

这是假设你有一个网络表示你的道路,它听起来不像你。此外,我不确定你试图代表的是网络,因为(如图所示)道路在交叉路口分叉。因此,两个以上的多边形可以由一个单独的(用于“单个”道路的定义)连接。这通常称为超网络或hypergraph。然而,这可能是一个比你想要的更重的概念。

现在,我不完全确定你真的想要计算什么。它是:

  • ...连接到多边形的道路数量?下面的多边形有4条连接到它的道路,上面有3条(可见)。
  • ...直接连接到多边形的多边形的数量?两个多边形都连接到另一个(可见)多边形,但我认为在更大的图片中还有更多。

假设每条道路都是1个像素宽,连接到一个多边形的道路数量将非常容易计算。你可能只是这样做:

count (patch-set [ neighbors4 with [ is-road? ] ] of polygon) 

其中polygon是包含多边形和is-road?的补丁补丁集是一个记者,对于非道路补丁返回true道路补丁和false(这可能是一些pcolor = white)。请注意,如果道路宽度超过1个修补程序,或者如果同一条道路可以在其他地方触及多边形,则会发生这种情况。让我知道如果是这种情况,我会将其扩展到可以考虑的事情。

直接连接到多边形的多边形数量更加困难。最基本的想法是跟踪道路,直到你击中其他多边形并计算你击中的数量。代码这有点棘手。我认为最好的办法是有两个补丁集,frontierexplored以及找到的多边形列表。frontier应该初始化为每个道路补丁触及多边形。每次迭代,获取多边形触摸frontier并将它们添加到找到的多边形列表中(如果它们尚未存在)。将frontier添加到explored。获取所有道路修补程序,触及frontier,这些修补程序不在explored中。将frontier设置为这组新的修补程序。继续前进,直到frontier为空。这是breadth-first search的一个版本。可能有更好的方法来做到这一点。

+0

非常感谢Bryan的回答。 'count(多边形的patch-set [neighbours4 with [is-road?]])可以工作,但它会计算与多边形补丁相邻的所有白色补丁。在上图中,它是正确的,但是,例如,如果白线(即一条道路)走过下方黑色多边形的长度,则白色块的数量大于4.但是,下方多边形必须只有4条道路连接到它。我的想法是添加一个条件:已发现的所有白色补丁的坐标x,y必须不同。但我不知道这是否正确?谢谢你的帮助。 – Pierre 2014-11-19 22:13:19