2014-11-14 90 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