Probabilistic choice: Difference between revisions

Updated to work with Nim 1.4. Heavy restructuring.
(Updated to work with Nim 1.4. Heavy restructuring.)
Line 1,982:
 
=={{header|Nim}}==
<lang nim>import tables, mathrandom, strutilsstrformat, times
 
const
num_trials = 1000000
precsn = 6
 
var start = cpuTime()
 
const
var probs = initTable[string,float](16)
NumTrials = 1_000_000
probs.add("aleph", 1/5.0)
Probabilities = {"aleph": 1 / 5, "beth": 1 / 6, "gimel": 1 / 7, "daleth": 1 / 8,
probs.add("beth", 1/6.0)
"he": 1 / 9, "waw": 1 / 10, "zayin": 1 / 11, "heth": 1759 / 27720}.toTable
probs.add("gimel", 1/7.0)
 
probs.add("daleth", 1/8.0)
var samples: = initTableCountTable[string,int](16)
probs.add("he", 1/9.0)
probs.add("waw", 1/10.0)
probs.add("zayin", 1/11.0)
probs.add("heth", 1759/27720)
var samples = initTable[string,int](16)
for i, j in pairs(probs):
samples.add(i,0)
 
randomize()
for i in 1 .. num_trials:
var z = random(1.0)
for j,k in pairs(probs):
if z < probs[j]:
samples[j] = samples[j] + 1
break
else:
z = z - probs[j]
 
for i in 1 .. num_trialsNumTrials:
var s1, s2: float
var z = randomrand(1.0)
for item, prob in Probabilities.pairs:
if z < probs[j]prob:
samples.addinc(i,0item)
break
else:
precsn z -= 6prob
 
var s1, s2: float= 0.0
 
echo " Item Target Results Differences"
echo( "====== ","\t","======== ","\t","======== ","\t"," ===========")
for item, prob in Probabilities.pairs:
let r = samples[item] / NumTrials
s1 += r * 100
s2 += probs[i]prob * 100.0
echo &"{item:<6} {prob:.6f} {r:.6f} {100 * (1 - r / prob):9.6f} %"
echo( "======","\t"," ======== ","\t"," ======== ")
echo &"Total: {s2:^8.2f} {s1:^8.2f}"
echo( &"\n",formatFloat(nExecution time: {cpuTime()-start,ffDecimal,2),":.2f} secss")</lang>
 
echo("Item ","\t","Target ","\t","Results ","\t","Difference")
echo("==== ","\t","====== ","\t","======= ","\t","==========")
for i, j in pairs(probs):
s1 += samples[i]/num_trials*100.0
s2 += probs[i]*100.0
echo( i,
"\t", formatFloat(probs[i],ffDecimal,precsn),
"\t", formatFloat(samples[i]/num_trials,ffDecimal,precsn),
"\t", formatFloat(100.0*(1.0-(samples[i]/num_trials)/probs[i]),ffDecimal,precsn),"%")
echo("======","\t","======= ","\t","======== ")
echo("Total:","\t",formatFloat(s2,ffDecimal,2)," \t",formatFloat(s1,ffDecimal,2))
echo("\n",formatFloat(cpuTime()-start,ffDecimal,2)," secs")</lang>
{{out}}
<pre> Item Target Results Difference Differences
====== ======== ======== ===========
he 0.111111 0.110760 111485 -0.316000336500 %
heth 0.063456 0.063777 063758 -0.505881475939 %
zayin 0.090909 0.090923 -090811 0.015300107900 %
beth 0.166667 0.166386 0.168400%
aleph 0.200000 0.200039 -199603 0.019500198500 %
gimel 0.142857 0.142691 142702 0.116300108600 %
zayin 0.090909 0.090923 -0.015300%
daleth 0.125000 0.124911 124831 0.071200135200 %
waw 0.100000 0.100513 -0.513000%
beth 0.166667 0.166386 167160 -0.168400296000 %
gimel 0.142857 0.142691 0.116300%
waw 0.100000 0.099650 0.350000 %
daleth 0.125000 0.124911 0.071200%
====== ======== ========
Total: 100.00 100.00
 
7Execution time: 0.0605 secss</pre>
 
=={{header|OCaml}}==
Anonymous user