Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,34 +0,0 @@
|
|||
with Ada.Numerics.Float_Random; use Ada.Numerics.Float_Random;
|
||||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
|
||||
procedure Random_Distribution is
|
||||
Trials : constant := 1_000_000;
|
||||
type Outcome is (Aleph, Beth, Gimel, Daleth, He, Waw, Zayin, Heth);
|
||||
Pr : constant array (Outcome) of Uniformly_Distributed :=
|
||||
(1.0/5.0, 1.0/6.0, 1.0/7.0, 1.0/8.0, 1.0/9.0, 1.0/10.0, 1.0/11.0, 1.0);
|
||||
Samples : array (Outcome) of Natural := (others => 0);
|
||||
Value : Uniformly_Distributed;
|
||||
Dice : Generator;
|
||||
begin
|
||||
for Try in 1..Trials loop
|
||||
Value := Random (Dice);
|
||||
for I in Pr'Range loop
|
||||
if Value <= Pr (I) then
|
||||
Samples (I) := Samples (I) + 1;
|
||||
exit;
|
||||
else
|
||||
Value := Value - Pr (I);
|
||||
end if;
|
||||
end loop;
|
||||
end loop;
|
||||
-- Printing the results
|
||||
for I in Pr'Range loop
|
||||
Put (Outcome'Image (I) & Character'Val (9));
|
||||
Put (Float'Image (Float (Samples (I)) / Float (Trials)) & Character'Val (9));
|
||||
if I = Heth then
|
||||
Put_Line (" rest");
|
||||
else
|
||||
Put_Line (Uniformly_Distributed'Image (Pr (I)));
|
||||
end if;
|
||||
end loop;
|
||||
end Random_Distribution;
|
||||
|
|
@ -15,12 +15,11 @@ samples: #[]
|
|||
loop 1..nofTrials 'x [
|
||||
z: random 0.0 1.0
|
||||
loop probabilities [item,prob][
|
||||
if? z < prob [
|
||||
switch z < prob [
|
||||
unless key? samples item -> samples\[item]: 0
|
||||
samples\[item]: samples\[item] + 1
|
||||
break
|
||||
]
|
||||
else [
|
||||
][
|
||||
z: z - prob
|
||||
]
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
constant MAX = #3FFFFFFF
|
||||
constant times = 1e6
|
||||
atom d,e
|
||||
sequence Mapps
|
||||
Mapps = {
|
||||
{ "aleph", 1/5, 0},
|
||||
{ "beth", 1/6, 0},
|
||||
{ "gimel", 1/7, 0},
|
||||
{ "daleth", 1/8, 0},
|
||||
{ "he", 1/9, 0},
|
||||
{ "waw", 1/10, 0},
|
||||
{ "zayin", 1/11, 0},
|
||||
{ "heth", 1759/27720, 0}
|
||||
}
|
||||
|
||||
for i = 1 to times do
|
||||
d = (rand(MAX)-1)/MAX
|
||||
e = 0
|
||||
for j = 1 to length(Mapps) do
|
||||
e += Mapps[j][2]
|
||||
if d <= e then
|
||||
Mapps[j][3] += 1
|
||||
exit
|
||||
end if
|
||||
end for
|
||||
end for
|
||||
|
||||
printf(1,"Sample times: %d\n",times)
|
||||
for j = 1 to length(Mapps) do
|
||||
d = Mapps[j][3]/times
|
||||
printf(1,"%-7s should be %f is %f | Deviatation %6.3f%%\n",
|
||||
{Mapps[j][1],Mapps[j][2],d,(1-Mapps[j][2]/d)*100})
|
||||
end for
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
$character = [PSCustomObject]@{
|
||||
aleph = [PSCustomObject]@{Expected=1/5 ; Alpha="א"}
|
||||
beth = [PSCustomObject]@{Expected=1/6 ; Alpha="ב"}
|
||||
gimel = [PSCustomObject]@{Expected=1/7 ; Alpha="ג"}
|
||||
daleth = [PSCustomObject]@{Expected=1/8 ; Alpha="ד"}
|
||||
he = [PSCustomObject]@{Expected=1/9 ; Alpha="ה"}
|
||||
waw = [PSCustomObject]@{Expected=1/10 ; Alpha="ו"}
|
||||
zayin = [PSCustomObject]@{Expected=1/11 ; Alpha="ז"}
|
||||
heth = [PSCustomObject]@{Expected=1759/27720; Alpha="ח"}
|
||||
}
|
||||
|
||||
$sum = 0
|
||||
$iterations = 1000000
|
||||
$cumulative = [ordered]@{}
|
||||
$randomly = [ordered]@{}
|
||||
|
||||
foreach ($name in $character.PSObject.Properties.Name)
|
||||
{
|
||||
$sum += $character.$name.Expected
|
||||
$cumulative.$name = $sum
|
||||
$randomly.$name = 0
|
||||
}
|
||||
|
||||
for ($i = 0; $i -lt $iterations; $i++)
|
||||
{
|
||||
$random = Get-Random -Minimum 0.0 -Maximum 1.0
|
||||
|
||||
foreach ($name in $cumulative.Keys)
|
||||
{
|
||||
if ($random -le $cumulative.$name)
|
||||
{
|
||||
$randomly.$name++
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($name in $character.PSObject.Properties.Name)
|
||||
{
|
||||
[PSCustomObject]@{
|
||||
Name = $name
|
||||
Expected = $character.$name.Expected
|
||||
Actual = $randomly.$name / $iterations
|
||||
Character = $character.$name.Alpha
|
||||
}
|
||||
}
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
let p = [
|
||||
("Aleph", 1.0 /. 5.0),
|
||||
("Beth", 1.0 /. 6.0),
|
||||
("Gimel", 1.0 /. 7.0),
|
||||
("Daleth", 1.0 /. 8.0),
|
||||
("He", 1.0 /. 9.0),
|
||||
("Waw", 1.0 /. 10.0),
|
||||
("Zayin", 1.0 /. 11.0),
|
||||
("Heth", 1759.0 /. 27720.0),
|
||||
]
|
||||
|
||||
let prob_take = (arr, k) => {
|
||||
let rec aux = (i, k) => {
|
||||
let (v, p) = arr[i]
|
||||
if k < p { v } else { aux(i+1, (k -. p)) }
|
||||
}
|
||||
aux(0, k)
|
||||
}
|
||||
|
||||
{
|
||||
let n = 1_000_000
|
||||
let h = Belt.HashMap.String.make(~hintSize=10)
|
||||
|
||||
Js.Array2.forEach(p, ((v, _)) =>
|
||||
Belt.HashMap.String.set(h, v, 0)
|
||||
)
|
||||
|
||||
let tot = Js.Array2.reduce(p, (acc, (_, prob)) => acc +. prob, 0.0)
|
||||
|
||||
for _ in 1 to n {
|
||||
let sel = prob_take(p, tot *. Js.Math.random())
|
||||
let _n = Belt.HashMap.String.get(h, sel)
|
||||
let n = Belt.Option.getExn(_n)
|
||||
Belt.HashMap.String.set(h, sel, (n+1)) /* count the number of each item */
|
||||
}
|
||||
Printf.printf("Event expected occurred\n")
|
||||
Js.Array2.forEach(p, ((v, p)) => {
|
||||
let _d = Belt.HashMap.String.get(h, v)
|
||||
let d = Belt.Option.getExn(_d)
|
||||
Printf.printf("%s \t %8.5g %8.5g\n", v, p, float(d) /. float(n))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
item = Array("aleph","beth","gimel","daleth","he","waw","zayin","heth")
|
||||
prob = Array(1/5.0, 1/6.0, 1/7.0, 1/8.0, 1/9.0, 1/10.0, 1/11.0, 1759/27720)
|
||||
Dim cnt(7)
|
||||
|
||||
'Terminate script if sum of probabilities <> 1.
|
||||
sum = 0
|
||||
For i = 0 To UBound(prob)
|
||||
sum = sum + prob(i)
|
||||
Next
|
||||
|
||||
If sum <> 1 Then
|
||||
WScript.Quit
|
||||
End If
|
||||
|
||||
For trial = 1 To 1000000
|
||||
r = Rnd(1)
|
||||
p = 0
|
||||
For i = 0 To UBound(prob)
|
||||
p = p + prob(i)
|
||||
If r < p Then
|
||||
cnt(i) = cnt(i) + 1
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
Next
|
||||
|
||||
WScript.StdOut.Write "item" & vbTab & "actual" & vbTab & vbTab & "theoretical"
|
||||
WScript.StdOut.WriteLine
|
||||
For i = 0 To UBound(item)
|
||||
WScript.StdOut.Write item(i) & vbTab & FormatNumber(cnt(i)/1000000,6) & vbTab & FormatNumber(prob(i),6)
|
||||
WScript.StdOut.WriteLine
|
||||
Next
|
||||
Loading…
Add table
Add a link
Reference in a new issue