2016-08-05 57 views
1

我正在寫一個只涉及補丁的Netlogo模型。根據概率,我設法創建了由6種不同顏色(每個代表我的項目中不同植被)的貼片組成的景觀。所以紅色斑塊在每個斑塊上出現10%的概率,黃色5%,棕色20%等等。創建補丁集羣而不會改變發生

其中該概率被設置的我的代碼的一個例子:

let i random-float 1 
    ifelse i + random-float 0.1 <= 0.8 ;random 0.1 threshold for environmental noise 
     [ set pcolor green ] 
     [ ifelse i + random-float 0.1 <= 0.9 
     [ set pcolor yellow ] 
     [ set pcolor blue ] ] 

然而,這產生了對於每種顏色的隨機圖案。但我想爲其中的一個創建聚類空間模式。具體而言,在我的景觀中,我希望棕色塊的比例爲50%。但是如果我爲每個補丁設置50%的概率,棕色補丁將隨機分佈。我如何獲得它佔據我景觀的50%,但出現在聚集模式?

我嘗試使用摩爾鄰域創建聚簇模式,但這明顯改變了棕色補丁的比例。

我希望這有點清楚。感謝您提前提供任何幫助。

+0

http://stackoverflow.com/questions/19326781/adding-patch-clusters-in-a-landscape,http://stackoverflow.com/questions/20336364/how-to-create-cluster-它們之間沒有重疊的補丁,http://stackoverflow.com/questions/22121735/to-build-patch-clusters-at-large-spatial-scales,http://stackoverflow.com/問題/ 20997901 /創建一個隨機形狀blob的一個給定區域在netlogo/ –

回答

1

你可以根據你的體重種子,然後在種子周圍生長。這是一種不同的方法:根據您的權重對所有修補程序着色,然後對顏色進行聚類。

extensions [rnd] ;use the rnd extension 
globals [threshold] 

to setup 
    ca 
    set threshold 2 
    let _cw [[red 10] [yellow 20] [blue 70]] ;colors with weights 
    ask patches [set pcolor first rnd:weighted-one-of-list _cw [last ?]] 
    repeat 20 [cluster] ;adjust to taste 
end 

to cluster 
    ask patches [ 
    if unhappy? [ 
     swap-pcolor 
    ] 
    ] 
end 


to swap-pcolor 
    let _c pcolor 
    let _p one-of neighbors with [pcolor != [pcolor] of myself] 
    set pcolor [pcolor] of _p 
    ask _p [set pcolor _c] 
end 

to-report unhappy? 
    let _ct count neighbors with [pcolor = [pcolor] of myself] 
    report (_ct < threshold) 
end 
+0

嗨艾倫!非常感謝!除了嵌套列表部分,我試圖用另一個過程中計算的變量替換權重編號,主要是爲我工作。我讀過我必須使用'list'來創建一個帶有變量的列表?但是我得到的錯誤'預計不變'......你也許知道如何解決這個問題? – lyh198

+0

我到目前爲止試過讓_cw list(list brown x)[blue 0.2]; x是前面程序中設置的變量。 Netlogo允許它,但我不能在觀察者上下文中使用的錯誤表面。 – lyh198

+0

您的列表是正確的,但如果您有兩個以上的子列表,則需要使用括號。 'go'錯誤是別的。這意味着你已經寫好了,以便它直接引用一個補丁(或龜)變量,而不是要求補丁(或烏龜)來訪問它的屬性。 – Alan