2015-03-31 73 views
2

我有一個txt文件,其中存儲了所需圖形的有向鏈接。第一和第二列指的是節點的ID:「1 122」意味着存在一個鏈路betweed節點1和節點122NetLogo:如何導入2列相鄰列表來創建圖形?

1 122 
1 2 
2 1 
2 1000 
... 

我的問題:

一個)是否有可能導入一個像這樣的txt文件到NetLogo並用它創建一個圖表?

b)該文件已獲得超過100,000行。這會導致問題嗎?

謝謝!

回答

2

這其實很簡單!

turtles-own [ node-id ] 

to import-graph [ filename ] 
    file-open filename 
    while [ not file-at-end? ] [ 
    let source get-or-create-node file-read 
    let target get-or-create-node file-read 
    ask source [ create-link-to target ] 
    ] 
end 

to-report get-or-create-node [ id ] 
    let nodes turtles with [ node-id = id ] 
    if not any? nodes [ 
    crt 1 [ set node-id id set nodes turtle-set self ] 
    ] 
    report one-of nodes 
end 

file-read做的實際上是從文件中讀取數字的工作。

這種方法的一個缺點是它必須搜索所有的海龜才能找到具有特定ID的海龜。加載具有大量節點的圖時,這可能會很慢。在這些情況下,您可以使用table擴展名來維護一個表映射節點id到海龜。

請注意,對於圖形和網絡文件的幾種常見格式,可以使用network擴展名導入文件。 NetLogo的下一個版本將支持更多的文件類型(儘管不是你在這裏的版本)。

至於100,000:這相當大,不是因爲文件的大小,而是因爲如果每行只有一個,那麼在您的模型中就有100,000個鏈接。移動海龜可能會很慢,但是查詢網絡(例如通過網絡擴展)應該還是相當快的。