2014-07-19 60 views
0

我在格上有一些代理。如果我們考慮一個代理$ i $,那麼我將根據代理$ i $的特性爲所有剩餘的代理分配不同的概率。現在我的目標是從指定概率的剩餘代理中選擇一個代理$ j $,並創建從代理$ i $到代理$ j $的鏈接。這我必須爲所有代理人格做。 [每次概率根據不同的代理$ i $而改變] 有人可以幫助如何在netlogo上實現這一點。 謝謝。如何在netlogo中使用隨機代理創建鏈接

回答

1

如果您沒有更多地限制問題,計算會變得昂貴。這裏的基本思想是,假設你有一個assign-probabilities記者:

to form-links ;;turtle proc 
    let %others [self] of other turtles ;;list of other turltes 
    let %p assign-probabilities %others 
    let %idx random-index %p 
    create-link-with item %idx %others 
end 

to-report random-index [#p] ;;input probability dist as list 
    let %draw random-float 1 
    let %cum-p item 0 #p 
    let %ct 0 
    while [%draw > %cum-p] [ 
    set %ct (%ct + 1) 
    set %cum-p (%cum-p + item %ct #p) 
    ] 
    report %ct 
end 

這裏有一些東西,可以幫助使計算成本更低。如果烏龜沒有被創建或者死亡,你可以在安裝過程中只計算一次烏龜(並且設置爲烏龜屬性)。如果概率不隨時間變化,則可以對概率做同樣的處理。在後一種情況下,您可能想要計算累積概率(一次),並使用二分算法生成隨機索引。

+1

另請參閱彩票示例,在NetLogo的模型庫的代碼示例部分。並在https://github.com/NetLogo/Rnd-Extension查看'rnd:weighted-one-of' –