From 90739ce4a8bdf79a1ff1917d1ae962dfab646bb7 Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Wed, 24 May 2023 16:28:31 -0700 Subject: [PATCH] finalize jit-bayes --- src/jit_bayes | Bin 282480 -> 282704 bytes src/jit_bayes.nim | 22 +++++++++++----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/jit_bayes b/src/jit_bayes index b71bb93a270a938abe13e7aa4fbc84226974f250..f591f80e4cc0db85d86c2c9d4ee98fcb7bbe9fe7 100755 GIT binary patch delta 28918 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 aCsM6>U#j$$OLMono#lM3M?GU)0{;(2esaD5 delta 28113 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 K3To$4`TqbUTss2* diff --git a/src/jit_bayes.nim b/src/jit_bayes.nim index d14ff38..691b3b9 100644 --- a/src/jit_bayes.nim +++ b/src/jit_bayes.nim @@ -51,13 +51,13 @@ proc getOEIS(): seq[seq[string]] = var seqs = getOEIS() ## Sequence helpers -proc startsWithSubsequence(xs: seq[string], ys: seq[string]): bool = - if xs.len == 0: +proc startsWithSubsequence(subseq: seq[string], xs: seq[string]): bool = + if subseq.len == 0: return true - elif ys.len == 0: + elif xs.len == 0: return false - elif xs[0] == ys[0]: - return startsWithSubsequence(xs[1.. seqs.len: num_hypotheses = seqs.len hypotheses = seqs[0.. i) and h[i] == observations[i]) + concordant_hypotheses = filter(hypotheses, proc(h: seq[string]): bool = (h.len > i) and startsWithSubsequence(observations[0..i], h)) if concordant_hypotheses.len > 0: found_concordant_hypothesis = true @@ -157,6 +154,7 @@ proc jitBayesLoop( return else: echo "Increased number of hypotheses to ", num_hypotheses, ", and found ", concordant_hypotheses.len, " concordant hypotheses. Continuing" + ## print concordant_hypotheses else: echo "Correct continuation was ", correct_continuation @@ -168,13 +166,15 @@ proc jitBayesLoop( echo "" ## var observations = @["1", "2", "3", "4", "5", "6"] -var observations = @["1", "2", "3", "23"] + echo "## Full prediction with access to all hypotheses (~Solomonoff)" +var observations = @["1", "2", "3"] echo "## Initial sequence: ", observations let continuation_probabilities = predictContinuation(seqs, observations) print continuation_probabilities echo "" +observations = @["1", "2", "3", "23", "11", "18", "77", "46", "84"] jitBayesLoop(seqs, observations, 3, 1_000, 2_000) echo ""