具有不同概率的Netlogo随机抽样

Cyr*_*rus 3 random netlogo

NetLogo中有没有办法将数组中每个项目的概率值关联起来并随机选择n项?像下面这样的功能.

let names ["pooh", "rabbit", "piglet", "Christopher"]
let probs [0.5, 0.1, 0.1, 0.3]
n-random-select 5 names probs

>>["pooh", "pooh", "pooh", "Christopher", "piglet"]
Run Code Online (Sandbox Code Playgroud)

在Python中numpy.random.choice完全是这样做的.

Bry*_*ead 5

这正是内置rnd扩展程序的用途:https://ccl.northwestern.edu/netlogo/docs/rnd.html

rnd:weighted-n-of-list-with-repeats是你想要的原始.它有点灵活numpy.random.choice,但也有点麻烦.你会这样写n-random-select:

to-report n-random-select [ n xs weights ]
  report map first rnd:weighted-n-of-list-with-repeats n (map list xs weights) last
end
Run Code Online (Sandbox Code Playgroud)

并使用它(请记住,netlogo列表中没有逗号):

observer> show n-random-select 5 ["pooh" "rabbit" "piglet" "Christopher"] [0.5 0.1 0.1 0.3]
observer: ["pooh" "pooh" "pooh" "Christopher" "Christopher"]
observer> show n-random-select 5 ["pooh" "rabbit" "piglet" "Christopher"] [0.5 0.1 0.1 0.3]
observer: ["pooh" "Christopher" "Christopher" "Christopher" "Christopher"]
observer> show n-random-select 5 ["pooh" "rabbit" "piglet" "Christopher"] [0.5 0.1 0.1 0.3]
observer: ["rabbit" "rabbit" "rabbit" "piglet" "Christopher"]
Run Code Online (Sandbox Code Playgroud)