commit da9a10791fdda25a22bd6d2700497c2495a7bd32
parent 76968afc790ff0235358840f2c4f4789381c8ec3
Author: NunoSempere <nuno.sempere@protonmail.com>
Date: Sun, 21 May 2023 01:22:02 -0400
feat: add the actual model
Diffstat:
3 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/wip/nim/makefile b/wip/nim/makefile
@@ -1,2 +1,11 @@
+SHELL := /bin/bash
+
build: samples.nim
nim c --verbosity:0 samples.nim
+
+run: samples
+ ./samples --verbosity:0
+
+examine: samples
+ # nim c --verbosity:0 --opt:speed -d:release -d:danger --checks:off samples.nim && time ./samples --verbosity:0 --checks:off
+ nim c -d:release samples.nim && time ./samples
diff --git a/wip/nim/samples b/wip/nim/samples
Binary files differ.
diff --git a/wip/nim/samples.nim b/wip/nim/samples.nim
@@ -126,3 +126,20 @@ proc mixture(sxs: seq[seq[float]], ps: seq[float], n: int): seq[float] =
return toSeq(1..n).map(_ => get_mixture_sample())
+## Actual model
+
+let n = 1000000
+
+let p_a = 0.8
+let p_b = 0.5
+let p_c = p_a * p_b
+
+let weights = @[ 1.0 - p_c, p_c/2.0, p_c/4.0, p_c/4.0 ]
+
+let fs = [ () => 0.0, () => 1.0, () => to(1.0, 3.0), () => to(2.0, 10.0) ]
+let dists = fs.map(f => make_samples(f, n))
+let result = mixture(dists, weights, n)
+let mean_result = foldl(result, a + b, 0.0) / float(result.len)
+
+# echo result
+echo mean_result