我希望这是一个简单的解决方案,但我遇到了困难。
问题:
我想加权一个变量而不是常数发生某事的概率
设置
我的代理人是农场。
农场拥有四个变量,分别代表牛、山羊、猪和绵羊的数量。
当农场想要移除动物时,我希望移除特定物种的成员的可能性与农场中每个物种的数量成正比(即,如果有 7 只山羊、2 头奶牛和 1 头猪,有 70% 的概率会抓到一只山羊,而有 0% 的概率会抓到一只绵羊)
当您知道每个值将具有的确切数字权重时,我找到了这样的公式:
to-report random-weighted [values weights]
let selector (random-float sum weights)
let running-sum 0
(foreach values weights [
set running-sum (running-sum + ?2) ; Random-Weighted Created by NickBenn
if (running-sum > selector) [
report ?1
]
])
end
以及 rnd 扩展中描述的方法。但是当我放入“Cow”而不是常量时,这两个都会抛出“expected a constant”错误。
就像是:
to example1
let values ["Cow" "Sheep" "Goat" "Pig"]
let probabilities [2 0 7 1]
let indices n-values length values [ ? ] ; Made by Nicolas Payette
let index rnd:weighted-one-of indices [ item ? probabilities ]
let loca item index values
end
效果很好,但如果我要替换它:
to example1
let values ["Cow" "Sheep" "Goat" "Pig"]
let probabilities [Num-Cows Num-Sheep Num-Goats Num-Pigs]
let indices n-values length values [ ? ] ; Made by Nicolas Payette
let index rnd:weighted-one-of indices [ item ? probabilities ]
let loca item index values
end
它失败。