Probabilistic choice
define TRIALS = 1e4
func prob_choice_picker(options) {
var n = 0
var a = []
options.each { |k,v|
n += v
a << [n, k]
}
func {
var r = 1.rand
a.first{|e| r <= e[0] }[1]
}
}
var ps = Hash(
aleph => 1/5,
beth => 1/6,
gimel => 1/7,
daleth => 1/8,
he => 1/9,
waw => 1/10,
zayin => 1/11
)
ps{:heth} = (1 - ps.values.sum)
var picker = prob_choice_picker(ps)
var results = Hash()
TRIALS.times {
results{picker()} := 0 ++
}
say "Event Occurred Expected Difference"
for k,v in (results.sort_by {|k| results{k} }.reverse) {
printf("%-6s %f %f %f\n",
k, v/TRIALS, ps{k},
abs(v/TRIALS - ps{k})
)
}Output:
Last updated
Was this helpful?