atoms 76 / 76 runs 8 primary sonnet-46-primer-v3
↑↓jk nav · / search
Select an atom from the list →
probmods2-conditioning / ex1.a
shape value s46 +p val+ runs 8/8
per-run
00 prompt

I flip a fair coin. Compute the probability that it lands heads. End your program with the numeric answer.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var model = function() { return flip() ? "H" : "T" };
2var ANSWER = (Math.exp(Infer({method:'enumerate'}, model).score('H')));
3
s46 +psonnet-46-primer-v3val+
webppl
1var ANSWER = 0.5;
02outputvalue
GT
0.5000
s46 +p
0.5000
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer val+ ·
haiku-45-primer-v3 haiku-4.5 +primer val+ ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking val+ ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking val+ ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer val+ ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer val+ ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking val+ ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking val+ ·
probmods2-conditioning / ex1.b
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

I have a biased coin with P(heads) = 0.9, and a fair coin. Someone hands me one of the two coins, chosen uniformly at random, without telling me which. I flip it three times. Given that the first two flips landed heads, what is the posterior distribution over the third flip (as a boolean: true=heads, false=tails)? End your program with the Infer(...) call returning that distribution.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var flipCoin = function(coinType) {
2 return coinType == "fair" ? flip() : flip(0.9);
3}
4var model = function() {
5 var coinType = flip() ? "fair" : "biased";
6 var flip1 = flipCoin(coinType);
7 var flip2 = flipCoin(coinType);
8 var flip3 = flipCoin(coinType);
9 condition(flip1 && flip2);
10 return flip3;
11};
12var ANSWER = (Infer({method:'enumerate'}, model));
13
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var model = function() {
2 // Choose coin uniformly at random
3 var biased = flip(0.5);
4 var p = biased ? 0.9 : 0.5;
5
6 // Condition on first two flips being heads
7 observe(Bernoulli({p: p}), true);
8 observe(Bernoulli({p: p}), true);
9
10 // Return the third flip
11 return flip(p);
12};
13
14var ANSWER = Infer({method: 'enumerate'}, model);
02output overlaydistribution
GT s46 +p2 bins
00.400.400.810.81false A = 0.194 B = 0.194false A = 0.194 B = 0.1940.190.19falsetrue A = 0.806 B = 0.806true A = 0.806 B = 0.8060.810.81true
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-conditioning / ex1.c
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

I have a biased coin with P(heads) = 0.9, and a fair coin. Someone hands me one of the two coins, chosen uniformly at random, without telling me which. I flip it three times. Given that all three flips landed heads, what is the posterior distribution over the coin type (return the string 'fair' or 'biased')? End your program with the Infer(...) call.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var flipCoin = function(coinType) {
2 return coinType == "fair" ? flip() : flip(0.9);
3}
4var model = function() {
5 var coinType = flip() ? "fair" : "biased";
6 var flip1 = flipCoin(coinType);
7 var flip2 = flipCoin(coinType);
8 var flip3 = flipCoin(coinType);
9 condition(flip1 && flip2 && flip3);
10 return coinType;
11};
12var ANSWER = (Infer({method:'enumerate'}, model));
13
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var model = function() {
2 var coin = flip(0.5) ? 'biased' : 'fair';
3 var p = coin === 'biased' ? 0.9 : 0.5;
4 observe(Binomial({p: p, n: 3}), 3);
5 return coin;
6};
7
8var ANSWER = Infer({method: 'enumerate'}, model);
02output overlaydistribution
GT s46 +p2 bins
00.430.430.850.85biased A = 0.854 B = 0.854biased A = 0.854 B = 0.8540.850.85biasedfair A = 0.146 B = 0.146fair A = 0.146 B = 0.1460.150.15fair
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-conditioning / ex1.d
shape distribution s46 +p TV<.051.1e-16 runs 8/8
per-run
00 prompt

I have a biased coin with P(heads) = 0.9, and a fair coin. Someone hands me one of the two coins, chosen uniformly at random, without telling me which. I flip it three times. Given that the first two flips were different, what is the posterior distribution over the third flip (as a boolean: true=heads, false=tails)? End your program with the Infer(...) call.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var flipCoin = function(coinType) {
2 return coinType == "fair" ? flip() : flip(0.9);
3}
4var model = function() {
5 var coinType = flip() ? "fair" : "biased";
6 var flip1 = flipCoin(coinType);
7 var flip2 = flipCoin(coinType);
8 var flip3 = flipCoin(coinType);
9 condition(flip1 != flip2);
10 return flip3;
11};
12var ANSWER = (Infer({method:'enumerate'}, model));
13
s46 +psonnet-46-primer-v3TV<.051.1e-16
webppl
1var model = function() {
2 // Choose coin uniformly at random
3 var biased = flip(0.5);
4 var p = biased ? 0.9 : 0.5;
5
6 // First two flips
7 var flip1 = flip(p);
8 var flip2 = flip(p);
9
10 // Condition on first two flips being different
11 condition(flip1 !== flip2);
12
13 // Third flip
14 var flip3 = flip(p);
15
16 return flip3;
17};
18
19var ANSWER = Infer({method: 'enumerate'}, model);
02output overlaydistribution
GT s46 +p2 bins
00.300.300.610.61false A = 0.394 B = 0.394false A = 0.394 B = 0.3940.390.39falsetrue A = 0.606 B = 0.606true A = 0.606 B = 0.6060.610.61true
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<.05 1.1e-16 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.05 1.1e-16 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.05 1.1e-16 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.05 1.1e-16 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.05 1.1e-16 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.05 1.1e-16 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.05 1.1e-16 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.05 1.1e-16 0.0000 ·
probmods2-conditioning / ex2.a
shape record(original, intervention, conditioning) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Consider this generative model of a cough symptom:

webppl
1var lungCancer = flip(0.01);
2var cold = flip(0.2);
3var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));

Show that *intervening* on lungCancer (setting it to true directly) produces the same marginal of cough as *conditioning* on lungCancer. Return an object literal with three keys, each a distribution over cough: - original: the unconditional marginal - intervention: the marginal under lungCancer = true - conditioning: the marginal under condition(lungCancer)

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (({
2 original: Infer({method: "enumerate"}, function() {
3 var lungCancer = flip(0.01);
4 var cold = flip(0.2);
5 var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));
6 return cough;
7 }),
8 intervention: Infer({method: "enumerate"}, function() {
9 var lungCancer = true;
10 var cold = flip(0.2);
11 var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));
12 return cough;
13 }),
14 conditioning: Infer({method: "enumerate"}, function() {
15 var lungCancer = flip(0.01);
16 condition(lungCancer);
17 var cold = flip(0.2);
18 var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));
19 return cough;
20 })
21}));
22
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var model = function() {
2 var lungCancer = flip(0.01);
3 var cold = flip(0.2);
4 var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));
5 return cough;
6};
7
8var interventionModel = function() {
9 var lungCancer = true;
10 var cold = flip(0.2);
11 var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));
12 return cough;
13};
14
15var conditioningModel = function() {
16 var lungCancer = flip(0.01);
17 var cold = flip(0.2);
18 var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));
19 condition(lungCancer);
20 return cough;
21};
22
23var ANSWER = {
24 original: Infer({method: 'enumerate'}, model),
25 intervention: Infer({method: 'enumerate'}, interventionModel),
26 conditioning: Infer({method: 'enumerate'}, conditioningModel)
27};
02outputrecord(original, intervention, conditioning)
GT
original=dist(2)
intervention=dist(2)
conditioning=dist(2)
s46 +p
original=dist(2)
intervention=dist(2)
conditioning=dist(2)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-conditioning / ex2.b
shape record(original, intervention, conditioning) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Using the same lungCancer/cold/cough generative model:

webppl
1var lungCancer = flip(0.01);
2var cold = flip(0.2);
3var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));

Show that *intervening* on cough (setting cough = true directly) produces a different marginal of lungCancer than *conditioning* on cough does. Return an object literal with three distributions over lungCancer: - original: the unconditional marginal - intervention: replace cough = (...) with cough = true - conditioning: keep the original assignment and add condition(cough)

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (({
2 original: Infer({method: "enumerate"}, function() {
3 var lungCancer = flip(0.01);
4 var cold = flip(0.2);
5 var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));
6 return lungCancer;
7 }),
8 intervention: Infer({method: "enumerate"}, function() {
9 var lungCancer = flip(0.01);
10 var cold = flip(0.2);
11 var cough = true;
12 return lungCancer;
13 }),
14 conditioning: Infer({method: "enumerate"}, function() {
15 var lungCancer = flip(0.01);
16 var cold = flip(0.2);
17 var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));
18 condition(cough);
19 return lungCancer;
20 })
21}));
22
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var model_original = function() {
2 var lungCancer = flip(0.01);
3 var cold = flip(0.2);
4 var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));
5 return lungCancer;
6};
7
8var model_intervention = function() {
9 var lungCancer = flip(0.01);
10 var cold = flip(0.2);
11 var cough = true;
12 return lungCancer;
13};
14
15var model_conditioning = function() {
16 var lungCancer = flip(0.01);
17 var cold = flip(0.2);
18 var cough = (cold && flip(0.5)) || (lungCancer && flip(0.3));
19 condition(cough);
20 return lungCancer;
21};
22
23var ANSWER = {
24 original: Infer({method: 'enumerate'}, model_original),
25 intervention: Infer({method: 'enumerate'}, model_intervention),
26 conditioning: Infer({method: 'enumerate'}, model_conditioning)
27};
02outputrecord(original, intervention, conditioning)
GT
original=dist(2)
intervention=dist(2)
conditioning=dist(2)
s46 +p
original=dist(2)
intervention=dist(2)
conditioning=dist(2)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-conditioning / ex4.b
shape distribution s46 +p TV<.50.117 runs 8/8
per-run
00 prompt

Here is a model of how niceness affects whether a person smiles:

webppl
1var smilesModel = function() {
2 var nice = mem(function(person) { flip(.7) });
3 var smiles = function(person) {
4 return nice(person) ? flip(.8) : flip(.5);
5 }
6 condition(smiles('alice') && smiles('bob') && smiles('alice'));
7 return nice('alice');
8}

Extend this into a function extendedSmilesModel that captures two additional factors: 1. People smile 80% of the time if they want something from you, and 50% otherwise. 2. Nice people want something from you 20% of the time; non-nice people 50%.

Nice people should still smile more often regardless of whether they want something. Niceness is a stable property of a person; whether they want something can vary. Have extendedSmilesModel return whether Alice smiles today, and end your program with Infer({method: 'enumerate'}, extendedSmilesModel) returning that distribution.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var extendedSmilesModel = function() {
2 var nice = mem(function(person) { flip(.7) });
3 var wantsSomething = function(person) {
4 return flip(nice(person) ? .2 : .5);
5 }
6 var smiles = function(person, wants) {
7 return (wants ? flip(.8) : flip(.5))
8 || (nice(person) ? flip(.8) : flip(.5));
9 }
10 var wants = wantsSomething('alice');
11 return smiles('alice', wants);
12};
13var ANSWER = (Infer({method: "enumerate"}, extendedSmilesModel));
14
s46 +psonnet-46-primer-v3TV<.50.117
webppl
1var extendedSmilesModel = function() {
2 var nice = mem(function(person) { return flip(.7); });
3
4 var wants = function(person) {
5 return nice(person) ? flip(.2) : flip(.5);
6 };
7
8 var smiles = function(person) {
9 var w = wants(person);
10 var n = nice(person);
11 // Nice people smile more regardless of wanting something
12 // wants -> 80% smile; not wants -> 50% smile
13 // nice adds extra smile probability
14 if (n && w) {
15 return flip(.8);
16 } else if (n && !w) {
17 return flip(.8);
18 } else if (!n && w) {
19 return flip(.8);
20 } else {
21 return flip(.5);
22 }
23 };
24
25 return smiles('alice');
26};
27
28// Wait, re-reading: "Nice people should still smile more often regardless of whether they want something"
29// So niceness affects smile rate independently of wanting.
30// Let me re-interpret:
31// - wants -> 80% smile, not wants -> 50% smile (base from wanting)
32// - nice people smile more: perhaps nice AND wants -> higher, nice AND not wants -> still higher than non-nice
33// A natural interpretation: smile probability depends on BOTH niceness and wanting.
34// nice: flip(.8) if nice else flip(.5) [original]
35// wants: flip(.8) if wants else flip(.5)
36// Combined: nice AND wants -> flip(.8) (both push up), nice AND not wants -> flip(.8) (nice dominates),
37// not nice AND wants -> flip(.8) (wants dominates), not nice AND not wants -> flip(.5)
38// But that doesn't differentiate niceness well.
39// Better: use additive/multiplicative model or just define 4 cases explicitly:
40// nice+wants: .9, nice+!wants: .8, !nice+wants: .8, !nice+!wants: .5
41
42var extendedSmilesModel = function() {
43 var nice = mem(function(person) { return flip(.7); });
44
45 var wants = function(person) {
46 return nice(person) ? flip(.2) : flip(.5);
47 };
48
49 var smiles = function(person) {
50 var n = nice(person);
51 var w = wants(person);
52 if (n && w) {
53 return flip(.9);
54 } else if (n && !w) {
55 return flip(.8);
56 } else if (!n && w) {
57 return flip(.8);
58 } else {
59 return flip(.5);
60 }
61 };
62
63 return smiles('alice');
64};
65
66var ANSWER = Infer({method: 'enumerate'}, extendedSmilesModel);
02output overlaydistribution
GT s46 +p2 bins
00.440.440.890.89false A = 0.114 B = 0.231false A = 0.114 B = 0.2310.110.23falsetrue A = 0.886 B = 0.769true A = 0.886 B = 0.7690.890.77true
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<.5 0.119 0.0559 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.5 0.119 0.0559 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.5 0.184 0.1229 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.5 0.062 0.0168 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.5 0.119 0.0559 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.5 0.117 0.0541 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.5 0.102 0.0421 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.5 0.102 0.0421 ·
probmods2-conditioning / ex4.c
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Given this extendedSmilesModel skeleton:

webppl
1var extendedSmilesModel = function() {
2 var nice = mem(function(person) { flip(.7) });
3 var wantsSomething = function(person) {
4 return flip(nice(person) ? .2 : .5);
5 }
6 var smiles = function(person, wants) {
7 return (wants ? flip(.8) : flip(.5))
8 || (nice(person) ? flip(.8) : flip(.5));
9 }
10 // ... your code here ...
11}

Suppose you've seen Bob five times this week and each time he was *not* smiling. Today, you see him smiling. Modify the model body to compute the posterior probability that Bob wants something from you today. Niceness is stable (use mem as given); whether he wants something varies day-to-day. End your program with Infer({method: 'enumerate'}, extendedSmilesModel).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var extendedSmilesModel = function() {
2 var nice = mem(function(person) { flip(.7) });
3 var wantsSomething = function(person) {
4 return flip(nice(person) ? .2 : .5);
5 }
6 var smiles = function(person, wants) {
7 return (wants ? flip(.8) : flip(.5))
8 || (nice(person) ? flip(.8) : flip(.5));
9 }
10 var wantsToday = wantsSomething('bob');
11 condition(!smiles('bob', wantsSomething('bob')));
12 condition(!smiles('bob', wantsSomething('bob')));
13 condition(!smiles('bob', wantsSomething('bob')));
14 condition(!smiles('bob', wantsSomething('bob')));
15 condition(!smiles('bob', wantsSomething('bob')));
16 condition(smiles('bob', wantsToday));
17 return wantsToday;
18};
19var ANSWER = (Infer({method: "enumerate"}, extendedSmilesModel));
20
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var extendedSmilesModel = function() {
2 var nice = mem(function(person) { flip(.7) });
3 var wantsSomething = function(person) {
4 return flip(nice(person) ? .2 : .5);
5 };
6 var smiles = function(person, wants) {
7 return (wants ? flip(.8) : flip(.5))
8 || (nice(person) ? flip(.8) : flip(.5));
9 };
10
11 // Observe Bob not smiling five times (niceness is stable, wants varies each day)
12 var bobNice = nice("Bob");
13
14 // Each of the 5 past days: wants something varies, smiles is false
15 map(function(i) {
16 var wants = wantsSomething("Bob");
17 condition(smiles("Bob", wants) === false);
18 }, _.range(5));
19
20 // Today: observe Bob smiling
21 var wantsToday = wantsSomething("Bob");
22 condition(smiles("Bob", wantsToday) === true);
23
24 return wantsToday;
25};
26
27var ANSWER = Infer({method: 'enumerate'}, extendedSmilesModel);
02output overlaydistribution
GT s46 +p2 bins
00.260.260.520.52false A = 0.480 B = 0.480false A = 0.480 B = 0.4800.480.48falsetrue A = 0.520 B = 0.520true A = 0.520 B = 0.5200.520.52true
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-conditioning / ex5.a
shape record(rain, sprinkler) s46 +p TV<.052.8e-17 runs 8/8
per-run
00 prompt

I have a sprinkler in my garden that turns on each morning at random - half the time, independently each day. I live in a city where it rains on 30% of mornings. The lawn gets wet whenever the sprinkler turns on, it rains, or both. One morning, I notice my lawn is wet. Return an object literal with two keys: - rain: posterior distribution over whether it rained - sprinkler: posterior distribution over whether the sprinkler turned on

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (({
2 rain: Infer({method: "enumerate"}, function() {
3 var sprinkler = flip();
4 var rain = flip(0.3);
5 var wetLawn = sprinkler || rain;
6 condition(wetLawn);
7 return rain;
8 }),
9 sprinkler: Infer({method: "enumerate"}, function() {
10 var sprinkler = flip();
11 var rain = flip(0.3);
12 var wetLawn = sprinkler || rain;
13 condition(wetLawn);
14 return sprinkler;
15 })
16}));
17
s46 +psonnet-46-primer-v3TV<.052.8e-17
webppl
1var model = function() {
2 var rained = flip(0.3);
3 var sprinkler = flip(0.5);
4 var wet = rained || sprinkler;
5 condition(wet);
6 return { rain: rained, sprinkler: sprinkler };
7};
8
9var joint = Infer({method: 'enumerate'}, model);
10
11var rainDist = Infer({method: 'enumerate'}, function() {
12 var s = sample(joint);
13 return s.rain;
14});
15
16var sprinklerDist = Infer({method: 'enumerate'}, function() {
17 var s = sample(joint);
18 return s.sprinkler;
19});
20
21var ANSWER = { rain: rainDist, sprinkler: sprinklerDist };
02outputrecord(rain, sprinkler)
GT
rain=dist(2)
sprinkler=dist(2)
s46 +p
rain=dist(2)
sprinkler=dist(2)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.05 2.8e-17 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.05 2.8e-17 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.05 2.8e-17 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.05 2.8e-17 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.05 2.8e-17 0.0000 ·
probmods2-conditioning / ex5.b
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

I have a sprinkler in my garden that turns on each morning at random - half the time, independently each day. I live in a city where it rains on 30% of mornings. The lawn gets wet whenever the sprinkler turns on, it rains, or both. My neighbor Kelsey has the same kind of sprinkler (independent of mine, also turning on with probability 0.5 each morning). One morning, both my lawn and Kelsey's lawn are wet. End your program with Infer(...) returning the posterior distribution over whether it rained.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (Infer({method: "enumerate"}, function() {
2 var rain = flip(0.3);
3 var mySprinkler = flip();
4 var herSprinkler = flip();
5 var myLawnIsWet = mySprinkler || rain;
6 var herLawnIsWet = herSprinkler || rain;
7 condition(myLawnIsWet && herLawnIsWet);
8 return rain;
9}));
10
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var model = function() {
2 var rain = flip(0.3);
3 var sprinkler = flip(0.5);
4 var kelseySprinkler = flip(0.5);
5
6 var myLawnWet = rain || sprinkler;
7 var kelseyLawnWet = rain || kelseySprinkler;
8
9 condition(myLawnWet && kelseyLawnWet);
10
11 return rain;
12};
13
14var ANSWER = Infer({method: 'enumerate'}, model);
02output overlaydistribution
GT s46 +p2 bins
00.320.320.630.63false A = 0.368 B = 0.368false A = 0.368 B = 0.3680.370.37falsetrue A = 0.632 B = 0.632true A = 0.632 B = 0.6320.630.63true
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-conditioning / ex5.c
shape distribution s46 +p TV<.056.9e-18 runs 8/8
per-run
00 prompt

I have a sprinkler in my garden that turns on each morning at random - half the time, independently each day. I live in a city where it rains on 30% of mornings. Lawns are wet whenever the sprinkler turns on, it rains, or both. Five people in the area - me, Kelsey, Kevin, Manu, and Josh - all have the same kind of sprinkler (each independent, p=0.5). One morning all five lawns are wet. Use mem so each person's sprinkler is modeled independently. End your program with Infer(...) returning the posterior over whether it rained.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (Infer({method: "enumerate"}, function() {
2 var rain = flip(0.3);
3 var sprinkler = mem(function(person) { return flip() });
4 var wetLawn = function(person) { return rain || sprinkler(person) };
5 condition(wetLawn("me"));
6 condition(wetLawn("Kelsey"));
7 condition(wetLawn("Kevin"));
8 condition(wetLawn("Manu"));
9 condition(wetLawn("Josh"));
10 return rain;
11}));
12
s46 +psonnet-46-primer-v3TV<.056.9e-18
webppl
1var model = function() {
2 var rained = flip(0.3);
3
4 var sprinklerOn = mem(function(person) {
5 return flip(0.5);
6 });
7
8 var lawnWet = function(person) {
9 return sprinklerOn(person) || rained;
10 };
11
12 var people = ["me", "Kelsey", "Kevin", "Manu", "Josh"];
13
14 map(function(person) {
15 condition(lawnWet(person));
16 }, people);
17
18 return rained;
19};
20
21var ANSWER = Infer({method: 'enumerate'}, model);
02output overlaydistribution
GT s46 +p2 bins
00.470.470.930.93false A = 0.068 B = 0.068false A = 0.068 B = 0.0680.070.07falsetrue A = 0.932 B = 0.932true A = 0.932 B = 0.9320.930.93true
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<1 0.632 1.2924 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.05 6.9e-18 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.05 6.9e-18 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.05 6.9e-18 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.05 6.9e-18 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.05 6.9e-18 0.0000 ·
probmods2-conditioning / ex6.c
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

A machine randomly draws a letter of the word "game" with probabilities {g: 0.05, a: 0.45, m: 0.05, e: 0.45}. Bob's probability of winning given letter h is 1/k^2 where k is the position of that letter in the word "game" (so g=1, a=2, m=3, e=4). We observe that Bob won, but don't know which letter he drew. Fill in the ...'s in the program below to compute p(letter | win), and end your program with the resulting distribution:

webppl
1var checkVowel = function(letter) { _.includes(['a', 'e', 'i', 'o', 'u'], letter) };
2var letterVals = ['g', 'a', 'm', 'e'];
3var letterProbs = map(function(letter) { checkVowel(letter) ? 0.45 : 0.05 }, letterVals);
4var letters = Categorical({vs: letterVals, ps: letterProbs});
5
6Infer({method: 'enumerate'}, function() {
7 var letter = sample(letters);
8 var position = letterVals.indexOf(letter) + 1;
9 var winProb = 1 / Math.pow(position, 2);
10 condition(...);
11 return ...;
12});
system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var checkVowel = function(letter) { _.includes(['a', 'e', 'i', 'o', 'u'], letter) };
2var letterVals = ['g', 'a', 'm', 'e'];
3var letterProbs = map(function(letter) { checkVowel(letter) ? 0.45 : 0.05 }, letterVals);
4var letters = Categorical({vs: letterVals, ps: letterProbs});
5var ANSWER = (Infer({method: 'enumerate'}, function() {
6 var letter = sample(letters);
7 var position = letterVals.indexOf(letter) + 1;
8 var winProb = 1 / Math.pow(position, 2);
9 condition(flip(winProb));
10 return letter;
11}));
12
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var checkVowel = function(letter) { _.includes(['a', 'e', 'i', 'o', 'u'], letter) };
2var letterVals = ['g', 'a', 'm', 'e'];
3var letterProbs = map(function(letter) { checkVowel(letter) ? 0.45 : 0.05 }, letterVals);
4var letters = Categorical({vs: letterVals, ps: letterProbs});
5
6var ANSWER = Infer({method: 'enumerate'}, function() {
7 var letter = sample(letters);
8 var position = _.indexOf(letterVals, letter) + 1;
9 var winProb = 1 / Math.pow(position, 2);
10 condition(flip(winProb));
11 return letter;
12});
02output overlaydistribution
GT s46 +p4 bins
00.290.290.570.57e A = 0.143 B = 0.143e A = 0.143 B = 0.1430.140.14em A = 0.028 B = 0.028m A = 0.028 B = 0.0280.030.03ma A = 0.573 B = 0.573a A = 0.573 B = 0.5730.570.57ag A = 0.255 B = 0.255g A = 0.255 B = 0.2550.250.25g
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-conditioning / ex6.d
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Same casino-game setup: letters {g, a, m, e} drawn with probs {0.05, 0.45, 0.05, 0.45}, win prob = 1/k^2 with k = position in "game". Fill in the program below so the posterior distribution is over vowel vs consonant (instead of over the letter itself), given that Bob won:

webppl
1var checkVowel = function(letter) { _.includes(['a', 'e', 'i', 'o', 'u'], letter) };
2var letterVals = ['g', 'a', 'm', 'e'];
3var letterProbs = map(function(letter) { checkVowel(letter) ? 0.45 : 0.05 }, letterVals);
4var letters = Categorical({vs: letterVals, ps: letterProbs});
5
6Infer({method: 'enumerate'}, function() {
7 var letter = sample(letters);
8 var position = letterVals.indexOf(letter) + 1;
9 var winProb = 1 / Math.pow(position, 2);
10 condition(...);
11 return ...;
12});

End your program with the resulting Infer(...) distribution.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var checkVowel = function(letter) { _.includes(['a', 'e', 'i', 'o', 'u'], letter) };
2var letterVals = ['g', 'a', 'm', 'e'];
3var letterProbs = map(function(letter) { checkVowel(letter) ? 0.45 : 0.05 }, letterVals);
4var letters = Categorical({vs: letterVals, ps: letterProbs});
5var ANSWER = (Infer({method: 'enumerate'}, function() {
6 var letter = sample(letters);
7 var position = letterVals.indexOf(letter) + 1;
8 var winProb = 1 / Math.pow(position, 2);
9 condition(flip(winProb));
10 return checkVowel(letter) ? 'vowel' : 'consonant';
11}));
12
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var checkVowel = function(letter) { _.includes(['a', 'e', 'i', 'o', 'u'], letter) };
2var letterVals = ['g', 'a', 'm', 'e'];
3var letterProbs = map(function(letter) { checkVowel(letter) ? 0.45 : 0.05 }, letterVals);
4var letters = Categorical({vs: letterVals, ps: letterProbs});
5
6var ANSWER = Infer({method: 'enumerate'}, function() {
7 var letter = sample(letters);
8 var position = _.indexOf(letterVals, letter) + 1;
9 var winProb = 1 / Math.pow(position, 2);
10 condition(flip(winProb));
11 return checkVowel(letter) ? 'vowel' : 'consonant';
12});
02output overlaydistribution
GT s46 +p2 bins
00.360.360.720.72vowel A = 0.717 B = 0.717vowel A = 0.717 B = 0.7170.720.72vowelconsonant A = 0.283 B = 0.283consonant A = 0.283 B = 0.2830.280.28consonant
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-bayesian-data-analysis / ex1.2
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Given this binomial model where predictive distributions are computed for the same number of attempts as the observed data:

webppl
1var k = 1; var n = 20;
2var priorDist = Uniform({a: 0, b: 1});
3var model = function() {
4 var p = sample(priorDist);
5 observe(Binomial({p: p, n: n}), k);
6 var posteriorPredictive = binomial(p, n);
7 var prior_p = sample(priorDist);
8 var priorPredictive = binomial(prior_p, n);
9 return {prior: prior_p, priorPredictive, posterior: p, posteriorPredictive};
10}
11Infer({method: "MCMC", samples: 2500, lag: 50}, model);

Predictive distributions can be used to predict the outcome of a *different* experiment with new_n != n. Modify the model so the posterior predictive uses new_n = 5 attempts (while observed data is still k=1 success in n=20 attempts). Use Beta(a=1, b=1) as the prior. End with the Infer(...) call.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var k = 1;
2var n = 20;
3var new_n = 5;
4var priorDist = Beta({a: 1, b: 1});
5
6var model = function() {
7 var p = sample(priorDist);
8 observe(Binomial({p : p, n: n}), k);
9 var posteriorPredictive = binomial(p, new_n);
10 var prior_p = sample(priorDist);
11 var priorPredictive = binomial(prior_p, n);
12 return {
13 prior: prior_p, priorPredictive : priorPredictive,
14 posterior : p, posteriorPredictive : posteriorPredictive
15 };
16};
17var ANSWER = (Infer({method: "MCMC", samples: 2500, lag: 50}, model));
18
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var k = 1;
2var n = 20;
3var new_n = 5;
4var priorDist = Beta({a: 1, b: 1});
5
6var model = function() {
7 var p = sample(priorDist);
8 observe(Binomial({p: p, n: n}), k);
9 var posteriorPredictive = binomial(p, new_n);
10 var prior_p = sample(priorDist);
11 var priorPredictive = binomial(prior_p, n);
12 return {prior: prior_p, priorPredictive, posterior: p, posteriorPredictive};
13};
14
15var ANSWER = Infer({method: "MCMC", samples: 2500, lag: 50}, model);
02output overlaydistribution
GT s46 +p48 bins
00.0050.0050.0100.010{"prior":0.9838947372415268,"priorPredictive":20,"posterior":0.17475374846942354,"posteriorPredictive":1} A = 0.001 B = 0.001{"prior":0.9838947372415268,"priorPredictive":20,"posterior":0.17475374846942354,"posteriorPredictive":1} A = 0.001 B = 0.001{"prior":0.9838947372415268,"priorPredictive":20,"posterior":0.17475374846942354,"posteriorPredictive":1}{"prior":0.008386507187340549,"priorPredictive":0,"posterior":0.030564041963594985,"posteriorPredictive":0} A = 0.001 B = 0.001{"prior":0.008386507187340549,"priorPredictive":0,"posterior":0.030564041963594985,"posteriorPredictive":0} A = 0.001 B = 0.001{"prior":0.6835795295486877,"priorPredictive":11,"posterior":0.03816305850819129,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.6835795295486877,"priorPredictive":11,"posterior":0.03816305850819129,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.4625728897988316,"priorPredictive":9,"posterior":0.20102636685799447,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.4625728897988316,"priorPredictive":9,"posterior":0.20102636685799447,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.459280074975201,"priorPredictive":6,"posterior":0.056065033414288146,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.459280074975201,"priorPredictive":6,"posterior":0.056065033414288146,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.459280074975201,"priorPredictive":6,"posterior":0.056065033414288146,"posteriorPredictive":1}{"prior":0.4227631773615444,"priorPredictive":8,"posterior":0.18653678370228888,"posteriorPredictive":2} A = 0.000 B = 0.000{"prior":0.4227631773615444,"priorPredictive":8,"posterior":0.18653678370228888,"posteriorPredictive":2} A = 0.000 B = 0.000{"prior":0.5666763577505871,"priorPredictive":9,"posterior":0.276602930116489,"posteriorPredictive":2} A = 0.000 B = 0.000{"prior":0.5666763577505871,"priorPredictive":9,"posterior":0.276602930116489,"posteriorPredictive":2} A = 0.000 B = 0.000{"prior":0.5006186233546616,"priorPredictive":11,"posterior":0.033099560254556896,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.5006186233546616,"priorPredictive":11,"posterior":0.033099560254556896,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.2075469012194067,"priorPredictive":7,"posterior":0.08217728418836849,"posteriorPredictive":2} A = 0.000 B = 0.000{"prior":0.2075469012194067,"priorPredictive":7,"posterior":0.08217728418836849,"posteriorPredictive":2} A = 0.000 B = 0.000{"prior":0.2075469012194067,"priorPredictive":7,"posterior":0.08217728418836849,"posteriorPredictive":2}{"prior":0.10303381271114298,"priorPredictive":2,"posterior":0.08217728418836849,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.10303381271114298,"priorPredictive":2,"posterior":0.08217728418836849,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.490870602206004,"priorPredictive":14,"posterior":0.08217728418836849,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.490870602206004,"priorPredictive":14,"posterior":0.08217728418836849,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8177265342929015,"priorPredictive":17,"posterior":0.044433418191520725,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.8177265342929015,"priorPredictive":17,"posterior":0.044433418191520725,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.9090251038696952,"priorPredictive":16,"posterior":0.06920504000181474,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.9090251038696952,"priorPredictive":16,"posterior":0.06920504000181474,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.9090251038696952,"priorPredictive":16,"posterior":0.06920504000181474,"posteriorPredictive":0}{"prior":0.7157049093051103,"priorPredictive":14,"posterior":0.021275255432232014,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.7157049093051103,"priorPredictive":14,"posterior":0.021275255432232014,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.6548434689339506,"priorPredictive":7,"posterior":0.05823407842433067,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.6548434689339506,"priorPredictive":7,"posterior":0.05823407842433067,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.7455821330661383,"priorPredictive":19,"posterior":0.07587753412970602,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.7455821330661383,"priorPredictive":19,"posterior":0.07587753412970602,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8197208281293544,"priorPredictive":15,"posterior":0.09353734687950814,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8197208281293544,"priorPredictive":15,"posterior":0.09353734687950814,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8197208281293544,"priorPredictive":15,"posterior":0.09353734687950814,"posteriorPredictive":0}{"prior":0.37184531770064505,"priorPredictive":9,"posterior":0.04130099559342534,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.37184531770064505,"priorPredictive":9,"posterior":0.04130099559342534,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.5789998297098516,"priorPredictive":15,"posterior":0.07530907858926725,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.5789998297098516,"priorPredictive":15,"posterior":0.07530907858926725,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.6485505375224654,"priorPredictive":12,"posterior":0.033369819129950046,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.6485505375224654,"priorPredictive":12,"posterior":0.033369819129950046,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.322261421997676,"priorPredictive":8,"posterior":0.04855782846692752,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.322261421997676,"priorPredictive":8,"posterior":0.04855782846692752,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.322261421997676,"priorPredictive":8,"posterior":0.04855782846692752,"posteriorPredictive":0}{"prior":0.8336204527435611,"priorPredictive":15,"posterior":0.012406515754314352,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8336204527435611,"priorPredictive":15,"posterior":0.012406515754314352,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.7017300808511558,"priorPredictive":14,"posterior":0.13566134503975974,"posteriorPredictive":3} A = 0.000 B = 0.000{"prior":0.7017300808511558,"priorPredictive":14,"posterior":0.13566134503975974,"posteriorPredictive":3} A = 0.000 B = 0.000{"prior":0.5054074488067097,"priorPredictive":13,"posterior":0.07137746686174377,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.5054074488067097,"priorPredictive":13,"posterior":0.07137746686174377,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.6922361024980416,"priorPredictive":16,"posterior":0.07137746686174377,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.6922361024980416,"priorPredictive":16,"posterior":0.07137746686174377,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.6922361024980416,"priorPredictive":16,"posterior":0.07137746686174377,"posteriorPredictive":0}{"prior":0.5118894617481698,"priorPredictive":10,"posterior":0.07137746686174377,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.5118894617481698,"priorPredictive":10,"posterior":0.07137746686174377,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.16421948495124625,"priorPredictive":5,"posterior":0.07137746686174377,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.16421948495124625,"priorPredictive":5,"posterior":0.07137746686174377,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.15224374107893568,"priorPredictive":7,"posterior":0.04194725632035361,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.15224374107893568,"priorPredictive":7,"posterior":0.04194725632035361,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.07510475971978253,"priorPredictive":3,"posterior":0.13516110062713427,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.07510475971978253,"priorPredictive":3,"posterior":0.13516110062713427,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.07510475971978253,"priorPredictive":3,"posterior":0.13516110062713427,"posteriorPredictive":0}{"prior":0.07510475971978253,"priorPredictive":1,"posterior":0.11126587707345145,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.07510475971978253,"priorPredictive":1,"posterior":0.11126587707345145,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8579051852723334,"priorPredictive":14,"posterior":0.030393157587957773,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8579051852723334,"priorPredictive":14,"posterior":0.030393157587957773,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8353033502303364,"priorPredictive":18,"posterior":0.030393157587957773,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8353033502303364,"priorPredictive":18,"posterior":0.030393157587957773,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8971537842157771,"priorPredictive":17,"posterior":0.04446623956642922,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8971537842157771,"priorPredictive":17,"posterior":0.04446623956642922,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8971537842157771,"priorPredictive":17,"posterior":0.04446623956642922,"posteriorPredictive":0}{"prior":0.6373085638643181,"priorPredictive":14,"posterior":0.17967168220194285,"posteriorPredictive":2} A = 0.000 B = 0.000{"prior":0.6373085638643181,"priorPredictive":14,"posterior":0.17967168220194285,"posteriorPredictive":2} A = 0.000 B = 0.000{"prior":0.8461678499628906,"priorPredictive":19,"posterior":0.06467309802594447,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.8461678499628906,"priorPredictive":19,"posterior":0.06467309802594447,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.669164781934829,"priorPredictive":12,"posterior":0.1581412951255428,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.669164781934829,"priorPredictive":12,"posterior":0.1581412951255428,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.4597857492616014,"priorPredictive":8,"posterior":0.04708113295136373,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.4597857492616014,"priorPredictive":8,"posterior":0.04708113295136373,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.4597857492616014,"priorPredictive":8,"posterior":0.04708113295136373,"posteriorPredictive":0}{"prior":0.7451837155590839,"priorPredictive":12,"posterior":0.04708113295136373,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.7451837155590839,"priorPredictive":12,"posterior":0.04708113295136373,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.24367534281528347,"priorPredictive":3,"posterior":0.1315392037359104,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.24367534281528347,"priorPredictive":3,"posterior":0.1315392037359104,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.4212824823007278,"priorPredictive":7,"posterior":0.13735215903926684,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.4212824823007278,"priorPredictive":7,"posterior":0.13735215903926684,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.3386492420820203,"priorPredictive":6,"posterior":0.05890362473845322,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.3386492420820203,"priorPredictive":6,"posterior":0.05890362473845322,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.3386492420820203,"priorPredictive":6,"posterior":0.05890362473845322,"posteriorPredictive":1}{"prior":0.18422060290001577,"priorPredictive":5,"posterior":0.26741570587698615,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.18422060290001577,"priorPredictive":5,"posterior":0.26741570587698615,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.05463198527914998,"priorPredictive":0,"posterior":0.2364325227389659,"posteriorPredictive":4} A = 0.000 B = 0.000{"prior":0.05463198527914998,"priorPredictive":0,"posterior":0.2364325227389659,"posteriorPredictive":4} A = 0.000 B = 0.000{"prior":0.13635917842231238,"priorPredictive":2,"posterior":0.18288461967886946,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.13635917842231238,"priorPredictive":2,"posterior":0.18288461967886946,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.1716724849425178,"priorPredictive":3,"posterior":0.09973818562976017,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.1716724849425178,"priorPredictive":3,"posterior":0.09973818562976017,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.1716724849425178,"priorPredictive":3,"posterior":0.09973818562976017,"posteriorPredictive":1}{"prior":0.2031382899641909,"priorPredictive":4,"posterior":0.10509278845495318,"posteriorPredictive":2} A = 0.000 B = 0.000{"prior":0.2031382899641909,"priorPredictive":4,"posterior":0.10509278845495318,"posteriorPredictive":2} A = 0.000 B = 0.000{"prior":0.0863048670541319,"priorPredictive":3,"posterior":0.06628301628183798,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.0863048670541319,"priorPredictive":3,"posterior":0.06628301628183798,"posteriorPredictive":0} A = 0.000 B = 0.000{"prior":0.1299395905614667,"priorPredictive":5,"posterior":0.06452409106460916,"posteriorPredictive":1} A = 0.000 B = 0.000{"prior":0.1299395905614667,"priorPredictive":5,"posterior":0.06452409106460916,"posteriorPredictive":1} A = 0.000 B = 0.000
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<1 1.000 15.2029 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-conditional-dependence / ex1.a
shape record(prior, death, deathAndCold, deathAndNoCold) s46 +p TV<.056.8e-6 runs 8/8
per-run
00 prompt

Imagine that you are an epidemiologist determining people's cause of death. There are two main diseases: cancer (rare, P = 0.00001, often fatal P(death|cancer)=0.9) and the common cold (P = 0.2, rarely fatal P(death|cold)=0.00006). Very rarely, people die of other causes (P = 0.000000001). Return an object literal with four marginals over cancer: - prior: unconditional - death: given death - deathAndCold: given death && cold - deathAndNoCold: given death && !cold

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (({
2 prior: Infer({method: 'enumerate'}, function() {
3var cancer = flip(0.00001);
4var cold = flip(0.2);
5var death_by_cancer = cancer && flip(0.9);
6var death_by_cold = cold && flip(0.00006);
7var other_death = flip(0.000000001);
8var death = death_by_cancer || death_by_cold || other_death;
9 return cancer;
10 }),
11 death: Infer({method: 'enumerate'}, function() {
12var cancer = flip(0.00001);
13var cold = flip(0.2);
14var death_by_cancer = cancer && flip(0.9);
15var death_by_cold = cold && flip(0.00006);
16var other_death = flip(0.000000001);
17var death = death_by_cancer || death_by_cold || other_death;
18 condition(death);
19 return cancer;
20 }),
21 deathAndCold: Infer({method: 'enumerate'}, function() {
22var cancer = flip(0.00001);
23var cold = flip(0.2);
24var death_by_cancer = cancer && flip(0.9);
25var death_by_cold = cold && flip(0.00006);
26var other_death = flip(0.000000001);
27var death = death_by_cancer || death_by_cold || other_death;
28 condition(death && cold);
29 return cancer;
30 }),
31 deathAndNoCold: Infer({method: 'enumerate'}, function() {
32var cancer = flip(0.00001);
33var cold = flip(0.2);
34var death_by_cancer = cancer && flip(0.9);
35var death_by_cold = cold && flip(0.00006);
36var other_death = flip(0.000000001);
37var death = death_by_cancer || death_by_cold || other_death;
38 condition(death && !cold);
39 return cancer;
40 })
41}));
42
s46 +psonnet-46-primer-v3TV<.056.8e-6
webppl
1var model = function() {
2 var cancer = flip(0.00001);
3 var cold = flip(0.2);
4
5 var pDeath = (cancer ? 0.9 : 0) +
6 (cold ? 0.00006 : 0) +
7 0.000000001;
8 // Clamp to [0,1]
9 var pDeathClamped = Math.min(1, pDeath);
10
11 var death = flip(pDeathClamped);
12
13 return {cancer: cancer, cold: cold, death: death};
14};
15
16var prior = Infer({method: 'enumerate'}, function() {
17 var cancer = flip(0.00001);
18 return cancer;
19});
20
21var death = Infer({method: 'enumerate'}, function() {
22 var r = model();
23 condition(r.death);
24 return r.cancer;
25});
26
27var deathAndCold = Infer({method: 'enumerate'}, function() {
28 var r = model();
29 condition(r.death && r.cold);
30 return r.cancer;
31});
32
33var deathAndNoCold = Infer({method: 'enumerate'}, function() {
34 var r = model();
35 condition(r.death && !r.cold);
36 return r.cancer;
37});
38
39var ANSWER = {
40 prior: prior,
41 death: death,
42 deathAndCold: deathAndCold,
43 deathAndNoCold: deathAndNoCold
44};
02outputrecord(prior, death, deathAndCold, deathAndNoCold)
GT
prior=dist(2)
death=dist(2)
deathAndCold=dist(2)
deathAndNoCold=dist(2)
s46 +p
prior=dist(2)
death=dist(2)
deathAndCold=dist(2)
deathAndNoCold=dist(2)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<.05 4.2e-16 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.05 3.8e-6 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.05 6.8e-6 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.05 6.8e-6 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-conditional-dependence / ex1.b
shape record(prior, death, deathAndCancer, deathAndNoCancer) s46 +p TV<.059.6e-6 runs 8/8
per-run
00 prompt

Imagine that you are an epidemiologist determining people's cause of death. There are two main diseases: cancer (rare, P = 0.00001, often fatal P(death|cancer)=0.9) and the common cold (P = 0.2, rarely fatal P(death|cold)=0.00006). Very rarely, people die of other causes (P = 0.000000001). Return an object literal with four marginals over cold: - prior: unconditional - death: given death - deathAndCancer: given death && cancer - deathAndNoCancer: given death && !cancer

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (({
2 prior: Infer({method: 'enumerate'}, function() {
3var cancer = flip(0.00001);
4var cold = flip(0.2);
5var death_by_cancer = cancer && flip(0.9);
6var death_by_cold = cold && flip(0.00006);
7var other_death = flip(0.000000001);
8var death = death_by_cancer || death_by_cold || other_death;
9 return cold;
10 }),
11 death: Infer({method: 'enumerate'}, function() {
12var cancer = flip(0.00001);
13var cold = flip(0.2);
14var death_by_cancer = cancer && flip(0.9);
15var death_by_cold = cold && flip(0.00006);
16var other_death = flip(0.000000001);
17var death = death_by_cancer || death_by_cold || other_death;
18 condition(death);
19 return cold;
20 }),
21 deathAndCancer: Infer({method: 'enumerate'}, function() {
22var cancer = flip(0.00001);
23var cold = flip(0.2);
24var death_by_cancer = cancer && flip(0.9);
25var death_by_cold = cold && flip(0.00006);
26var other_death = flip(0.000000001);
27var death = death_by_cancer || death_by_cold || other_death;
28 condition(death && cancer);
29 return cold;
30 }),
31 deathAndNoCancer: Infer({method: 'enumerate'}, function() {
32var cancer = flip(0.00001);
33var cold = flip(0.2);
34var death_by_cancer = cancer && flip(0.9);
35var death_by_cold = cold && flip(0.00006);
36var other_death = flip(0.000000001);
37var death = death_by_cancer || death_by_cold || other_death;
38 condition(death && !cancer);
39 return cold;
40 })
41}));
42
s46 +psonnet-46-primer-v3TV<.059.6e-6
webppl
1var model = function() {
2 var cancer = flip(0.00001);
3 var cold = flip(0.2);
4
5 var pDeath = (cancer ? 0.9 : 0) + (cold ? 0.00006 : 0) + 0.000000001;
6 // Cap at 1 to be safe
7 var pDeathCapped = Math.min(pDeath, 1);
8 var death = flip(pDeathCapped);
9
10 return {cancer: cancer, cold: cold, death: death};
11};
12
13var prior = Infer({method: 'enumerate'}, function() {
14 var r = model();
15 return r.cold;
16});
17
18var death = Infer({method: 'enumerate'}, function() {
19 var r = model();
20 condition(r.death);
21 return r.cold;
22});
23
24var deathAndCancer = Infer({method: 'enumerate'}, function() {
25 var r = model();
26 condition(r.death && r.cancer);
27 return r.cold;
28});
29
30var deathAndNoCancer = Infer({method: 'enumerate'}, function() {
31 var r = model();
32 condition(r.death && !r.cancer);
33 return r.cold;
34});
35
36var ANSWER = {
37 prior: prior,
38 death: death,
39 deathAndCancer: deathAndCancer,
40 deathAndNoCancer: deathAndNoCancer
41};
02outputrecord(prior, death, deathAndCancer, deathAndNoCancer)
GT
prior=dist(2)
death=dist(2)
deathAndCancer=dist(2)
deathAndNoCancer=dist(2)
s46 +p
prior=dist(2)
death=dist(2)
deathAndCancer=dist(2)
deathAndNoCancer=dist(2)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<.05 3.9e-16 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.05 8.0e-16 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.05 3.9e-16 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<1 0.800 7.1953 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer fail ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.05 9.6e-6 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.05 4.2e-17 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.05 4.2e-17 0.0000 ·
probmods2-learning-as-conditional-inference / ex1.1
shape value s46 +p val+ runs 8/8
per-run
00 prompt

Given this 'fair-vs-uniform' coin model:

webppl
1var weightPosterior = function(observedData){
2 return Infer({method: 'MCMC', burn:1000, samples: 10000}, function() {
3 var isFair = flip(0.9);
4 var realWeight = isFair ? 0.5 : uniform({a:0, b:1});
5 var coin = Bernoulli({p: realWeight});
6 var obsFn = function(datum){ observe(coin, datum=='h') };
7 mapData({data: observedData}, obsFn);
8 return realWeight;
9 })
10}

This implies a two-faced coin and any other biased coin are equally likely. Adjust the model so that within the biased class (probability 0.1 in the prior), the coin is two-faced with probability 0.7 and otherwise uniform on (0, 1). End your program with var fullDataSet = repeat(50, function() { 'h' }); var observedDataSizes = [0,1,2,4,6,8,10,12,15,20,25,30,40,50]; map(function(N) { expectation(weightPosterior(fullDataSet.slice(0, N))) }, observedDataSizes) (an array of expected coin weights at each data size).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var weightPosterior = function(observedData) {
2 return Infer({method: 'MCMC', burn:1000, samples: 10000}, function() {
3 var isFair = flip(0.9);
4 var isTwoFaced = flip(0.7);
5 var realWeight = isFair ? 0.5 : (isTwoFaced ? 1 : uniform({a:0, b:1}));
6 var coin = Bernoulli({p: realWeight});
7 var obsFn = function(datum) { observe(coin, datum=='h') };
8 mapData({data: observedData}, obsFn);
9 return realWeight;
10 })
11};
12
13var fullDataSet = repeat(50, function() { 'h' });
14var observedDataSizes = [0,1,2,4,6,8,10,12,15,20,25,30,40,50];
15var ANSWER = (map(function(N) { expectation(weightPosterior(fullDataSet.slice(0, N))) }, observedDataSizes));
16
s46 +psonnet-46-primer-v3val+
webppl
1var weightPosterior = function(observedData){
2 return Infer({method: 'MCMC', burn:1000, samples: 10000}, function() {
3 var isFair = flip(0.9);
4 var realWeight = isFair ? 0.5 : (flip(0.7) ? 1.0 : uniform({a:0, b:1}));
5 var coin = Bernoulli({p: realWeight});
6 var obsFn = function(datum){ observe(coin, datum=='h') };
7 mapData({data: observedData}, obsFn);
8 return realWeight;
9 })
10}
11
12var fullDataSet = repeat(50, function() { return 'h'; });
13var observedDataSizes = [0,1,2,4,6,8,10,12,15,20,25,30,40,50];
14var ANSWER = map(function(N) { expectation(weightPosterior(fullDataSet.slice(0, N))) }, observedDataSizes);
02outputvalue
GT
[0.5355, 0.5659, 0.6160, 0.7918, 0.9311, 0.9643, 0.9920, 0.9960, 0.9982, 0.9990, 0.9992, 0.9996, 0.9998, 0.9998]
s46 +p
[0.5356, 0.5717, 0.6224, 0.7914, 0.9264, 0.9726, 0.9933, 0.9964, 0.9982, 0.9988, 0.9993, 0.9996, 0.9998, 0.9998]
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer val+ ·
haiku-45-primer-v3 haiku-4.5 +primer val- ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking val- ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer val+ ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer val+ ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking fail ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking val- ·
probmods2-learning-as-conditional-inference / ex2.1
shape record(prior, post) s46 +p TV<11.000 runs 8/8
per-run
00 prompt

Given this Beta(10,10)-prior coin model and a data set alternating heads/tails 50 times each:

webppl
1var pseudoCounts = {a: 10, b: 10};
2var weightPosterior = function(observedData){
3 return Infer({method: 'MCMC', burn:1000, samples: 1000}, function() {
4 var coinWeight = sample(Beta(pseudoCounts));
5 var coinDist = Bernoulli({p: coinWeight});
6 var obsFn = function(datum){ observe(coinDist, datum=='h') };
7 mapData({data: observedData}, obsFn);
8 return coinWeight;
9 })
10}
11var fullDataSet = repeat(50, function() { ['h', 't'] }).flat();

Compute the prior distribution and the posterior after observing the full data set. Return an object literal with two distributions: - prior: the Beta(10,10) prior - post: the posterior after all observations

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var pseudoCounts = {a: 10, b: 10};
2
3var weightPosterior = function(observedData){
4 return Infer({method: 'MCMC', burn:1000, samples: 1000}, function() {
5 var coinWeight = sample(Beta(pseudoCounts));
6 var coinDist = Bernoulli({p: coinWeight});
7 var obsFn = function(datum){ observe(coinDist, datum=='h') };
8 mapData({data: observedData}, obsFn);
9 return coinWeight;
10 })
11};
12
13var fullDataSet = repeat(50, function() { ['h', 't'] }).flat();
14var ANSWER = (({
15 prior: Beta(pseudoCounts),
16 post: weightPosterior(fullDataSet)
17}));
18
s46 +psonnet-46-primer-v3TV<11.000
webppl
1var pseudoCounts = {a: 10, b: 10};
2
3var weightPosterior = function(observedData){
4 return Infer({method: 'MCMC', burn:1000, samples: 5000}, function() {
5 var coinWeight = sample(Beta(pseudoCounts));
6 var coinDist = Bernoulli({p: coinWeight});
7 var obsFn = function(datum){ observe(coinDist, datum=='h'); };
8 mapData({data: observedData}, obsFn);
9 return coinWeight;
10 });
11};
12
13var fullDataSet = _.flatten(repeat(50, function() { return ['h', 't']; }));
14
15var prior = Infer({method: 'forward', samples: 5000}, function() {
16 return sample(Beta(pseudoCounts));
17});
18
19var post = weightPosterior(fullDataSet);
20
21var ANSWER = {prior: prior, post: post};
02outputrecord(prior, post)
GT
prior={"__kind":"distribution_continuous","repr":"Beta({ a: 10, b: 10 })"}
post=dist(48)
s46 +p
prior=dist(48)
post=dist(48)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<1 1.000 17.0246 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<1 1.000 15.4358 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<1 1.000 15.4358 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<1 0.800 13.6814 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<1 0.800 13.6814 ·
probmods2-learning-as-conditional-inference / ex2.2
shape value s46 +p val+ runs 8/8
per-run
00 prompt

Given this Beta(10,10)-prior coin model:

webppl
1var pseudoCounts = {a: 10, b: 10};
2var weightPosterior = function(observedData){
3 return Infer({method: 'MCMC', burn:1000, samples: 1000}, function() {
4 var coinWeight = sample(Beta(pseudoCounts));
5 var coinDist = Bernoulli({p: coinWeight});
6 var obsFn = function(datum){ observe(coinDist, datum=='h') };
7 mapData({data: observedData}, obsFn);
8 return coinWeight;
9 })
10}

Compute the *variance* of the posterior at each of these data sizes: [0,2,4,8,16,32,64,128,256,512], using the data set repeat(256, function(){['h','t']}).flat() (alternating). Variance is expectation(posterior, function(x) { Math.pow(x - mean, 2) }) where mean = expectation(posterior). End with the array of variances.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var pseudoCounts = {a: 10, b: 10};
2
3var weightPosterior = function(observedData){
4 return Infer({method: 'MCMC', burn:1000, samples: 1000}, function() {
5 var coinWeight = sample(Beta(pseudoCounts));
6 var coinDist = Bernoulli({p: coinWeight});
7 var obsFn = function(datum){ observe(coinDist, datum=='h') };
8 mapData({data: observedData}, obsFn);
9 return coinWeight;
10 })
11};
12
13var fullDataSet = repeat(256, function(){['h', 't']}).flat();
14var observedDataSizes = [0,2,4,8,16,32,64,128,256,512];
15var ANSWER = (map(function(N) {
16 var posterior = weightPosterior(fullDataSet.slice(0,N));
17 var mean = expectation(posterior);
18 return expectation(posterior, function(x) { Math.pow(x - mean, 2) });
19}, observedDataSizes));
20
s46 +psonnet-46-primer-v3val+
webppl
1var pseudoCounts = {a: 10, b: 10};
2
3var weightPosterior = function(observedData){
4 return Infer({method: 'MCMC', burn:1000, samples: 1000}, function() {
5 var coinWeight = sample(Beta(pseudoCounts));
6 var coinDist = Bernoulli({p: coinWeight});
7 var obsFn = function(datum){ observe(coinDist, datum=='h') };
8 mapData({data: observedData}, obsFn);
9 return coinWeight;
10 })
11};
12
13// Build the alternating dataset of length 512
14var fullData = _.flatten(repeat(256, function(){ return ['h','t']; }));
15
16var dataSizes = [0,2,4,8,16,32,64,128,256,512];
17
18var variances = map(function(n) {
19 var data = fullData.slice(0, n);
20 var posterior = weightPosterior(data);
21 var mean = expectation(posterior, function(x){ return x; });
22 var variance = expectation(posterior, function(x){ return Math.pow(x - mean, 2); });
23 return variance;
24}, dataSizes);
25
26var ANSWER = variances;
02outputvalue
GT
[0.0119, 0.0107, 0.0101, 0.0088, 0.0066, 0.0045, 0.0029, 0.0018, 0.0009, 0.0005]
s46 +p
[0.0119, 0.0107, 0.0101, 0.0088, 0.0066, 0.0045, 0.0029, 0.0018, 0.0009, 0.0005]
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer val+ ·
haiku-45-primer-v3 haiku-4.5 +primer val+ ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking val+ ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking val+ ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer val+ ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer val+ ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking val+ ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking val+ ·
probmods2-mixture-models / ex1.a
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

You visit an alien planet and observe 10 aliens, each with three binary properties (antennae, green, blarghNoise). Build a mixture model with two latent kinds of aliens, each with its own per-property probability. Use Beta(.5, .5) priors independently on each of the three probabilities for each group, and a 50/50 prior over which group each alien belongs to. Memoize the per-group prototype with mem (so within one inference run, the group's prototype is consistent across aliens).

Data:

webppl
1var data = [
2 {antennae: false, green: false, blarghNoise: false},
3 {antennae: true, green: true, blarghNoise: true},
4 {antennae: true, green: true, blarghNoise: true},
5 {antennae: true, green: true, blarghNoise: true},
6 {antennae: false, green: false, blarghNoise: false},
7 {antennae: true, green: true, blarghNoise: true},
8 {antennae: false, green: false, blarghNoise: false},
9 {antennae: true, green: true, blarghNoise: true},
10 {antennae: false, green: false, blarghNoise: false},
11 {antennae: false, green: false, blarghNoise: false}
12];

End your program with Infer({method: 'MCMC', kernel: {HMC: {steps: 10, stepSize: .01}}, samples: 3000}, ...) returning the joint posterior {group1, group2} where each is the per-property probability object {antennae, green, blarghNoise}.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var properties = ['antennae', 'green', 'blarghNoise'];
2var data = [
3 {antennae : false, green: false, blarghNoise: false},
4 {antennae : true, green: true, blarghNoise: true},
5 {antennae : true, green: true, blarghNoise: true},
6 {antennae : true, green: true, blarghNoise: true},
7 {antennae : false, green: false, blarghNoise: false},
8 {antennae : true, green: true, blarghNoise: true},
9 {antennae : false, green: false, blarghNoise: false},
10 {antennae : true, green: true, blarghNoise: true},
11 {antennae : false, green: false, blarghNoise: false},
12 {antennae : false, green: false, blarghNoise: false}
13];
14
15var sampleGroupPrototype = mem(function(groupName) {
16 var probs = repeat(3, function(){ beta(.5, .5)});
17 return _.zipObject(properties, probs);
18});
19var ANSWER = (Infer({method: 'MCMC', kernel: {HMC: {steps: 10, stepSize: .01}}, samples: 3000},
20 function(){
21 mapData({data: data}, function(datum) {
22 var group = flip() ? 'group1' : 'group2';
23 var prototype = sampleGroupPrototype(group);
24 mapData({data: properties}, function(property) {
25 observe(Bernoulli({p: prototype[property]}), datum[property]);
26 });
27 });
28 return {group1: sampleGroupPrototype('group1'),
29 group2: sampleGroupPrototype('group2')};
30}));
31
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var data = [
2 {antennae: false, green: false, blarghNoise: false},
3 {antennae: true, green: true, blarghNoise: true},
4 {antennae: true, green: true, blarghNoise: true},
5 {antennae: true, green: true, blarghNoise: true},
6 {antennae: false, green: false, blarghNoise: false},
7 {antennae: true, green: true, blarghNoise: true},
8 {antennae: false, green: false, blarghNoise: false},
9 {antennae: true, green: true, blarghNoise: true},
10 {antennae: false, green: false, blarghNoise: false},
11 {antennae: false, green: false, blarghNoise: false}
12];
13
14var model = function() {
15 var prototype = mem(function(group) {
16 return {
17 antennae: beta(0.5, 0.5),
18 green: beta(0.5, 0.5),
19 blarghNoise: beta(0.5, 0.5)
20 };
21 });
22
23 mapData({data: data}, function(alien) {
24 var group = flip(0.5) ? 1 : 2;
25 var proto = prototype(group);
26 observe(Bernoulli({p: proto.antennae}), alien.antennae);
27 observe(Bernoulli({p: proto.green}), alien.green);
28 observe(Bernoulli({p: proto.blarghNoise}), alien.blarghNoise);
29 });
30
31 return {
32 group1: prototype(1),
33 group2: prototype(2)
34 };
35};
36
37var ANSWER = Infer({method: 'MCMC', kernel: {HMC: {steps: 10, stepSize: .01}}, samples: 3000}, model);
02output overlaydistribution
GT s46 +p48 bins
00.070.070.130.13{"group1":{"antennae":0.006843296715782295,"green":0.0019464891274908903,"blarghNoise":0.07779609046219303},"group2":{"antennae":0.9767789136267548,"green":0.9635589355187613,"blarghNoise":0.9757469596189057}} A = 0.130 B = 0.130{"group1":{"antennae":0.006843296715782295,"green":0.0019464891274908903,"blarghNoise":0.07779609046219303},"group2":{"antennae":0.9767789136267548,"green":0.9635589355187613,"blarghNoise":0.9757469596189057}} A = 0.130 B = 0.130{"group1":{"antennae":0.006843296715782295,"green":0.0019464891274908903,"blarghNoise":0.07779609046219303},"group2":{"antennae":0.9767789136267548,"green":0.9635589355187613,"blarghNoise":0.9757469596189057}}{"group1":{"antennae":0.0024218054098298636,"green":0.010240545073909813,"blarghNoise":0.02328661323121703},"group2":{"antennae":0.9936688464266652,"green":0.979657919495988,"blarghNoise":0.9981484919360298}} A = 0.130 B = 0.130{"group1":{"antennae":0.0024218054098298636,"green":0.010240545073909813,"blarghNoise":0.02328661323121703},"group2":{"antennae":0.9936688464266652,"green":0.979657919495988,"blarghNoise":0.9981484919360298}} A = 0.130 B = 0.130{"group1":{"antennae":0.05108867455191022,"green":0.010085913858230348,"blarghNoise":0.0013287647449168882},"group2":{"antennae":0.7547763300175776,"green":0.9615820791506244,"blarghNoise":0.9940218914104814}} A = 0.096 B = 0.096{"group1":{"antennae":0.05108867455191022,"green":0.010085913858230348,"blarghNoise":0.0013287647449168882},"group2":{"antennae":0.7547763300175776,"green":0.9615820791506244,"blarghNoise":0.9940218914104814}} A = 0.096 B = 0.096{"group1":{"antennae":0.008917891975878145,"green":0.02927045148986891,"blarghNoise":0.01047441875824349},"group2":{"antennae":0.9755915903714786,"green":0.6448096347671745,"blarghNoise":0.8928725877161263}} A = 0.035 B = 0.035{"group1":{"antennae":0.008917891975878145,"green":0.02927045148986891,"blarghNoise":0.01047441875824349},"group2":{"antennae":0.9755915903714786,"green":0.6448096347671745,"blarghNoise":0.8928725877161263}} A = 0.035 B = 0.035{"group1":{"antennae":0.051109191676894865,"green":0.19383912667468833,"blarghNoise":0.007507009532281998},"group2":{"antennae":0.9724409930732196,"green":0.9970893335585913,"blarghNoise":0.736965891724662}} A = 0.024 B = 0.024{"group1":{"antennae":0.051109191676894865,"green":0.19383912667468833,"blarghNoise":0.007507009532281998},"group2":{"antennae":0.9724409930732196,"green":0.9970893335585913,"blarghNoise":0.736965891724662}} A = 0.024 B = 0.024{"group1":{"antennae":0.051109191676894865,"green":0.19383912667468833,"blarghNoise":0.007507009532281998},"group2":{"antennae":0.9724409930732196,"green":0.9970893335585913,"blarghNoise":0.736965891724662}}{"group1":{"antennae":0.027772666179449713,"green":0.2652138202004681,"blarghNoise":0.02014698355268296},"group2":{"antennae":0.9977781436231783,"green":0.7961929608683055,"blarghNoise":0.9404758155279084}} A = 0.022 B = 0.022{"group1":{"antennae":0.027772666179449713,"green":0.2652138202004681,"blarghNoise":0.02014698355268296},"group2":{"antennae":0.9977781436231783,"green":0.7961929608683055,"blarghNoise":0.9404758155279084}} A = 0.022 B = 0.022{"group1":{"antennae":0.06980734082814882,"green":0.007959073440941053,"blarghNoise":0.009382566781502557},"group2":{"antennae":0.5683391257263686,"green":0.9895116937298691,"blarghNoise":0.5196222883774385}} A = 0.018 B = 0.018{"group1":{"antennae":0.06980734082814882,"green":0.007959073440941053,"blarghNoise":0.009382566781502557},"group2":{"antennae":0.5683391257263686,"green":0.9895116937298691,"blarghNoise":0.5196222883774385}} A = 0.018 B = 0.018{"group1":{"antennae":0.008764059258412553,"green":0.1921132725070227,"blarghNoise":0.01818122780787129},"group2":{"antennae":0.9659839646090187,"green":0.8118217548556669,"blarghNoise":0.9933799702586134}} A = 0.018 B = 0.018{"group1":{"antennae":0.008764059258412553,"green":0.1921132725070227,"blarghNoise":0.01818122780787129},"group2":{"antennae":0.9659839646090187,"green":0.8118217548556669,"blarghNoise":0.9933799702586134}} A = 0.018 B = 0.018{"group1":{"antennae":0.014429955445000269,"green":0.17256389587573967,"blarghNoise":0.045703846079712826},"group2":{"antennae":0.9830745996305494,"green":0.9922647565510622,"blarghNoise":0.9662176372485216}} A = 0.016 B = 0.016{"group1":{"antennae":0.014429955445000269,"green":0.17256389587573967,"blarghNoise":0.045703846079712826},"group2":{"antennae":0.9830745996305494,"green":0.9922647565510622,"blarghNoise":0.9662176372485216}} A = 0.016 B = 0.016{"group1":{"antennae":0.014429955445000269,"green":0.17256389587573967,"blarghNoise":0.045703846079712826},"group2":{"antennae":0.9830745996305494,"green":0.9922647565510622,"blarghNoise":0.9662176372485216}}{"group1":{"antennae":0.01621664435715911,"green":0.042580189067335725,"blarghNoise":0.05246278564578338},"group2":{"antennae":0.9878525549215914,"green":0.7758936889672967,"blarghNoise":0.9037331390967528}} A = 0.016 B = 0.016{"group1":{"antennae":0.01621664435715911,"green":0.042580189067335725,"blarghNoise":0.05246278564578338},"group2":{"antennae":0.9878525549215914,"green":0.7758936889672967,"blarghNoise":0.9037331390967528}} A = 0.016 B = 0.016{"group1":{"antennae":0.25660614755041317,"green":0.027981680861702725,"blarghNoise":0.01158327173423826},"group2":{"antennae":0.9956070517021565,"green":0.9451339950252926,"blarghNoise":0.9080191476179105}} A = 0.015 B = 0.015{"group1":{"antennae":0.25660614755041317,"green":0.027981680861702725,"blarghNoise":0.01158327173423826},"group2":{"antennae":0.9956070517021565,"green":0.9451339950252926,"blarghNoise":0.9080191476179105}} A = 0.015 B = 0.015{"group1":{"antennae":0.18090041427788076,"green":0.04547311558618006,"blarghNoise":0.03694877399275427},"group2":{"antennae":0.9919878721879385,"green":0.9315512390156455,"blarghNoise":0.9853588054462683}} A = 0.012 B = 0.012{"group1":{"antennae":0.18090041427788076,"green":0.04547311558618006,"blarghNoise":0.03694877399275427},"group2":{"antennae":0.9919878721879385,"green":0.9315512390156455,"blarghNoise":0.9853588054462683}} A = 0.012 B = 0.012{"group1":{"antennae":0.19381974878191932,"green":0.017379477292565025,"blarghNoise":0.09078158182741093},"group2":{"antennae":0.7440883288775969,"green":0.6911252088436737,"blarghNoise":0.9968388223587641}} A = 0.011 B = 0.011{"group1":{"antennae":0.19381974878191932,"green":0.017379477292565025,"blarghNoise":0.09078158182741093},"group2":{"antennae":0.7440883288775969,"green":0.6911252088436737,"blarghNoise":0.9968388223587641}} A = 0.011 B = 0.011{"group1":{"antennae":0.19381974878191932,"green":0.017379477292565025,"blarghNoise":0.09078158182741093},"group2":{"antennae":0.7440883288775969,"green":0.6911252088436737,"blarghNoise":0.9968388223587641}}{"group1":{"antennae":0.02201528825974322,"green":0.003740361350446259,"blarghNoise":0.1487301294474924},"group2":{"antennae":0.5347971059761042,"green":0.9830717983701317,"blarghNoise":0.9832312572001155}} A = 0.010 B = 0.010{"group1":{"antennae":0.02201528825974322,"green":0.003740361350446259,"blarghNoise":0.1487301294474924},"group2":{"antennae":0.5347971059761042,"green":0.9830717983701317,"blarghNoise":0.9832312572001155}} A = 0.010 B = 0.010{"group1":{"antennae":0.13003732728568745,"green":0.026359443646734815,"blarghNoise":0.011419466760147108},"group2":{"antennae":0.8972854175439118,"green":0.9406013859385066,"blarghNoise":0.9977347139020764}} A = 0.009 B = 0.009{"group1":{"antennae":0.13003732728568745,"green":0.026359443646734815,"blarghNoise":0.011419466760147108},"group2":{"antennae":0.8972854175439118,"green":0.9406013859385066,"blarghNoise":0.9977347139020764}} A = 0.009 B = 0.009{"group1":{"antennae":0.03906639178423413,"green":0.20321112222018292,"blarghNoise":0.06387674975651668},"group2":{"antennae":0.9544429582369257,"green":0.9863970013841863,"blarghNoise":0.9975317044962175}} A = 0.009 B = 0.009{"group1":{"antennae":0.03906639178423413,"green":0.20321112222018292,"blarghNoise":0.06387674975651668},"group2":{"antennae":0.9544429582369257,"green":0.9863970013841863,"blarghNoise":0.9975317044962175}} A = 0.009 B = 0.009{"group1":{"antennae":0.09334897855753921,"green":0.17137148384384907,"blarghNoise":0.07181976572371102},"group2":{"antennae":0.9389489628664294,"green":0.9910075182165745,"blarghNoise":0.9911153975425837}} A = 0.009 B = 0.009{"group1":{"antennae":0.09334897855753921,"green":0.17137148384384907,"blarghNoise":0.07181976572371102},"group2":{"antennae":0.9389489628664294,"green":0.9910075182165745,"blarghNoise":0.9911153975425837}} A = 0.009 B = 0.009{"group1":{"antennae":0.09334897855753921,"green":0.17137148384384907,"blarghNoise":0.07181976572371102},"group2":{"antennae":0.9389489628664294,"green":0.9910075182165745,"blarghNoise":0.9911153975425837}}{"group1":{"antennae":0.04259856299069281,"green":0.16482017431672988,"blarghNoise":0.1093903996415372},"group2":{"antennae":0.9682986266005165,"green":0.969029653672956,"blarghNoise":0.7657129667944425}} A = 0.008 B = 0.008{"group1":{"antennae":0.04259856299069281,"green":0.16482017431672988,"blarghNoise":0.1093903996415372},"group2":{"antennae":0.9682986266005165,"green":0.969029653672956,"blarghNoise":0.7657129667944425}} A = 0.008 B = 0.008{"group1":{"antennae":0.014675386035931028,"green":0.18748857010114253,"blarghNoise":0.025390128860673374},"group2":{"antennae":0.8965251161734162,"green":0.9981713435608119,"blarghNoise":0.8946227179595521}} A = 0.008 B = 0.008{"group1":{"antennae":0.014675386035931028,"green":0.18748857010114253,"blarghNoise":0.025390128860673374},"group2":{"antennae":0.8965251161734162,"green":0.9981713435608119,"blarghNoise":0.8946227179595521}} A = 0.008 B = 0.008{"group1":{"antennae":0.01701531139258419,"green":0.03131620258773086,"blarghNoise":0.04388751707773577},"group2":{"antennae":0.9582643011220291,"green":0.9030589251144654,"blarghNoise":0.9176366300490374}} A = 0.008 B = 0.008{"group1":{"antennae":0.01701531139258419,"green":0.03131620258773086,"blarghNoise":0.04388751707773577},"group2":{"antennae":0.9582643011220291,"green":0.9030589251144654,"blarghNoise":0.9176366300490374}} A = 0.008 B = 0.008{"group1":{"antennae":0.0036181216665470205,"green":0.1258850222917501,"blarghNoise":0.045752587492412546},"group2":{"antennae":0.7831724554075383,"green":0.9795465896477784,"blarghNoise":0.9330819129226616}} A = 0.008 B = 0.008{"group1":{"antennae":0.0036181216665470205,"green":0.1258850222917501,"blarghNoise":0.045752587492412546},"group2":{"antennae":0.7831724554075383,"green":0.9795465896477784,"blarghNoise":0.9330819129226616}} A = 0.008 B = 0.008{"group1":{"antennae":0.0036181216665470205,"green":0.1258850222917501,"blarghNoise":0.045752587492412546},"group2":{"antennae":0.7831724554075383,"green":0.9795465896477784,"blarghNoise":0.9330819129226616}}{"group1":{"antennae":0.4652269268602083,"green":0.018579931842136778,"blarghNoise":0.022964638605027288},"group2":{"antennae":0.9964488490669074,"green":0.8321141074946828,"blarghNoise":0.7983276217161863}} A = 0.007 B = 0.007{"group1":{"antennae":0.4652269268602083,"green":0.018579931842136778,"blarghNoise":0.022964638605027288},"group2":{"antennae":0.9964488490669074,"green":0.8321141074946828,"blarghNoise":0.7983276217161863}} A = 0.007 B = 0.007{"group1":{"antennae":0.37237159918405327,"green":0.010641425926352715,"blarghNoise":0.5065695012451934},"group2":{"antennae":0.8573750552129992,"green":0.5274138927501953,"blarghNoise":0.9699402807303443}} A = 0.007 B = 0.007{"group1":{"antennae":0.37237159918405327,"green":0.010641425926352715,"blarghNoise":0.5065695012451934},"group2":{"antennae":0.8573750552129992,"green":0.5274138927501953,"blarghNoise":0.9699402807303443}} A = 0.007 B = 0.007{"group1":{"antennae":0.047457621648364715,"green":0.040922685752409656,"blarghNoise":0.012183975564279723},"group2":{"antennae":0.9857695720727073,"green":0.9972708139207982,"blarghNoise":0.9622021183698455}} A = 0.007 B = 0.007{"group1":{"antennae":0.047457621648364715,"green":0.040922685752409656,"blarghNoise":0.012183975564279723},"group2":{"antennae":0.9857695720727073,"green":0.9972708139207982,"blarghNoise":0.9622021183698455}} A = 0.007 B = 0.007{"group1":{"antennae":0.3008553709432344,"green":0.04926595144558653,"blarghNoise":0.4374427098051892},"group2":{"antennae":0.9574125392750786,"green":0.8738189081314608,"blarghNoise":0.9791552157076756}} A = 0.007 B = 0.007{"group1":{"antennae":0.3008553709432344,"green":0.04926595144558653,"blarghNoise":0.4374427098051892},"group2":{"antennae":0.9574125392750786,"green":0.8738189081314608,"blarghNoise":0.9791552157076756}} A = 0.007 B = 0.007{"group1":{"antennae":0.3008553709432344,"green":0.04926595144558653,"blarghNoise":0.4374427098051892},"group2":{"antennae":0.9574125392750786,"green":0.8738189081314608,"blarghNoise":0.9791552157076756}}{"group1":{"antennae":0.25169038504216573,"green":0.03816666280652182,"blarghNoise":0.3869049753068044},"group2":{"antennae":0.9501131050575419,"green":0.9505902493200574,"blarghNoise":0.890361130713098}} A = 0.006 B = 0.006{"group1":{"antennae":0.25169038504216573,"green":0.03816666280652182,"blarghNoise":0.3869049753068044},"group2":{"antennae":0.9501131050575419,"green":0.9505902493200574,"blarghNoise":0.890361130713098}} A = 0.006 B = 0.006{"group1":{"antennae":0.038132480128636986,"green":0.00796638487962522,"blarghNoise":0.09870513854734594},"group2":{"antennae":0.7965960526731795,"green":0.6496078463108153,"blarghNoise":0.9845993472007597}} A = 0.006 B = 0.006{"group1":{"antennae":0.038132480128636986,"green":0.00796638487962522,"blarghNoise":0.09870513854734594},"group2":{"antennae":0.7965960526731795,"green":0.6496078463108153,"blarghNoise":0.9845993472007597}} A = 0.006 B = 0.006{"group1":{"antennae":0.018037814661742924,"green":0.032547480319938135,"blarghNoise":0.03536678070180526},"group2":{"antennae":0.9937990946038862,"green":0.9718737620168727,"blarghNoise":0.9504469735955652}} A = 0.006 B = 0.006{"group1":{"antennae":0.018037814661742924,"green":0.032547480319938135,"blarghNoise":0.03536678070180526},"group2":{"antennae":0.9937990946038862,"green":0.9718737620168727,"blarghNoise":0.9504469735955652}} A = 0.006 B = 0.006{"group1":{"antennae":0.028815146653530615,"green":0.021178692065913014,"blarghNoise":0.03676499409989762},"group2":{"antennae":0.9425585416607583,"green":0.9238341495882201,"blarghNoise":0.965791442722046}} A = 0.006 B = 0.006{"group1":{"antennae":0.028815146653530615,"green":0.021178692065913014,"blarghNoise":0.03676499409989762},"group2":{"antennae":0.9425585416607583,"green":0.9238341495882201,"blarghNoise":0.965791442722046}} A = 0.006 B = 0.006{"group1":{"antennae":0.028815146653530615,"green":0.021178692065913014,"blarghNoise":0.03676499409989762},"group2":{"antennae":0.9425585416607583,"green":0.9238341495882201,"blarghNoise":0.965791442722046}}{"group1":{"antennae":0.01098594762202175,"green":0.29260451565545503,"blarghNoise":0.07797415995081397},"group2":{"antennae":0.7899739296528788,"green":0.9840074077401544,"blarghNoise":0.7673562915082377}} A = 0.006 B = 0.006{"group1":{"antennae":0.01098594762202175,"green":0.29260451565545503,"blarghNoise":0.07797415995081397},"group2":{"antennae":0.7899739296528788,"green":0.9840074077401544,"blarghNoise":0.7673562915082377}} A = 0.006 B = 0.006{"group1":{"antennae":0.024067788533943545,"green":0.15119872398248016,"blarghNoise":0.07242368996517716},"group2":{"antennae":0.9814004621545708,"green":0.969679798215674,"blarghNoise":0.9558195135354058}} A = 0.006 B = 0.006{"group1":{"antennae":0.024067788533943545,"green":0.15119872398248016,"blarghNoise":0.07242368996517716},"group2":{"antennae":0.9814004621545708,"green":0.969679798215674,"blarghNoise":0.9558195135354058}} A = 0.006 B = 0.006{"group1":{"antennae":0.10066093787058589,"green":0.05795151454472881,"blarghNoise":0.06381199587913403},"group2":{"antennae":0.9643345447304799,"green":0.9703581326611638,"blarghNoise":0.920552269711769}} A = 0.006 B = 0.006{"group1":{"antennae":0.10066093787058589,"green":0.05795151454472881,"blarghNoise":0.06381199587913403},"group2":{"antennae":0.9643345447304799,"green":0.9703581326611638,"blarghNoise":0.920552269711769}} A = 0.006 B = 0.006{"group1":{"antennae":0.10995211022465724,"green":0.06382993052122887,"blarghNoise":0.02745792617079965},"group2":{"antennae":0.9561872844700815,"green":0.9830043087503413,"blarghNoise":0.748633188780973}} A = 0.006 B = 0.006{"group1":{"antennae":0.10995211022465724,"green":0.06382993052122887,"blarghNoise":0.02745792617079965},"group2":{"antennae":0.9561872844700815,"green":0.9830043087503413,"blarghNoise":0.748633188780973}} A = 0.006 B = 0.006{"group1":{"antennae":0.10995211022465724,"green":0.06382993052122887,"blarghNoise":0.02745792617079965},"group2":{"antennae":0.9561872844700815,"green":0.9830043087503413,"blarghNoise":0.748633188780973}}{"group1":{"antennae":0.07864294925973088,"green":0.22302784396517597,"blarghNoise":0.004131063040261746},"group2":{"antennae":0.6557128194443436,"green":0.9426549425313347,"blarghNoise":0.9026990475500938}} A = 0.005 B = 0.005{"group1":{"antennae":0.07864294925973088,"green":0.22302784396517597,"blarghNoise":0.004131063040261746},"group2":{"antennae":0.6557128194443436,"green":0.9426549425313347,"blarghNoise":0.9026990475500938}} A = 0.005 B = 0.005{"group1":{"antennae":0.3362686833792877,"green":0.03283536032442993,"blarghNoise":0.019665398624510534},"group2":{"antennae":0.8500948099028158,"green":0.9949912201851474,"blarghNoise":0.8858801855358989}} A = 0.005 B = 0.005{"group1":{"antennae":0.3362686833792877,"green":0.03283536032442993,"blarghNoise":0.019665398624510534},"group2":{"antennae":0.8500948099028158,"green":0.9949912201851474,"blarghNoise":0.8858801855358989}} A = 0.005 B = 0.005{"group1":{"antennae":0.08933370606664748,"green":0.07994654521735911,"blarghNoise":0.04048511084967831},"group2":{"antennae":0.6921868006387075,"green":0.9923758375330882,"blarghNoise":0.9888529216484997}} A = 0.005 B = 0.005{"group1":{"antennae":0.08933370606664748,"green":0.07994654521735911,"blarghNoise":0.04048511084967831},"group2":{"antennae":0.6921868006387075,"green":0.9923758375330882,"blarghNoise":0.9888529216484997}} A = 0.005 B = 0.005{"group1":{"antennae":0.004032417447610535,"green":0.25945457588780696,"blarghNoise":0.11234570242806338},"group2":{"antennae":0.7001309942690906,"green":0.8856455185426401,"blarghNoise":0.9849351999723372}} A = 0.005 B = 0.005{"group1":{"antennae":0.004032417447610535,"green":0.25945457588780696,"blarghNoise":0.11234570242806338},"group2":{"antennae":0.7001309942690906,"green":0.8856455185426401,"blarghNoise":0.9849351999723372}} A = 0.005 B = 0.005{"group1":{"antennae":0.004032417447610535,"green":0.25945457588780696,"blarghNoise":0.11234570242806338},"group2":{"antennae":0.7001309942690906,"green":0.8856455185426401,"blarghNoise":0.9849351999723372}}{"group1":{"antennae":0.27734638766891595,"green":0.012982330676294156,"blarghNoise":0.06725158923010717},"group2":{"antennae":0.9650764446793404,"green":0.9674911166835255,"blarghNoise":0.8053922565456347}} A = 0.005 B = 0.005{"group1":{"antennae":0.27734638766891595,"green":0.012982330676294156,"blarghNoise":0.06725158923010717},"group2":{"antennae":0.9650764446793404,"green":0.9674911166835255,"blarghNoise":0.8053922565456347}} A = 0.005 B = 0.005{"group1":{"antennae":0.2644414809417439,"green":0.0025291503282681427,"blarghNoise":0.4885807980854076},"group2":{"antennae":0.9958621385705592,"green":0.5498884745396283,"blarghNoise":0.9313764406434802}} A = 0.005 B = 0.005{"group1":{"antennae":0.2644414809417439,"green":0.0025291503282681427,"blarghNoise":0.4885807980854076},"group2":{"antennae":0.9958621385705592,"green":0.5498884745396283,"blarghNoise":0.9313764406434802}} A = 0.005 B = 0.005{"group1":{"antennae":0.066378765890574,"green":0.04134665951188915,"blarghNoise":0.048438051434989346},"group2":{"antennae":0.6863265388800488,"green":0.9976345808803012,"blarghNoise":0.8676773855766504}} A = 0.005 B = 0.005{"group1":{"antennae":0.066378765890574,"green":0.04134665951188915,"blarghNoise":0.048438051434989346},"group2":{"antennae":0.6863265388800488,"green":0.9976345808803012,"blarghNoise":0.8676773855766504}} A = 0.005 B = 0.005{"group1":{"antennae":0.6748303414167232,"green":0.01211907645221709,"blarghNoise":0.032930937074662554},"group2":{"antennae":0.8334003528332968,"green":0.9748999300552764,"blarghNoise":0.7604879554204631}} A = 0.005 B = 0.005{"group1":{"antennae":0.6748303414167232,"green":0.01211907645221709,"blarghNoise":0.032930937074662554},"group2":{"antennae":0.8334003528332968,"green":0.9748999300552764,"blarghNoise":0.7604879554204631}} A = 0.005 B = 0.005{"group1":{"antennae":0.6748303414167232,"green":0.01211907645221709,"blarghNoise":0.032930937074662554},"group2":{"antennae":0.8334003528332968,"green":0.9748999300552764,"blarghNoise":0.7604879554204631}}{"group1":{"antennae":0.07000508952477476,"green":0.006282603302755924,"blarghNoise":0.034694242765456164},"group2":{"antennae":0.947230885469911,"green":0.7129321321223375,"blarghNoise":0.9004521640014513}} A = 0.005 B = 0.005{"group1":{"antennae":0.07000508952477476,"green":0.006282603302755924,"blarghNoise":0.034694242765456164},"group2":{"antennae":0.947230885469911,"green":0.7129321321223375,"blarghNoise":0.9004521640014513}} A = 0.005 B = 0.005{"group1":{"antennae":0.05478995629143152,"green":0.2654189772404017,"blarghNoise":0.11219758584406023},"group2":{"antennae":0.9747742078546686,"green":0.8235921574893377,"blarghNoise":0.9854390214172828}} A = 0.004 B = 0.004{"group1":{"antennae":0.05478995629143152,"green":0.2654189772404017,"blarghNoise":0.11219758584406023},"group2":{"antennae":0.9747742078546686,"green":0.8235921574893377,"blarghNoise":0.9854390214172828}} A = 0.004 B = 0.004{"group1":{"antennae":0.023490118452413822,"green":0.19047410191519837,"blarghNoise":0.061061043761798765},"group2":{"antennae":0.8511481870297137,"green":0.8832455621655476,"blarghNoise":0.9639430440464476}} A = 0.004 B = 0.004{"group1":{"antennae":0.023490118452413822,"green":0.19047410191519837,"blarghNoise":0.061061043761798765},"group2":{"antennae":0.8511481870297137,"green":0.8832455621655476,"blarghNoise":0.9639430440464476}} A = 0.004 B = 0.004{"group1":{"antennae":0.08704245555852813,"green":0.26932698146023665,"blarghNoise":0.0036446311274932596},"group2":{"antennae":0.9543357206577466,"green":0.9517296757014835,"blarghNoise":0.8829657426289149}} A = 0.004 B = 0.004{"group1":{"antennae":0.08704245555852813,"green":0.26932698146023665,"blarghNoise":0.0036446311274932596},"group2":{"antennae":0.9543357206577466,"green":0.9517296757014835,"blarghNoise":0.8829657426289149}} A = 0.004 B = 0.004{"group1":{"antennae":0.08704245555852813,"green":0.26932698146023665,"blarghNoise":0.0036446311274932596},"group2":{"antennae":0.9543357206577466,"green":0.9517296757014835,"blarghNoise":0.8829657426289149}}{"group1":{"antennae":0.015059357098379408,"green":0.020467865361577197,"blarghNoise":0.22695808939865317},"group2":{"antennae":0.5487564638614904,"green":0.9861124147409869,"blarghNoise":0.5875120636666268}} A = 0.004 B = 0.004{"group1":{"antennae":0.015059357098379408,"green":0.020467865361577197,"blarghNoise":0.22695808939865317},"group2":{"antennae":0.5487564638614904,"green":0.9861124147409869,"blarghNoise":0.5875120636666268}} A = 0.004 B = 0.004{"group1":{"antennae":0.007159790387817919,"green":0.15798408676672734,"blarghNoise":0.04125821031383332},"group2":{"antennae":0.6630198447046819,"green":0.9831678954559893,"blarghNoise":0.9944757183174218}} A = 0.004 B = 0.004{"group1":{"antennae":0.007159790387817919,"green":0.15798408676672734,"blarghNoise":0.04125821031383332},"group2":{"antennae":0.6630198447046819,"green":0.9831678954559893,"blarghNoise":0.9944757183174218}} A = 0.004 B = 0.004{"group1":{"antennae":0.09254417562292061,"green":0.37417619832396976,"blarghNoise":0.18457717385739367},"group2":{"antennae":0.9352682299321464,"green":0.9408603709390058,"blarghNoise":0.8919607378754033}} A = 0.004 B = 0.004{"group1":{"antennae":0.09254417562292061,"green":0.37417619832396976,"blarghNoise":0.18457717385739367},"group2":{"antennae":0.9352682299321464,"green":0.9408603709390058,"blarghNoise":0.8919607378754033}} A = 0.004 B = 0.004
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<1 1.000 18.8515 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking fail ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<1 1.000 19.1046 ·
probmods2-mixture-models / ex1.b
shape distribution s46 +p TV<11.000 runs 8/8
per-run
00 prompt

Alien-planet setup with 10 aliens (three binary properties: antennae, green, blarghNoise). Two latent kinds of aliens with Beta(.5, .5) priors per property, 50/50 prior on group membership, mem'd group prototypes, MCMC + HMC inference (steps:10, stepSize:.01, samples:3000).

Data:

webppl
1var data = [
2 {antennae: false, green: false, blarghNoise: false},
3 {antennae: true, green: true, blarghNoise: true},
4 {antennae: true, green: true, blarghNoise: true},
5 {antennae: true, green: true, blarghNoise: true},
6 {antennae: false, green: false, blarghNoise: false},
7 {antennae: true, green: true, blarghNoise: true},
8 {antennae: false, green: false, blarghNoise: false},
9 {antennae: true, green: true, blarghNoise: true},
10 {antennae: false, green: false, blarghNoise: false},
11 {antennae: false, green: false, blarghNoise: false}
12];

Extend the model with a new observation: you hear a 'blargh' sound from a crater but cannot see the alien. Add a latent mysteryGroup (50/50 over the two groups), sample its prototype, and observe blarghNoise=true for that prototype. End your program with the Infer(...) returning {group1, group2, mysteryGroup}.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var properties = ['antennae', 'green', 'blarghNoise'];
2var data = [
3 {antennae : false, green: false, blarghNoise: false},
4 {antennae : true, green: true, blarghNoise: true},
5 {antennae : true, green: true, blarghNoise: true},
6 {antennae : true, green: true, blarghNoise: true},
7 {antennae : false, green: false, blarghNoise: false},
8 {antennae : true, green: true, blarghNoise: true},
9 {antennae : false, green: false, blarghNoise: false},
10 {antennae : true, green: true, blarghNoise: true},
11 {antennae : false, green: false, blarghNoise: false},
12 {antennae : false, green: false, blarghNoise: false}
13];
14var sampleGroupPrototype = mem(function(groupName) {
15 var probs = repeat(3, function(){ beta(.5, .5)});
16 return _.zipObject(properties, probs);
17});
18var ANSWER = (Infer({method: 'MCMC', kernel: {HMC: {steps: 10, stepSize: .01}}, samples: 3000},
19 function(){
20 mapData({data: data}, function(datum) {
21 var group = flip() ? 'group1' : 'group2';
22 var prototype = sampleGroupPrototype(group);
23 mapData({data: properties}, function(property) {
24 observe(Bernoulli({p: prototype[property]}), datum[property]);
25 });
26 });
27 var mysteryGroup = flip() ? 'group1' : 'group2';
28 var mysteryPrototype = sampleGroupPrototype(mysteryGroup);
29 observe(Bernoulli({p: mysteryPrototype['blarghNoise']}), true);
30 return {group1: sampleGroupPrototype('group1'),
31 group2: sampleGroupPrototype('group2'),
32 mysteryGroup: mysteryGroup};
33}));
34
s46 +psonnet-46-primer-v3TV<11.000
webppl
1var data = [
2 {antennae: false, green: false, blarghNoise: false},
3 {antennae: true, green: true, blarghNoise: true},
4 {antennae: true, green: true, blarghNoise: true},
5 {antennae: true, green: true, blarghNoise: true},
6 {antennae: false, green: false, blarghNoise: false},
7 {antennae: true, green: true, blarghNoise: true},
8 {antennae: false, green: false, blarghNoise: false},
9 {antennae: true, green: true, blarghNoise: true},
10 {antennae: false, green: false, blarghNoise: false},
11 {antennae: false, green: false, blarghNoise: false}
12];
13
14var model = function() {
15 // Group prototypes: for each group, sample Beta(.5,.5) for each property
16 var groupPrototype = mem(function(group) {
17 return {
18 antennae: beta(0.5, 0.5),
19 green: beta(0.5, 0.5),
20 blarghNoise: beta(0.5, 0.5)
21 };
22 });
23
24 // For each alien in data, assign to a group and observe properties
25 mapData({data: data}, function(alien) {
26 var group = flip(0.5) ? 1 : 2;
27 var proto = groupPrototype(group);
28 observe(Bernoulli({p: proto.antennae}), alien.antennae);
29 observe(Bernoulli({p: proto.green}), alien.green);
30 observe(Bernoulli({p: proto.blarghNoise}), alien.blarghNoise);
31 });
32
33 // Mystery alien: heard blargh but can't see it
34 var mysteryGroup = flip(0.5) ? 1 : 2;
35 var mysteryProto = groupPrototype(mysteryGroup);
36 observe(Bernoulli({p: mysteryProto.blarghNoise}), true);
37
38 var proto1 = groupPrototype(1);
39 var proto2 = groupPrototype(2);
40
41 return {
42 group1: {
43 antennae: proto1.antennae,
44 green: proto1.green,
45 blarghNoise: proto1.blarghNoise
46 },
47 group2: {
48 antennae: proto2.antennae,
49 green: proto2.green,
50 blarghNoise: proto2.blarghNoise
51 },
52 mysteryGroup: mysteryGroup
53 };
54};
55
56var ANSWER = Infer({
57 method: 'MCMC',
58 samples: 3000,
59 kernel: {HMC: {steps: 10, stepSize: 0.01}}
60}, model);
02output overlaydistribution
GT s46 +p48 bins · top 48 of 96
00.0250.0250.0510.051{"group1":{"antennae":0.038898732379903954,"green":0.01727849167644991,"blarghNoise":0.26028458949417066},"group2":{"antennae":0.9933574914048494,"green":0.9968518136876883,"blarghNoise":0.9949878540918846},"mysteryGroup":"group2"} A = 0.051 B = 0.000{"group1":{"antennae":0.038898732379903954,"green":0.01727849167644991,"blarghNoise":0.26028458949417066},"group2":{"antennae":0.9933574914048494,"green":0.9968518136876883,"blarghNoise":0.9949878540918846},"mysteryGroup":"group2"} A = 0.051 B = 0.000{"group1":{"antennae":0.038898732379903954,"green":0.01727849167644991,"blarghNoise":0.26028458949417066},"group2":{"antennae":0.9933574914048494,"green":0.9968518136876883,"blarghNoise":0.9949878540918846},"mysteryGroup":"group2"}{"group1":{"antennae":0.038898732379903954,"green":0.01727849167644991,"blarghNoise":0.26028458949417066},"group2":{"antennae":0.9933574914048494,"green":0.9968518136876883,"blarghNoise":0.9949878540918846},"mysteryGroup":2} A = 0.000 B = 0.051{"group1":{"antennae":0.038898732379903954,"green":0.01727849167644991,"blarghNoise":0.26028458949417066},"group2":{"antennae":0.9933574914048494,"green":0.9968518136876883,"blarghNoise":0.9949878540918846},"mysteryGroup":2} A = 0.000 B = 0.051{"group1":{"antennae":0.0017869489723173126,"green":0.019570203947595368,"blarghNoise":0.0053291086006608136},"group2":{"antennae":0.7292264201465501,"green":0.9480709169196178,"blarghNoise":0.6278895458148243},"mysteryGroup":"group2"} A = 0.043 B = 0.000{"group1":{"antennae":0.0017869489723173126,"green":0.019570203947595368,"blarghNoise":0.0053291086006608136},"group2":{"antennae":0.7292264201465501,"green":0.9480709169196178,"blarghNoise":0.6278895458148243},"mysteryGroup":"group2"} A = 0.043 B = 0.000{"group1":{"antennae":0.0017869489723173126,"green":0.019570203947595368,"blarghNoise":0.0053291086006608136},"group2":{"antennae":0.7292264201465501,"green":0.9480709169196178,"blarghNoise":0.6278895458148243},"mysteryGroup":2} A = 0.000 B = 0.043{"group1":{"antennae":0.0017869489723173126,"green":0.019570203947595368,"blarghNoise":0.0053291086006608136},"group2":{"antennae":0.7292264201465501,"green":0.9480709169196178,"blarghNoise":0.6278895458148243},"mysteryGroup":2} A = 0.000 B = 0.043{"group1":{"antennae":0.038898732379903954,"green":0.01727849167644991,"blarghNoise":0.26028458949417066},"group2":{"antennae":0.9933574914048494,"green":0.9968518136876883,"blarghNoise":0.9949878540918846},"mysteryGroup":"group1"} A = 0.033 B = 0.000{"group1":{"antennae":0.038898732379903954,"green":0.01727849167644991,"blarghNoise":0.26028458949417066},"group2":{"antennae":0.9933574914048494,"green":0.9968518136876883,"blarghNoise":0.9949878540918846},"mysteryGroup":"group1"} A = 0.033 B = 0.000{"group1":{"antennae":0.038898732379903954,"green":0.01727849167644991,"blarghNoise":0.26028458949417066},"group2":{"antennae":0.9933574914048494,"green":0.9968518136876883,"blarghNoise":0.9949878540918846},"mysteryGroup":"group1"}{"group1":{"antennae":0.038898732379903954,"green":0.01727849167644991,"blarghNoise":0.26028458949417066},"group2":{"antennae":0.9933574914048494,"green":0.9968518136876883,"blarghNoise":0.9949878540918846},"mysteryGroup":1} A = 0.000 B = 0.033{"group1":{"antennae":0.038898732379903954,"green":0.01727849167644991,"blarghNoise":0.26028458949417066},"group2":{"antennae":0.9933574914048494,"green":0.9968518136876883,"blarghNoise":0.9949878540918846},"mysteryGroup":1} A = 0.000 B = 0.033{"group1":{"antennae":0.007286713842698864,"green":0.3748687968540595,"blarghNoise":0.005671672734256707},"group2":{"antennae":0.7603816363063911,"green":0.974715333290584,"blarghNoise":0.9988071946705301},"mysteryGroup":"group2"} A = 0.030 B = 0.000{"group1":{"antennae":0.007286713842698864,"green":0.3748687968540595,"blarghNoise":0.005671672734256707},"group2":{"antennae":0.7603816363063911,"green":0.974715333290584,"blarghNoise":0.9988071946705301},"mysteryGroup":"group2"} A = 0.030 B = 0.000{"group1":{"antennae":0.007286713842698864,"green":0.3748687968540595,"blarghNoise":0.005671672734256707},"group2":{"antennae":0.7603816363063911,"green":0.974715333290584,"blarghNoise":0.9988071946705301},"mysteryGroup":2} A = 0.000 B = 0.030{"group1":{"antennae":0.007286713842698864,"green":0.3748687968540595,"blarghNoise":0.005671672734256707},"group2":{"antennae":0.7603816363063911,"green":0.974715333290584,"blarghNoise":0.9988071946705301},"mysteryGroup":2} A = 0.000 B = 0.030{"group1":{"antennae":0.013724070358797146,"green":0.002983340946819138,"blarghNoise":0.1196486576946309},"group2":{"antennae":0.9671972030708453,"green":0.9978225721133995,"blarghNoise":0.8721913703763252},"mysteryGroup":"group2"} A = 0.025 B = 0.000{"group1":{"antennae":0.013724070358797146,"green":0.002983340946819138,"blarghNoise":0.1196486576946309},"group2":{"antennae":0.9671972030708453,"green":0.9978225721133995,"blarghNoise":0.8721913703763252},"mysteryGroup":"group2"} A = 0.025 B = 0.000{"group1":{"antennae":0.013724070358797146,"green":0.002983340946819138,"blarghNoise":0.1196486576946309},"group2":{"antennae":0.9671972030708453,"green":0.9978225721133995,"blarghNoise":0.8721913703763252},"mysteryGroup":"group2"}{"group1":{"antennae":0.013724070358797146,"green":0.002983340946819138,"blarghNoise":0.1196486576946309},"group2":{"antennae":0.9671972030708453,"green":0.9978225721133995,"blarghNoise":0.8721913703763252},"mysteryGroup":2} A = 0.000 B = 0.025{"group1":{"antennae":0.013724070358797146,"green":0.002983340946819138,"blarghNoise":0.1196486576946309},"group2":{"antennae":0.9671972030708453,"green":0.9978225721133995,"blarghNoise":0.8721913703763252},"mysteryGroup":2} A = 0.000 B = 0.025{"group1":{"antennae":0.0029449772063156014,"green":0.1765462936640979,"blarghNoise":0.024511199388644392},"group2":{"antennae":0.9955076433060268,"green":0.9795680513869486,"blarghNoise":0.9018611507800818},"mysteryGroup":"group2"} A = 0.023 B = 0.000{"group1":{"antennae":0.0029449772063156014,"green":0.1765462936640979,"blarghNoise":0.024511199388644392},"group2":{"antennae":0.9955076433060268,"green":0.9795680513869486,"blarghNoise":0.9018611507800818},"mysteryGroup":"group2"} A = 0.023 B = 0.000{"group1":{"antennae":0.0029449772063156014,"green":0.1765462936640979,"blarghNoise":0.024511199388644392},"group2":{"antennae":0.9955076433060268,"green":0.9795680513869486,"blarghNoise":0.9018611507800818},"mysteryGroup":2} A = 0.000 B = 0.023{"group1":{"antennae":0.0029449772063156014,"green":0.1765462936640979,"blarghNoise":0.024511199388644392},"group2":{"antennae":0.9955076433060268,"green":0.9795680513869486,"blarghNoise":0.9018611507800818},"mysteryGroup":2} A = 0.000 B = 0.023{"group1":{"antennae":0.018787602565447918,"green":0.021991521609845605,"blarghNoise":0.11823834623347863},"group2":{"antennae":0.9947882224088356,"green":0.9761160443578923,"blarghNoise":0.563259789526589},"mysteryGroup":"group2"} A = 0.019 B = 0.000{"group1":{"antennae":0.018787602565447918,"green":0.021991521609845605,"blarghNoise":0.11823834623347863},"group2":{"antennae":0.9947882224088356,"green":0.9761160443578923,"blarghNoise":0.563259789526589},"mysteryGroup":"group2"} A = 0.019 B = 0.000{"group1":{"antennae":0.018787602565447918,"green":0.021991521609845605,"blarghNoise":0.11823834623347863},"group2":{"antennae":0.9947882224088356,"green":0.9761160443578923,"blarghNoise":0.563259789526589},"mysteryGroup":"group2"}{"group1":{"antennae":0.018787602565447918,"green":0.021991521609845605,"blarghNoise":0.11823834623347863},"group2":{"antennae":0.9947882224088356,"green":0.9761160443578923,"blarghNoise":0.563259789526589},"mysteryGroup":2} A = 0.000 B = 0.019{"group1":{"antennae":0.018787602565447918,"green":0.021991521609845605,"blarghNoise":0.11823834623347863},"group2":{"antennae":0.9947882224088356,"green":0.9761160443578923,"blarghNoise":0.563259789526589},"mysteryGroup":2} A = 0.000 B = 0.019{"group1":{"antennae":0.009934729834451414,"green":0.031055169385132093,"blarghNoise":0.05644191025919654},"group2":{"antennae":0.9611478102634338,"green":0.8548932799544426,"blarghNoise":0.9877261992880789},"mysteryGroup":"group2"} A = 0.018 B = 0.000{"group1":{"antennae":0.009934729834451414,"green":0.031055169385132093,"blarghNoise":0.05644191025919654},"group2":{"antennae":0.9611478102634338,"green":0.8548932799544426,"blarghNoise":0.9877261992880789},"mysteryGroup":"group2"} A = 0.018 B = 0.000{"group1":{"antennae":0.009934729834451414,"green":0.031055169385132093,"blarghNoise":0.05644191025919654},"group2":{"antennae":0.9611478102634338,"green":0.8548932799544426,"blarghNoise":0.9877261992880789},"mysteryGroup":2} A = 0.000 B = 0.018{"group1":{"antennae":0.009934729834451414,"green":0.031055169385132093,"blarghNoise":0.05644191025919654},"group2":{"antennae":0.9611478102634338,"green":0.8548932799544426,"blarghNoise":0.9877261992880789},"mysteryGroup":2} A = 0.000 B = 0.018{"group1":{"antennae":0.08267570369521876,"green":0.03689345480389171,"blarghNoise":0.14335453253953517},"group2":{"antennae":0.9640459483117724,"green":0.9954544088753723,"blarghNoise":0.9954326622165071},"mysteryGroup":"group2"} A = 0.018 B = 0.000{"group1":{"antennae":0.08267570369521876,"green":0.03689345480389171,"blarghNoise":0.14335453253953517},"group2":{"antennae":0.9640459483117724,"green":0.9954544088753723,"blarghNoise":0.9954326622165071},"mysteryGroup":"group2"} A = 0.018 B = 0.000{"group1":{"antennae":0.08267570369521876,"green":0.03689345480389171,"blarghNoise":0.14335453253953517},"group2":{"antennae":0.9640459483117724,"green":0.9954544088753723,"blarghNoise":0.9954326622165071},"mysteryGroup":"group2"}{"group1":{"antennae":0.08267570369521876,"green":0.03689345480389171,"blarghNoise":0.14335453253953517},"group2":{"antennae":0.9640459483117724,"green":0.9954544088753723,"blarghNoise":0.9954326622165071},"mysteryGroup":2} A = 0.000 B = 0.018{"group1":{"antennae":0.08267570369521876,"green":0.03689345480389171,"blarghNoise":0.14335453253953517},"group2":{"antennae":0.9640459483117724,"green":0.9954544088753723,"blarghNoise":0.9954326622165071},"mysteryGroup":2} A = 0.000 B = 0.018{"group1":{"antennae":0.03202600808562859,"green":0.017979493995431223,"blarghNoise":0.009764505009731562},"group2":{"antennae":0.9556434509538576,"green":0.958084027373735,"blarghNoise":0.9761631474142071},"mysteryGroup":"group2"} A = 0.017 B = 0.000{"group1":{"antennae":0.03202600808562859,"green":0.017979493995431223,"blarghNoise":0.009764505009731562},"group2":{"antennae":0.9556434509538576,"green":0.958084027373735,"blarghNoise":0.9761631474142071},"mysteryGroup":"group2"} A = 0.017 B = 0.000{"group1":{"antennae":0.03202600808562859,"green":0.017979493995431223,"blarghNoise":0.009764505009731562},"group2":{"antennae":0.9556434509538576,"green":0.958084027373735,"blarghNoise":0.9761631474142071},"mysteryGroup":2} A = 0.000 B = 0.017{"group1":{"antennae":0.03202600808562859,"green":0.017979493995431223,"blarghNoise":0.009764505009731562},"group2":{"antennae":0.9556434509538576,"green":0.958084027373735,"blarghNoise":0.9761631474142071},"mysteryGroup":2} A = 0.000 B = 0.017{"group1":{"antennae":0.067097820053103,"green":0.014462926003650674,"blarghNoise":0.028201006129893604},"group2":{"antennae":0.9815941743872377,"green":0.889747577355854,"blarghNoise":0.9956883653109494},"mysteryGroup":"group2"} A = 0.017 B = 0.000{"group1":{"antennae":0.067097820053103,"green":0.014462926003650674,"blarghNoise":0.028201006129893604},"group2":{"antennae":0.9815941743872377,"green":0.889747577355854,"blarghNoise":0.9956883653109494},"mysteryGroup":"group2"} A = 0.017 B = 0.000{"group1":{"antennae":0.067097820053103,"green":0.014462926003650674,"blarghNoise":0.028201006129893604},"group2":{"antennae":0.9815941743872377,"green":0.889747577355854,"blarghNoise":0.9956883653109494},"mysteryGroup":"group2"}{"group1":{"antennae":0.067097820053103,"green":0.014462926003650674,"blarghNoise":0.028201006129893604},"group2":{"antennae":0.9815941743872377,"green":0.889747577355854,"blarghNoise":0.9956883653109494},"mysteryGroup":2} A = 0.000 B = 0.017{"group1":{"antennae":0.067097820053103,"green":0.014462926003650674,"blarghNoise":0.028201006129893604},"group2":{"antennae":0.9815941743872377,"green":0.889747577355854,"blarghNoise":0.9956883653109494},"mysteryGroup":2} A = 0.000 B = 0.017{"group1":{"antennae":0.007505726463502187,"green":0.085202069687655,"blarghNoise":0.016333788684047303},"group2":{"antennae":0.9776375780989763,"green":0.8405456788838046,"blarghNoise":0.9334907131679633},"mysteryGroup":"group2"} A = 0.015 B = 0.000{"group1":{"antennae":0.007505726463502187,"green":0.085202069687655,"blarghNoise":0.016333788684047303},"group2":{"antennae":0.9776375780989763,"green":0.8405456788838046,"blarghNoise":0.9334907131679633},"mysteryGroup":"group2"} A = 0.015 B = 0.000{"group1":{"antennae":0.007505726463502187,"green":0.085202069687655,"blarghNoise":0.016333788684047303},"group2":{"antennae":0.9776375780989763,"green":0.8405456788838046,"blarghNoise":0.9334907131679633},"mysteryGroup":2} A = 0.000 B = 0.015{"group1":{"antennae":0.007505726463502187,"green":0.085202069687655,"blarghNoise":0.016333788684047303},"group2":{"antennae":0.9776375780989763,"green":0.8405456788838046,"blarghNoise":0.9334907131679633},"mysteryGroup":2} A = 0.000 B = 0.015{"group1":{"antennae":0.003518104046782043,"green":0.04648146355751852,"blarghNoise":0.0108894877506948},"group2":{"antennae":0.7961499833581498,"green":0.8132288927858351,"blarghNoise":0.8932554542806215},"mysteryGroup":"group2"} A = 0.014 B = 0.000{"group1":{"antennae":0.003518104046782043,"green":0.04648146355751852,"blarghNoise":0.0108894877506948},"group2":{"antennae":0.7961499833581498,"green":0.8132288927858351,"blarghNoise":0.8932554542806215},"mysteryGroup":"group2"} A = 0.014 B = 0.000{"group1":{"antennae":0.003518104046782043,"green":0.04648146355751852,"blarghNoise":0.0108894877506948},"group2":{"antennae":0.7961499833581498,"green":0.8132288927858351,"blarghNoise":0.8932554542806215},"mysteryGroup":"group2"}{"group1":{"antennae":0.0028943354850558684,"green":0.0824094590301553,"blarghNoise":0.06459480745509452},"group2":{"antennae":0.9113195715849095,"green":0.9672913963586608,"blarghNoise":0.9639574287948498},"mysteryGroup":"group2"} A = 0.014 B = 0.000{"group1":{"antennae":0.0028943354850558684,"green":0.0824094590301553,"blarghNoise":0.06459480745509452},"group2":{"antennae":0.9113195715849095,"green":0.9672913963586608,"blarghNoise":0.9639574287948498},"mysteryGroup":"group2"} A = 0.014 B = 0.000{"group1":{"antennae":0.003518104046782043,"green":0.04648146355751852,"blarghNoise":0.0108894877506948},"group2":{"antennae":0.7961499833581498,"green":0.8132288927858351,"blarghNoise":0.8932554542806215},"mysteryGroup":2} A = 0.000 B = 0.014{"group1":{"antennae":0.003518104046782043,"green":0.04648146355751852,"blarghNoise":0.0108894877506948},"group2":{"antennae":0.7961499833581498,"green":0.8132288927858351,"blarghNoise":0.8932554542806215},"mysteryGroup":2} A = 0.000 B = 0.014{"group1":{"antennae":0.0028943354850558684,"green":0.0824094590301553,"blarghNoise":0.06459480745509452},"group2":{"antennae":0.9113195715849095,"green":0.9672913963586608,"blarghNoise":0.9639574287948498},"mysteryGroup":2} A = 0.000 B = 0.014{"group1":{"antennae":0.0028943354850558684,"green":0.0824094590301553,"blarghNoise":0.06459480745509452},"group2":{"antennae":0.9113195715849095,"green":0.9672913963586608,"blarghNoise":0.9639574287948498},"mysteryGroup":2} A = 0.000 B = 0.014{"group1":{"antennae":0.0009124528305101982,"green":0.008262626728959506,"blarghNoise":0.2155469279752741},"group2":{"antennae":0.7056749836618089,"green":0.9559648460817494,"blarghNoise":0.9068402531415809},"mysteryGroup":"group2"} A = 0.014 B = 0.000{"group1":{"antennae":0.0009124528305101982,"green":0.008262626728959506,"blarghNoise":0.2155469279752741},"group2":{"antennae":0.7056749836618089,"green":0.9559648460817494,"blarghNoise":0.9068402531415809},"mysteryGroup":"group2"} A = 0.014 B = 0.000{"group1":{"antennae":0.0009124528305101982,"green":0.008262626728959506,"blarghNoise":0.2155469279752741},"group2":{"antennae":0.7056749836618089,"green":0.9559648460817494,"blarghNoise":0.9068402531415809},"mysteryGroup":"group2"}{"group1":{"antennae":0.0009124528305101982,"green":0.008262626728959506,"blarghNoise":0.2155469279752741},"group2":{"antennae":0.7056749836618089,"green":0.9559648460817494,"blarghNoise":0.9068402531415809},"mysteryGroup":2} A = 0.000 B = 0.014{"group1":{"antennae":0.0009124528305101982,"green":0.008262626728959506,"blarghNoise":0.2155469279752741},"group2":{"antennae":0.7056749836618089,"green":0.9559648460817494,"blarghNoise":0.9068402531415809},"mysteryGroup":2} A = 0.000 B = 0.014{"group1":{"antennae":0.07618772846488367,"green":0.14397564249635275,"blarghNoise":0.14259346899424302},"group2":{"antennae":0.9431240466701164,"green":0.9882695233075708,"blarghNoise":0.9605703642911847},"mysteryGroup":"group2"} A = 0.013 B = 0.000{"group1":{"antennae":0.07618772846488367,"green":0.14397564249635275,"blarghNoise":0.14259346899424302},"group2":{"antennae":0.9431240466701164,"green":0.9882695233075708,"blarghNoise":0.9605703642911847},"mysteryGroup":"group2"} A = 0.013 B = 0.000{"group1":{"antennae":0.07618772846488367,"green":0.14397564249635275,"blarghNoise":0.14259346899424302},"group2":{"antennae":0.9431240466701164,"green":0.9882695233075708,"blarghNoise":0.9605703642911847},"mysteryGroup":2} A = 0.000 B = 0.013{"group1":{"antennae":0.07618772846488367,"green":0.14397564249635275,"blarghNoise":0.14259346899424302},"group2":{"antennae":0.9431240466701164,"green":0.9882695233075708,"blarghNoise":0.9605703642911847},"mysteryGroup":2} A = 0.000 B = 0.013{"group1":{"antennae":0.013400858257291148,"green":0.0324027372957186,"blarghNoise":0.01303318321340801},"group2":{"antennae":0.9889823907438856,"green":0.8601517959219543,"blarghNoise":0.9369757852459918},"mysteryGroup":"group2"} A = 0.013 B = 0.000{"group1":{"antennae":0.013400858257291148,"green":0.0324027372957186,"blarghNoise":0.01303318321340801},"group2":{"antennae":0.9889823907438856,"green":0.8601517959219543,"blarghNoise":0.9369757852459918},"mysteryGroup":"group2"} A = 0.013 B = 0.000{"group1":{"antennae":0.013400858257291148,"green":0.0324027372957186,"blarghNoise":0.01303318321340801},"group2":{"antennae":0.9889823907438856,"green":0.8601517959219543,"blarghNoise":0.9369757852459918},"mysteryGroup":"group2"}{"group1":{"antennae":0.013400858257291148,"green":0.0324027372957186,"blarghNoise":0.01303318321340801},"group2":{"antennae":0.9889823907438856,"green":0.8601517959219543,"blarghNoise":0.9369757852459918},"mysteryGroup":2} A = 0.000 B = 0.013{"group1":{"antennae":0.013400858257291148,"green":0.0324027372957186,"blarghNoise":0.01303318321340801},"group2":{"antennae":0.9889823907438856,"green":0.8601517959219543,"blarghNoise":0.9369757852459918},"mysteryGroup":2} A = 0.000 B = 0.013{"group1":{"antennae":0.006737186997132752,"green":0.1120998242605285,"blarghNoise":0.045764767519972195},"group2":{"antennae":0.9972642760504389,"green":0.9098855958287798,"blarghNoise":0.9385982605159522},"mysteryGroup":"group2"} A = 0.011 B = 0.000{"group1":{"antennae":0.006737186997132752,"green":0.1120998242605285,"blarghNoise":0.045764767519972195},"group2":{"antennae":0.9972642760504389,"green":0.9098855958287798,"blarghNoise":0.9385982605159522},"mysteryGroup":"group2"} A = 0.011 B = 0.000{"group1":{"antennae":0.006737186997132752,"green":0.1120998242605285,"blarghNoise":0.045764767519972195},"group2":{"antennae":0.9972642760504389,"green":0.9098855958287798,"blarghNoise":0.9385982605159522},"mysteryGroup":2} A = 0.000 B = 0.011{"group1":{"antennae":0.006737186997132752,"green":0.1120998242605285,"blarghNoise":0.045764767519972195},"group2":{"antennae":0.9972642760504389,"green":0.9098855958287798,"blarghNoise":0.9385982605159522},"mysteryGroup":2} A = 0.000 B = 0.011{"group1":{"antennae":0.06507887451822485,"green":0.12300511933276675,"blarghNoise":0.19340029480727047},"group2":{"antennae":0.9836472723125018,"green":0.9958599856296926,"blarghNoise":0.8613266894221417},"mysteryGroup":"group2"} A = 0.010 B = 0.000{"group1":{"antennae":0.06507887451822485,"green":0.12300511933276675,"blarghNoise":0.19340029480727047},"group2":{"antennae":0.9836472723125018,"green":0.9958599856296926,"blarghNoise":0.8613266894221417},"mysteryGroup":"group2"} A = 0.010 B = 0.000{"group1":{"antennae":0.06507887451822485,"green":0.12300511933276675,"blarghNoise":0.19340029480727047},"group2":{"antennae":0.9836472723125018,"green":0.9958599856296926,"blarghNoise":0.8613266894221417},"mysteryGroup":"group2"}{"group1":{"antennae":0.06507887451822485,"green":0.12300511933276675,"blarghNoise":0.19340029480727047},"group2":{"antennae":0.9836472723125018,"green":0.9958599856296926,"blarghNoise":0.8613266894221417},"mysteryGroup":2} A = 0.000 B = 0.010{"group1":{"antennae":0.06507887451822485,"green":0.12300511933276675,"blarghNoise":0.19340029480727047},"group2":{"antennae":0.9836472723125018,"green":0.9958599856296926,"blarghNoise":0.8613266894221417},"mysteryGroup":2} A = 0.000 B = 0.010{"group1":{"antennae":0.02400038962927726,"green":0.06457869559965583,"blarghNoise":0.04653038275884454},"group2":{"antennae":0.9150401085098555,"green":0.998520962442903,"blarghNoise":0.9740540366510787},"mysteryGroup":"group2"} A = 0.010 B = 0.000{"group1":{"antennae":0.02400038962927726,"green":0.06457869559965583,"blarghNoise":0.04653038275884454},"group2":{"antennae":0.9150401085098555,"green":0.998520962442903,"blarghNoise":0.9740540366510787},"mysteryGroup":"group2"} A = 0.010 B = 0.000{"group1":{"antennae":0.015720650874056226,"green":0.04899835899882051,"blarghNoise":0.1238661380011602},"group2":{"antennae":0.5175631716737823,"green":0.9868444818567055,"blarghNoise":0.987248137963349},"mysteryGroup":"group2"} A = 0.010 B = 0.000{"group1":{"antennae":0.015720650874056226,"green":0.04899835899882051,"blarghNoise":0.1238661380011602},"group2":{"antennae":0.5175631716737823,"green":0.9868444818567055,"blarghNoise":0.987248137963349},"mysteryGroup":"group2"} A = 0.010 B = 0.000{"group1":{"antennae":0.02400038962927726,"green":0.06457869559965583,"blarghNoise":0.04653038275884454},"group2":{"antennae":0.9150401085098555,"green":0.998520962442903,"blarghNoise":0.9740540366510787},"mysteryGroup":2} A = 0.000 B = 0.010{"group1":{"antennae":0.02400038962927726,"green":0.06457869559965583,"blarghNoise":0.04653038275884454},"group2":{"antennae":0.9150401085098555,"green":0.998520962442903,"blarghNoise":0.9740540366510787},"mysteryGroup":2} A = 0.000 B = 0.010{"group1":{"antennae":0.02400038962927726,"green":0.06457869559965583,"blarghNoise":0.04653038275884454},"group2":{"antennae":0.9150401085098555,"green":0.998520962442903,"blarghNoise":0.9740540366510787},"mysteryGroup":2}{"group1":{"antennae":0.015720650874056226,"green":0.04899835899882051,"blarghNoise":0.1238661380011602},"group2":{"antennae":0.5175631716737823,"green":0.9868444818567055,"blarghNoise":0.987248137963349},"mysteryGroup":2} A = 0.000 B = 0.010{"group1":{"antennae":0.015720650874056226,"green":0.04899835899882051,"blarghNoise":0.1238661380011602},"group2":{"antennae":0.5175631716737823,"green":0.9868444818567055,"blarghNoise":0.987248137963349},"mysteryGroup":2} A = 0.000 B = 0.010{"group1":{"antennae":0.007844041066166412,"green":0.011639682721857706,"blarghNoise":0.044202487669915545},"group2":{"antennae":0.972243537164428,"green":0.9298124746336706,"blarghNoise":0.8478672350281338},"mysteryGroup":"group2"} A = 0.009 B = 0.000{"group1":{"antennae":0.007844041066166412,"green":0.011639682721857706,"blarghNoise":0.044202487669915545},"group2":{"antennae":0.972243537164428,"green":0.9298124746336706,"blarghNoise":0.8478672350281338},"mysteryGroup":"group2"} A = 0.009 B = 0.000{"group1":{"antennae":0.03967697718460064,"green":0.002758142894279999,"blarghNoise":0.053409217001057274},"group2":{"antennae":0.9637882592792952,"green":0.9204620905467134,"blarghNoise":0.8461111510443322},"mysteryGroup":"group2"} A = 0.009 B = 0.000{"group1":{"antennae":0.03967697718460064,"green":0.002758142894279999,"blarghNoise":0.053409217001057274},"group2":{"antennae":0.9637882592792952,"green":0.9204620905467134,"blarghNoise":0.8461111510443322},"mysteryGroup":"group2"} A = 0.009 B = 0.000{"group1":{"antennae":0.007844041066166412,"green":0.011639682721857706,"blarghNoise":0.044202487669915545},"group2":{"antennae":0.972243537164428,"green":0.9298124746336706,"blarghNoise":0.8478672350281338},"mysteryGroup":2} A = 0.000 B = 0.009{"group1":{"antennae":0.007844041066166412,"green":0.011639682721857706,"blarghNoise":0.044202487669915545},"group2":{"antennae":0.972243537164428,"green":0.9298124746336706,"blarghNoise":0.8478672350281338},"mysteryGroup":2} A = 0.000 B = 0.009{"group1":{"antennae":0.007844041066166412,"green":0.011639682721857706,"blarghNoise":0.044202487669915545},"group2":{"antennae":0.972243537164428,"green":0.9298124746336706,"blarghNoise":0.8478672350281338},"mysteryGroup":2}{"group1":{"antennae":0.03967697718460064,"green":0.002758142894279999,"blarghNoise":0.053409217001057274},"group2":{"antennae":0.9637882592792952,"green":0.9204620905467134,"blarghNoise":0.8461111510443322},"mysteryGroup":2} A = 0.000 B = 0.009{"group1":{"antennae":0.03967697718460064,"green":0.002758142894279999,"blarghNoise":0.053409217001057274},"group2":{"antennae":0.9637882592792952,"green":0.9204620905467134,"blarghNoise":0.8461111510443322},"mysteryGroup":2} A = 0.000 B = 0.009{"group1":{"antennae":0.11666069783044326,"green":0.185873751206016,"blarghNoise":0.04182557841400699},"group2":{"antennae":0.9974987667964517,"green":0.8955464693933679,"blarghNoise":0.9157728879810938},"mysteryGroup":"group2"} A = 0.008 B = 0.000{"group1":{"antennae":0.11666069783044326,"green":0.185873751206016,"blarghNoise":0.04182557841400699},"group2":{"antennae":0.9974987667964517,"green":0.8955464693933679,"blarghNoise":0.9157728879810938},"mysteryGroup":"group2"} A = 0.008 B = 0.000{"group1":{"antennae":0.02340970275528946,"green":0.02233743912466364,"blarghNoise":0.16880432727252592},"group2":{"antennae":0.9142659716349245,"green":0.9866776282838141,"blarghNoise":0.9205045183822514},"mysteryGroup":"group2"} A = 0.008 B = 0.000{"group1":{"antennae":0.02340970275528946,"green":0.02233743912466364,"blarghNoise":0.16880432727252592},"group2":{"antennae":0.9142659716349245,"green":0.9866776282838141,"blarghNoise":0.9205045183822514},"mysteryGroup":"group2"} A = 0.008 B = 0.000
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<1 1.000 17.8546 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<1 1.000 17.8546 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<1 1.000 17.8546 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<1 1.000 17.8546 ·
probmods2-mixture-models / ex2.a
shape distribution s46 +p TV<11.000 runs 8/8
per-run
00 prompt

Suppose 22 participants take a memory test scored 0..45. Some are bona fide; others are malingerers (deliberately scoring low). Implement a mixture model inferring which group each participant belongs to.

Fill in the blanks and end with the Infer(...):

webppl
1var scores = [45, 45, 44, 45, 44, 45, 45, 45, 45, 45, 30, 20, 6, 44, 44, 27, 25, 17, 14, 27, 35, 30]
2var subjIDs = _.range(scores.length)
3var data = map(function(datum) {return _.zipObject(['subjID', 'score'], datum)}, _.zip(subjIDs, scores));
4
5Infer({method: 'MCMC', samples: 10000}, function() {
6 // Your code here: define group success probs, per-participant group memership
7 var obsFn = function(datum){
8 observe(// Your code here: Binomial({p, n: 45}))
9 }
10 mapData({data: data}, obsFn)
11 // Your code here
12 return // Your code here
13});

Use Binomial({p, n: 45}) for each participant's score, with two latent group success probabilities (use uniform(0.5, 1) for the bona-fide group and uniform(0, group_1_p) for malingerers, ensuring p_malingerer < p_bona-fide). Return participant memberships plus group rates.

Use the strings 'group1' (bona fide) and 'group2' (malingerer) as group labels in your output. Use uniform(0.5, 1) for the bona-fide group success probability and uniform(0, group_1_p) for the malingerer probability.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var scores = [45, 45, 44, 45, 44, 45, 45, 45, 45, 45, 30, 20, 6, 44, 44, 27, 25, 17, 14, 27, 35, 30];
2var subjIDs = _.range(scores.length);
3var data = map(function(datum) {return _.zipObject(['subjID', 'score'], datum)}, _.zip(subjIDs, scores));
4var ANSWER = (Infer({method: 'MCMC', samples: 10000}, function() {
5 var group_1_p = uniform(0.5, 1);
6 var group_2_p = uniform(0, group_1_p);
7 var participant2Group = mem(function(participantID) {
8 return flip() ? 'group1' : 'group2';
9 });
10 var group2Prob = mem(function(group) {
11 return group == 'group1' ? group_1_p : group_2_p;
12 });
13
14 var obsFn = function(datum){
15 var p = group2Prob(participant2Group(datum.subjID));
16 observe(Binomial({p: p, n: 45}), datum.score);
17 };
18 mapData({data: data}, obsFn);
19
20 var participantResults_ = map(function(datum) {return participant2Group(datum.subjID)}, data);
21 var participantResults = _.zipObject(_.range(participantResults_.length), participantResults_);
22 return _.merge(participantResults, {group_1_p: group_1_p, group_2_p: group_2_p});
23}));
24
s46 +psonnet-46-primer-v3TV<11.000
webppl
1var scores = [45, 45, 44, 45, 44, 45, 45, 45, 45, 45, 30, 20, 6, 44, 44, 27, 25, 17, 14, 27, 35, 30];
2var subjIDs = _.range(scores.length);
3var data = map(function(datum) { return _.zipObject(['subjID', 'score'], datum); }, _.zip(subjIDs, scores));
4
5var ANSWER = Infer({method: 'MCMC', samples: 10000}, function() {
6 // Group success probabilities
7 var group_1_p = uniform(0.5, 1); // bona fide
8 var group_2_p = uniform(0, group_1_p); // malingerer
9
10 // Per-participant group membership
11 var groupMembership = map(function(id) {
12 return flip(0.5) ? 'group1' : 'group2';
13 }, subjIDs);
14
15 var obsFn = function(datum) {
16 var id = datum.subjID;
17 var score = datum.score;
18 var group = groupMembership[id];
19 var p = group === 'group1' ? group_1_p : group_2_p;
20 observe(Binomial({p: p, n: 45}), score);
21 };
22
23 mapData({data: data}, obsFn);
24
25 return {
26 group_1_p: group_1_p,
27 group_2_p: group_2_p,
28 memberships: groupMembership
29 };
30});
02output overlaydistribution
GT s46 +p48 bins · top 48 of 96
00.0430.0430.0860.086{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5162299651809378} A = 0.086 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5162299651809378} A = 0.086 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5162299651809378}{"group_1_p":0.9944163761289297,"group_2_p":0.5162299651809378,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.086{"group_1_p":0.9944163761289297,"group_2_p":0.5162299651809378,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.086{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5086492498604774} A = 0.073 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5086492498604774} A = 0.073 B = 0.000{"group_1_p":0.9944163761289297,"group_2_p":0.5086492498604774,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.073{"group_1_p":0.9944163761289297,"group_2_p":0.5086492498604774,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.073{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5068615783358977} A = 0.065 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5068615783358977} A = 0.065 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5068615783358977}{"group_1_p":0.9944163761289297,"group_2_p":0.5068615783358977,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.065{"group_1_p":0.9944163761289297,"group_2_p":0.5068615783358977,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.065{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5120403979618138} A = 0.063 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5120403979618138} A = 0.063 B = 0.000{"group_1_p":0.9944163761289297,"group_2_p":0.5120403979618138,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.063{"group_1_p":0.9944163761289297,"group_2_p":0.5120403979618138,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.063{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5020704895985424} A = 0.053 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5020704895985424} A = 0.053 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5020704895985424}{"group_1_p":0.9944163761289297,"group_2_p":0.5020704895985424,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.053{"group_1_p":0.9944163761289297,"group_2_p":0.5020704895985424,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.053{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.527323917564733} A = 0.047 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.527323917564733} A = 0.047 B = 0.000{"group_1_p":0.9944163761289297,"group_2_p":0.527323917564733,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.047{"group_1_p":0.9944163761289297,"group_2_p":0.527323917564733,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.047{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9900387990163584,"group_2_p":0.4685707234496289} A = 0.042 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9900387990163584,"group_2_p":0.4685707234496289} A = 0.042 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9900387990163584,"group_2_p":0.4685707234496289}{"group_1_p":0.9900387990163584,"group_2_p":0.4685707234496289,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.042{"group_1_p":0.9900387990163584,"group_2_p":0.4685707234496289,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.042{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5176047864054071} A = 0.041 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5176047864054071} A = 0.041 B = 0.000{"group_1_p":0.9944163761289297,"group_2_p":0.5176047864054071,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.041{"group_1_p":0.9944163761289297,"group_2_p":0.5176047864054071,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.041{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9865707618584316,"group_2_p":0.5208608755605949} A = 0.036 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9865707618584316,"group_2_p":0.5208608755605949} A = 0.036 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9865707618584316,"group_2_p":0.5208608755605949}{"group_1_p":0.9865707618584316,"group_2_p":0.5208608755605949,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.036{"group_1_p":0.9865707618584316,"group_2_p":0.5208608755605949,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.036{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9900387990163584,"group_2_p":0.5456941588329448} A = 0.035 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9900387990163584,"group_2_p":0.5456941588329448} A = 0.035 B = 0.000{"group_1_p":0.9900387990163584,"group_2_p":0.5456941588329448,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.035{"group_1_p":0.9900387990163584,"group_2_p":0.5456941588329448,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.035{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9900387990163584,"group_2_p":0.5349024859137338} A = 0.034 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9900387990163584,"group_2_p":0.5349024859137338} A = 0.034 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9900387990163584,"group_2_p":0.5349024859137338}{"group_1_p":0.9900387990163584,"group_2_p":0.5349024859137338,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.034{"group_1_p":0.9900387990163584,"group_2_p":0.5349024859137338,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.034{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9739813488734418,"group_2_p":0.5153323783968763} A = 0.033 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9739813488734418,"group_2_p":0.5153323783968763} A = 0.033 B = 0.000{"group_1_p":0.9739813488734418,"group_2_p":0.5153323783968763,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.033{"group_1_p":0.9739813488734418,"group_2_p":0.5153323783968763,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.033{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.49112309117173153} A = 0.030 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.49112309117173153} A = 0.030 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.49112309117173153}{"group_1_p":0.9944163761289297,"group_2_p":0.49112309117173153,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.030{"group_1_p":0.9944163761289297,"group_2_p":0.49112309117173153,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.030{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9865707618584316,"group_2_p":0.5456941588329448} A = 0.028 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9865707618584316,"group_2_p":0.5456941588329448} A = 0.028 B = 0.000{"group_1_p":0.9865707618584316,"group_2_p":0.5456941588329448,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.028{"group_1_p":0.9865707618584316,"group_2_p":0.5456941588329448,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.028{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9920743243759227,"group_2_p":0.5003137412874494} A = 0.028 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9920743243759227,"group_2_p":0.5003137412874494} A = 0.028 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9920743243759227,"group_2_p":0.5003137412874494}{"group_1_p":0.9920743243759227,"group_2_p":0.5003137412874494,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.028{"group_1_p":0.9920743243759227,"group_2_p":0.5003137412874494,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.028{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9865707618584316,"group_2_p":0.5395652154623427} A = 0.025 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9865707618584316,"group_2_p":0.5395652154623427} A = 0.025 B = 0.000{"group_1_p":0.9865707618584316,"group_2_p":0.5395652154623427,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.025{"group_1_p":0.9865707618584316,"group_2_p":0.5395652154623427,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.025{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5844215993082509} A = 0.024 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5844215993082509} A = 0.024 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5844215993082509}{"group_1_p":0.9944163761289297,"group_2_p":0.5844215993082509,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.024{"group_1_p":0.9944163761289297,"group_2_p":0.5844215993082509,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.024{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9723188661848328,"group_2_p":0.5153323783968763} A = 0.022 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9723188661848328,"group_2_p":0.5153323783968763} A = 0.022 B = 0.000{"group_1_p":0.9723188661848328,"group_2_p":0.5153323783968763,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.022{"group_1_p":0.9723188661848328,"group_2_p":0.5153323783968763,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.022{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.4981485776406487} A = 0.021 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.4981485776406487} A = 0.021 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.4981485776406487}{"group_1_p":0.9944163761289297,"group_2_p":0.4981485776406487,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.021{"group_1_p":0.9944163761289297,"group_2_p":0.4981485776406487,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.021{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5161319892604039} A = 0.018 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5161319892604039} A = 0.018 B = 0.000{"group_1_p":0.9944163761289297,"group_2_p":0.5161319892604039,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.018{"group_1_p":0.9944163761289297,"group_2_p":0.5161319892604039,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.018{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9918124819442687,"group_2_p":0.5153323783968763} A = 0.016 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9918124819442687,"group_2_p":0.5153323783968763} A = 0.016 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9918124819442687,"group_2_p":0.5153323783968763}{"group_1_p":0.9918124819442687,"group_2_p":0.5153323783968763,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.016{"group_1_p":0.9918124819442687,"group_2_p":0.5153323783968763,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.016{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.470854872727599} A = 0.015 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.470854872727599} A = 0.015 B = 0.000{"group_1_p":0.9944163761289297,"group_2_p":0.470854872727599,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.015{"group_1_p":0.9944163761289297,"group_2_p":0.470854872727599,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.015{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9920743243759227,"group_2_p":0.5314771448744782} A = 0.015 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9920743243759227,"group_2_p":0.5314771448744782} A = 0.015 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9920743243759227,"group_2_p":0.5314771448744782}{"group_1_p":0.9920743243759227,"group_2_p":0.5314771448744782,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.015{"group_1_p":0.9920743243759227,"group_2_p":0.5314771448744782,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.015{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5293907813114268} A = 0.015 B = 0.000{"0":"group1","1":"group1","2":"group1","3":"group1","4":"group1","5":"group1","6":"group1","7":"group1","8":"group1","9":"group1","10":"group2","11":"group2","12":"group2","13":"group1","14":"group1","15":"group2","16":"group2","17":"group2","18":"group2","19":"group2","20":"group2","21":"group2","group_1_p":0.9944163761289297,"group_2_p":0.5293907813114268} A = 0.015 B = 0.000{"group_1_p":0.9944163761289297,"group_2_p":0.5293907813114268,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.015{"group_1_p":0.9944163761289297,"group_2_p":0.5293907813114268,"memberships":["group1","group1","group1","group1","group1","group1","group1","group1","group1","group1","group2","group2","group2","group1","group1","group2","group2","group2","group2","group2","group2","group2"]} A = 0.000 B = 0.015
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<1 1.000 19.5553 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<1 1.000 19.5553 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<1 1.000 19.5553 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<1 1.000 18.2312 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<1 1.000 19.5771 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<1 1.000 19.5553 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<1 1.000 19.5771 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<1 1.000 19.5553 ·
probmods2-occams-razor / ex1.2
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Number-game model. The hypothesis space contains rule-based concepts (multiples_of_N, powers_of_N for N=1..11; evens; odds) over the integers in [1, 20]. Implement similarity-based interval hypotheses (integers in [a, b]) so that: - genSetFromInterval(a, b) returns all integers from a through b inclusive, - makeIntervalHypothesisSpace(start, end) returns names 'interval_a_b' for every (a, b) with start <= a < b <= end, - getSetFromHypothesis(rule) dispatches on the rule's prefix to produce the set of integers it denotes (handling multiples_, powers_, evens, odds, and interval_).

These helpers are given (include them or equivalent in your program):

webppl
1var maxNumber = 20;
2var filterByInRange = function(set) {
3 var inRange = function(v) { v <= maxNumber && v >= 0 };
4 return _.uniq(filter(inRange, set));
5};
6var genEvens = function() {
7 return filter(function(v) { return v % 2 == 0 }, _.range(1, maxNumber));
8};
9var genOdds = function() {
10 return filter(function(v) { return (v + 1) % 2 == 0 }, _.range(1, maxNumber));
11};
12var genMultiples = function(base) {
13 var multiples = map(function(v) { return base * v }, _.range(maxNumber));
14 return filterByInRange(multiples);
15};
16var genPowers = function(base) {
17 var powers = map(function(v) { return Math.pow(base, v) }, _.range(maxNumber));
18 return filterByInRange(powers);
19};
20var inSet = function(val, set) { return _.includes(set, val); };
21var makeRuleHypothesisSpace = function() {
22 var multipleRules = map(function(b) { return 'multiples_of_' + b }, _.range(1, 12));
23 var powerRules = map(function(b) { return 'powers_of_' + b }, _.range(1, 12));
24 return multipleRules.concat(powerRules).concat(['evens', 'odds']);
25};

Build learnConcept(examples, testQuery) that mixes rule and interval hypotheses 50/50 in the prior, draws a hypothesis, observes each example via Categorical({vs: set}), and returns {hypothesis, testQueryResponse: inSet(testQuery, set)}. End your program with learnConcept([3, 10], 12) returning the joint posterior.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var maxNumber = 20;
2var filterByInRange = function(set) {
3 var inRange = function(v) {v <= maxNumber && v >= 0};
4 return _.uniq(filter(inRange, set));
5};
6var genEvens = function() {
7 return filter(function(v) {return v % 2 == 0}, _.range(1, maxNumber));
8};
9var genOdds = function() {
10 return filter(function(v) {return (v + 1) % 2 == 0}, _.range(1, maxNumber));
11};
12var genMultiples = function(base) {
13 var multiples = map(function(v) {return base * v}, _.range(maxNumber));
14 return filterByInRange(multiples);
15};
16var genPowers = function(base) {
17 var powers = map(function(v) {return Math.pow(base, v)}, _.range(maxNumber));
18 return filterByInRange(powers);
19};
20var inSet = function(val, set) { return _.includes(set, val); };
21var makeRuleHypothesisSpace = function() {
22 var multipleRules = map(function(base) {return 'multiples_of_' + base}, _.range(1, 12));
23 var powerRules = map(function(base) {return 'powers_of_' + base}, _.range(1, 12));
24 return multipleRules.concat(powerRules).concat(['evens', 'odds']);
25};
26var genSetFromInterval = function(a, b) { return _.range(a, b+1); };
27
28var makeIntervalHypothesisSpace = function(start, end) {
29 var allIntervals = _.flatten(map(function(s) {
30 return map(function(e) { [s, e] }, genSetFromInterval(s+1, end));
31 }, genSetFromInterval(start, end)));
32 return map(function(x) { 'interval_' + x[0] + '_' + x[1] }, allIntervals);
33};
34
35var getSetFromHypothesis = function(rule) {
36 var parts = rule.split('_');
37 return (parts[0] == 'multiples' ? genMultiples(_.parseInt(parts[2])) :
38 parts[0] == 'powers' ? genPowers(_.parseInt(parts[2])) :
39 parts[0] == 'evens' ? genEvens() :
40 parts[0] == 'odds' ? genOdds() :
41 parts[0] == 'interval' ? genSetFromInterval(_.parseInt(parts[1]), _.parseInt(parts[2])) :
42 console.error('unknown rule' + rule));
43};
44
45var learnConcept = function(examples, testQuery) {
46 return Infer({method: 'enumerate'}, function() {
47 var rules = makeRuleHypothesisSpace();
48 var intervals = makeIntervalHypothesisSpace(1, maxNumber);
49 var hypothesis = flip(0.5) ? uniformDraw(rules) : uniformDraw(intervals);
50 var set = getSetFromHypothesis(hypothesis);
51 mapData({data: examples}, function(example) {
52 observe(Categorical({vs: set}), example);
53 });
54 return {hypothesis: hypothesis,
55 testQueryResponse: inSet(testQuery, set)};
56 });
57};
58var ANSWER = (learnConcept([3, 10], 12));
59
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var maxNumber = 20;
2
3var filterByInRange = function(set) {
4 var inRange = function(v) { return v <= maxNumber && v >= 1; };
5 return _.uniq(filter(inRange, set));
6};
7
8var genEvens = function() {
9 return filter(function(v) { return v % 2 == 0; }, _.range(1, maxNumber + 1));
10};
11
12var genOdds = function() {
13 return filter(function(v) { return (v + 1) % 2 == 0; }, _.range(1, maxNumber + 1));
14};
15
16var genMultiples = function(base) {
17 var multiples = map(function(v) { return base * v; }, _.range(1, maxNumber + 1));
18 return filterByInRange(multiples);
19};
20
21var genPowers = function(base) {
22 var powers = map(function(v) { return Math.pow(base, v); }, _.range(0, maxNumber + 1));
23 return filterByInRange(powers);
24};
25
26var inSet = function(val, set) { return _.includes(set, val); };
27
28var makeRuleHypothesisSpace = function() {
29 var multipleRules = map(function(b) { return 'multiples_of_' + b; }, _.range(1, 12));
30 var powerRules = map(function(b) { return 'powers_of_' + b; }, _.range(1, 12));
31 return multipleRules.concat(powerRules).concat(['evens', 'odds']);
32};
33
34var genSetFromInterval = function(a, b) {
35 return _.range(a, b + 1);
36};
37
38var makeIntervalHypothesisSpace = function(start, end) {
39 var pairs = [];
40 var as = _.range(start, end);
41 return _.flatten(map(function(a) {
42 var bs = _.range(a + 1, end + 1);
43 return map(function(b) {
44 return 'interval_' + a + '_' + b;
45 }, bs);
46 }, as));
47};
48
49var getSetFromHypothesis = function(rule) {
50 var isMultiples = rule.indexOf('multiples_of_') === 0;
51 var isPowers = rule.indexOf('powers_of_') === 0;
52 var isInterval = rule.indexOf('interval_') === 0;
53 return isMultiples ? (function() {
54 var base = _.parseInt(rule.slice('multiples_of_'.length));
55 return genMultiples(base);
56 })() :
57 isPowers ? (function() {
58 var base = _.parseInt(rule.slice('powers_of_'.length));
59 return genPowers(base);
60 })() :
61 isInterval ? (function() {
62 var rest = rule.slice('interval_'.length);
63 // rest is like "a_b"
64 // find the underscore separating a and b
65 // a and b could be multi-digit, split on first underscore
66 var firstUnderscore = rest.indexOf('_');
67 var a = _.parseInt(rest.slice(0, firstUnderscore));
68 var b = _.parseInt(rest.slice(firstUnderscore + 1));
69 return genSetFromInterval(a, b);
70 })() :
71 rule === 'evens' ? genEvens() :
72 rule === 'odds' ? genOdds() :
73 [];
74};
75
76var ruleHypotheses = makeRuleHypothesisSpace();
77var intervalHypotheses = makeIntervalHypothesisSpace(1, maxNumber);
78
79var numRules = ruleHypotheses.length;
80var numIntervals = intervalHypotheses.length;
81
82var learnConcept = function(examples, testQuery) {
83 return Infer({method: 'enumerate'}, function() {
84 // 50/50 prior between rule-based and interval hypotheses
85 var useRule = flip(0.5);
86 var hypothesis = useRule
87 ? ruleHypotheses[randomInteger(numRules)]
88 : intervalHypotheses[randomInteger(numIntervals)];
89
90 var set = getSetFromHypothesis(hypothesis);
91
92 // Each example is observed as drawn uniformly from the set
93 var setSize = set.length;
94 condition(setSize > 0);
95
96 // Observe each example
97 mapData({data: examples}, function(ex) {
98 observe(Categorical({vs: set}), ex);
99 });
100
101 var testQueryResponse = inSet(testQuery, set);
102
103 return {hypothesis: hypothesis, testQueryResponse: testQueryResponse};
104 });
105};
106
107var ANSWER = learnConcept([3, 10], 12);
02output overlaydistribution
GT s46 +p34 bins
00.0450.0450.0890.089{"hypothesis":"interval_3_20","testQueryResponse":true} A = 0.014 B = 0.014{"hypothesis":"interval_3_20","testQueryResponse":true} A = 0.014 B = 0.014{"hypothesis":"interval_3_20","testQueryResponse":true}{"hypothesis":"interval_3_19","testQueryResponse":true} A = 0.016 B = 0.016{"hypothesis":"interval_3_19","testQueryResponse":true} A = 0.016 B = 0.016{"hypothesis":"interval_3_18","testQueryResponse":true} A = 0.018 B = 0.018{"hypothesis":"interval_3_18","testQueryResponse":true} A = 0.018 B = 0.018{"hypothesis":"interval_3_17","testQueryResponse":true} A = 0.020 B = 0.020{"hypothesis":"interval_3_17","testQueryResponse":true} A = 0.020 B = 0.020{"hypothesis":"interval_3_17","testQueryResponse":true}{"hypothesis":"interval_3_16","testQueryResponse":true} A = 0.023 B = 0.023{"hypothesis":"interval_3_16","testQueryResponse":true} A = 0.023 B = 0.023{"hypothesis":"interval_3_15","testQueryResponse":true} A = 0.027 B = 0.027{"hypothesis":"interval_3_15","testQueryResponse":true} A = 0.027 B = 0.027{"hypothesis":"interval_3_14","testQueryResponse":true} A = 0.031 B = 0.031{"hypothesis":"interval_3_14","testQueryResponse":true} A = 0.031 B = 0.031{"hypothesis":"interval_3_14","testQueryResponse":true}{"hypothesis":"interval_3_13","testQueryResponse":true} A = 0.037 B = 0.037{"hypothesis":"interval_3_13","testQueryResponse":true} A = 0.037 B = 0.037{"hypothesis":"interval_3_12","testQueryResponse":true} A = 0.045 B = 0.045{"hypothesis":"interval_3_12","testQueryResponse":true} A = 0.045 B = 0.045{"hypothesis":"interval_3_11","testQueryResponse":false} A = 0.056 B = 0.056{"hypothesis":"interval_3_11","testQueryResponse":false} A = 0.056 B = 0.056{"hypothesis":"interval_3_11","testQueryResponse":false}{"hypothesis":"interval_3_10","testQueryResponse":false} A = 0.071 B = 0.071{"hypothesis":"interval_3_10","testQueryResponse":false} A = 0.071 B = 0.071{"hypothesis":"interval_2_20","testQueryResponse":true} A = 0.013 B = 0.013{"hypothesis":"interval_2_20","testQueryResponse":true} A = 0.013 B = 0.013{"hypothesis":"interval_2_19","testQueryResponse":true} A = 0.014 B = 0.014{"hypothesis":"interval_2_19","testQueryResponse":true} A = 0.014 B = 0.014{"hypothesis":"interval_2_19","testQueryResponse":true}{"hypothesis":"interval_2_18","testQueryResponse":true} A = 0.016 B = 0.016{"hypothesis":"interval_2_18","testQueryResponse":true} A = 0.016 B = 0.016{"hypothesis":"interval_2_17","testQueryResponse":true} A = 0.018 B = 0.018{"hypothesis":"interval_2_17","testQueryResponse":true} A = 0.018 B = 0.018{"hypothesis":"interval_2_16","testQueryResponse":true} A = 0.020 B = 0.020{"hypothesis":"interval_2_16","testQueryResponse":true} A = 0.020 B = 0.020{"hypothesis":"interval_2_16","testQueryResponse":true}{"hypothesis":"interval_2_15","testQueryResponse":true} A = 0.023 B = 0.023{"hypothesis":"interval_2_15","testQueryResponse":true} A = 0.023 B = 0.023{"hypothesis":"interval_2_14","testQueryResponse":true} A = 0.027 B = 0.027{"hypothesis":"interval_2_14","testQueryResponse":true} A = 0.027 B = 0.027{"hypothesis":"interval_2_13","testQueryResponse":true} A = 0.031 B = 0.031{"hypothesis":"interval_2_13","testQueryResponse":true} A = 0.031 B = 0.031{"hypothesis":"interval_2_13","testQueryResponse":true}{"hypothesis":"interval_2_12","testQueryResponse":true} A = 0.037 B = 0.037{"hypothesis":"interval_2_12","testQueryResponse":true} A = 0.037 B = 0.037{"hypothesis":"interval_2_11","testQueryResponse":false} A = 0.045 B = 0.045{"hypothesis":"interval_2_11","testQueryResponse":false} A = 0.045 B = 0.045{"hypothesis":"interval_2_10","testQueryResponse":false} A = 0.056 B = 0.056{"hypothesis":"interval_2_10","testQueryResponse":false} A = 0.056 B = 0.056{"hypothesis":"interval_2_10","testQueryResponse":false}{"hypothesis":"interval_1_20","testQueryResponse":true} A = 0.011 B = 0.011{"hypothesis":"interval_1_20","testQueryResponse":true} A = 0.011 B = 0.011{"hypothesis":"interval_1_19","testQueryResponse":true} A = 0.013 B = 0.013{"hypothesis":"interval_1_19","testQueryResponse":true} A = 0.013 B = 0.013{"hypothesis":"interval_1_18","testQueryResponse":true} A = 0.014 B = 0.014{"hypothesis":"interval_1_18","testQueryResponse":true} A = 0.014 B = 0.014{"hypothesis":"interval_1_18","testQueryResponse":true}{"hypothesis":"interval_1_17","testQueryResponse":true} A = 0.016 B = 0.016{"hypothesis":"interval_1_17","testQueryResponse":true} A = 0.016 B = 0.016{"hypothesis":"interval_1_16","testQueryResponse":true} A = 0.018 B = 0.018{"hypothesis":"interval_1_16","testQueryResponse":true} A = 0.018 B = 0.018{"hypothesis":"interval_1_15","testQueryResponse":true} A = 0.020 B = 0.020{"hypothesis":"interval_1_15","testQueryResponse":true} A = 0.020 B = 0.020{"hypothesis":"interval_1_15","testQueryResponse":true}{"hypothesis":"interval_1_14","testQueryResponse":true} A = 0.023 B = 0.023{"hypothesis":"interval_1_14","testQueryResponse":true} A = 0.023 B = 0.023{"hypothesis":"interval_1_13","testQueryResponse":true} A = 0.027 B = 0.027{"hypothesis":"interval_1_13","testQueryResponse":true} A = 0.027 B = 0.027{"hypothesis":"interval_1_12","testQueryResponse":true} A = 0.031 B = 0.031{"hypothesis":"interval_1_12","testQueryResponse":true} A = 0.031 B = 0.031{"hypothesis":"interval_1_12","testQueryResponse":true}{"hypothesis":"interval_1_11","testQueryResponse":false} A = 0.037 B = 0.037{"hypothesis":"interval_1_11","testQueryResponse":false} A = 0.037 B = 0.037{"hypothesis":"interval_1_10","testQueryResponse":false} A = 0.045 B = 0.045{"hypothesis":"interval_1_10","testQueryResponse":false} A = 0.045 B = 0.045{"hypothesis":"multiples_of_1","testQueryResponse":true} A = 0.089 B = 0.089{"hypothesis":"multiples_of_1","testQueryResponse":true} A = 0.089 B = 0.089{"hypothesis":"multiples_of_1","testQueryResponse":true}
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer fail ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking fail ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-occams-razor / ex1.3
shape value s46 +p val- runs 8/8
per-run
00 prompt

Using the number-game model with rule + interval hypotheses (50/50 mix of rule-based and interval_a_b hypotheses) over integers [1, 20]: compute for each query in [1, 20] the expected probability that the query is in the inferred concept, given examples = [3, 6, 9].

Helpers (include them in your program):

webppl
1var maxNumber = 20;
2var filterByInRange = function(set) {
3 var inRange = function(v) { v <= maxNumber && v >= 0 };
4 return _.uniq(filter(inRange, set));
5};
6var genEvens = function() {
7 return filter(function(v) { return v % 2 == 0 }, _.range(1, maxNumber));
8};
9var genOdds = function() {
10 return filter(function(v) { return (v + 1) % 2 == 0 }, _.range(1, maxNumber));
11};
12var genMultiples = function(base) {
13 var multiples = map(function(v) { return base * v }, _.range(maxNumber));
14 return filterByInRange(multiples);
15};
16var genPowers = function(base) {
17 var powers = map(function(v) { return Math.pow(base, v) }, _.range(maxNumber));
18 return filterByInRange(powers);
19};
20var inSet = function(val, set) { return _.includes(set, val); };
21var makeRuleHypothesisSpace = function() {
22 var multipleRules = map(function(b) { return 'multiples_of_' + b }, _.range(1, 12));
23 var powerRules = map(function(b) { return 'powers_of_' + b }, _.range(1, 12));
24 return multipleRules.concat(powerRules).concat(['evens', 'odds']);
25};
26var genSetFromInterval = function(a, b) { return _.range(a, b+1); };
27var makeIntervalHypothesisSpace = function(start, end) {
28 var allIntervals = _.flatten(map(function(s) {
29 return map(function(e) { [s, e] }, genSetFromInterval(s+1, end));
30 }, genSetFromInterval(start, end)));
31 return map(function(x) { 'interval_' + x[0] + '_' + x[1] }, allIntervals);
32};
33var getSetFromHypothesis = function(rule) {
34 var parts = rule.split('_');
35 return parts[0] == 'multiples' ? genMultiples(_.parseInt(parts[2])) :
36 parts[0] == 'powers' ? genPowers(_.parseInt(parts[2])) :
37 parts[0] == 'evens' ? genEvens() :
38 parts[0] == 'odds' ? genOdds() :
39 parts[0] == 'interval' ? genSetFromInterval(_.parseInt(parts[1]), _.parseInt(parts[2])) :
40 null;
41};
42var learnConcept = function(examples, testQuery) {
43 return Infer({method: 'enumerate'}, function() {
44 var rules = makeRuleHypothesisSpace();
45 var intervals = makeIntervalHypothesisSpace(1, maxNumber);
46 var hypothesis = flip(0.5) ? uniformDraw(rules) : uniformDraw(intervals);
47 var set = getSetFromHypothesis(hypothesis);
48 mapData({data: examples}, function(example) {
49 observe(Categorical({vs: set}), example);
50 });
51 return {hypothesis: hypothesis, testQueryResponse: inSet(testQuery, set)};
52 });
53};

End your program with the array pQueries of length 20: for each query 1..20, compute expectation(marginalize(learnConcept([3, 6, 9], query), function(x) { x.testQueryResponse })).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var maxNumber = 20;
2var filterByInRange = function(set) {
3 var inRange = function(v) {v <= maxNumber && v >= 0};
4 return _.uniq(filter(inRange, set));
5};
6var genEvens = function() {
7 return filter(function(v) {return v % 2 == 0}, _.range(1, maxNumber));
8};
9var genOdds = function() {
10 return filter(function(v) {return (v + 1) % 2 == 0}, _.range(1, maxNumber));
11};
12var genMultiples = function(base) {
13 var multiples = map(function(v) {return base * v}, _.range(maxNumber));
14 return filterByInRange(multiples);
15};
16var genPowers = function(base) {
17 var powers = map(function(v) {return Math.pow(base, v)}, _.range(maxNumber));
18 return filterByInRange(powers);
19};
20var inSet = function(val, set) { return _.includes(set, val); };
21var makeRuleHypothesisSpace = function() {
22 var multipleRules = map(function(base) {return 'multiples_of_' + base}, _.range(1, 12));
23 var powerRules = map(function(base) {return 'powers_of_' + base}, _.range(1, 12));
24 return multipleRules.concat(powerRules).concat(['evens', 'odds']);
25};
26var genSetFromInterval = function(a, b) { return _.range(a, b+1); };
27var makeIntervalHypothesisSpace = function(start, end) {
28 var allIntervals = _.flatten(map(function(s) {
29 return map(function(e) { [s, e] }, genSetFromInterval(s+1, end));
30 }, genSetFromInterval(start, end)));
31 return map(function(x) { 'interval_' + x[0] + '_' + x[1] }, allIntervals);
32};
33var getSetFromHypothesis = function(rule) {
34 var parts = rule.split('_');
35 return (parts[0] == 'multiples' ? genMultiples(_.parseInt(parts[2])) :
36 parts[0] == 'powers' ? genPowers(_.parseInt(parts[2])) :
37 parts[0] == 'evens' ? genEvens() :
38 parts[0] == 'odds' ? genOdds() :
39 parts[0] == 'interval' ? genSetFromInterval(_.parseInt(parts[1]), _.parseInt(parts[2])) :
40 console.error('unknown rule' + rule));
41};
42var learnConcept = function(examples, testQuery) {
43 return Infer({method: 'enumerate'}, function() {
44 var rules = makeRuleHypothesisSpace();
45 var intervals = makeIntervalHypothesisSpace(1, maxNumber);
46 var hypothesis = flip(0.5) ? uniformDraw(rules) : uniformDraw(intervals);
47 var set = getSetFromHypothesis(hypothesis);
48 mapData({data: examples}, function(example) {
49 observe(Categorical({vs: set}), example);
50 });
51 return {hypothesis: hypothesis,
52 testQueryResponse: inSet(testQuery, set)};
53 });
54};
55
56var examples = [3, 6, 9];
57var queries = genSetFromInterval(1, maxNumber);
58var ANSWER = (map(function(query) {
59 var post = learnConcept(examples, query);
60 return expectation(marginalize(post, function(x) { x.testQueryResponse }));
61}, queries));
62
s46 +psonnet-46-primer-v3val-
webppl
1var maxNumber = 20;
2var filterByInRange = function(set) {
3 var inRange = function(v) { return v <= maxNumber && v >= 0; };
4 return _.uniq(filter(inRange, set));
5};
6var genEvens = function() {
7 return filter(function(v) { return v % 2 == 0; }, _.range(1, maxNumber + 1));
8};
9var genOdds = function() {
10 return filter(function(v) { return (v + 1) % 2 == 0; }, _.range(1, maxNumber + 1));
11};
12var genMultiples = function(base) {
13 var multiples = map(function(v) { return base * v; }, _.range(1, maxNumber + 1));
14 return filterByInRange(multiples);
15};
16var genPowers = function(base) {
17 var powers = map(function(v) { return Math.pow(base, v); }, _.range(1, maxNumber + 1));
18 return filterByInRange(powers);
19};
20var inSet = function(val, set) { return _.includes(set, val); };
21var makeRuleHypothesisSpace = function() {
22 var multipleRules = map(function(b) { return 'multiples_of_' + b; }, _.range(1, 12));
23 var powerRules = map(function(b) { return 'powers_of_' + b; }, _.range(1, 12));
24 return multipleRules.concat(powerRules).concat(['evens', 'odds']);
25};
26var genSetFromInterval = function(a, b) { return _.range(a, b + 1); };
27var makeIntervalHypothesisSpace = function(start, end) {
28 var allIntervals = _.flatten(map(function(s) {
29 return map(function(e) { return [s, e]; }, genSetFromInterval(s + 1, end));
30 }, genSetFromInterval(start, end)));
31 return map(function(x) { return 'interval_' + x[0] + '_' + x[1]; }, allIntervals);
32};
33var getSetFromHypothesis = function(rule) {
34 var parts = rule.split('_');
35 return parts[0] == 'multiples' ? genMultiples(_.parseInt(parts[2])) :
36 parts[0] == 'powers' ? genPowers(_.parseInt(parts[2])) :
37 parts[0] == 'evens' ? genEvens() :
38 parts[0] == 'odds' ? genOdds() :
39 parts[0] == 'interval' ? genSetFromInterval(_.parseInt(parts[1]), _.parseInt(parts[2])) :
40 null;
41};
42var learnConcept = function(examples, testQuery) {
43 return Infer({method: 'enumerate'}, function() {
44 var rules = makeRuleHypothesisSpace();
45 var intervals = makeIntervalHypothesisSpace(1, maxNumber);
46 var hypothesis = flip(0.5) ? uniformDraw(rules) : uniformDraw(intervals);
47 var set = getSetFromHypothesis(hypothesis);
48 mapData({data: examples}, function(example) {
49 observe(Categorical({vs: set, ps: map(function(x) { return 1/set.length; }, set)}), example);
50 });
51 return {hypothesis: hypothesis, testQueryResponse: inSet(testQuery, set)};
52 });
53};
54
55var queries = _.range(1, 21);
56var pQueries = map(function(query) {
57 var dist = learnConcept([3, 6, 9], query);
58 var marginal = marginalize(dist, function(x) { return x.testQueryResponse; });
59 return expectation(marginal);
60}, queries);
61
62var ANSWER = pQueries;
02outputvalue
GT
[0.1406, 0.2989, 1.0000, 0.5153, 0.5153, 1.0000, 0.5153, 0.5153, 1.0000, 0.3843, 0.2934, 0.7125, 0.1789, 0.1414, 0.5968, 0.0886, 0.0696, 0.5387, 0.0410, 0.0093]
s46 +p
[0.1094, 0.2326, 1.0000, 0.4010, 0.4010, 1.0000, 0.4010, 0.4010, 1.0000, 0.2990, 0.2284, 0.7763, 0.1392, 0.1101, 0.6862, 0.0690, 0.0542, 0.6410, 0.0319, 0.0234]
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer val+ ·
haiku-45-primer-v3 haiku-4.5 +primer val- ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking val+ ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking val+ ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer val+ ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer val- ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking val+ ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking val- ·
probmods2-occams-razor / ex2.1
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Given this Causal Power model where C is a possible cause of E:

webppl
1var observedData = [{C:true, E:false}];
2Infer({method: 'MCMC', samples: 10000, lag:2}, function() {
3 var cp = uniform(0, 1); // Causal power of C to cause E
4 var b = uniform(0, 1); // Background probability of E
5 mapData({data: observedData}, function(datum) {
6 var E = (datum.C && flip(cp)) || flip(b);
7 condition(E == datum.E);
8 })
9 return {cp, b};
10})

Modify it into a Causal Support model: also infer whether there is a causal relation at all (relation = flip()). When relation is false, C does not affect E. Return {relation, cp, b}. End with the Infer(...).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var observedData = [{C:true, E:false}];
2var ANSWER = (Infer({method: 'MCMC', samples: 10000, lag:2}, function() {
3 var relation = flip();
4 var cp = uniform(0, 1);
5 var b = uniform(0, 1);
6
7 mapData({data: observedData}, function(datum) {
8 var E = (relation && datum.C && flip(cp)) || flip(b);
9 condition(E == datum.E);
10 });
11
12 return {relation, cp, b};
13}));
14
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var observedData = [{C:true, E:false}];
2
3var ANSWER = Infer({method: 'MCMC', samples: 10000, lag:2}, function() {
4 var relation = flip();
5 var cp = uniform(0, 1);
6 var b = uniform(0, 1);
7 mapData({data: observedData}, function(datum) {
8 var E = (relation && datum.C && flip(cp)) || flip(b);
9 condition(E == datum.E);
10 });
11 return {relation, cp, b};
12});
02output overlaydistribution
GT s46 +p48 bins
00.0050.0050.0100.010{"relation":true,"cp":0.2185296397704004,"b":0.24806052957772884} A = 0.001 B = 0.001{"relation":true,"cp":0.2185296397704004,"b":0.24806052957772884} A = 0.001 B = 0.001{"relation":true,"cp":0.2185296397704004,"b":0.24806052957772884}{"relation":true,"cp":0.07292335220791026,"b":0.20781890357974614} A = 0.001 B = 0.001{"relation":true,"cp":0.07292335220791026,"b":0.20781890357974614} A = 0.001 B = 0.001{"relation":true,"cp":0.014699151362483731,"b":0.11548656667415967} A = 0.001 B = 0.001{"relation":true,"cp":0.014699151362483731,"b":0.11548656667415967} A = 0.001 B = 0.001{"relation":false,"cp":0.5229704292123566,"b":0.05110026013482522} A = 0.001 B = 0.001{"relation":false,"cp":0.5229704292123566,"b":0.05110026013482522} A = 0.001 B = 0.001{"relation":false,"cp":0.11024506895331679,"b":0.14602570858486585} A = 0.001 B = 0.001{"relation":false,"cp":0.11024506895331679,"b":0.14602570858486585} A = 0.001 B = 0.001{"relation":false,"cp":0.11024506895331679,"b":0.14602570858486585}{"relation":false,"cp":0.4852465446148623,"b":0.6351202095730458} A = 0.001 B = 0.001{"relation":false,"cp":0.4852465446148623,"b":0.6351202095730458} A = 0.001 B = 0.001{"relation":true,"cp":0.11024506895331679,"b":0.14602570858486585} A = 0.001 B = 0.001{"relation":true,"cp":0.11024506895331679,"b":0.14602570858486585} A = 0.001 B = 0.001{"relation":true,"cp":0.23626387409346877,"b":0.0594682384968995} A = 0.001 B = 0.001{"relation":true,"cp":0.23626387409346877,"b":0.0594682384968995} A = 0.001 B = 0.001{"relation":true,"cp":0.03321951068491523,"b":0.0729994597171295} A = 0.001 B = 0.001{"relation":true,"cp":0.03321951068491523,"b":0.0729994597171295} A = 0.001 B = 0.001{"relation":true,"cp":0.03321951068491523,"b":0.0729994597171295}{"relation":false,"cp":0.726618962517606,"b":0.6144773919574288} A = 0.001 B = 0.001{"relation":false,"cp":0.726618962517606,"b":0.6144773919574288} A = 0.001 B = 0.001{"relation":true,"cp":0.1387407450624023,"b":0.3574707217514363} A = 0.001 B = 0.001{"relation":true,"cp":0.1387407450624023,"b":0.3574707217514363} A = 0.001 B = 0.001{"relation":true,"cp":0.024304497206571494,"b":0.05610474562945667} A = 0.001 B = 0.001{"relation":true,"cp":0.024304497206571494,"b":0.05610474562945667} A = 0.001 B = 0.001{"relation":false,"cp":0.48451159701638896,"b":0.030836920835819157} A = 0.001 B = 0.001{"relation":false,"cp":0.48451159701638896,"b":0.030836920835819157} A = 0.001 B = 0.001{"relation":false,"cp":0.48451159701638896,"b":0.030836920835819157}{"relation":true,"cp":0.4650732349397347,"b":0.15716769466249125} A = 0.001 B = 0.001{"relation":true,"cp":0.4650732349397347,"b":0.15716769466249125} A = 0.001 B = 0.001{"relation":true,"cp":0.47185571911211605,"b":0.26347183283957865} A = 0.001 B = 0.001{"relation":true,"cp":0.47185571911211605,"b":0.26347183283957865} A = 0.001 B = 0.001{"relation":true,"cp":0.1390465638830118,"b":0.6872760433626456} A = 0.001 B = 0.001{"relation":true,"cp":0.1390465638830118,"b":0.6872760433626456} A = 0.001 B = 0.001{"relation":true,"cp":0.14561983963195907,"b":0.2410053924919602} A = 0.001 B = 0.001{"relation":true,"cp":0.14561983963195907,"b":0.2410053924919602} A = 0.001 B = 0.001{"relation":true,"cp":0.14561983963195907,"b":0.2410053924919602}{"relation":true,"cp":0.08282252195896818,"b":0.059254894440368536} A = 0.001 B = 0.001{"relation":true,"cp":0.08282252195896818,"b":0.059254894440368536} A = 0.001 B = 0.001{"relation":false,"cp":0.5527701349817501,"b":0.32097552064027385} A = 0.001 B = 0.001{"relation":false,"cp":0.5527701349817501,"b":0.32097552064027385} A = 0.001 B = 0.001{"relation":true,"cp":0.1624285710681913,"b":0.45618021827808036} A = 0.000 B = 0.000{"relation":true,"cp":0.1624285710681913,"b":0.45618021827808036} A = 0.000 B = 0.000{"relation":true,"cp":0.07834404344380763,"b":0.17974785355854325} A = 0.000 B = 0.000{"relation":true,"cp":0.07834404344380763,"b":0.17974785355854325} A = 0.000 B = 0.000{"relation":true,"cp":0.07834404344380763,"b":0.17974785355854325}{"relation":false,"cp":0.8976112562672758,"b":0.03158594928158505} A = 0.000 B = 0.000{"relation":false,"cp":0.8976112562672758,"b":0.03158594928158505} A = 0.000 B = 0.000{"relation":false,"cp":0.8560217543989976,"b":0.3532625490813147} A = 0.000 B = 0.000{"relation":false,"cp":0.8560217543989976,"b":0.3532625490813147} A = 0.000 B = 0.000{"relation":true,"cp":0.22662585207828312,"b":0.363293488060036} A = 0.000 B = 0.000{"relation":true,"cp":0.22662585207828312,"b":0.363293488060036} A = 0.000 B = 0.000{"relation":false,"cp":0.4158860888125283,"b":0.010606583677939964} A = 0.000 B = 0.000{"relation":false,"cp":0.4158860888125283,"b":0.010606583677939964} A = 0.000 B = 0.000{"relation":false,"cp":0.4158860888125283,"b":0.010606583677939964}{"relation":true,"cp":0.08841897694742448,"b":0.05554785985253829} A = 0.000 B = 0.000{"relation":true,"cp":0.08841897694742448,"b":0.05554785985253829} A = 0.000 B = 0.000{"relation":true,"cp":0.375967445936401,"b":0.20623516091354593} A = 0.000 B = 0.000{"relation":true,"cp":0.375967445936401,"b":0.20623516091354593} A = 0.000 B = 0.000{"relation":true,"cp":0.11968254382923224,"b":0.5652166890344708} A = 0.000 B = 0.000{"relation":true,"cp":0.11968254382923224,"b":0.5652166890344708} A = 0.000 B = 0.000{"relation":false,"cp":0.8725427793764001,"b":0.06504471604337554} A = 0.000 B = 0.000{"relation":false,"cp":0.8725427793764001,"b":0.06504471604337554} A = 0.000 B = 0.000{"relation":false,"cp":0.8725427793764001,"b":0.06504471604337554}{"relation":false,"cp":0.6405238260291637,"b":0.4906768917039885} A = 0.000 B = 0.000{"relation":false,"cp":0.6405238260291637,"b":0.4906768917039885} A = 0.000 B = 0.000{"relation":false,"cp":0.7142824956129008,"b":0.1632827590681863} A = 0.000 B = 0.000{"relation":false,"cp":0.7142824956129008,"b":0.1632827590681863} A = 0.000 B = 0.000{"relation":true,"cp":0.3418734868753074,"b":0.5465205875415788} A = 0.000 B = 0.000{"relation":true,"cp":0.3418734868753074,"b":0.5465205875415788} A = 0.000 B = 0.000{"relation":false,"cp":0.76993489583728,"b":0.27388445758081215} A = 0.000 B = 0.000{"relation":false,"cp":0.76993489583728,"b":0.27388445758081215} A = 0.000 B = 0.000{"relation":false,"cp":0.76993489583728,"b":0.27388445758081215}{"relation":true,"cp":0.6514179982604749,"b":0.14983008698811032} A = 0.000 B = 0.000{"relation":true,"cp":0.6514179982604749,"b":0.14983008698811032} A = 0.000 B = 0.000{"relation":true,"cp":0.2271606912544259,"b":0.25770115710075614} A = 0.000 B = 0.000{"relation":true,"cp":0.2271606912544259,"b":0.25770115710075614} A = 0.000 B = 0.000{"relation":false,"cp":0.3581169787152443,"b":0.1651599606976888} A = 0.000 B = 0.000{"relation":false,"cp":0.3581169787152443,"b":0.1651599606976888} A = 0.000 B = 0.000{"relation":false,"cp":0.3428005713545327,"b":0.6780129130849032} A = 0.000 B = 0.000{"relation":false,"cp":0.3428005713545327,"b":0.6780129130849032} A = 0.000 B = 0.000{"relation":false,"cp":0.3428005713545327,"b":0.6780129130849032}{"relation":false,"cp":0.4703632712865919,"b":0.22462908250449104} A = 0.000 B = 0.000{"relation":false,"cp":0.4703632712865919,"b":0.22462908250449104} A = 0.000 B = 0.000{"relation":true,"cp":0.3131097942659117,"b":0.48585386218011445} A = 0.000 B = 0.000{"relation":true,"cp":0.3131097942659117,"b":0.48585386218011445} A = 0.000 B = 0.000{"relation":true,"cp":0.29194996932941797,"b":0.12312227822215459} A = 0.000 B = 0.000{"relation":true,"cp":0.29194996932941797,"b":0.12312227822215459} A = 0.000 B = 0.000{"relation":false,"cp":0.7934932161538686,"b":0.2504407972352593} A = 0.000 B = 0.000{"relation":false,"cp":0.7934932161538686,"b":0.2504407972352593} A = 0.000 B = 0.000{"relation":false,"cp":0.7934932161538686,"b":0.2504407972352593}{"relation":false,"cp":0.5759203219052123,"b":0.31839823451281046} A = 0.000 B = 0.000{"relation":false,"cp":0.5759203219052123,"b":0.31839823451281046} A = 0.000 B = 0.000{"relation":false,"cp":0.33780113690316493,"b":0.698140870371491} A = 0.000 B = 0.000{"relation":false,"cp":0.33780113690316493,"b":0.698140870371491} A = 0.000 B = 0.000{"relation":false,"cp":0.9741416173892591,"b":0.21624628706225357} A = 0.000 B = 0.000{"relation":false,"cp":0.9741416173892591,"b":0.21624628706225357} A = 0.000 B = 0.000{"relation":false,"cp":0.16163576525075377,"b":0.7045478629561975} A = 0.000 B = 0.000{"relation":false,"cp":0.16163576525075377,"b":0.7045478629561975} A = 0.000 B = 0.000{"relation":false,"cp":0.16163576525075377,"b":0.7045478629561975}{"relation":false,"cp":0.24766340069562623,"b":0.31887564039187866} A = 0.000 B = 0.000{"relation":false,"cp":0.24766340069562623,"b":0.31887564039187866} A = 0.000 B = 0.000{"relation":true,"cp":0.07903503475450147,"b":0.12495067825929006} A = 0.000 B = 0.000{"relation":true,"cp":0.07903503475450147,"b":0.12495067825929006} A = 0.000 B = 0.000{"relation":false,"cp":0.9831693003133037,"b":0.09779730841293326} A = 0.000 B = 0.000{"relation":false,"cp":0.9831693003133037,"b":0.09779730841293326} A = 0.000 B = 0.000
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<1 1.000 14.1448 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<1 0.691 9.3394 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-occams-razor / ex2.2
shape distribution s46 +p TV<10.667 runs 8/8
per-run
00 prompt

Given the Causal Support model (relation, cp, b latent; observedData = [{C:true, E:false}]; noisy-OR effect E = (relation && C && flip(cp)) || flip(b)):

Single-site MH MCMC won't be efficient because changing relation alone rarely accepts. Improve efficiency by constructing the *marginal probability of E* directly via a small Infer, and use that in an observe (instead of sampling E and conditioning). Return {relation, cp, b}.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var observedData = [{C:true, E:false}];
2var ANSWER = (Infer({method: 'MCMC', samples: 10000, lag:2}, function() {
3 var relation = flip();
4 var cp = uniform(0, 1);
5 var b = uniform(0, 1);
6
7 var noisyOrMarginal = function(C) {
8 return Infer({method: 'enumerate'}, function() {
9 return (relation && C && flip(cp)) || flip(b);
10 });
11 };
12
13 mapData({data: observedData}, function(datum) {
14 observe(noisyOrMarginal(datum.C), datum.E);
15 });
16
17 return {relation, cp, b};
18}));
19
s46 +psonnet-46-primer-v3TV<10.667
webppl
1var model = function() {
2 var relation = flip(0.5);
3 var cp = uniform(0, 1);
4 var b = uniform(0, 1);
5
6 // Compute marginal probability of E given C=true using a small inner Infer
7 var eDistGivenCTrue = Infer({method: 'enumerate'}, function() {
8 var E = (relation && flip(cp)) || flip(b);
9 return E;
10 });
11
12 // Observed data: {C: true, E: false}
13 // P(E=false | C=true, relation, cp, b)
14 observe(eDistGivenCTrue, false);
15
16 return {relation: relation, cp: cp, b: b};
17};
18
19var ANSWER = Infer({
20 method: 'MCMC',
21 samples: 10000,
22 burn: 2000,
23 kernel: 'MH'
24}, model);
02output overlaydistribution
GT s46 +p48 bins · top 48 of 80
00.0050.0050.0100.010{"relation":true,"cp":0.17206572974106654,"b":0.0879829128970211} A = 0.000 B = 0.001{"relation":true,"cp":0.17206572974106654,"b":0.0879829128970211} A = 0.000 B = 0.001{"relation":true,"cp":0.17206572974106654,"b":0.0879829128970211}{"relation":false,"cp":0.16736775780085614,"b":0.1636439551430656} A = 0.000 B = 0.001{"relation":false,"cp":0.16736775780085614,"b":0.1636439551430656} A = 0.000 B = 0.001{"relation":false,"cp":0.6569219083840859,"b":0.08302314337273359} A = 0.000 B = 0.001{"relation":false,"cp":0.6569219083840859,"b":0.08302314337273359} A = 0.000 B = 0.001{"relation":false,"cp":0.8850313200087224,"b":0.25820727777133806} A = 0.000 B = 0.001{"relation":false,"cp":0.8850313200087224,"b":0.25820727777133806} A = 0.000 B = 0.001{"relation":true,"cp":0.17550447146706696,"b":0.2266859596543116} A = 0.000 B = 0.001{"relation":true,"cp":0.17550447146706696,"b":0.2266859596543116} A = 0.000 B = 0.001{"relation":true,"cp":0.17550447146706696,"b":0.2266859596543116}{"relation":false,"cp":0.203075308564582,"b":0.30077784800740254} A = 0.000 B = 0.001{"relation":false,"cp":0.203075308564582,"b":0.30077784800740254} A = 0.000 B = 0.001{"relation":false,"cp":0.95379870249321,"b":0.6155414351225803} A = 0.000 B = 0.001{"relation":false,"cp":0.95379870249321,"b":0.6155414351225803} A = 0.000 B = 0.001{"relation":true,"cp":0.28076821352816905,"b":0.006475507719634987} A = 0.000 B = 0.001{"relation":true,"cp":0.28076821352816905,"b":0.006475507719634987} A = 0.000 B = 0.001{"relation":false,"cp":0.8199823666027121,"b":0.29901850108349404} A = 0.000 B = 0.001{"relation":false,"cp":0.8199823666027121,"b":0.29901850108349404} A = 0.000 B = 0.001{"relation":false,"cp":0.8199823666027121,"b":0.29901850108349404}{"relation":false,"cp":0.923134963860121,"b":0.13610454900481148} A = 0.000 B = 0.001{"relation":false,"cp":0.923134963860121,"b":0.13610454900481148} A = 0.000 B = 0.001{"relation":false,"cp":0.6272117684564991,"b":0.29606868657819496} A = 0.000 B = 0.001{"relation":false,"cp":0.6272117684564991,"b":0.29606868657819496} A = 0.000 B = 0.001{"relation":false,"cp":0.5925350775418041,"b":0.5782215014404458} A = 0.000 B = 0.001{"relation":false,"cp":0.5925350775418041,"b":0.5782215014404458} A = 0.000 B = 0.001{"relation":true,"cp":0.1905015288915828,"b":0.3630933746812501} A = 0.000 B = 0.001{"relation":true,"cp":0.1905015288915828,"b":0.3630933746812501} A = 0.000 B = 0.001{"relation":true,"cp":0.1905015288915828,"b":0.3630933746812501}{"relation":true,"cp":0.15781473574846983,"b":0.28312687232915607} A = 0.000 B = 0.001{"relation":true,"cp":0.15781473574846983,"b":0.28312687232915607} A = 0.000 B = 0.001{"relation":false,"cp":0.7295041191113905,"b":0.17023009766766461} A = 0.000 B = 0.001{"relation":false,"cp":0.7295041191113905,"b":0.17023009766766461} A = 0.000 B = 0.001{"relation":false,"cp":0.06311301203178468,"b":0.09951260410332073} A = 0.000 B = 0.001{"relation":false,"cp":0.06311301203178468,"b":0.09951260410332073} A = 0.000 B = 0.001{"relation":true,"cp":0.4406845278305314,"b":0.10518609721439351} A = 0.000 B = 0.001{"relation":true,"cp":0.4406845278305314,"b":0.10518609721439351} A = 0.000 B = 0.001{"relation":true,"cp":0.4406845278305314,"b":0.10518609721439351}{"relation":true,"cp":0.3969551279279357,"b":0.5259142965507715} A = 0.000 B = 0.001{"relation":true,"cp":0.3969551279279357,"b":0.5259142965507715} A = 0.000 B = 0.001{"relation":false,"cp":0.7386023005645903,"b":0.3649182311094463} A = 0.000 B = 0.001{"relation":false,"cp":0.7386023005645903,"b":0.3649182311094463} A = 0.000 B = 0.001{"relation":false,"cp":0.5510813501715619,"b":0.12740437116273448} A = 0.000 B = 0.001{"relation":false,"cp":0.5510813501715619,"b":0.12740437116273448} A = 0.000 B = 0.001{"relation":false,"cp":0.518008206107639,"b":0.02742932679815571} A = 0.000 B = 0.001{"relation":false,"cp":0.518008206107639,"b":0.02742932679815571} A = 0.000 B = 0.001{"relation":false,"cp":0.518008206107639,"b":0.02742932679815571}{"relation":true,"cp":0.42747034467457573,"b":0.3713624835819036} A = 0.000 B = 0.001{"relation":true,"cp":0.42747034467457573,"b":0.3713624835819036} A = 0.000 B = 0.001{"relation":true,"cp":0.31940110016296164,"b":0.5281001376438125} A = 0.000 B = 0.001{"relation":true,"cp":0.31940110016296164,"b":0.5281001376438125} A = 0.000 B = 0.001{"relation":false,"cp":0.696472352624291,"b":0.26078302093633804} A = 0.000 B = 0.001{"relation":false,"cp":0.696472352624291,"b":0.26078302093633804} A = 0.000 B = 0.001{"relation":true,"cp":0.10840848979352426,"b":0.004035710309701474} A = 0.000 B = 0.001{"relation":true,"cp":0.10840848979352426,"b":0.004035710309701474} A = 0.000 B = 0.001{"relation":true,"cp":0.10840848979352426,"b":0.004035710309701474}{"relation":false,"cp":0.6425126933935513,"b":0.34059623464566713} A = 0.000 B = 0.001{"relation":false,"cp":0.6425126933935513,"b":0.34059623464566713} A = 0.000 B = 0.001{"relation":true,"cp":0.005206197365929343,"b":0.3051775845584096} A = 0.000 B = 0.001{"relation":true,"cp":0.005206197365929343,"b":0.3051775845584096} A = 0.000 B = 0.001{"relation":false,"cp":0.6709570693580289,"b":0.09579141956331873} A = 0.000 B = 0.001{"relation":false,"cp":0.6709570693580289,"b":0.09579141956331873} A = 0.000 B = 0.001{"relation":false,"cp":0.7067284738165592,"b":0.08597704939445086} A = 0.000 B = 0.001{"relation":false,"cp":0.7067284738165592,"b":0.08597704939445086} A = 0.000 B = 0.001{"relation":false,"cp":0.7067284738165592,"b":0.08597704939445086}{"relation":true,"cp":0.19844720754750553,"b":0.43882024885484305} A = 0.000 B = 0.001{"relation":true,"cp":0.19844720754750553,"b":0.43882024885484305} A = 0.000 B = 0.001{"relation":true,"cp":0.0013655687347657157,"b":0.44046128722403355} A = 0.000 B = 0.001{"relation":true,"cp":0.0013655687347657157,"b":0.44046128722403355} A = 0.000 B = 0.001{"relation":true,"cp":0.2736326770987492,"b":0.12052639144442735} A = 0.000 B = 0.001{"relation":true,"cp":0.2736326770987492,"b":0.12052639144442735} A = 0.000 B = 0.001{"relation":false,"cp":0.3084652093372746,"b":0.21862270237861764} A = 0.000 B = 0.001{"relation":false,"cp":0.3084652093372746,"b":0.21862270237861764} A = 0.000 B = 0.001{"relation":false,"cp":0.3084652093372746,"b":0.21862270237861764}{"relation":false,"cp":0.6982136115916152,"b":0.18751337848705502} A = 0.000 B = 0.001{"relation":false,"cp":0.6982136115916152,"b":0.18751337848705502} A = 0.000 B = 0.001{"relation":true,"cp":0.8506700220839377,"b":0.45170343937717755} A = 0.000 B = 0.001{"relation":true,"cp":0.8506700220839377,"b":0.45170343937717755} A = 0.000 B = 0.001{"relation":true,"cp":0.22417692401702738,"b":0.1394388441354988} A = 0.000 B = 0.001{"relation":true,"cp":0.22417692401702738,"b":0.1394388441354988} A = 0.000 B = 0.001{"relation":false,"cp":0.803306251431555,"b":0.5332280720410657} A = 0.000 B = 0.001{"relation":false,"cp":0.803306251431555,"b":0.5332280720410657} A = 0.000 B = 0.001{"relation":false,"cp":0.803306251431555,"b":0.5332280720410657}{"relation":false,"cp":0.46473283651202785,"b":0.21809472530882362} A = 0.000 B = 0.001{"relation":false,"cp":0.46473283651202785,"b":0.21809472530882362} A = 0.000 B = 0.001{"relation":true,"cp":0.2144156191814795,"b":0.23833468236144628} A = 0.000 B = 0.001{"relation":true,"cp":0.2144156191814795,"b":0.23833468236144628} A = 0.000 B = 0.001{"relation":false,"cp":0.4097739169866701,"b":0.03285221411458272} A = 0.000 B = 0.001{"relation":false,"cp":0.4097739169866701,"b":0.03285221411458272} A = 0.000 B = 0.001{"relation":true,"cp":0.16177377595649042,"b":0.025646824245013577} A = 0.000 B = 0.001{"relation":true,"cp":0.16177377595649042,"b":0.025646824245013577} A = 0.000 B = 0.001{"relation":true,"cp":0.16177377595649042,"b":0.025646824245013577}{"relation":false,"cp":0.7320687117646016,"b":0.3044078003614435} A = 0.000 B = 0.001{"relation":false,"cp":0.7320687117646016,"b":0.3044078003614435} A = 0.000 B = 0.001{"relation":false,"cp":0.20719466863148453,"b":0.4515158838838995} A = 0.000 B = 0.001{"relation":false,"cp":0.20719466863148453,"b":0.4515158838838995} A = 0.000 B = 0.001{"relation":false,"cp":0.8677464633769101,"b":0.35425025460563697} A = 0.000 B = 0.001{"relation":false,"cp":0.8677464633769101,"b":0.35425025460563697} A = 0.000 B = 0.001{"relation":false,"cp":0.8669927504492593,"b":0.43498964620244857} A = 0.000 B = 0.001{"relation":false,"cp":0.8669927504492593,"b":0.43498964620244857} A = 0.000 B = 0.001{"relation":false,"cp":0.8669927504492593,"b":0.43498964620244857}{"relation":false,"cp":0.5327600433692158,"b":0.26707016984628934} A = 0.000 B = 0.001{"relation":false,"cp":0.5327600433692158,"b":0.26707016984628934} A = 0.000 B = 0.001{"relation":false,"cp":0.8651763131128243,"b":0.22082799657460134} A = 0.000 B = 0.001{"relation":false,"cp":0.8651763131128243,"b":0.22082799657460134} A = 0.000 B = 0.001{"relation":false,"cp":0.3241001428320107,"b":0.28868651595179945} A = 0.000 B = 0.001{"relation":false,"cp":0.3241001428320107,"b":0.28868651595179945} A = 0.000 B = 0.001
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<1 0.827 11.4022 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<1 0.833 6.2019 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<1 0.968 13.6954 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<1 0.667 5.4863 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<1 0.677 8.3685 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<1 0.667 5.3785 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<1 0.779 10.1364 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<1 0.887 11.5619 ·
probmods2-occams-razor / ex2.3
shape record(cpValues, csValues) s46 +p val- runs 8/8
per-run
00 prompt

Compare Causal Power (CP) and Causal Support (CS) models on data where E occurs varying amounts with and without C.

webppl
1var generateData = function(numEWithC, numEWithoutC) {
2 var eWithC = repeat(numEWithC, function() {return {C: true, E: true}});
3 var noEWithC = repeat(8 - numEWithC, function() {return {C: true, E: false}});
4 var eWithoutC = repeat(numEWithoutC, function() {return {C: false, E: true}});
5 var noEWithoutC = repeat(8 - numEWithoutC, function() {return {C: false, E: false}});
6 return _.flatten([eWithC, noEWithC, eWithoutC, noEWithoutC]);
7}
8var dataParams = [[8,8],[6,6],[4,4],[2,2],[0,0],[8,6],[6,4],[4,2],[2,0],[8,4],[6,2],[4,0],[8,2],[6,0],[8,0]];

Implement cpPost(observedData) (returning posterior over cp) and csPost(observedData) (returning posterior over relation*cp), both using the marginal-noisy-OR observe from Ex 2.2. Return an object literal {cpValues, csValues} where each is an array of expectation(...) of the corresponding posterior across all 15 dataParams configurations.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var generateData = function(numEWithC, numEWithoutC) {
2 var eWithC = repeat(numEWithC, function() {return {C: true, E: true}});
3 var noEWithC = repeat(8 - numEWithC, function() {return {C: true, E: false}});
4 var eWithoutC = repeat(numEWithoutC, function() {return {C: false, E: true}});
5 var noEWithoutC = repeat(8 - numEWithoutC, function() {return {C: false, E: false}});
6 return _.flatten([eWithC, noEWithC, eWithoutC, noEWithoutC]);
7};
8
9var dataParams = [[8, 8], [6, 6], [4, 4], [2, 2], [0, 0], [8, 6],
10 [6, 4], [4, 2], [2, 0], [8, 4], [6, 2], [4, 0],
11 [8, 2], [6, 0], [8, 0]];
12
13var data = map(function(x) { generateData(x[0], x[1]) }, dataParams);
14
15var cpPost = function(observedData) {
16 return Infer({method: 'MCMC', burn: 2000, samples: 1000, lag:2}, function() {
17 var cp = uniform(0, 1);
18 var b = uniform(0, 1);
19 var noisyOrMarginal = function(C) {
20 return Infer({method: 'enumerate'}, function() {
21 return (C && flip(cp)) || flip(b);
22 });
23 };
24 mapData({data: observedData}, function(datum) {
25 observe(noisyOrMarginal(datum.C), datum.E);
26 });
27 return cp;
28 });
29};
30
31var csPost = function(observedData) {
32 return Infer({method: 'MCMC', burn: 2000, samples: 1000, lag:2}, function() {
33 var relation = flip();
34 var cp = uniform(0, 1);
35 var b = uniform(0, 1);
36 var noisyOrMarginal = function(C) {
37 return Infer({method: 'enumerate'}, function() {
38 return (relation && C && flip(cp)) || flip(b);
39 });
40 };
41 mapData({data: observedData}, function(datum) {
42 observe(noisyOrMarginal(datum.C), datum.E);
43 });
44 return relation * cp;
45 });
46};
47var ANSWER = (({
48 cpValues: map(function(d) { expectation(cpPost(d)) }, data),
49 csValues: map(function(d) { expectation(csPost(d)) }, data)
50}));
51
s46 +psonnet-46-primer-v3val-
webppl
1var cpPost = function(observedData) {
2 return Infer({method: 'MCMC', samples: 5000, burn: 1000}, function() {
3 var b = uniform(0, 1);
4 var cp = uniform(0, 1);
5
6 mapData({data: observedData}, function(d) {
7 var pE = d.C ? (1 - (1 - b) * (1 - cp)) : b;
8 observe(Bernoulli({p: pE}), d.E);
9 });
10
11 return cp;
12 });
13};
14
15var csPost = function(observedData) {
16 return Infer({method: 'MCMC', samples: 5000, burn: 1000}, function() {
17 var b = uniform(0, 1);
18 var relation = flip(0.5);
19 var cp = relation ? uniform(0, 1) : 0;
20
21 mapData({data: observedData}, function(d) {
22 var pE = d.C ? (1 - (1 - b) * (1 - cp)) : b;
23 observe(Bernoulli({p: pE}), d.E);
24 });
25
26 return relation * cp;
27 });
28};
29
30var generateData = function(numEWithC, numEWithoutC) {
31 var eWithC = repeat(numEWithC, function() {return {C: true, E: true}});
32 var noEWithC = repeat(8 - numEWithC, function() {return {C: true, E: false}});
33 var eWithoutC = repeat(numEWithoutC, function() {return {C: false, E: true}});
34 var noEWithoutC = repeat(8 - numEWithoutC, function() {return {C: false, E: false}});
35 return _.flatten([eWithC, noEWithC, eWithoutC, noEWithoutC]);
36};
37
38var dataParams = [[8,8],[6,6],[4,4],[2,2],[0,0],[8,6],[6,4],[4,2],[2,0],[8,4],[6,2],[4,0],[8,2],[6,0],[8,0]];
39
40var allData = map(function(params) {
41 return generateData(params[0], params[1]);
42}, dataParams);
43
44var cpValues = map(function(data) {
45 var post = cpPost(data);
46 return expectation(post);
47}, allData);
48
49var csValues = map(function(data) {
50 var post = csPost(data);
51 return expectation(post);
52}, allData);
53
54var ANSWER = {cpValues: cpValues, csValues: csValues};
02outputrecord(cpValues, csValues)
GT
cpValues=[0.5556826131397045,0.3702535980921866,0.2700255045689427,0.1892047791618214,0.10600645878143336,0.6358724683821168,0.4481293977618758,0.33676185481308646,0.25430731291635106,0.7727284201484627,0.5424782657820121,0.4280589392830203,0.8453887507387302,0.6593040276151818,0.8872620837183924]
csValues=[0.34298901139185173,0.15298054308492048,0.10216146467440754,0.04931054333555417,0.013087233596827976,0.5022983299207961,0.29668120661657926,0.16291500410135396,0.13221114517998647,0.7142026717003641,0.4885003554613696,0.36158814464404776,0.8495186831069386,0.6535112029435439,0.8830293854508352]
s46 +p
cpValues=[0.5570685262213059,0.36022241494309437,0.28465926420023596,0.18812672322298948,0.10091654488885898,0.670125948237511,0.4553798942979878,0.3230944781661158,0.25009968709385655,0.7746923868863832,0.5637632628311595,0.45709333248949907,0.8512938642388205,0.6614527840037346,0.884712039296068]
csValues=[0.3196935525247007,0.1541579752322195,0.09328604355886264,0.040250381865650574,0.01479583104409548,0.5070857779210203,0.25153741302147775,0.16512041151538764,0.129547052297515,0.7247885590999757,0.4687399112620734,0.3569917779494295,0.8324349430821395,0.6444125349803855,0.8926782030049978]
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer val- ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer val- ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer val- ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking val- ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking val- ·
probmods2-social-cognition / ex1.1
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Sally chooses an action 'a', 'b', or 'c' that maps to a vending machine outcome (each action gives 80% chance of one specific food, 10% each for the others). If Sally is *deceptive* she chooses an action that does NOT lead to her goal food; otherwise she chooses one that does.

Fill in the condition(...) calls. End with the Infer(...) call returning the posterior over Sally's goal food given that she is deceptive AND chose 'b'.

webppl
1var actionPrior = Categorical({vs: ['a','b','c'], ps: [1/3,1/3,1/3]});
2var foodPrior = Categorical({vs: ['bagel','cookie','doughnut'], ps: [1/3,1/3,1/3]});
3var vendingMachine = /* maps action -> categorical food */;
4
5var chooseAction = function(goal, transition, state, deceive) {
6 return Infer({method: 'enumerate'}, function() {
7 var action = sample(actionPrior);
8 condition(...)
9 return action;
10 })
11};
12
13Infer({method: 'enumerate'}, function() {
14 var deceive = flip();
15 var goalFood = sample(foodPrior);
16 var goal = function(outcome) {return outcome == goalFood};
17 var sallyActionDist = chooseAction(goal, vendingMachine, 'state', deceive);
18 condition(...)
19 return goalFood;
20});
system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var actionPrior = Categorical({vs: ['a', 'b', 'c'], ps: [1/3, 1/3, 1/3]});
2var foodPrior = Categorical({vs: ['bagel', 'cookie', 'doughnut'], ps: [1/3, 1/3, 1/3]});
3
4var vendingMachine = function(state, action) {
5 return action == 'a' ? categorical({vs: ['bagel', 'cookie', 'doughnut'], ps: [.8, .1, .1]}) :
6 action == 'b' ? categorical({vs: ['bagel', 'cookie', 'doughnut'], ps: [.1, .8, .1]}) :
7 action == 'c' ? categorical({vs: ['bagel', 'cookie', 'doughnut'], ps: [.1, .1, .8]}) :
8 'nothing';
9};
10
11var chooseAction = function(goal, transition, state, deceive) {
12 return Infer({method: 'enumerate'}, function() {
13 var action = sample(actionPrior);
14 var outcome = transition(state, action);
15 condition(deceive ? !goal(outcome) : goal(outcome));
16 return action;
17 });
18};
19var ANSWER = (Infer({method: 'enumerate'}, function() {
20 var deceive = flip();
21 var goalFood = sample(foodPrior);
22 var goal = function(outcome) {return outcome == goalFood};
23 var sallyActionDist = chooseAction(goal, vendingMachine, 'state', deceive);
24 condition(deceive);
25 condition(sample(sallyActionDist) == 'b');
26 return goalFood;
27}));
28
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var actionPrior = Categorical({vs: ['a','b','c'], ps: [1/3,1/3,1/3]});
2var foodPrior = Categorical({vs: ['bagel','cookie','doughnut'], ps: [1/3,1/3,1/3]});
3
4var vendingMachine = function(action) {
5 return Categorical({
6 vs: ['bagel','cookie','doughnut'],
7 ps: action === 'a' ? [0.8, 0.1, 0.1] :
8 action === 'b' ? [0.1, 0.8, 0.1] :
9 [0.1, 0.1, 0.8]
10 });
11};
12
13var chooseAction = function(goal, transition, state, deceive) {
14 return Infer({method: 'enumerate'}, function() {
15 var action = sample(actionPrior);
16 var outcome = sample(transition(action));
17 condition(deceive ? !goal(outcome) : goal(outcome));
18 return action;
19 });
20};
21
22var ANSWER = Infer({method: 'enumerate'}, function() {
23 var deceive = flip();
24 var goalFood = sample(foodPrior);
25 var goal = function(outcome) { return outcome == goalFood; };
26 var sallyActionDist = chooseAction(goal, vendingMachine, 'state', deceive);
27 condition(deceive === true && sample(sallyActionDist) === 'b');
28 return goalFood;
29});
02output overlaydistribution
GT s46 +p3 bins
00.220.220.450.45doughnut A = 0.450 B = 0.450doughnut A = 0.450 B = 0.4500.450.45doughnutcookie A = 0.100 B = 0.100cookie A = 0.100 B = 0.1000.100.10cookiebagel A = 0.450 B = 0.450bagel A = 0.450 B = 0.4500.450.45bagel
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.5 0.100 0.1054 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-social-cognition / ex1.2
shape distribution s46 +p TV<.50.062 runs 8/8
per-run
00 prompt

Sally chooses 'a', 'b', or 'c'. If deceptive she avoids her goal food; otherwise she picks an action whose outcome IS her goal food. The vending machine: action 'a' -> 80% bagel, 'b' -> 80% cookie, 'c' -> 80% doughnut (10% each for the others).

You observe Sally choose 'b' twice in a row. End with the Infer(...) returning the posterior over her goal food.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var actionPrior = Categorical({vs: ['a', 'b', 'c'], ps: [1/3, 1/3, 1/3]});
2var foodPrior = Categorical({vs: ['bagel', 'cookie', 'doughnut'], ps: [1/3, 1/3, 1/3]});
3
4var vendingMachine = function(state, action) {
5 return action == 'a' ? categorical({vs: ['bagel', 'cookie', 'doughnut'], ps: [.8, .1, .1]}) :
6 action == 'b' ? categorical({vs: ['bagel', 'cookie', 'doughnut'], ps: [.1, .8, .1]}) :
7 action == 'c' ? categorical({vs: ['bagel', 'cookie', 'doughnut'], ps: [.1, .1, .8]}) :
8 'nothing';
9};
10
11var chooseAction = function(goal, transition, state, deceive) {
12 return Infer({method: 'enumerate'}, function() {
13 var action = sample(actionPrior);
14 var outcome = transition(state, action);
15 condition(deceive ? !goal(outcome) : goal(outcome));
16 return action;
17 });
18};
19var ANSWER = (Infer({method: 'enumerate'}, function() {
20 var deceive = flip();
21 var goalFood = sample(foodPrior);
22 var goal = function(outcome) {return outcome == goalFood};
23 var sallyActionDist = chooseAction(goal, vendingMachine, 'state', deceive);
24 condition(sample(sallyActionDist) == 'b');
25 condition(sample(sallyActionDist) == 'b');
26 return goalFood;
27}));
28
s46 +psonnet-46-primer-v3TV<.50.062
webppl
1var model = function() {
2 // Prior over goal food
3 var goal = categorical({vs: ['bagel', 'cookie', 'doughnut'], ps: [1/3, 1/3, 1/3]});
4
5 // Prior over deceptive
6 var deceptive = flip(0.5);
7
8 // Vending machine outcomes given action
9 var vendingMachine = function(action) {
10 var ps = action === 'a' ? [0.8, 0.1, 0.1] :
11 action === 'b' ? [0.1, 0.8, 0.1] :
12 [0.1, 0.1, 0.8];
13 return categorical({vs: ['bagel', 'cookie', 'doughnut'], ps: ps});
14 };
15
16 // Sally picks action based on goal and deceptiveness
17 // If not deceptive: picks action whose outcome IS her goal food (most likely)
18 // If deceptive: avoids her goal food
19 var chooseAction = function() {
20 if (!deceptive) {
21 // Pick the action most likely to give goal food
22 // 'a' -> bagel, 'b' -> cookie, 'c' -> doughnut
23 return goal === 'bagel' ? 'a' :
24 goal === 'cookie' ? 'b' : 'c';
25 } else {
26 // Deceptive: avoid goal food, pick uniformly among non-goal actions
27 var nonGoalActions = goal === 'bagel' ? ['b', 'c'] :
28 goal === 'cookie' ? ['a', 'c'] :
29 ['a', 'b'];
30 return nonGoalActions[randomInteger(2)];
31 }
32 };
33
34 // Observe Sally choosing 'b' twice
35 var action1 = chooseAction();
36 condition(action1 === 'b');
37
38 var action2 = chooseAction();
39 condition(action2 === 'b');
40
41 return goal;
42};
43
44var ANSWER = Infer({method: 'enumerate'}, model);
02output overlaydistribution
GT s46 +p3 bins
00.330.330.670.67doughnut A = 0.198 B = 0.167doughnut A = 0.198 B = 0.1670.200.17doughnutcookie A = 0.605 B = 0.667cookie A = 0.605 B = 0.6670.600.67cookiebagel A = 0.198 B = 0.167bagel A = 0.198 B = 0.1670.200.17bagel
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.5 0.395 0.5031 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.5 0.062 0.0082 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.5 0.062 0.0082 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.5 0.062 0.0082 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.5 0.062 0.0082 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.5 0.062 0.0082 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.5 0.062 0.0082 ·
probmods2-social-cognition / ex2.1
shape record(stay, switch) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Monty Hall variant. Alice picks a door uniformly from {1, 2, 3} (one hides a prize, the others are empty). Monty opens a different door, and we condition on his door being neither Alice's nor the prize. In this variant, Monty picks a door uniformly at random from {1, 2, 3}, including possibly Alice's or the prize door (we filter those via the outer condition).

Helpers (include them in your program):

webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL);
4 }, l, badItems);
5};
6var doors = [1, 2, 3];

Build montyRandom(aliceDoor, prizeDoor) returning a Distribution over Monty's door under this variant. Build model(switches) that draws aliceDoor and prizeDoor uniformly, samples montyDoor from montyRandom, conditions on montyDoor != prizeDoor && montyDoor != aliceDoor, and returns aliceDoor == prizeDoor (whether Alice wins) under her strategy (switches true means switch to the remaining unopened door, false means stay). End your program with an object literal: stay: P(win) when Alice doesn't switch switch: P(win) when Alice switches Each value should be Infer({method: 'enumerate'}, function() { return model(<flag>); }).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL)
4 }, l, badItems);
5};
6
7var doors = [1, 2, 3];
8
9var montyRandom = function(aliceDoor, prizeDoor) {
10 return Infer({method: 'enumerate'}, function() {
11 return categorical({vs: doors});
12 });
13};
14
15var model = function(switches) {
16 var aliceDoor = categorical({vs: doors});
17 var prizeDoor = categorical({vs: doors});
18 var montyDoorDist = montyRandom(aliceDoor, prizeDoor);
19 var montyDoor = sample(montyDoorDist);
20 condition(montyDoor != prizeDoor);
21 condition(montyDoor != aliceDoor);
22 var aliceDoor = switches ? removeBadItems(doors, [aliceDoor, montyDoor])[0] : aliceDoor;
23 return aliceDoor == prizeDoor;
24};
25var ANSWER = (({
26 stay: Infer({method: 'enumerate'}, function() { return model(false); }),
27 switch: Infer({method: 'enumerate'}, function() { return model(true); })
28}));
29
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL);
4 }, l, badItems);
5};
6var doors = [1, 2, 3];
7
8var montyRandom = function(aliceDoor, prizeDoor) {
9 return Infer({method: 'enumerate'}, function() {
10 var montyDoor = doors[randomInteger(3)];
11 return montyDoor;
12 });
13};
14
15var model = function(switches) {
16 var aliceDoor = doors[randomInteger(3)];
17 var prizeDoor = doors[randomInteger(3)];
18 var montyDoor = sample(montyRandom(aliceDoor, prizeDoor));
19 condition(montyDoor != prizeDoor && montyDoor != aliceDoor);
20 var finalDoor = switches
21 ? removeBadItems(doors, [aliceDoor, montyDoor])[0]
22 : aliceDoor;
23 return finalDoor == prizeDoor;
24};
25
26var ANSWER = {
27 stay: Infer({method: 'enumerate'}, function() { return model(false); }),
28 switch: Infer({method: 'enumerate'}, function() { return model(true); })
29};
02outputrecord(stay, switch)
GT
stay=dist(2)
switch=dist(2)
s46 +p
stay=dist(2)
switch=dist(2)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer TV<1 0.500 0.6931 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.5 0.167 0.0566 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.5 0.167 0.0566 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.5 0.167 0.0566 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.5 0.167 0.0566 ·
probmods2-social-cognition / ex2.2
shape record(stay, switch) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Monty Hall variant. Alice picks a door uniformly from {1, 2, 3} (one hides a prize, the others are empty). Monty opens a different door, and we condition on his door being neither Alice's nor the prize. In this variant, Monty deliberately picks a door that is neither Alice's nor the prize (this is the original Monty Hall setup). Inside montyAvoidBoth, sample Monty's door uniformly and condition that it is not Alice's and not the prize.

Helpers (include them in your program):

webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL);
4 }, l, badItems);
5};
6var doors = [1, 2, 3];

Build montyAvoidBoth(aliceDoor, prizeDoor) returning a Distribution over Monty's door under this variant. Build model(switches) that draws aliceDoor and prizeDoor uniformly, samples montyDoor from montyAvoidBoth, conditions on montyDoor != prizeDoor && montyDoor != aliceDoor, and returns aliceDoor == prizeDoor (whether Alice wins) under her strategy (switches true means switch to the remaining unopened door, false means stay). End your program with an object literal: stay: P(win) when Alice doesn't switch switch: P(win) when Alice switches Each value should be Infer({method: 'enumerate'}, function() { return model(<flag>); }).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL)
4 }, l, badItems);
5};
6
7var doors = [1, 2, 3];
8
9var montyAvoidBoth = function(aliceDoor, prizeDoor) {
10 return Infer({method: 'enumerate'}, function() {
11 var montyDoor = categorical({vs: doors});
12 condition(montyDoor != aliceDoor);
13 condition(montyDoor != prizeDoor);
14 return montyDoor;
15 });
16};
17
18var model = function(switches) {
19 var aliceDoor = categorical({vs: doors});
20 var prizeDoor = categorical({vs: doors});
21 var montyDoorDist = montyAvoidBoth(aliceDoor, prizeDoor);
22 var montyDoor = sample(montyDoorDist);
23 condition(montyDoor != prizeDoor);
24 condition(montyDoor != aliceDoor);
25 var aliceDoor = switches ? removeBadItems(doors, [aliceDoor, montyDoor])[0] : aliceDoor;
26 return aliceDoor == prizeDoor;
27};
28var ANSWER = (({
29 stay: Infer({method: 'enumerate'}, function() { return model(false); }),
30 switch: Infer({method: 'enumerate'}, function() { return model(true); })
31}));
32
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL);
4 }, l, badItems);
5};
6var doors = [1, 2, 3];
7
8var montyAvoidBoth = function(aliceDoor, prizeDoor) {
9 return Infer({method: 'enumerate'}, function() {
10 var montyDoor = uniformDraw(doors);
11 condition(montyDoor != aliceDoor && montyDoor != prizeDoor);
12 return montyDoor;
13 });
14};
15
16var model = function(switches) {
17 var aliceDoor = uniformDraw(doors);
18 var prizeDoor = uniformDraw(doors);
19 var montyDoor = sample(montyAvoidBoth(aliceDoor, prizeDoor));
20 condition(montyDoor != prizeDoor && montyDoor != aliceDoor);
21 var finalDoor = switches
22 ? uniformDraw(removeBadItems(doors, [aliceDoor, montyDoor]))
23 : aliceDoor;
24 return finalDoor == prizeDoor;
25};
26
27var ANSWER = {
28 stay: Infer({method: 'enumerate'}, function() { return model(false); }),
29 switch: Infer({method: 'enumerate'}, function() { return model(true); })
30};
02outputrecord(stay, switch)
GT
stay=dist(2)
switch=dist(2)
s46 +p
stay=dist(2)
switch=dist(2)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-social-cognition / ex2.4
shape record(stay, switch) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Monty Hall variant. Alice picks a door uniformly from {1, 2, 3} (one hides a prize, the others are empty). Monty opens a different door, and we condition on his door being neither Alice's nor the prize. In this variant, Monty picks a door uniformly at random but only avoids Alice's door (he may inadvertently reveal the prize). Inside montyAvoidAlice, sample Monty's door uniformly and condition only that it is not Alice's.

Helpers (include them in your program):

webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL);
4 }, l, badItems);
5};
6var doors = [1, 2, 3];

Build montyAvoidAlice(aliceDoor, prizeDoor) returning a Distribution over Monty's door under this variant. Build model(switches) that draws aliceDoor and prizeDoor uniformly, samples montyDoor from montyAvoidAlice, conditions on montyDoor != prizeDoor && montyDoor != aliceDoor, and returns aliceDoor == prizeDoor (whether Alice wins) under her strategy (switches true means switch to the remaining unopened door, false means stay). End your program with an object literal: stay: P(win) when Alice doesn't switch switch: P(win) when Alice switches Each value should be Infer({method: 'enumerate'}, function() { return model(<flag>); }).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL)
4 }, l, badItems);
5};
6
7var doors = [1, 2, 3];
8
9var montyAvoidAlice = function(aliceDoor, prizeDoor) {
10 return Infer({method: 'enumerate'}, function() {
11 var montyDoor = categorical({vs: doors});
12 condition(montyDoor != aliceDoor);
13 return montyDoor;
14 });
15};
16
17var model = function(switches) {
18 var aliceDoor = categorical({vs: doors});
19 var prizeDoor = categorical({vs: doors});
20 var montyDoorDist = montyAvoidAlice(aliceDoor, prizeDoor);
21 var montyDoor = sample(montyDoorDist);
22 condition(montyDoor != prizeDoor);
23 condition(montyDoor != aliceDoor);
24 var aliceDoor = switches ? removeBadItems(doors, [aliceDoor, montyDoor])[0] : aliceDoor;
25 return aliceDoor == prizeDoor;
26};
27var ANSWER = (({
28 stay: Infer({method: 'enumerate'}, function() { return model(false); }),
29 switch: Infer({method: 'enumerate'}, function() { return model(true); })
30}));
31
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL);
4 }, l, badItems);
5};
6var doors = [1, 2, 3];
7
8var montyAvoidAlice = function(aliceDoor, prizeDoor) {
9 return Infer({method: 'enumerate'}, function() {
10 var montyDoor = uniformDraw(removeBadItems(doors, [aliceDoor]));
11 return montyDoor;
12 });
13};
14
15var model = function(switches) {
16 var aliceDoor = uniformDraw(doors);
17 var prizeDoor = uniformDraw(doors);
18 var montyDoor = sample(montyAvoidAlice(aliceDoor, prizeDoor));
19 condition(montyDoor != prizeDoor && montyDoor != aliceDoor);
20 var finalDoor = switches
21 ? uniformDraw(removeBadItems(doors, [aliceDoor, montyDoor]))
22 : aliceDoor;
23 return finalDoor == prizeDoor;
24};
25
26var ANSWER = {
27 stay: Infer({method: 'enumerate'}, function() { return model(false); }),
28 switch: Infer({method: 'enumerate'}, function() { return model(true); })
29};
02outputrecord(stay, switch)
GT
stay=dist(2)
switch=dist(2)
s46 +p
stay=dist(2)
switch=dist(2)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-social-cognition / ex2.5
shape record(stay, switch) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Monty Hall variant. Alice picks a door uniformly from {1, 2, 3} (one hides a prize, the others are empty). Monty opens a different door, and we condition on his door being neither Alice's nor the prize. In this variant, Monty picks a door uniformly at random but only avoids the prize door (he may inadvertently pick Alice's). Inside montyAvoidPrize, sample Monty's door uniformly and condition only that it is not the prize.

Helpers (include them in your program):

webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL);
4 }, l, badItems);
5};
6var doors = [1, 2, 3];

Build montyAvoidPrize(aliceDoor, prizeDoor) returning a Distribution over Monty's door under this variant. Build model(switches) that draws aliceDoor and prizeDoor uniformly, samples montyDoor from montyAvoidPrize, conditions on montyDoor != prizeDoor && montyDoor != aliceDoor, and returns aliceDoor == prizeDoor (whether Alice wins) under her strategy (switches true means switch to the remaining unopened door, false means stay). End your program with an object literal: stay: P(win) when Alice doesn't switch switch: P(win) when Alice switches Each value should be Infer({method: 'enumerate'}, function() { return model(<flag>); }).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL)
4 }, l, badItems);
5};
6
7var doors = [1, 2, 3];
8
9var montyAvoidPrize = function(aliceDoor, prizeDoor) {
10 return Infer({method: 'enumerate'}, function() {
11 var montyDoor = categorical({vs: doors});
12 condition(montyDoor != prizeDoor);
13 return montyDoor;
14 });
15};
16
17var model = function(switches) {
18 var aliceDoor = categorical({vs: doors});
19 var prizeDoor = categorical({vs: doors});
20 var montyDoorDist = montyAvoidPrize(aliceDoor, prizeDoor);
21 var montyDoor = sample(montyDoorDist);
22 condition(montyDoor != prizeDoor);
23 condition(montyDoor != aliceDoor);
24 var aliceDoor = switches ? removeBadItems(doors, [aliceDoor, montyDoor])[0] : aliceDoor;
25 return aliceDoor == prizeDoor;
26};
27var ANSWER = (({
28 stay: Infer({method: 'enumerate'}, function() { return model(false); }),
29 switch: Infer({method: 'enumerate'}, function() { return model(true); })
30}));
31
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var removeBadItems = function(l, badItems) {
2 return reduce(function(badItem, remainingL) {
3 return remove(badItem, remainingL);
4 }, l, badItems);
5};
6var doors = [1, 2, 3];
7
8var montyAvoidPrize = function(aliceDoor, prizeDoor) {
9 return Infer({method: 'enumerate'}, function() {
10 var montyDoor = uniformDraw(doors);
11 condition(montyDoor != prizeDoor);
12 return montyDoor;
13 });
14};
15
16var model = function(switches) {
17 var aliceDoor = uniformDraw(doors);
18 var prizeDoor = uniformDraw(doors);
19 var montyDoor = sample(montyAvoidPrize(aliceDoor, prizeDoor));
20 condition(montyDoor != aliceDoor);
21 var finalDoor = switches
22 ? uniformDraw(removeBadItems(doors, [aliceDoor, montyDoor]))
23 : aliceDoor;
24 return finalDoor == prizeDoor;
25};
26
27var ANSWER = {
28 stay: Infer({method: 'enumerate'}, function() { return model(false); }),
29 switch: Infer({method: 'enumerate'}, function() { return model(true); })
30};
02outputrecord(stay, switch)
GT
stay=dist(2)
switch=dist(2)
s46 +p
stay=dist(2)
switch=dist(2)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<1 0.500 0.6931 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-hierarchical-models / ex1
shape record(observed, usealpha) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Show that setting Dirichlet alpha = [2, 3, 1, 1, 1] is equivalent to setting alpha = [1, 1, 1, 1, 1] then observing the first category once and the second twice. Build the second model (with alpha = [2, 3, 1, 1, 1]) given the first.

webppl
1var colors = ['black', 'blue', 'green', 'orange', 'red'];
2var observedData = [{bag: 'bag1', draw: 'blue'},
3 {bag: 'bag1', draw: 'blue'},
4 {bag: 'bag1', draw: 'black'}];
5
6var observed = Infer({method: 'MCMC', samples: 20000}, function() {
7 var makeBag = mem(function(bag) {
8 var colorProbs = dirichlet(ones([colors.length, 1]));
9 return Categorical({vs: colors, ps: colorProbs});
10 })
11 var obsFn = function(datum) { observe(makeBag(datum.bag), datum.draw); }
12 mapData({data: observedData}, obsFn);
13 return {bag1: sample(makeBag('bag1'))};
14})
15
16var usealpha = Infer({method: 'MCMC', samples: 20000}, function () {
17 // ...fill in: alpha = [2, 3, 1, 1, 1] without observation
18})

Return an object literal {observed, usealpha} with both posteriors.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var colors = ['black', 'blue', 'green', 'orange', 'red'];
2var observedData = [{bag: 'bag1', draw: 'blue'},
3 {bag: 'bag1', draw: 'blue'},
4 {bag: 'bag1', draw: 'black'}];
5
6var observed = Infer({method: 'MCMC', samples: 20000}, function() {
7 var makeBag = mem(function(bag) {
8 var colorProbs = dirichlet(ones([colors.length, 1]));
9 return Categorical({vs: colors, ps: colorProbs});
10 });
11 var obsFn = function(datum) { observe(makeBag(datum.bag), datum.draw); };
12 mapData({data: observedData}, obsFn);
13 return {bag1: sample(makeBag('bag1'))};
14});
15
16var usealpha = Infer({method: 'MCMC', samples: 20000}, function () {
17 var makeBag = mem(function(bag) {
18 var colorProbs = dirichlet(Vector([2, 3, 1, 1, 1]));
19 return Categorical({vs: colors, ps: colorProbs});
20 });
21 return {bag1: sample(makeBag('bag1'))};
22});
23var ANSWER = (({observed: observed, usealpha: usealpha}));
24
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var colors = ['black', 'blue', 'green', 'orange', 'red'];
2var observedData = [{bag: 'bag1', draw: 'blue'},
3 {bag: 'bag1', draw: 'blue'},
4 {bag: 'bag1', draw: 'black'}];
5
6var observed = Infer({method: 'MCMC', samples: 20000}, function() {
7 var makeBag = mem(function(bag) {
8 var colorProbs = dirichlet(ones([colors.length, 1]));
9 return Categorical({vs: colors, ps: colorProbs});
10 });
11 var obsFn = function(datum) { observe(makeBag(datum.bag), datum.draw); };
12 mapData({data: observedData}, obsFn);
13 return {bag1: sample(makeBag('bag1'))};
14});
15
16var usealpha = Infer({method: 'MCMC', samples: 20000}, function() {
17 var makeBag = mem(function(bag) {
18 // alpha = [2, 3, 1, 1, 1] corresponds to black=2, blue=3, green=1, orange=1, red=1
19 // which is equivalent to uniform prior + 1 black observation + 2 blue observations
20 var colorProbs = dirichlet(Vector([2, 3, 1, 1, 1]));
21 return Categorical({vs: colors, ps: colorProbs});
22 });
23 return {bag1: sample(makeBag('bag1'))};
24});
25
26var ANSWER = {observed: observed, usealpha: usealpha};
02outputrecord(observed, usealpha)
GT
observed=dist(5)
usealpha=dist(5)
s46 +p
observed=dist(5)
usealpha=dist(5)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-hierarchical-models / ex2.1
shape distribution s46 +p TV<.50.102 runs 8/8
per-run
00 prompt

Apples in a barrel: each apple is rotten with probability p, where p ~ Beta(.1, .2) (mass at endpoints). Implement makeBarrel(barrelName) returning a function barrel(n) that returns an array of n booleans (whether each apple is rotten). End with the Infer(...) over Math.sum(barrel(10)).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var makeBarrel = mem(function(barrelName) {
2 var pRotten = beta({a: .1, b: .2});
3 var barrel = function(n) {
4 return repeat(n, function() { flip(pRotten) });
5 };
6 return barrel;
7});
8var ANSWER = (Infer({method: 'forward'}, function() {
9 var barrel = makeBarrel('barrel');
10 return Math.sum(barrel(10));
11}));
12
s46 +psonnet-46-primer-v3TV<.50.102
webppl
1var makeBarrel = function(barrelName) {
2 var p = mem(function(name) { return beta(0.1, 0.2); });
3 var barrel = function(n) {
4 return repeat(n, function() { return flip(p(barrelName)); });
5 };
6 return barrel;
7};
8
9var model = function() {
10 var barrel = makeBarrel("myBarrel");
11 return Math.sum(barrel(10));
12};
13
14var ANSWER = Infer({method: 'forward', samples: 10000}, model);
02output overlaydistribution
GT s46 +p11 bins · 0 … 10
00.260.260.510.510 A = 0.460 B = 0.5110 A = 0.460 B = 0.5110.460.5101 A = 0.080 B = 0.0591 A = 0.080 B = 0.0590.080.0612 A = 0.030 B = 0.0342 A = 0.030 B = 0.0340.030.0323 A = 0.050 B = 0.0283 A = 0.050 B = 0.0280.050.0334 A = 0.010 B = 0.0244 A = 0.010 B = 0.0240.010.0245 A = 0.040 B = 0.0235 A = 0.040 B = 0.0230.040.0256 A = 0.020 B = 0.0206 A = 0.020 B = 0.0200.020.0267 A = 0.010 B = 0.0277 A = 0.010 B = 0.0270.010.0378 A = 0.030 B = 0.0318 A = 0.030 B = 0.0310.030.0389 A = 0.090 B = 0.0489 A = 0.090 B = 0.0480.090.05910 A = 0.180 B = 0.19610 A = 0.180 B = 0.1960.180.2010
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<1 0.528 0.7331 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<1 0.530 0.7380 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.5 0.126 0.0614 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.5 0.144 0.1057 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.5 0.102 0.0448 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.5 0.110 0.0475 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.5 0.106 0.0455 ·
probmods2-hierarchical-models / ex2.2
shape record(sameStore, differentStore) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Apples in a barrel: each apple is rotten with probability pRotten, and pRotten is itself drawn from a Beta distribution. Different *stores* tend to be either mostly-rotten or mostly-fresh, captured by drawing the Beta hyperparameters from a discrete prior.

Implement makeStore(storeName) that returns a makeBarrel(barrelName) function. Each store's Beta hyperparameters come from a 50/50 mix: {a: .1, b: .3} (mostly fresh) vs {a: .3, b: .1} (mostly rotten). Within a store, all makeBarrel(...) calls share that store's Beta. Memoize at both store and barrel level. The barrel function takes n and returns an array of n booleans (rotten or not).

End your program with an object literal {sameStore, differentStore}, each a forward-sample distribution over the absolute difference in rotten counts between two barrels of size 10: - sameStore: both barrels from the same store - differentStore: barrels from two different stores Use Infer({method: 'forward', samples: 10000}, ...) for each.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var makeStore = mem(function(storeName) {
2 var storePrior = flip() ? {a: .1, b: .3} : {a: .3, b: .1};
3 var makeBarrel = mem(function(barrelName) {
4 var pRotten = beta(storePrior);
5 var barrel = function(n) {
6 return repeat(n, function() { flip(pRotten) });
7 };
8 return barrel;
9 });
10 return makeBarrel;
11});
12var ANSWER = (({
13 sameStore: Infer({method: 'forward', samples: 10000}, function() {
14 var S = makeStore('S');
15 var B1 = S('B1');
16 var B2 = S('B2');
17 return Math.abs(Math.sum(B1(10)) - Math.sum(B2(10)));
18 }),
19 differentStore: Infer({method: 'forward', samples: 10000}, function() {
20 var S1 = makeStore('S1');
21 var S2 = makeStore('S2');
22 var B1 = S1('B1');
23 var B2 = S2('B2');
24 return Math.abs(Math.sum(B1(10)) - Math.sum(B2(10)));
25 })
26}));
27
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var makeStore = mem(function(storeName) {
2 var hyperparams = flip(0.5) ? {a: 0.1, b: 0.3} : {a: 0.3, b: 0.1};
3
4 var makeBarrel = mem(function(barrelName) {
5 var pRotten = beta(hyperparams.a, hyperparams.b);
6
7 var barrel = function(n) {
8 return repeat(n, function() { return flip(pRotten); });
9 };
10
11 return barrel;
12 });
13
14 return makeBarrel;
15});
16
17var countRotten = function(arr) {
18 return reduce(function(x, acc) { return acc + (x ? 1 : 0); }, 0, arr);
19};
20
21var sameStore = Infer({method: 'forward', samples: 10000}, function() {
22 var makeBarrel = makeStore('store1');
23 var barrel1 = makeBarrel('barrel1');
24 var barrel2 = makeBarrel('barrel2');
25 var count1 = countRotten(barrel1(10));
26 var count2 = countRotten(barrel2(10));
27 return Math.abs(count1 - count2);
28});
29
30var differentStore = Infer({method: 'forward', samples: 10000}, function() {
31 var makeBarrel1 = makeStore('storeA');
32 var makeBarrel2 = makeStore('storeB');
33 var barrel1 = makeBarrel1('barrel1');
34 var barrel2 = makeBarrel2('barrel2');
35 var count1 = countRotten(barrel1(10));
36 var count2 = countRotten(barrel2(10));
37 return Math.abs(count1 - count2);
38});
39
40var ANSWER = {sameStore: sameStore, differentStore: differentStore};
02outputrecord(sameStore, differentStore)
GT
sameStore=dist(11)
differentStore=dist(11)
s46 +p
sameStore=dist(11)
differentStore=dist(11)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<.5 0.418 0.5237 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.5 0.418 0.5237 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<1 0.736 1.3314 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-hierarchical-models / ex2.3
shape distribution s46 +p TV<10.669 runs 8/8
per-run
00 prompt

Three-level rotten-apple hierarchy: cities → stores → barrels. Each city has a cityPrior = beta({a: .25, b: .25}) controlling the probability that a store in that city is the 'fresh' kind (Beta(.1, .3) for pRotten) vs the 'rotten' kind (Beta(.3, .1)). Within a store, each barrel draws pRotten = beta(storePrior), and barrel(n) returns an array of n booleans (rotten or not).

Implement makeCity(cityName) returning a makeStore function returning a makeBarrel function as described. Memoize at all three levels.

For city C1, store S1, barrel B1, end your program with the Infer over Math.sum(B1(20)) using forward sampling.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var makeCity = mem(function(cityName){
2 var cityPrior = beta({a: .25, b: .25});
3 var makeStore = mem(function(storeName) {
4 var storePrior = flip(cityPrior) ? {a: .1, b: .3} : {a: .3, b: .1};
5 var makeBarrel = mem(function(barrelName) {
6 var pRotten = beta(storePrior);
7 var barrel = function(n) {
8 return repeat(n, function() { flip(pRotten) });
9 };
10 return barrel;
11 });
12 return makeBarrel;
13 });
14 return makeStore;
15});
16
17var C1 = makeCity("C1");
18var S1 = C1("S1");
19var B1 = S1("B1");
20var ANSWER = (Infer({method: 'forward'}, function(){
21 return Math.sum(B1(20));
22}));
23
s46 +psonnet-46-primer-v3TV<10.669
webppl
1var makeCity = mem(function(cityName) {
2 var cityPrior = beta({a: 0.25, b: 0.25});
3 var makeStore = mem(function(storeName) {
4 var storePrior = flip(cityPrior)
5 ? {a: 0.1, b: 0.3}
6 : {a: 0.3, b: 0.1};
7 var makeBarrel = mem(function(barrelName) {
8 var pRotten = beta(storePrior);
9 var barrel = function(n) {
10 return repeat(n, function() { return flip(pRotten); });
11 };
12 return barrel;
13 });
14 return makeBarrel;
15 });
16 return makeStore;
17});
18
19var ANSWER = Infer({method: 'forward', samples: 10000}, function() {
20 var makeStore = makeCity('C1');
21 var makeBarrel = makeStore('S1');
22 var B1 = makeBarrel('B1');
23 return Math.sum(B1(20));
24});
02output overlaydistribution
GT s46 +p21 bins · 0 … 20
00.490.490.990.990510152020 · 0.99020 · 0.321x = 0 A = 0.0000 B = 0.3182 Δ = -0.3182x = 1 A = 0.0000 B = 0.0432 Δ = -0.0432x = 2 A = 0.0000 B = 0.0260 Δ = -0.0260x = 3 A = 0.0000 B = 0.0216 Δ = -0.0216x = 4 A = 0.0000 B = 0.0180 Δ = -0.0180x = 5 A = 0.0000 B = 0.0131 Δ = -0.0131x = 6 A = 0.0000 B = 0.0144 Δ = -0.0144x = 7 A = 0.0000 B = 0.0128 Δ = -0.0128x = 8 A = 0.0000 B = 0.0132 Δ = -0.0132x = 9 A = 0.0000 B = 0.0120 Δ = -0.0120x = 10 A = 0.0000 B = 0.0105 Δ = -0.0105x = 11 A = 0.0000 B = 0.0120 Δ = -0.0120x = 12 A = 0.0000 B = 0.0129 Δ = -0.0129x = 13 A = 0.0000 B = 0.0128 Δ = -0.0128x = 14 A = 0.0000 B = 0.0136 Δ = -0.0136x = 15 A = 0.0000 B = 0.0141 Δ = -0.0141x = 16 A = 0.0000 B = 0.0158 Δ = -0.0158x = 17 A = 0.0000 B = 0.0214 Δ = -0.0214x = 18 A = 0.0000 B = 0.0266 Δ = -0.0266x = 19 A = 0.0100 B = 0.0468 Δ = -0.0368x = 20 A = 0.9900 B = 0.3210 Δ = 0.6690
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<1 0.893 18.3466 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.05 0.006 0.0021 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.5 0.437 7.3818 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.05 0.006 0.0021 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.05 0.006 0.0021 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<1 0.669 12.6580 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<1 0.669 12.6580 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.05 0.006 0.0021 ·
probmods2-hierarchical-models / ex2.4
shape distribution s46 +p TV<.50.170 runs 8/8
per-run
00 prompt

Three-level rotten-apple hierarchy (cities → stores → barrels), as in the previous exercise: city has cityPrior = beta({a: .25, b: .25}); stores within a city pick Beta(.1, .3) (fresh) with prob cityPrior, else Beta(.3, .1) (rotten); barrels in a store sample pRotten = beta(storePrior), and barrel(n) returns n booleans. Memoized at all levels.

You visit a store in a city and observe a barrel of 10 apples, 7 of which are rotten. You then visit a *different* store in the *same* city. End your program with Infer({method: 'MCMC', samples: 5000, lag: 100}, ...) returning the posterior over the number of rotten apples in a 10-apple barrel from this second store.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var makeCity = mem(function(cityName){
2 var cityPrior = beta({a: .25, b: .25});
3
4 var makeStore = mem(function(storeName) {
5 var storePrior = flip(cityPrior) ? {a: .1, b: .3} : {a: .3, b: .1};
6
7 var makeBarrel = mem(function(barrelName) {
8 var pRotten = beta(storePrior);
9 var barrel = function(n) {
10 return repeat(n, function() { flip(pRotten) });
11 };
12 return barrel;
13 });
14
15 return makeBarrel;
16 });
17
18 return makeStore;
19});
20var ANSWER = (Infer({method: 'MCMC', samples:5000, lag: 100}, function(){
21 var C = makeCity("C");
22 var S1 = C("S1");
23 var B1 = S1("B1");
24 var S2 = C("S2");
25 var B2 = S2("B2");
26
27 condition(Math.sum(B1(10)) == 7);
28
29 return Math.sum(B2(10));
30}));
31
s46 +psonnet-46-primer-v3TV<.50.170
webppl
1var model = function() {
2 // City-level prior
3 var cityPrior = beta({a: 0.25, b: 0.25});
4
5 // Store-level: given cityPrior, pick Beta params
6 var makeStore = function() {
7 var isFresh = flip(cityPrior);
8 var storePrior = isFresh ? beta({a: 0.1, b: 0.3}) : beta({a: 0.3, b: 0.1});
9 return storePrior;
10 };
11
12 // Barrel: given store's rotten rate, sample n booleans
13 var makeBarrel = function(storePrior, n) {
14 var pRotten = beta({a: storePrior * 10, b: (1 - storePrior) * 10});
15 return repeat(n, function() { return flip(pRotten); });
16 };
17
18 // Store 1: observe 7 rotten out of 10
19 var store1Prior = makeStore();
20 var pRotten1 = beta({a: store1Prior * 10, b: (1 - store1Prior) * 10});
21 // Observe 10 apples, 7 rotten
22 observe(Binomial({p: pRotten1, n: 10}), 7);
23
24 // Store 2: different store, same city (same cityPrior)
25 var store2Prior = makeStore();
26 var pRotten2 = beta({a: store2Prior * 10, b: (1 - store2Prior) * 10});
27
28 // Return number of rotten apples in a 10-apple barrel from store 2
29 return sample(Binomial({p: pRotten2, n: 10}));
30};
31
32var ANSWER = Infer({method: 'MCMC', samples: 5000, lag: 100}, model);
02output overlaydistribution
GT s46 +p11 bins · 0 … 10
00.210.210.420.420 A = 0.290 B = 0.3760 A = 0.290 B = 0.3760.290.3801 A = 0.041 B = 0.0621 A = 0.041 B = 0.0620.040.0612 A = 0.028 B = 0.0452 A = 0.028 B = 0.0450.030.0523 A = 0.030 B = 0.0343 A = 0.030 B = 0.0340.030.0334 A = 0.025 B = 0.0334 A = 0.025 B = 0.0330.020.0345 A = 0.027 B = 0.0355 A = 0.027 B = 0.0350.030.0456 A = 0.026 B = 0.0346 A = 0.026 B = 0.0340.030.0367 A = 0.025 B = 0.0367 A = 0.025 B = 0.0360.020.0478 A = 0.034 B = 0.0418 A = 0.034 B = 0.0410.030.0489 A = 0.056 B = 0.0549 A = 0.056 B = 0.0540.060.05910 A = 0.418 B = 0.25010 A = 0.418 B = 0.2500.420.2510
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.05 0.021 0.0019 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.5 0.144 0.0485 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.5 0.170 0.0665 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.05 0.044 0.0043 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.5 0.134 0.0396 ·
probmods2-hierarchical-models / ex3.1
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Hierarchical Bayesian data analysis on word reading times. Each data point has {group: "vowel"|"consonant", word: str, id: int, rt: number}.

Data:

webppl
1var data = [{group: "vowel", word: "abacus", id: 1, rt: 210},
2 {group: "vowel", word: "abacus", id: 2, rt: 212},
3 {group: "vowel", word: "abacus", id: 3, rt: 209},
4 {group: "vowel", word: "aardvark", id: 1, rt: 200},
5 {group: "vowel", word: "aardvark", id: 2, rt: 201},
6 {group: "vowel", word: "aardvark", id: 3, rt: 198},
7 {group: "vowel", word: "ellipse", id: 1, rt: 220},
8 {group: "vowel", word: "ellipse", id: 2, rt: 222},
9 {group: "vowel", word: "ellipse", id: 3, rt: 219},
10 {group: "consonant", word: "proton", id: 1, rt: 190},
11 {group: "consonant", word: "proton", id: 2, rt: 191},
12 {group: "consonant", word: "proton", id: 3, rt: 189},
13 {group: "consonant", word: "folder", id: 1, rt: 180},
14 {group: "consonant", word: "folder", id: 2, rt: 182},
15 {group: "consonant", word: "folder", id: 3, rt: 178},
16 {group: "consonant", word: "fedora", id: 1, rt: 230},
17 {group: "consonant", word: "fedora", id: 2, rt: 231},
18 {group: "consonant", word: "fedora", id: 3, rt: 228},
19 {group: "consonant", word: "fedora", id: 1, rt: 231},
20 {group: "consonant", word: "fedora", id: 2, rt: 233},
21 {group: "consonant", word: "fedora", id: 3, rt: 230},
22 {group: "consonant", word: "fedora", id: 1, rt: 230},
23 {group: "consonant", word: "fedora", id: 2, rt: 232},
24 {group: "consonant", word: "fedora", id: 3, rt: 228}];

Simple BDA model (without per-word random effects):

webppl
1var opts = {method: "MCMC", burn: 10000, lag: 5, samples: 5000};
2Infer(opts, function() {
3 var groupMeans = {vowel: gaussian(200, 100),
4 consonant: gaussian(200, 100)};
5 var obsFn = function(d) {
6 observe(Gaussian({mu: groupMeans[d.group], sigma: 10}), d.rt);
7 };
8 mapData({data: data}, obsFn);
9 return groupMeans['vowel'] - groupMeans['consonant'];
10});

Adjust the model so each *word* has its own mean reading time drawn from its group's mean: use mem(function(word, group) { gaussian(groupMeans[group], 20) }) for the per-word effect, and observe each rt as Gaussian({mu: wordMean(d.word, d.group), sigma: 10}). End your program with the Infer(...) returning the posterior over groupMeans['vowel'] - groupMeans['consonant'].

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var data = [{group: "vowel", word: "abacus", id: 1, rt: 210},
2 {group: "vowel", word: "abacus", id: 2, rt: 212},
3 {group: "vowel", word: "abacus", id: 3, rt: 209},
4 {group: "vowel", word: "aardvark", id: 1, rt: 200},
5 {group: "vowel", word: "aardvark", id: 2, rt: 201},
6 {group: "vowel", word: "aardvark", id: 3, rt: 198},
7 {group: "vowel", word: "ellipse", id: 1, rt: 220},
8 {group: "vowel", word: "ellipse", id: 2, rt: 222},
9 {group: "vowel", word: "ellipse", id: 3, rt: 219},
10 {group: "consonant", word: "proton", id: 1, rt: 190},
11 {group: "consonant", word: "proton", id: 2, rt: 191},
12 {group: "consonant", word: "proton", id: 3, rt: 189},
13 {group: "consonant", word: "folder", id: 1, rt: 180},
14 {group: "consonant", word: "folder", id: 2, rt: 182},
15 {group: "consonant", word: "folder", id: 3, rt: 178},
16 {group: "consonant", word: "fedora", id: 1, rt: 230},
17 {group: "consonant", word: "fedora", id: 2, rt: 231},
18 {group: "consonant", word: "fedora", id: 3, rt: 228},
19 {group: "consonant", word: "fedora", id: 1, rt: 231},
20 {group: "consonant", word: "fedora", id: 2, rt: 233},
21 {group: "consonant", word: "fedora", id: 3, rt: 230},
22 {group: "consonant", word: "fedora", id: 1, rt: 230},
23 {group: "consonant", word: "fedora", id: 2, rt: 232},
24 {group: "consonant", word: "fedora", id: 3, rt: 228}];
25
26var opts = {method: "MCMC", burn: 10000, lag: 5, samples: 5000};
27var ANSWER = (Infer(opts, function() {
28 var groupMeans = {vowel: gaussian(200, 100),
29 consonant: gaussian(200, 100)};
30
31 var wordMean = mem(function(word, group) {
32 return gaussian(groupMeans[group], 20);
33 });
34
35 var obsFn = function(d) {
36 observe(Gaussian({mu: wordMean(d.word, d.group),
37 sigma: 10}), d.rt);
38 };
39
40 mapData({data: data}, obsFn);
41
42 return groupMeans['vowel'] - groupMeans['consonant'];
43}));
44
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var data = [{group: "vowel", word: "abacus", id: 1, rt: 210},
2 {group: "vowel", word: "abacus", id: 2, rt: 212},
3 {group: "vowel", word: "abacus", id: 3, rt: 209},
4 {group: "vowel", word: "aardvark", id: 1, rt: 200},
5 {group: "vowel", word: "aardvark", id: 2, rt: 201},
6 {group: "vowel", word: "aardvark", id: 3, rt: 198},
7 {group: "vowel", word: "ellipse", id: 1, rt: 220},
8 {group: "vowel", word: "ellipse", id: 2, rt: 222},
9 {group: "vowel", word: "ellipse", id: 3, rt: 219},
10 {group: "consonant", word: "proton", id: 1, rt: 190},
11 {group: "consonant", word: "proton", id: 2, rt: 191},
12 {group: "consonant", word: "proton", id: 3, rt: 189},
13 {group: "consonant", word: "folder", id: 1, rt: 180},
14 {group: "consonant", word: "folder", id: 2, rt: 182},
15 {group: "consonant", word: "folder", id: 3, rt: 178},
16 {group: "consonant", word: "fedora", id: 1, rt: 230},
17 {group: "consonant", word: "fedora", id: 2, rt: 231},
18 {group: "consonant", word: "fedora", id: 3, rt: 228},
19 {group: "consonant", word: "fedora", id: 1, rt: 231},
20 {group: "consonant", word: "fedora", id: 2, rt: 233},
21 {group: "consonant", word: "fedora", id: 3, rt: 230},
22 {group: "consonant", word: "fedora", id: 1, rt: 230},
23 {group: "consonant", word: "fedora", id: 2, rt: 232},
24 {group: "consonant", word: "fedora", id: 3, rt: 228}];
25
26var opts = {method: "MCMC", burn: 10000, lag: 5, samples: 5000};
27
28var ANSWER = Infer(opts, function() {
29 var groupMeans = {vowel: gaussian(200, 100),
30 consonant: gaussian(200, 100)};
31 var wordMean = mem(function(word, group) {
32 return gaussian(groupMeans[group], 20);
33 });
34 var obsFn = function(d) {
35 observe(Gaussian({mu: wordMean(d.word, d.group), sigma: 10}), d.rt);
36 };
37 mapData({data: data}, obsFn);
38 return groupMeans['vowel'] - groupMeans['consonant'];
39});
02output overlaydistribution
GT s46 +p24 bins · -41 … 61.9
00.060.060.120.12-40-200204060-0.80 · 0.121-0.80 · 0.121x = -41 A = 0.0004 B = 0.0004 Δ = 0.0000x = -36.5 A = 0.0038 B = 0.0038 Δ = 0.0000x = -32.1 A = 0.0058 B = 0.0058 Δ = 0.0000x = -27.6 A = 0.0150 B = 0.0150 Δ = 0.0000x = -23.1 A = 0.0194 B = 0.0194 Δ = 0.0000x = -18.6 A = 0.0216 B = 0.0216 Δ = 0.0000x = -14.2 A = 0.0446 B = 0.0446 Δ = 0.0000x = -9.70 A = 0.0464 B = 0.0464 Δ = 0.0000x = -5.20 A = 0.0756 B = 0.0756 Δ = 0.0000x = -0.80 A = 0.1210 B = 0.1210 Δ = 0.0000x = 3.70 A = 0.0860 B = 0.0860 Δ = 0.0000x = 8.20 A = 0.0920 B = 0.0920 Δ = 0.0000x = 12.7 A = 0.0874 B = 0.0874 Δ = 0.0000x = 17.1 A = 0.0656 B = 0.0656 Δ = 0.0000x = 21.6 A = 0.0920 B = 0.0920 Δ = 0.0000x = 26.1 A = 0.0622 B = 0.0622 Δ = 0.0000x = 30.6 A = 0.0650 B = 0.0650 Δ = 0.0000x = 35 A = 0.0464 B = 0.0464 Δ = 0.0000x = 39.5 A = 0.0202 B = 0.0202 Δ = 0.0000x = 44 A = 0.0112 B = 0.0112 Δ = 0.0000x = 48.5 A = 0.0088 B = 0.0088 Δ = 0.0000x = 52.9 A = 0.0078 B = 0.0078 Δ = 0.0000x = 57.4 A = 0.0006 B = 0.0006 Δ = 0.0000x = 61.9 A = 0.0012 B = 0.0012 Δ = 0.0000
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-hierarchical-models / ex3.2
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Hierarchical Bayesian data analysis on word reading times. Each data point is {group: 'vowel'|'consonant', word: str, id: int, rt: number}. Group means are drawn from Gaussian(200, 100); each word has its own mean mem(function(word, group) { gaussian(groupMeans[group], 20) }); individual reading times are Gaussian({mu: wordMean(d.word, d.group), sigma: 10}).

Extend this model with a per-participant random effect: a Gaussian(0, 2) additive offset for each participant id. Each rt is now Gaussian({mu: wordMean(d.word, d.group) + participantMean(d.id), sigma: 10}).

Data:

webppl
1var data = [{group: "vowel", word: "abacus", id: 1, rt: 210},
2 {group: "vowel", word: "abacus", id: 2, rt: 212},
3 {group: "vowel", word: "abacus", id: 3, rt: 209},
4 {group: "vowel", word: "aardvark", id: 1, rt: 200},
5 {group: "vowel", word: "aardvark", id: 2, rt: 201},
6 {group: "vowel", word: "aardvark", id: 3, rt: 198},
7 {group: "vowel", word: "ellipse", id: 1, rt: 220},
8 {group: "vowel", word: "ellipse", id: 2, rt: 222},
9 {group: "vowel", word: "ellipse", id: 3, rt: 219},
10 {group: "consonant", word: "proton", id: 1, rt: 190},
11 {group: "consonant", word: "proton", id: 2, rt: 191},
12 {group: "consonant", word: "proton", id: 3, rt: 189},
13 {group: "consonant", word: "folder", id: 1, rt: 180},
14 {group: "consonant", word: "folder", id: 2, rt: 182},
15 {group: "consonant", word: "folder", id: 3, rt: 178},
16 {group: "consonant", word: "fedora", id: 1, rt: 230},
17 {group: "consonant", word: "fedora", id: 2, rt: 231},
18 {group: "consonant", word: "fedora", id: 3, rt: 228},
19 {group: "consonant", word: "fedora", id: 1, rt: 231},
20 {group: "consonant", word: "fedora", id: 2, rt: 233},
21 {group: "consonant", word: "fedora", id: 3, rt: 230},
22 {group: "consonant", word: "fedora", id: 1, rt: 230},
23 {group: "consonant", word: "fedora", id: 2, rt: 232},
24 {group: "consonant", word: "fedora", id: 3, rt: 228}];

Use Infer({method: 'MCMC', burn: 10000, lag: 5, samples: 5000}, ...). End your program with the joint posterior {diff, p1, p2, p3} where diff = groupMeans['vowel'] - groupMeans['consonant'] and p1, p2, p3 are participantMean(1), participantMean(2), participantMean(3).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var data = [{group: "vowel", word: "abacus", id: 1, rt: 210},
2 {group: "vowel", word: "abacus", id: 2, rt: 212},
3 {group: "vowel", word: "abacus", id: 3, rt: 209},
4 {group: "vowel", word: "aardvark", id: 1, rt: 200},
5 {group: "vowel", word: "aardvark", id: 2, rt: 201},
6 {group: "vowel", word: "aardvark", id: 3, rt: 198},
7 {group: "vowel", word: "ellipse", id: 1, rt: 220},
8 {group: "vowel", word: "ellipse", id: 2, rt: 222},
9 {group: "vowel", word: "ellipse", id: 3, rt: 219},
10 {group: "consonant", word: "proton", id: 1, rt: 190},
11 {group: "consonant", word: "proton", id: 2, rt: 191},
12 {group: "consonant", word: "proton", id: 3, rt: 189},
13 {group: "consonant", word: "folder", id: 1, rt: 180},
14 {group: "consonant", word: "folder", id: 2, rt: 182},
15 {group: "consonant", word: "folder", id: 3, rt: 178},
16 {group: "consonant", word: "fedora", id: 1, rt: 230},
17 {group: "consonant", word: "fedora", id: 2, rt: 231},
18 {group: "consonant", word: "fedora", id: 3, rt: 228},
19 {group: "consonant", word: "fedora", id: 1, rt: 231},
20 {group: "consonant", word: "fedora", id: 2, rt: 233},
21 {group: "consonant", word: "fedora", id: 3, rt: 230},
22 {group: "consonant", word: "fedora", id: 1, rt: 230},
23 {group: "consonant", word: "fedora", id: 2, rt: 232},
24 {group: "consonant", word: "fedora", id: 3, rt: 228}];
25
26var opts = {method: "MCMC", burn: 10000, lag: 5, samples: 5000};
27var ANSWER = (Infer(opts, function() {
28 var groupMeans = {vowel: gaussian(200, 100),
29 consonant: gaussian(200, 100)};
30
31 var participantMean = mem(function(pid) {
32 return gaussian(0, 2);
33 });
34
35 var wordMean = mem(function(word, group) {
36 return gaussian(groupMeans[group], 20);
37 });
38
39 var obsFn = function(d) {
40 observe(Gaussian({mu: wordMean(d.word, d.group) + participantMean(d.id),
41 sigma: 10}), d.rt);
42 };
43
44 mapData({data: data}, obsFn);
45
46 return {diff: groupMeans['vowel'] - groupMeans['consonant'],
47 p1: participantMean(1),
48 p2: participantMean(2),
49 p3: participantMean(3)};
50}));
51
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var data = [{group: "vowel", word: "abacus", id: 1, rt: 210},
2 {group: "vowel", word: "abacus", id: 2, rt: 212},
3 {group: "vowel", word: "abacus", id: 3, rt: 209},
4 {group: "vowel", word: "aardvark", id: 1, rt: 200},
5 {group: "vowel", word: "aardvark", id: 2, rt: 201},
6 {group: "vowel", word: "aardvark", id: 3, rt: 198},
7 {group: "vowel", word: "ellipse", id: 1, rt: 220},
8 {group: "vowel", word: "ellipse", id: 2, rt: 222},
9 {group: "vowel", word: "ellipse", id: 3, rt: 219},
10 {group: "consonant", word: "proton", id: 1, rt: 190},
11 {group: "consonant", word: "proton", id: 2, rt: 191},
12 {group: "consonant", word: "proton", id: 3, rt: 189},
13 {group: "consonant", word: "folder", id: 1, rt: 180},
14 {group: "consonant", word: "folder", id: 2, rt: 182},
15 {group: "consonant", word: "folder", id: 3, rt: 178},
16 {group: "consonant", word: "fedora", id: 1, rt: 230},
17 {group: "consonant", word: "fedora", id: 2, rt: 231},
18 {group: "consonant", word: "fedora", id: 3, rt: 228},
19 {group: "consonant", word: "fedora", id: 1, rt: 231},
20 {group: "consonant", word: "fedora", id: 2, rt: 233},
21 {group: "consonant", word: "fedora", id: 3, rt: 230},
22 {group: "consonant", word: "fedora", id: 1, rt: 230},
23 {group: "consonant", word: "fedora", id: 2, rt: 232},
24 {group: "consonant", word: "fedora", id: 3, rt: 228}];
25
26var model = function() {
27 var groupMeans = {
28 vowel: gaussian(200, 100),
29 consonant: gaussian(200, 100)
30 };
31
32 var wordMean = mem(function(word, group) {
33 return gaussian(groupMeans[group], 20);
34 });
35
36 var participantMean = mem(function(id) {
37 return gaussian(0, 2);
38 });
39
40 mapData({data: data}, function(d) {
41 observe(Gaussian({mu: wordMean(d.word, d.group) + participantMean(d.id), sigma: 10}), d.rt);
42 });
43
44 return {
45 diff: groupMeans['vowel'] - groupMeans['consonant'],
46 p1: participantMean(1),
47 p2: participantMean(2),
48 p3: participantMean(3)
49 };
50};
51
52var ANSWER = Infer({method: 'MCMC', burn: 10000, lag: 5, samples: 5000}, model);
02output overlaydistribution
GT s46 +p48 bins
00.0050.0050.0100.010{"diff":15.340727250765042,"p1":-0.5016806587345627,"p2":0.16391867649007408,"p3":0.5317311783474697} A = 0.001 B = 0.001{"diff":15.340727250765042,"p1":-0.5016806587345627,"p2":0.16391867649007408,"p3":0.5317311783474697} A = 0.001 B = 0.001{"diff":15.340727250765042,"p1":-0.5016806587345627,"p2":0.16391867649007408,"p3":0.5317311783474697}{"diff":3.3380186513486194,"p1":1.563424535608995,"p2":3.828925209725348,"p3":3.571935288953486} A = 0.001 B = 0.001{"diff":3.3380186513486194,"p1":1.563424535608995,"p2":3.828925209725348,"p3":3.571935288953486} A = 0.001 B = 0.001{"diff":28.940411038944063,"p1":2.0052792761450515,"p2":2.412551574824877,"p3":1.0921138894047664} A = 0.001 B = 0.001{"diff":28.940411038944063,"p1":2.0052792761450515,"p2":2.412551574824877,"p3":1.0921138894047664} A = 0.001 B = 0.001{"diff":1.2840063823981893,"p1":-2.8540876754244726,"p2":-0.9402895243888884,"p3":-3.226346511764075} A = 0.001 B = 0.001{"diff":1.2840063823981893,"p1":-2.8540876754244726,"p2":-0.9402895243888884,"p3":-3.226346511764075} A = 0.001 B = 0.001{"diff":31.156777816328287,"p1":-3.9774459155272437,"p2":-0.5278816382562034,"p3":-1.9512509085394154} A = 0.001 B = 0.001{"diff":31.156777816328287,"p1":-3.9774459155272437,"p2":-0.5278816382562034,"p3":-1.9512509085394154} A = 0.001 B = 0.001{"diff":31.156777816328287,"p1":-3.9774459155272437,"p2":-0.5278816382562034,"p3":-1.9512509085394154}{"diff":5.635044295637783,"p1":0.14171197489811171,"p2":1.6055053718111374,"p3":-0.19621703736259938} A = 0.001 B = 0.001{"diff":5.635044295637783,"p1":0.14171197489811171,"p2":1.6055053718111374,"p3":-0.19621703736259938} A = 0.001 B = 0.001{"diff":6.838982167405447,"p1":1.2591204751540601,"p2":2.498336623013022,"p3":-3.5718828183619977} A = 0.001 B = 0.001{"diff":6.838982167405447,"p1":1.2591204751540601,"p2":2.498336623013022,"p3":-3.5718828183619977} A = 0.001 B = 0.001{"diff":10.727286310740908,"p1":0.6269356660199416,"p2":4.416143873808411,"p3":1.8374015470486849} A = 0.001 B = 0.001{"diff":10.727286310740908,"p1":0.6269356660199416,"p2":4.416143873808411,"p3":1.8374015470486849} A = 0.001 B = 0.001{"diff":15.692308518093483,"p1":-1.0208484206674224,"p2":-1.5904395938404832,"p3":-0.4667991528758505} A = 0.001 B = 0.001{"diff":15.692308518093483,"p1":-1.0208484206674224,"p2":-1.5904395938404832,"p3":-0.4667991528758505} A = 0.001 B = 0.001{"diff":15.692308518093483,"p1":-1.0208484206674224,"p2":-1.5904395938404832,"p3":-0.4667991528758505}{"diff":17.322251229749014,"p1":0.4404370470313684,"p2":-0.8328465175827552,"p3":0.9404725242914193} A = 0.001 B = 0.001{"diff":17.322251229749014,"p1":0.4404370470313684,"p2":-0.8328465175827552,"p3":0.9404725242914193} A = 0.001 B = 0.001{"diff":-3.480298661863344,"p1":-6.035875850917924,"p2":-0.7706683434167638,"p3":0.9179574787322722} A = 0.001 B = 0.001{"diff":-3.480298661863344,"p1":-6.035875850917924,"p2":-0.7706683434167638,"p3":0.9179574787322722} A = 0.001 B = 0.001{"diff":7.636474448478197,"p1":3.5417777055322808,"p2":3.828925209725348,"p3":3.571935288953486} A = 0.001 B = 0.001{"diff":7.636474448478197,"p1":3.5417777055322808,"p2":3.828925209725348,"p3":3.571935288953486} A = 0.001 B = 0.001{"diff":15.03320915426994,"p1":1.5528801206090965,"p2":0.21664573758964564,"p3":-2.1447634993994176} A = 0.001 B = 0.001{"diff":15.03320915426994,"p1":1.5528801206090965,"p2":0.21664573758964564,"p3":-2.1447634993994176} A = 0.001 B = 0.001{"diff":15.03320915426994,"p1":1.5528801206090965,"p2":0.21664573758964564,"p3":-2.1447634993994176}{"diff":-9.796618917476593,"p1":-1.3829894921015238,"p2":5.30651958265235,"p3":1.2185498619904311} A = 0.001 B = 0.001{"diff":-9.796618917476593,"p1":-1.3829894921015238,"p2":5.30651958265235,"p3":1.2185498619904311} A = 0.001 B = 0.001{"diff":3.026334302461379,"p1":-2.3343339373071075,"p2":0.21793704671169672,"p3":-0.365742123436369} A = 0.001 B = 0.001{"diff":3.026334302461379,"p1":-2.3343339373071075,"p2":0.21793704671169672,"p3":-0.365742123436369} A = 0.001 B = 0.001{"diff":8.781841310647593,"p1":2.609855139786218,"p2":3.9033735252449313,"p3":-2.3638438203857834} A = 0.001 B = 0.001{"diff":8.781841310647593,"p1":2.609855139786218,"p2":3.9033735252449313,"p3":-2.3638438203857834} A = 0.001 B = 0.001{"diff":3.880098948198082,"p1":3.2559866148228536,"p2":0.28640421730214927,"p3":2.1231046079417073} A = 0.001 B = 0.001{"diff":3.880098948198082,"p1":3.2559866148228536,"p2":0.28640421730214927,"p3":2.1231046079417073} A = 0.001 B = 0.001{"diff":3.880098948198082,"p1":3.2559866148228536,"p2":0.28640421730214927,"p3":2.1231046079417073}{"diff":33.463194036801696,"p1":4.137654842865896,"p2":-0.2027573686882346,"p3":-0.7547872845031012} A = 0.001 B = 0.001{"diff":33.463194036801696,"p1":4.137654842865896,"p2":-0.2027573686882346,"p3":-0.7547872845031012} A = 0.001 B = 0.001{"diff":-6.9193197390262355,"p1":-1.0354938689182003,"p2":2.126555589547158,"p3":-2.5312084888324935} A = 0.001 B = 0.001{"diff":-6.9193197390262355,"p1":-1.0354938689182003,"p2":2.126555589547158,"p3":-2.5312084888324935} A = 0.001 B = 0.001{"diff":22.3209552707512,"p1":2.1466023596352075,"p2":4.176641393451658,"p3":-1.2995687193341443} A = 0.001 B = 0.001{"diff":22.3209552707512,"p1":2.1466023596352075,"p2":4.176641393451658,"p3":-1.2995687193341443} A = 0.001 B = 0.001{"diff":0.5807495870620585,"p1":1.3940251390506533,"p2":0.9575942157818486,"p3":2.9879728112721167} A = 0.001 B = 0.001{"diff":0.5807495870620585,"p1":1.3940251390506533,"p2":0.9575942157818486,"p3":2.9879728112721167} A = 0.001 B = 0.001{"diff":0.5807495870620585,"p1":1.3940251390506533,"p2":0.9575942157818486,"p3":2.9879728112721167}{"diff":11.339811848667637,"p1":-1.3173977478091994,"p2":1.831459813624352,"p3":1.8159638029822969} A = 0.001 B = 0.001{"diff":11.339811848667637,"p1":-1.3173977478091994,"p2":1.831459813624352,"p3":1.8159638029822969} A = 0.001 B = 0.001{"diff":-3.8516410307485955,"p1":-3.0352657248831005,"p2":1.3879603453457947,"p3":3.18202467882693} A = 0.001 B = 0.001{"diff":-3.8516410307485955,"p1":-3.0352657248831005,"p2":1.3879603453457947,"p3":3.18202467882693} A = 0.001 B = 0.001{"diff":27.228283811329874,"p1":-1.1991891161763857,"p2":-0.9420459046920299,"p3":-3.6432383920419245} A = 0.001 B = 0.001{"diff":27.228283811329874,"p1":-1.1991891161763857,"p2":-0.9420459046920299,"p3":-3.6432383920419245} A = 0.001 B = 0.001{"diff":6.540309211503683,"p1":-2.2466927970099557,"p2":-2.4302106051698344,"p3":-4.343076688148153} A = 0.001 B = 0.001{"diff":6.540309211503683,"p1":-2.2466927970099557,"p2":-2.4302106051698344,"p3":-4.343076688148153} A = 0.001 B = 0.001{"diff":6.540309211503683,"p1":-2.2466927970099557,"p2":-2.4302106051698344,"p3":-4.343076688148153}{"diff":1.8788768817992434,"p1":2.326405399331746,"p2":3.0262297040178754,"p3":0.09905464510194395} A = 0.001 B = 0.001{"diff":1.8788768817992434,"p1":2.326405399331746,"p2":3.0262297040178754,"p3":0.09905464510194395} A = 0.001 B = 0.001{"diff":13.671328099048594,"p1":0.28288235567870085,"p2":-1.6568837649193513,"p3":-1.2795945324109206} A = 0.001 B = 0.001{"diff":13.671328099048594,"p1":0.28288235567870085,"p2":-1.6568837649193513,"p3":-1.2795945324109206} A = 0.001 B = 0.001{"diff":40.10057715891023,"p1":3.917949604356519,"p2":1.7734762086972582,"p3":0.38006246218293693} A = 0.001 B = 0.001{"diff":40.10057715891023,"p1":3.917949604356519,"p2":1.7734762086972582,"p3":0.38006246218293693} A = 0.001 B = 0.001{"diff":-1.4674283875769731,"p1":-1.1770674394151748,"p2":-1.430136170951556,"p3":-0.7211118032072421} A = 0.001 B = 0.001{"diff":-1.4674283875769731,"p1":-1.1770674394151748,"p2":-1.430136170951556,"p3":-0.7211118032072421} A = 0.001 B = 0.001{"diff":-1.4674283875769731,"p1":-1.1770674394151748,"p2":-1.430136170951556,"p3":-0.7211118032072421}{"diff":-1.4674283875769731,"p1":-2.874162799582401,"p2":-1.083260230738644,"p3":-1.1784675315114148} A = 0.001 B = 0.001{"diff":-1.4674283875769731,"p1":-2.874162799582401,"p2":-1.083260230738644,"p3":-1.1784675315114148} A = 0.001 B = 0.001{"diff":42.15286328513943,"p1":-2.4093076041445083,"p2":-1.9079618085954761,"p3":-1.1784675315114148} A = 0.001 B = 0.001{"diff":42.15286328513943,"p1":-2.4093076041445083,"p2":-1.9079618085954761,"p3":-1.1784675315114148} A = 0.001 B = 0.001{"diff":10.40226305488585,"p1":-1.5897753708126126,"p2":0.41750972920155205,"p3":0.11445245269775721} A = 0.001 B = 0.001{"diff":10.40226305488585,"p1":-1.5897753708126126,"p2":0.41750972920155205,"p3":0.11445245269775721} A = 0.001 B = 0.001{"diff":21.4681017504071,"p1":-1.1382998980723673,"p2":0.2152158915619091,"p3":-1.4402447275436694} A = 0.001 B = 0.001{"diff":21.4681017504071,"p1":-1.1382998980723673,"p2":0.2152158915619091,"p3":-1.4402447275436694} A = 0.001 B = 0.001{"diff":21.4681017504071,"p1":-1.1382998980723673,"p2":0.2152158915619091,"p3":-1.4402447275436694}{"diff":39.30443827793482,"p1":-1.7041059344072373,"p2":2.855730216879014,"p3":-1.056058092724178} A = 0.001 B = 0.001{"diff":39.30443827793482,"p1":-1.7041059344072373,"p2":2.855730216879014,"p3":-1.056058092724178} A = 0.001 B = 0.001{"diff":42.59264814324203,"p1":0.14171197489811171,"p2":1.6466785883838204,"p3":-0.8842455784913779} A = 0.001 B = 0.001{"diff":42.59264814324203,"p1":0.14171197489811171,"p2":1.6466785883838204,"p3":-0.8842455784913779} A = 0.001 B = 0.001{"diff":5.494244518858096,"p1":0.27009541976882034,"p2":-0.5249906116690413,"p3":-2.6414516567290125} A = 0.001 B = 0.001{"diff":5.494244518858096,"p1":0.27009541976882034,"p2":-0.5249906116690413,"p3":-2.6414516567290125} A = 0.001 B = 0.001{"diff":30.450344266622068,"p1":0.06341743274269204,"p2":2.7679358400920373,"p3":0.44884864130494195} A = 0.001 B = 0.001{"diff":30.450344266622068,"p1":0.06341743274269204,"p2":2.7679358400920373,"p3":0.44884864130494195} A = 0.001 B = 0.001{"diff":30.450344266622068,"p1":0.06341743274269204,"p2":2.7679358400920373,"p3":0.44884864130494195}{"diff":2.8835439252344486,"p1":-0.7614639395836417,"p2":3.8929382554954457,"p3":0.2355542037179236} A = 0.001 B = 0.001{"diff":2.8835439252344486,"p1":-0.7614639395836417,"p2":3.8929382554954457,"p3":0.2355542037179236} A = 0.001 B = 0.001{"diff":2.8835439252344486,"p1":0.5708555009894835,"p2":1.0072603272579825,"p3":-1.1882470009600599} A = 0.001 B = 0.001{"diff":2.8835439252344486,"p1":0.5708555009894835,"p2":1.0072603272579825,"p3":-1.1882470009600599} A = 0.001 B = 0.001{"diff":2.8835439252344486,"p1":-1.110341982643152,"p2":0.3004911671495409,"p3":-1.1882470009600599} A = 0.001 B = 0.001{"diff":2.8835439252344486,"p1":-1.110341982643152,"p2":0.3004911671495409,"p3":-1.1882470009600599} A = 0.001 B = 0.001{"diff":25.061935269747266,"p1":1.6048057250269863,"p2":2.4312285080114613,"p3":-2.378548872115665} A = 0.001 B = 0.001{"diff":25.061935269747266,"p1":1.6048057250269863,"p2":2.4312285080114613,"p3":-2.378548872115665} A = 0.001 B = 0.001{"diff":25.061935269747266,"p1":1.6048057250269863,"p2":2.4312285080114613,"p3":-2.378548872115665}{"diff":20.61768982990185,"p1":1.253473978172392,"p2":1.9227206435159288,"p3":2.8207013422910983} A = 0.001 B = 0.001{"diff":20.61768982990185,"p1":1.253473978172392,"p2":1.9227206435159288,"p3":2.8207013422910983} A = 0.001 B = 0.001{"diff":-4.729661803423568,"p1":0.8556054575487572,"p2":-1.2791218163492573,"p3":-1.0089448189324186} A = 0.001 B = 0.001{"diff":-4.729661803423568,"p1":0.8556054575487572,"p2":-1.2791218163492573,"p3":-1.0089448189324186} A = 0.001 B = 0.001{"diff":-17.29515587859376,"p1":-0.007969305742477466,"p2":1.7254859894175407,"p3":-2.9264877768920114} A = 0.001 B = 0.001{"diff":-17.29515587859376,"p1":-0.007969305742477466,"p2":1.7254859894175407,"p3":-2.9264877768920114} A = 0.001 B = 0.001{"diff":-7.9795596791643675,"p1":-0.08880389053476753,"p2":3.0221247858523816,"p3":-0.7116770421682945} A = 0.001 B = 0.001{"diff":-7.9795596791643675,"p1":-0.08880389053476753,"p2":3.0221247858523816,"p3":-0.7116770421682945} A = 0.001 B = 0.001{"diff":-7.9795596791643675,"p1":-0.08880389053476753,"p2":3.0221247858523816,"p3":-0.7116770421682945}{"diff":38.37747898159981,"p1":1.5172861579240318,"p2":2.7244011895392397,"p3":-0.0012407651884156943} A = 0.001 B = 0.001{"diff":38.37747898159981,"p1":1.5172861579240318,"p2":2.7244011895392397,"p3":-0.0012407651884156943} A = 0.001 B = 0.001{"diff":-12.783111721666273,"p1":0.21530996036230543,"p2":-3.19568219274756,"p3":3.129509311192087} A = 0.001 B = 0.001{"diff":-12.783111721666273,"p1":0.21530996036230543,"p2":-3.19568219274756,"p3":3.129509311192087} A = 0.001 B = 0.001{"diff":-7.202029734467203,"p1":-0.3019616263861407,"p2":2.2560751510530346,"p3":-1.6231673129235136} A = 0.001 B = 0.001{"diff":-7.202029734467203,"p1":-0.3019616263861407,"p2":2.2560751510530346,"p3":-1.6231673129235136} A = 0.001 B = 0.001
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-observing-sequences / ex1.a
shape distribution s46 +p TV<11.000 runs 8/8
per-run
00 prompt

We have a vocabulary {dogs, cats, chase, sleep, stop} and a bigram model with Dirichlet priors over per-word transition distributions.

Given the scaffold:

webppl
1Infer({method:'MCMC', burn:10000, samples: 50000, onlyMAP:false}, function() {
2 let vocab = ['dogs', 'cats', 'chase', 'sleep', 'stop'];
3 var wordToDistribution = mem(function(word) {
4 return dirichletDrift({alpha:ones([vocab.length,1]), concentration:10})
5 })
6 var transition = function(word) {
7 return categorical({ps: wordToDistribution(word), vs: vocab})
8 }
9 // ...your code here...
10})

Someone says 'dogs chase cats'. Determine how likely 'chase' is to be followed by each word. Use a recursive generateSentence that emits until 'stop'. Condition on the observation. End with the Infer(...) returning the posterior over transition('chase').

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var comparray = function(arr1,arr2){
2 return (JSON.stringify(arr1) === JSON.stringify(arr2));
3};
4var ANSWER = (Infer({method:'MCMC', burn:10000, samples: 50000, onlyMAP:false}, function() {
5 let vocab = ['dogs', 'cats', 'chase', 'sleep', 'stop'];
6 var wordToDistribution = mem(function(word) {
7 return dirichletDrift({alpha:ones([vocab.length,1]), concentration:10});
8 });
9 var transition = function(word) {
10 return categorical({ps: wordToDistribution(word), vs: vocab});
11 };
12 let obs = ['dogs', 'chase', 'cats'];
13 let generateSentence = function(lastState, sentence) {
14 let word = transition(lastState);
15 if (word == 'stop') return [];
16 return [word].concat(generateSentence(word, sentence));
17 };
18 condition(comparray(obs, generateSentence('start')));
19 return transition('chase');
20}));
21
s46 +psonnet-46-primer-v3TV<11.000
webppl
1var ANSWER = Infer({method:'MCMC', burn:10000, samples: 50000, onlyMAP:false}, function() {
2 var vocab = ['dogs', 'cats', 'chase', 'sleep', 'stop'];
3 var wordToDistribution = mem(function(word) {
4 return dirichletDrift({alpha:ones([vocab.length,1]), concentration:10});
5 });
6 var transition = function(word) {
7 return categorical({ps: wordToDistribution(word), vs: vocab});
8 };
9
10 var generateSentence = function(word, sentence) {
11 var nextWord = transition(word);
12 var newSentence = sentence.concat([nextWord]);
13 return (nextWord === 'stop') ? newSentence : generateSentence(nextWord, newSentence);
14 };
15
16 var observeSentence = function(words) {
17 // words is the sequence after the start, ending with 'stop'
18 // We observe each transition: start -> words[0], words[0] -> words[1], ...
19 // The observed sentence is 'dogs chase cats stop'
20 // transitions: dogs->chase, chase->cats, cats->stop
21 observe(Categorical({ps: wordToDistribution('dogs'), vs: vocab}), 'chase');
22 observe(Categorical({ps: wordToDistribution('chase'), vs: vocab}), 'cats');
23 observe(Categorical({ps: wordToDistribution('cats'), vs: vocab}), 'stop');
24 };
25
26 observeSentence(['chase', 'cats', 'stop']);
27
28 return wordToDistribution('chase');
29});
02output overlaydistribution
GT s46 +p48 bins · top 48 of 53
00.170.170.340.34cats A = 0.343 B = 0.000cats A = 0.343 B = 0.000catschase A = 0.176 B = 0.000chase A = 0.176 B = 0.000sleep A = 0.164 B = 0.000sleep A = 0.164 B = 0.000dogs A = 0.161 B = 0.000dogs A = 0.161 B = 0.000stop A = 0.156 B = 0.000stop A = 0.156 B = 0.000stop{"dims":[5,1],"length":5,"data":{"0":0.0002456819397751115,"1":0.6339822362206005,"2":0.2749152010505266,"3":0.0774727418549888,"4":0.013384138934109002}} A = 0.000 B = 0.015{"dims":[5,1],"length":5,"data":{"0":0.0002456819397751115,"1":0.6339822362206005,"2":0.2749152010505266,"3":0.0774727418549888,"4":0.013384138934109002}} A = 0.000 B = 0.015{"dims":[5,1],"length":5,"data":{"0":0.0007582468391157921,"1":0.4594563220942885,"2":0.4135070388678674,"3":0.09282274638015882,"4":0.033455645818569704}} A = 0.000 B = 0.013{"dims":[5,1],"length":5,"data":{"0":0.0007582468391157921,"1":0.4594563220942885,"2":0.4135070388678674,"3":0.09282274638015882,"4":0.033455645818569704}} A = 0.000 B = 0.013{"dims":[5,1],"length":5,"data":{"0":0.7770019318678956,"1":0.11803595891543524,"2":0.0029464442600182126,"3":0.09132191238783485,"4":0.010693752568816004}} A = 0.000 B = 0.011{"dims":[5,1],"length":5,"data":{"0":0.7770019318678956,"1":0.11803595891543524,"2":0.0029464442600182126,"3":0.09132191238783485,"4":0.010693752568816004}} A = 0.000 B = 0.011{"dims":[5,1],"length":5,"data":{"0":0.0005550217971896364,"1":0.7390439270726701,"2":0.13017489390972864,"3":0.09414604798645133,"4":0.03608010923396034}} A = 0.000 B = 0.007{"dims":[5,1],"length":5,"data":{"0":0.0005550217971896364,"1":0.7390439270726701,"2":0.13017489390972864,"3":0.09414604798645133,"4":0.03608010923396034}} A = 0.000 B = 0.007{"dims":[5,1],"length":5,"data":{"0":0.0005550217971896364,"1":0.7390439270726701,"2":0.13017489390972864,"3":0.09414604798645133,"4":0.03608010923396034}}{"dims":[5,1],"length":5,"data":{"0":0.0006590654243038934,"1":0.336960833179406,"2":0.5297317982378893,"3":0.10261519054480252,"4":0.030033112613598433}} A = 0.000 B = 0.007{"dims":[5,1],"length":5,"data":{"0":0.0006590654243038934,"1":0.336960833179406,"2":0.5297317982378893,"3":0.10261519054480252,"4":0.030033112613598433}} A = 0.000 B = 0.007{"dims":[5,1],"length":5,"data":{"0":0.3242506439779604,"1":0.22001493934882255,"2":0.39652675098257867,"3":0.0005420659870961562,"4":0.058665599703542376}} A = 0.000 B = 0.006{"dims":[5,1],"length":5,"data":{"0":0.3242506439779604,"1":0.22001493934882255,"2":0.39652675098257867,"3":0.0005420659870961562,"4":0.058665599703542376}} A = 0.000 B = 0.006{"dims":[5,1],"length":5,"data":{"0":0.008108163481895771,"1":0.6649552970957975,"2":0.005526089166419243,"3":0.11271196366434173,"4":0.20869848659154588}} A = 0.000 B = 0.006{"dims":[5,1],"length":5,"data":{"0":0.008108163481895771,"1":0.6649552970957975,"2":0.005526089166419243,"3":0.11271196366434173,"4":0.20869848659154588}} A = 0.000 B = 0.006{"dims":[5,1],"length":5,"data":{"0":0.0677608086593431,"1":0.5325110335685935,"2":0.18870518322179125,"3":0.21018417321451366,"4":0.00083880133575845}} A = 0.000 B = 0.005{"dims":[5,1],"length":5,"data":{"0":0.0677608086593431,"1":0.5325110335685935,"2":0.18870518322179125,"3":0.21018417321451366,"4":0.00083880133575845}} A = 0.000 B = 0.005{"dims":[5,1],"length":5,"data":{"0":0.0677608086593431,"1":0.5325110335685935,"2":0.18870518322179125,"3":0.21018417321451366,"4":0.00083880133575845}}{"dims":[5,1],"length":5,"data":{"0":0.018815263558389868,"1":0.9094776108722903,"2":0.013234653695632,"3":0.012746310664090292,"4":0.045726161209597514}} A = 0.000 B = 0.005{"dims":[5,1],"length":5,"data":{"0":0.018815263558389868,"1":0.9094776108722903,"2":0.013234653695632,"3":0.012746310664090292,"4":0.045726161209597514}} A = 0.000 B = 0.005{"dims":[5,1],"length":5,"data":{"0":0.007147444394279565,"1":0.17132730940501123,"2":0.18819729429648063,"3":0.01881258901428828,"4":0.6145153628899402}} A = 0.000 B = 0.005{"dims":[5,1],"length":5,"data":{"0":0.007147444394279565,"1":0.17132730940501123,"2":0.18819729429648063,"3":0.01881258901428828,"4":0.6145153628899402}} A = 0.000 B = 0.005{"dims":[5,1],"length":5,"data":{"0":0.035974335854487456,"1":0.8255460066249182,"2":0.0025734638596006665,"3":0.09655861862904659,"4":0.03934757503194712}} A = 0.000 B = 0.004{"dims":[5,1],"length":5,"data":{"0":0.035974335854487456,"1":0.8255460066249182,"2":0.0025734638596006665,"3":0.09655861862904659,"4":0.03934757503194712}} A = 0.000 B = 0.004{"dims":[5,1],"length":5,"data":{"0":0.16102163058222774,"1":0.17023926904347297,"2":0.0027303426993508283,"3":0.39400461121460434,"4":0.27200414646034415}} A = 0.000 B = 0.004{"dims":[5,1],"length":5,"data":{"0":0.16102163058222774,"1":0.17023926904347297,"2":0.0027303426993508283,"3":0.39400461121460434,"4":0.27200414646034415}} A = 0.000 B = 0.004{"dims":[5,1],"length":5,"data":{"0":0.16102163058222774,"1":0.17023926904347297,"2":0.0027303426993508283,"3":0.39400461121460434,"4":0.27200414646034415}}{"dims":[5,1],"length":5,"data":{"0":0.11795475747343417,"1":0.534963102348154,"2":0.1033340743024629,"3":0.0041754729747830914,"4":0.2395725929011659}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.11795475747343417,"1":0.534963102348154,"2":0.1033340743024629,"3":0.0041754729747830914,"4":0.2395725929011659}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.05398477750543128,"1":0.5494620648456348,"2":0.3646773069177203,"3":0.008095521495775478,"4":0.023780329235437984}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.05398477750543128,"1":0.5494620648456348,"2":0.3646773069177203,"3":0.008095521495775478,"4":0.023780329235437984}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.16115633878925698,"1":0.2805050709165515,"2":0.12241269032026972,"3":0.43330812478260594,"4":0.0026177751913157546}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.16115633878925698,"1":0.2805050709165515,"2":0.12241269032026972,"3":0.43330812478260594,"4":0.0026177751913157546}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.009155035264473702,"1":0.8581805393194927,"2":0.03528671286878653,"3":0.04979113744314504,"4":0.047586575104102066}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.009155035264473702,"1":0.8581805393194927,"2":0.03528671286878653,"3":0.04979113744314504,"4":0.047586575104102066}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.009155035264473702,"1":0.8581805393194927,"2":0.03528671286878653,"3":0.04979113744314504,"4":0.047586575104102066}}{"dims":[5,1],"length":5,"data":{"0":0.03910146506571352,"1":0.5973498527921542,"2":0.021384097363047663,"3":0.3316905431906148,"4":0.010474041588469542}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.03910146506571352,"1":0.5973498527921542,"2":0.021384097363047663,"3":0.3316905431906148,"4":0.010474041588469542}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.8330737149025832,"1":0.04792666296483724,"2":0.022889469776132012,"3":0.07148740865704706,"4":0.024622743699400495}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.8330737149025832,"1":0.04792666296483724,"2":0.022889469776132012,"3":0.07148740865704706,"4":0.024622743699400495}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.20506072270330494,"1":0.29062544525534795,"2":0.04757996233062005,"3":0.0024327530823045067,"4":0.4543011166284225}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.20506072270330494,"1":0.29062544525534795,"2":0.04757996233062005,"3":0.0024327530823045067,"4":0.4543011166284225}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.11112334933042613,"1":0.6782088093099216,"2":0.0015127609209159688,"3":0.10208238959325254,"4":0.10707269084548375}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.11112334933042613,"1":0.6782088093099216,"2":0.0015127609209159688,"3":0.10208238959325254,"4":0.10707269084548375}} A = 0.000 B = 0.003{"dims":[5,1],"length":5,"data":{"0":0.11112334933042613,"1":0.6782088093099216,"2":0.0015127609209159688,"3":0.10208238959325254,"4":0.10707269084548375}}{"dims":[5,1],"length":5,"data":{"0":0.007403074135434187,"1":0.28339201235951594,"2":0.5433434485499516,"3":0.10992614155365163,"4":0.0559353234014465}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.007403074135434187,"1":0.28339201235951594,"2":0.5433434485499516,"3":0.10992614155365163,"4":0.0559353234014465}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.10038292626842825,"1":0.5591025749346599,"2":0.3201549673112087,"3":0.00975587463530278,"4":0.010603656850400371}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.10038292626842825,"1":0.5591025749346599,"2":0.3201549673112087,"3":0.00975587463530278,"4":0.010603656850400371}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.033307042753876914,"1":0.34237784790361114,"2":0.05641283496275259,"3":0.3948502188563804,"4":0.17305205552337902}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.033307042753876914,"1":0.34237784790361114,"2":0.05641283496275259,"3":0.3948502188563804,"4":0.17305205552337902}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.003944931491330625,"1":0.11132639980645524,"2":0.10049019025360387,"3":0.5803490290022044,"4":0.20388944944640583}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.003944931491330625,"1":0.11132639980645524,"2":0.10049019025360387,"3":0.5803490290022044,"4":0.20388944944640583}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.003944931491330625,"1":0.11132639980645524,"2":0.10049019025360387,"3":0.5803490290022044,"4":0.20388944944640583}}{"dims":[5,1],"length":5,"data":{"0":0.07802833853916084,"1":0.474078945758066,"2":0.004873276690860645,"3":0.11598257483689528,"4":0.32703686417501737}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.07802833853916084,"1":0.474078945758066,"2":0.004873276690860645,"3":0.11598257483689528,"4":0.32703686417501737}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.23937821561142938,"1":0.6791100892958934,"2":0.022437047906781863,"3":0.036943989074309826,"4":0.022130658111585468}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.23937821561142938,"1":0.6791100892958934,"2":0.022437047906781863,"3":0.036943989074309826,"4":0.022130658111585468}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.0059137053652870185,"1":0.20734540555576683,"2":0.5223119332051375,"3":0.17422676126524342,"4":0.09020219460856536}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.0059137053652870185,"1":0.20734540555576683,"2":0.5223119332051375,"3":0.17422676126524342,"4":0.09020219460856536}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.3315846012927622,"1":0.1254563785430595,"2":0.004399161650874153,"3":0.39644518442079285,"4":0.1421146740925114}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.3315846012927622,"1":0.1254563785430595,"2":0.004399161650874153,"3":0.39644518442079285,"4":0.1421146740925114}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.3315846012927622,"1":0.1254563785430595,"2":0.004399161650874153,"3":0.39644518442079285,"4":0.1421146740925114}}{"dims":[5,1],"length":5,"data":{"0":0.005068667855898753,"1":0.17212114345440258,"2":0.08741536315588375,"3":0.5855622774086912,"4":0.14983254812512378}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.005068667855898753,"1":0.17212114345440258,"2":0.08741536315588375,"3":0.5855622774086912,"4":0.14983254812512378}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.1319435791780315,"1":0.6223502921625932,"2":0.13484482528572897,"3":0.0885108832754032,"4":0.022350420098243007}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.1319435791780315,"1":0.6223502921625932,"2":0.13484482528572897,"3":0.0885108832754032,"4":0.022350420098243007}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.1632564071747977,"1":0.6061268735258037,"2":0.05364253189362023,"3":0.171162759127239,"4":0.005811428278539405}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.1632564071747977,"1":0.6061268735258037,"2":0.05364253189362023,"3":0.171162759127239,"4":0.005811428278539405}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.29887032920616763,"1":0.047477129359526714,"2":0.1612088836928796,"3":0.01860303296993087,"4":0.47384062477149513}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.29887032920616763,"1":0.047477129359526714,"2":0.1612088836928796,"3":0.01860303296993087,"4":0.47384062477149513}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.29887032920616763,"1":0.047477129359526714,"2":0.1612088836928796,"3":0.01860303296993087,"4":0.47384062477149513}}{"dims":[5,1],"length":5,"data":{"0":0.13675172683581607,"1":0.4437355232726395,"2":0.13789165969567588,"3":0.0010132543371670162,"4":0.28060783585870164}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.13675172683581607,"1":0.4437355232726395,"2":0.13789165969567588,"3":0.0010132543371670162,"4":0.28060783585870164}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.13957521121187103,"1":0.6512761717916992,"2":0.06917674184732323,"3":0.12116466993222526,"4":0.01880720521688134}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.13957521121187103,"1":0.6512761717916992,"2":0.06917674184732323,"3":0.12116466993222526,"4":0.01880720521688134}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.004744455001041059,"1":0.6190397100887919,"2":0.3673959050254857,"3":0.002459175014114829,"4":0.006360754870566531}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.004744455001041059,"1":0.6190397100887919,"2":0.3673959050254857,"3":0.002459175014114829,"4":0.006360754870566531}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.11954861522347007,"1":0.6912607759748103,"2":0.1126563999954121,"3":0.07055315082184202,"4":0.005981057984465421}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.11954861522347007,"1":0.6912607759748103,"2":0.1126563999954121,"3":0.07055315082184202,"4":0.005981057984465421}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.11954861522347007,"1":0.6912607759748103,"2":0.1126563999954121,"3":0.07055315082184202,"4":0.005981057984465421}}{"dims":[5,1],"length":5,"data":{"0":0.020069159286885685,"1":0.16890342220962923,"2":0.1366501615843189,"3":0.00261249519833755,"4":0.6717647617208287}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.020069159286885685,"1":0.16890342220962923,"2":0.1366501615843189,"3":0.00261249519833755,"4":0.6717647617208287}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.044223993579474055,"1":0.4461969786656672,"2":0.18149616391202986,"3":0.03799819104049733,"4":0.29008467280233147}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.044223993579474055,"1":0.4461969786656672,"2":0.18149616391202986,"3":0.03799819104049733,"4":0.29008467280233147}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.007604822993659399,"1":0.5027675656807413,"2":0.43275428998953475,"3":0.01826774849446925,"4":0.038605572841595305}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.007604822993659399,"1":0.5027675656807413,"2":0.43275428998953475,"3":0.01826774849446925,"4":0.038605572841595305}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.2777025205096726,"1":0.5324355463401448,"2":0.11837745944637529,"3":0.03219695939605183,"4":0.039287514307755594}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.2777025205096726,"1":0.5324355463401448,"2":0.11837745944637529,"3":0.03219695939605183,"4":0.039287514307755594}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.2777025205096726,"1":0.5324355463401448,"2":0.11837745944637529,"3":0.03219695939605183,"4":0.039287514307755594}}{"dims":[5,1],"length":5,"data":{"0":0.1860581164070389,"1":0.5914716436973788,"2":0.03224343457045372,"3":0.002476252012947347,"4":0.18775055331218124}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.1860581164070389,"1":0.5914716436973788,"2":0.03224343457045372,"3":0.002476252012947347,"4":0.18775055331218124}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.20673277284110708,"1":0.4400571162406359,"2":0.020087169243035885,"3":0.20941161373392905,"4":0.12371132794129198}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.20673277284110708,"1":0.4400571162406359,"2":0.020087169243035885,"3":0.20941161373392905,"4":0.12371132794129198}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.06450321891716285,"1":0.5059101562403079,"2":0.051930481670208355,"3":0.009863924068371145,"4":0.3677922191039498}} A = 0.000 B = 0.002{"dims":[5,1],"length":5,"data":{"0":0.06450321891716285,"1":0.5059101562403079,"2":0.051930481670208355,"3":0.009863924068371145,"4":0.3677922191039498}} A = 0.000 B = 0.002
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<.05 0.028 0.0036 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.5 0.084 0.0167 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.05 0.045 0.0079 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.05 0.045 0.0079 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<1 1.000 15.5874 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.05 0.028 0.0036 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.05 0.035 0.0030 ·
probmods2-observing-sequences / ex1.b
shape distribution s46 +p TV<.50.117 runs 8/8
per-run
00 prompt

Bigram sentence model over vocabulary ['dogs', 'cats', 'chase', 'sleep', 'stop']. Each word has its own transition distribution drawn from a dirichletDrift({alpha: ones([5,1]), concentration: 10}). A sentence is generated by starting at the special token 'start', repeatedly applying transition(prevWord) to draw the next word, terminating when 'stop' is drawn (and emitting 'stop' so that the observed sentence's length matches without undefined).

Helper:

webppl
1var comparray = function(arr1, arr2) {
2 return JSON.stringify(arr1) === JSON.stringify(arr2);
3};

Use Infer({method: 'MCMC', burn: 10000, samples: 50000, onlyMAP: false}, ...). Observe the sentence ['dogs', 'chase', 'cats', 'stop']. Then, in a second sentence, the first word is 'dogs'. End your program with the Infer(...) returning the marginal distribution over the second word of this new sentence.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var comparray = function(arr1,arr2){
2 return (JSON.stringify(arr1) === JSON.stringify(arr2));
3};
4var ANSWER = (Infer({method:'MCMC', burn:10000, samples: 50000, onlyMAP: false}, function() {
5 let vocab = ['dogs', 'cats', 'chase', 'sleep', 'stop'];
6 var wordToDistribution = mem(function(word) {
7 return dirichletDrift({alpha:ones([vocab.length,1]), concentration:10});
8 });
9 var transition = function(word) {
10 return categorical({ps: wordToDistribution(word), vs: vocab});
11 };
12 let generateSentence = function(lastState, sentence) {
13 let word = transition(lastState);
14 if (word == 'stop') return ['stop'];
15 return [word].concat(generateSentence(word, sentence));
16 };
17 let obs = ['dogs', 'chase', 'cats', 'stop'];
18 condition(comparray(obs, generateSentence('start')));
19 let newSentence = generateSentence('start');
20 condition(newSentence[0] == 'dogs');
21 return newSentence[1];
22}));
23
s46 +psonnet-46-primer-v3TV<.50.117
webppl
1var vocab = ['dogs', 'cats', 'chase', 'sleep', 'stop'];
2var n = vocab.length;
3
4var comparray = function(arr1, arr2) {
5 return JSON.stringify(arr1) === JSON.stringify(arr2);
6};
7
8var model = function() {
9 // Each word (including 'start') has its own transition distribution
10 // Words that can be "previous": start, dogs, cats, chase, sleep, stop
11 var prevWords = ['start', 'dogs', 'cats', 'chase', 'sleep', 'stop'];
12
13 // Draw transition distributions for each previous word
14 var transitionDists = mem(function(word) {
15 return dirichletDrift({alpha: ones([n, 1]), concentration: 10});
16 });
17
18 var transition = function(prevWord) {
19 var probs = transitionDists(prevWord);
20 var idx = sample(Categorical({vs: vocab, ps: probs}));
21 return idx;
22 };
23
24 // Generate a sentence starting from 'start'
25 var generateSentence = function(prevWord, acc) {
26 var nextWord = transition(prevWord);
27 var newAcc = acc.concat([nextWord]);
28 if (nextWord === 'stop') {
29 return newAcc;
30 } else {
31 return generateSentence(nextWord, newAcc);
32 }
33 };
34
35 // Observe the sentence ['dogs', 'chase', 'cats', 'stop']
36 var observed = ['dogs', 'chase', 'cats', 'stop'];
37 var generated = generateSentence('start', []);
38 condition(comparray(generated, observed));
39
40 // Second sentence: first word is 'dogs', return second word
41 var secondWord = transition('dogs');
42 return secondWord;
43};
44
45var ANSWER = Infer({method: 'MCMC', burn: 10000, samples: 50000, onlyMAP: false}, model);
02output overlaydistribution
GT s46 +p5 bins
00.150.150.290.29stop A = 0.199 B = 0.167stop A = 0.199 B = 0.1670.200.17stopdogs A = 0.144 B = 0.194dogs A = 0.144 B = 0.1940.140.19dogschase A = 0.294 B = 0.279chase A = 0.294 B = 0.2790.290.28chasecats A = 0.181 B = 0.248cats A = 0.181 B = 0.2480.180.25catssleep A = 0.183 B = 0.113sleep A = 0.183 B = 0.1130.180.11sleep
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.05 0.047 0.0064 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer fail ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.5 0.117 0.0373 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking fail ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-observing-sequences / ex1.c
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Bigram sentence model over vocabulary ['dogs', 'cats', 'chase', 'sleep', 'stop']. Each word has its own transition distribution drawn from a dirichletDrift({alpha: ones([5,1]), concentration: 10}). A sentence is generated by starting at the special token 'start', repeatedly applying transition(prevWord) to draw the next word, terminating when 'stop' is drawn (and emitting 'stop' so that the observed sentence's length matches without undefined).

Helper:

webppl
1var comparray = function(arr1, arr2) {
2 return JSON.stringify(arr1) === JSON.stringify(arr2);
3};

Use Infer({method: 'MCMC', burn: 10000, samples: 50000, onlyMAP: false}, ...). Observe the sentence ['dogs', 'chase', 'cats', 'stop']. Then, in a second sentence, the second word is 'chase'. End your program with the Infer(...) returning the marginal distribution over the FIRST word of this new sentence.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var comparray = function(arr1,arr2){
2 return (JSON.stringify(arr1) === JSON.stringify(arr2));
3};
4var ANSWER = (Infer({method:'MCMC', burn:10000, samples: 50000, onlyMAP: false}, function() {
5 let vocab = ['dogs', 'cats', 'chase', 'sleep', 'stop'];
6 var wordToDistribution = mem(function(word) {
7 return dirichletDrift({alpha:ones([vocab.length,1]), concentration:10});
8 });
9 var transition = function(word) {
10 return categorical({ps: wordToDistribution(word), vs: vocab});
11 };
12 let generateSentence = function(lastState, sentence) {
13 let word = transition(lastState);
14 if (word == 'stop') return ['stop'];
15 return [word].concat(generateSentence(word, sentence));
16 };
17 let obs = ['dogs', 'chase', 'cats', 'stop'];
18 condition(comparray(obs, generateSentence('start')));
19 let newSentence = generateSentence('start');
20 condition(newSentence[1] == 'chase');
21 return newSentence[0];
22}));
23
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var vocab = ['dogs', 'cats', 'chase', 'sleep', 'stop'];
2var vocabSize = vocab.length;
3
4var comparray = function(arr1, arr2) {
5 return JSON.stringify(arr1) === JSON.stringify(arr2);
6};
7
8var indexOf = function(word) {
9 return _.indexOf(vocab, word);
10};
11
12var model = function() {
13 // Each word (including 'start') has a transition distribution over vocab
14 // Words that can be "previous": start, dogs, cats, chase, sleep, stop
15 // We need transition from 'start' and from each vocab word
16 var allPrev = ['start'].concat(vocab);
17
18 // Draw transition distributions for each previous word
19 var transitionDists = mem(function(prevWord) {
20 return dirichletDrift({alpha: ones([5, 1]), concentration: 10});
21 });
22
23 var transition = function(prevWord) {
24 var probs = transitionDists(prevWord);
25 var idx = sample(Categorical({vs: vocab, ps: probs}));
26 return idx;
27 };
28
29 // Generate a sentence starting from 'start'
30 var generateSentence = function(prevWord, acc) {
31 var nextWord = transition(prevWord);
32 var newAcc = acc.concat([nextWord]);
33 if (nextWord === 'stop') {
34 return newAcc;
35 } else {
36 return generateSentence(nextWord, newAcc);
37 }
38 };
39
40 // Observe the first sentence: ['dogs', 'chase', 'cats', 'stop']
41 var observed1 = ['dogs', 'chase', 'cats', 'stop'];
42 var generated1 = generateSentence('start', []);
43 condition(comparray(generated1, observed1));
44
45 // Generate a second sentence and condition on second word being 'chase'
46 var generated2 = generateSentence('start', []);
47 condition(generated2.length >= 2 && generated2[1] === 'chase');
48
49 // Return the first word of the second sentence
50 return generated2[0];
51};
52
53var ANSWER = Infer({method: 'MCMC', burn: 10000, samples: 50000, onlyMAP: false}, model);
02output overlaydistribution
GT s46 +p4 bins
00.310.310.620.62dogs A = 0.619 B = 0.619dogs A = 0.619 B = 0.6190.620.62dogscats A = 0.127 B = 0.127cats A = 0.127 B = 0.1270.130.13catssleep A = 0.144 B = 0.144sleep A = 0.144 B = 0.1440.140.14sleepchase A = 0.110 B = 0.110chase A = 0.110 B = 0.1100.110.11chase
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer fail ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.5 0.183 2.7039 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.5 0.167 2.9909 ·
probmods2-observing-sequences / ex2.a
shape distribution s46 +p TV<.50.084 runs 8/8
per-run
00 prompt

Bigram sentence model over vocabulary ['dogs', 'cats', 'chase', 'sleep', 'stop']. Each word has its own transition distribution drawn from a dirichletDrift({alpha: ones([5,1]), concentration: 10}). A sentence is generated by starting at the special token 'start', repeatedly applying transition(prevWord) to draw the next word, terminating when 'stop' is drawn (and emitting 'stop' so that the observed sentence's length matches without undefined).

Helper:

webppl
1var comparray = function(arr1, arr2) {
2 return JSON.stringify(arr1) === JSON.stringify(arr2);
3};

Use Infer({method: 'MCMC', burn: 10000, samples: 50000, onlyMAP: false}, ...). Observe the sentence ['dogs', 'chase', 'cats', 'stop']. Then, in a second sentence, the first word is 'cats'. End your program with the Infer(...) returning the marginal distribution over the second word of this new sentence.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var comparray = function(arr1,arr2){
2 return (JSON.stringify(arr1) === JSON.stringify(arr2));
3};
4var ANSWER = (Infer({method:'MCMC', burn:10000, samples: 50000, onlyMAP: false}, function() {
5 let vocab = ['dogs', 'cats', 'chase', 'sleep', 'stop'];
6 var wordToDistribution = mem(function(word) {
7 return dirichletDrift({alpha:ones([vocab.length,1]), concentration:10});
8 });
9 var transition = function(word) {
10 return categorical({ps: wordToDistribution(word), vs: vocab});
11 };
12 let generateSentence = function(lastState, sentence) {
13 let word = transition(lastState);
14 if (word == 'stop') return ['stop'];
15 return [word].concat(generateSentence(word, sentence));
16 };
17 let obs = ['dogs', 'chase', 'cats', 'stop'];
18 condition(comparray(obs, generateSentence('start')));
19 let newSentence = generateSentence('start');
20 condition(newSentence[0] == 'cats');
21 return newSentence[1];
22}));
23
s46 +psonnet-46-primer-v3TV<.50.084
webppl
1var vocab = ['dogs', 'cats', 'chase', 'sleep', 'stop'];
2var n = vocab.length;
3
4var comparray = function(arr1, arr2) {
5 return JSON.stringify(arr1) === JSON.stringify(arr2);
6};
7
8var model = function() {
9 // Each word (including 'start') has a transition distribution over vocab
10 var allWords = ['start', 'dogs', 'cats', 'chase', 'sleep', 'stop'];
11
12 // Memoized transition distributions
13 var transitionDist = mem(function(word) {
14 return dirichletDrift({alpha: ones([n, 1]), concentration: 10});
15 });
16
17 var transition = function(prevWord) {
18 var probs = transitionDist(prevWord);
19 return vocab[discrete(probs)];
20 };
21
22 // Generate a sentence starting from 'start'
23 var generateSentence = function(prevWord, acc) {
24 var nextWord = transition(prevWord);
25 var newAcc = acc.concat([nextWord]);
26 if (nextWord === 'stop') {
27 return newAcc;
28 } else {
29 return generateSentence(nextWord, newAcc);
30 }
31 };
32
33 // Observe the sentence ['dogs', 'chase', 'cats', 'stop']
34 var observed = ['dogs', 'chase', 'cats', 'stop'];
35 var generated = generateSentence('start', []);
36 condition(comparray(generated, observed));
37
38 // Second sentence: first word is 'cats', return second word
39 var secondWord = transition('cats');
40 return secondWord;
41};
42
43var ANSWER = Infer({method: 'MCMC', burn: 10000, samples: 50000, onlyMAP: false}, model);
02output overlaydistribution
GT s46 +p5 bins
00.170.170.340.34sleep A = 0.196 B = 0.149sleep A = 0.196 B = 0.1490.200.15sleepdogs A = 0.207 B = 0.170dogs A = 0.207 B = 0.1700.210.17dogsstop A = 0.306 B = 0.339stop A = 0.306 B = 0.3390.310.34stopcats A = 0.140 B = 0.171cats A = 0.140 B = 0.1710.140.17catschase A = 0.150 B = 0.171chase A = 0.150 B = 0.1710.150.17chase
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer fail ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.5 0.084 0.0159 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.5 0.100 0.0239 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.5 0.084 0.0159 ·
probmods2-observing-sequences / ex2.c
shape samples s46 +p TV<11.000 runs 8/8
per-run
00 prompt

Define a hidden Markov model for sentence generation: words have parts of speech (N for nouns 'dogs','cats'; V for verbs 'chase','sleep'; 'stop'). Markov transitions are between POS, not words; words are then drawn given POS. Use Dirichlet-drift priors for the per-POS transition distributions. End your program with generateSentence('start') (a single sample - the harness will rerun your program multiple times to estimate the distribution).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var drawWord = function(pos){
2 return (pos=="N") ? uniformDraw(['dogs','cats']) :
3 (pos=="V") ? uniformDraw(['chase','sleep']) :
4 'stop';
5};
6var POS = ["N", "V", "stop"];
7
8var posToDistribution = mem(function(pos) {
9 return dirichletDrift({alpha:ones([POS.length,1]), concentration:10});
10});
11
12var transition = function(pos) {
13 return categorical({ps: posToDistribution(pos), vs: POS});
14};
15
16var generateSentence = function(lastPOS) {
17 var nextPOS = transition(lastPOS);
18 var word = drawWord(nextPOS);
19 return (word == 'stop') ? [word] : [word].concat(generateSentence(nextPOS));
20};
21var ANSWER = (generateSentence("start"));
22
s46 +psonnet-46-primer-v3TV<11.000
webppl
1// HMC/MCMC with Dirichlet-drift priors for HMM sentence generation
2
3// POS tags and vocabulary
4var posStates = ['N', 'V', 'stop'];
5var words = {
6 'N': ['dogs', 'cats'],
7 'V': ['chase', 'sleep'],
8 'stop': ['stop']
9};
10
11// Dirichlet priors for transitions from each POS (including 'start')
12// From 'start': can go to N or V (not stop directly)
13// From 'N': can go to V or stop
14// From 'V': can go to N or stop
15
16// We use mem to get consistent parameters within a run
17var transitionDist = mem(function(fromState) {
18 if (fromState === 'start') {
19 // Can transition to N or V
20 var ps = dirichlet(Vector([1, 1]));
21 return Categorical({vs: ['N', 'V'], ps: ps});
22 } else if (fromState === 'N') {
23 // Can transition to V or stop
24 var ps = dirichlet(Vector([1, 1]));
25 return Categorical({vs: ['V', 'stop'], ps: ps});
26 } else if (fromState === 'V') {
27 // Can transition to N or stop
28 var ps = dirichlet(Vector([1, 1]));
29 return Categorical({vs: ['N', 'stop'], ps: ps});
30 } else {
31 // stop -> stop (absorbing)
32 return Categorical({vs: ['stop'], ps: Vector([1])});
33 }
34});
35
36var emissionDist = mem(function(pos) {
37 if (pos === 'stop') {
38 return Categorical({vs: ['stop'], ps: Vector([1])});
39 }
40 var vocabSize = words[pos].length;
41 var ps = dirichlet(ones([vocabSize, 1]));
42 return Categorical({vs: words[pos], ps: ps});
43});
44
45var generateSentence = function(currentState) {
46 if (currentState === 'stop') {
47 return [];
48 }
49 var nextState = sample(transitionDist(currentState));
50 if (nextState === 'stop') {
51 return [];
52 }
53 var word = sample(emissionDist(nextState));
54 return [word].concat(generateSentence(nextState));
55};
56
57var ANSWER = generateSentence('start');
02output overlaysamples
GT s46 +p48 bins · top 48 of 96
00.170.170.340.34["stop"] A = 0.340 B = 0.000["stop"] A = 0.340 B = 0.000["stop"]["chase"] A = 0.000 B = 0.169["chase"] A = 0.000 B = 0.169["sleep"] A = 0.000 B = 0.133["sleep"] A = 0.000 B = 0.133["cats"] A = 0.000 B = 0.123["cats"] A = 0.000 B = 0.123["dogs"] A = 0.000 B = 0.108["dogs"] A = 0.000 B = 0.108["dogs"]["chase","stop"] A = 0.064 B = 0.000["chase","stop"] A = 0.064 B = 0.000["sleep","stop"] A = 0.053 B = 0.000["sleep","stop"] A = 0.053 B = 0.000["sleep","dogs"] A = 0.000 B = 0.051["sleep","dogs"] A = 0.000 B = 0.051["cats","chase"] A = 0.000 B = 0.041["cats","chase"] A = 0.000 B = 0.041["cats","chase"]["dogs","chase"] A = 0.000 B = 0.036["dogs","chase"] A = 0.000 B = 0.036["sleep","cats","stop"] A = 0.032 B = 0.000["sleep","cats","stop"] A = 0.032 B = 0.000["dogs","chase","stop"] A = 0.032 B = 0.000["dogs","chase","stop"] A = 0.032 B = 0.000["cats","sleep"] A = 0.000 B = 0.031["cats","sleep"] A = 0.000 B = 0.031["cats","sleep"]["dogs","sleep"] A = 0.000 B = 0.031["dogs","sleep"] A = 0.000 B = 0.031["cats","stop"] A = 0.021 B = 0.000["cats","stop"] A = 0.021 B = 0.000["dogs","stop"] A = 0.021 B = 0.000["dogs","stop"] A = 0.021 B = 0.000["chase","cats"] A = 0.000 B = 0.021["chase","cats"] A = 0.000 B = 0.021["chase","cats"]["chase","dogs"] A = 0.000 B = 0.021["chase","dogs"] A = 0.000 B = 0.021["sleep","cats"] A = 0.000 B = 0.021["sleep","cats"] A = 0.000 B = 0.021["sleep","cats","sleep"] A = 0.000 B = 0.015["sleep","cats","sleep"] A = 0.000 B = 0.015["dogs","sleep","dogs"] A = 0.000 B = 0.015["dogs","sleep","dogs"] A = 0.000 B = 0.015["dogs","sleep","dogs"]["sleep","chase","stop"] A = 0.011 B = 0.000["sleep","chase","stop"] A = 0.011 B = 0.000["dogs","chase","dogs","sleep","chase","cats","dogs","sleep","stop"] A = 0.011 B = 0.000["dogs","chase","dogs","sleep","chase","cats","dogs","sleep","stop"] A = 0.011 B = 0.000["sleep","cats","sleep","cats","chase","chase","sleep","cats","cats","sleep","dogs","stop"] A = 0.011 B = 0.000["sleep","cats","sleep","cats","chase","chase","sleep","cats","cats","sleep","dogs","stop"] A = 0.011 B = 0.000["chase","cats","stop"] A = 0.011 B = 0.000["chase","cats","stop"] A = 0.011 B = 0.000["chase","cats","stop"]["cats","sleep","stop"] A = 0.011 B = 0.000["cats","sleep","stop"] A = 0.011 B = 0.000["dogs","chase","cats","cats","dogs","cats","stop"] A = 0.011 B = 0.000["dogs","chase","cats","cats","dogs","cats","stop"] A = 0.011 B = 0.000["cats","dogs","cats","cats","cats","chase","cats","cats","cats","dogs","cats","stop"] A = 0.011 B = 0.000["cats","dogs","cats","cats","cats","chase","cats","cats","cats","dogs","cats","stop"] A = 0.011 B = 0.000["cats","chase","stop"] A = 0.011 B = 0.000["cats","chase","stop"] A = 0.011 B = 0.000["cats","chase","stop"]["cats","dogs","sleep","cats","sleep","stop"] A = 0.011 B = 0.000["cats","dogs","sleep","cats","sleep","stop"] A = 0.011 B = 0.000["chase","chase","stop"] A = 0.011 B = 0.000["chase","chase","stop"] A = 0.011 B = 0.000["cats","cats","dogs","cats","chase","chase","dogs","dogs","cats","dogs","dogs","chase","sleep","cats","sleep","sleep","sleep","chase","sleep","sleep","dogs","stop"] A = 0.011 B = 0.000["cats","cats","dogs","cats","chase","chase","dogs","dogs","cats","dogs","dogs","chase","sleep","cats","sleep","sleep","sleep","chase","sleep","sleep","dogs","stop"] A = 0.011 B = 0.000["dogs","sleep","sleep","stop"] A = 0.011 B = 0.000["dogs","sleep","sleep","stop"] A = 0.011 B = 0.000["dogs","sleep","sleep","stop"]["chase","cats","dogs","stop"] A = 0.011 B = 0.000["chase","cats","dogs","stop"] A = 0.011 B = 0.000["cats","cats","sleep","cats","stop"] A = 0.011 B = 0.000["cats","cats","sleep","cats","stop"] A = 0.011 B = 0.000["sleep","cats","dogs","cats","chase","stop"] A = 0.011 B = 0.000["sleep","cats","dogs","cats","chase","stop"] A = 0.011 B = 0.000["dogs","chase","sleep","stop"] A = 0.011 B = 0.000["dogs","chase","sleep","stop"] A = 0.011 B = 0.000["dogs","chase","sleep","stop"]["cats","dogs","dogs","dogs","stop"] A = 0.011 B = 0.000["cats","dogs","dogs","dogs","stop"] A = 0.011 B = 0.000["dogs","dogs","chase","cats","sleep","cats","chase","sleep","stop"] A = 0.011 B = 0.000["dogs","dogs","chase","cats","sleep","cats","chase","sleep","stop"] A = 0.011 B = 0.000["sleep","dogs","dogs","stop"] A = 0.011 B = 0.000["sleep","dogs","dogs","stop"] A = 0.011 B = 0.000["cats","dogs","stop"] A = 0.011 B = 0.000["cats","dogs","stop"] A = 0.011 B = 0.000["cats","dogs","stop"]["dogs","cats","stop"] A = 0.011 B = 0.000["dogs","cats","stop"] A = 0.011 B = 0.000["chase","cats","sleep","chase","sleep","stop"] A = 0.011 B = 0.000["chase","cats","sleep","chase","sleep","stop"] A = 0.011 B = 0.000["sleep","chase","dogs","stop"] A = 0.011 B = 0.000["sleep","chase","dogs","stop"] A = 0.011 B = 0.000["chase","cats","cats","stop"] A = 0.011 B = 0.000["chase","cats","cats","stop"] A = 0.011 B = 0.000["chase","cats","cats","stop"]["cats","dogs","cats","dogs","dogs","cats","dogs","dogs","cats","sleep","stop"] A = 0.011 B = 0.000["cats","dogs","cats","dogs","dogs","cats","dogs","dogs","cats","sleep","stop"] A = 0.011 B = 0.000["cats","chase","sleep","chase","chase","stop"] A = 0.011 B = 0.000["cats","chase","sleep","chase","chase","stop"] A = 0.011 B = 0.000["cats","dogs","chase","dogs","stop"] A = 0.011 B = 0.000["cats","dogs","chase","dogs","stop"] A = 0.011 B = 0.000
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<1 0.960 ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<1 0.860 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<1 1.000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<1 1.000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<1 0.750 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<1 0.765 ·
probmods2-observing-sequences / ex2.d
shape distribution s46 +p TV<.50.095 runs 8/8
per-run
00 prompt

Hidden Markov sentence model. Words have parts of speech: N for nouns {'dogs', 'cats'}; V for verbs {'chase', 'sleep'}; plus 'stop'. Each POS has its own transition distribution drawn from dirichletDrift({alpha: ones([3,1]), concentration: 10}), memoized. A sentence is generated by starting at 'start' POS, transitioning to successive POS tags, drawing a word given each POS via drawWord(pos) (which returns uniformDraw([...]) for N or V, else 'stop'), and appending 'stop' when reached.

Helper:

webppl
1var comparray = function(arr1, arr2) {
2 return JSON.stringify(arr1) === JSON.stringify(arr2);
3};

Observe the sentence ['dogs', 'chase', 'cats', 'stop']. Then, in a second sentence whose first word is 'cats', end your program with the Infer(...) (MCMC, burn: 10000, samples: 1000, lag: 10, onlyMAP: false) returning the marginal distribution over the second word.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var comparray = function(arr1,arr2){
2 return (JSON.stringify(arr1) === JSON.stringify(arr2));
3};
4
5var drawWord = function(pos){
6 return (pos=="N") ? uniformDraw(['dogs','cats']) :
7 (pos=="V") ? uniformDraw(['chase','sleep']) :
8 'stop';
9};
10var POS = ["N", "V", "stop"];
11var ANSWER = (Infer({method:'MCMC', burn:10000, samples: 1000, lag:10, onlyMAP: false}, function() {
12 var posToDistribution = mem(function(pos) {
13 return dirichletDrift({alpha:ones([POS.length,1]), concentration:10});
14 });
15
16 var transition = function(pos) {
17 return categorical({ps: posToDistribution(pos), vs: POS});
18 };
19
20 let generateSentence = function(lastPOS) {
21 let nextPOS = transition(lastPOS);
22 let word = drawWord(nextPOS);
23 return (word == 'stop') ? [word] : [word].concat(generateSentence(nextPOS));
24 };
25 let obs = ['dogs', 'chase', 'cats', 'stop'];
26 condition(comparray(obs, generateSentence('start')));
27
28 let newSentence = generateSentence('start');
29 condition(newSentence[0] == 'cats');
30 return newSentence[1];
31}));
32
s46 +psonnet-46-primer-v3TV<.50.095
webppl
1var comparray = function(arr1, arr2) {
2 return JSON.stringify(arr1) === JSON.stringify(arr2);
3};
4
5var posLabels = ['N', 'V', 'stop'];
6var posIndex = {N: 0, V: 1, stop: 2};
7
8var nouns = ['dogs', 'cats'];
9var verbs = ['chase', 'sleep'];
10
11var drawWord = function(pos) {
12 if (pos === 'N') return uniformDraw(nouns);
13 if (pos === 'V') return uniformDraw(verbs);
14 return 'stop';
15};
16
17var getPosOfWord = function(word) {
18 if (word === 'dogs' || word === 'cats') return 'N';
19 if (word === 'chase' || word === 'sleep') return 'V';
20 return 'stop';
21};
22
23var model = function() {
24 // Memoized transition distributions for each POS (including 'start')
25 var transitionDist = mem(function(pos) {
26 return dirichletDrift({alpha: ones([3, 1]), concentration: 10});
27 });
28
29 var transition = function(pos) {
30 var probs = transitionDist(pos);
31 var idx = sample(Categorical({vs: posLabels, ps: [T.get(probs, 0), T.get(probs, 1), T.get(probs, 2)]}));
32 return idx;
33 };
34
35 // Generate a sentence from a given starting POS
36 var generateSentence = function(currentPos, acc) {
37 var nextPos = transition(currentPos);
38 var word = drawWord(nextPos);
39 if (nextPos === 'stop') {
40 return acc.concat(['stop']);
41 } else {
42 return generateSentence(nextPos, acc.concat([word]));
43 }
44 };
45
46 // Observe sentence 1: ['dogs', 'chase', 'cats', 'stop']
47 // We need to condition on this sentence being generated
48 // The sentence is: start -> N(dogs) -> V(chase) -> N(cats) -> stop
49 // We observe the transitions and words
50
51 // Sentence 1 observations
52 var s1 = ['dogs', 'chase', 'cats', 'stop'];
53 var s1pos = map(getPosOfWord, s1); // ['N', 'V', 'N', 'stop']
54
55 // Observe transitions for sentence 1
56 // start -> N
57 var t1_0 = transitionDist('start');
58 observe(Categorical({vs: posLabels, ps: [T.get(t1_0, 0), T.get(t1_0, 1), T.get(t1_0, 2)]}), 'N');
59 // N -> V
60 var t1_1 = transitionDist('N');
61 observe(Categorical({vs: posLabels, ps: [T.get(t1_1, 0), T.get(t1_1, 1), T.get(t1_1, 2)]}), 'V');
62 // V -> N
63 var t1_2 = transitionDist('V');
64 observe(Categorical({vs: posLabels, ps: [T.get(t1_2, 0), T.get(t1_2, 1), T.get(t1_2, 2)]}), 'N');
65 // N -> stop (second time N is used, but transitionDist('N') is memoized so same dist)
66 observe(Categorical({vs: posLabels, ps: [T.get(t1_1, 0), T.get(t1_1, 1), T.get(t1_1, 2)]}), 'stop');
67
68 // Sentence 2: first word is 'cats' (POS = N)
69 // start -> N(cats) -> ?
70 var t2_0 = transitionDist('start');
71 observe(Categorical({vs: posLabels, ps: [T.get(t2_0, 0), T.get(t2_0, 1), T.get(t2_0, 2)]}), 'N');
72
73 // Now sample the second POS (transition from N)
74 var secondPos = transition('N');
75 var secondWord = drawWord(secondPos);
76
77 return secondWord;
78};
79
80var ANSWER = Infer({method: 'MCMC', burn: 10000, samples: 1000, lag: 10, onlyMAP: false}, model);
02output overlaydistribution
GT s46 +p5 bins
00.240.240.480.48chase A = 0.159 B = 0.195chase A = 0.159 B = 0.1950.160.20chasedogs A = 0.075 B = 0.107dogs A = 0.075 B = 0.1070.070.11dogscats A = 0.110 B = 0.112cats A = 0.110 B = 0.1120.110.11catssleep A = 0.179 B = 0.204sleep A = 0.179 B = 0.2040.180.20sleepstop A = 0.477 B = 0.382stop A = 0.477 B = 0.3820.480.38stop
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<1 0.523 0.7402 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer fail ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.5 0.095 0.0217 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking fail ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.5 0.054 0.0064 ·
probmods2-observing-sequences / ex3.a
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Hidden Markov sentence model with extended vocabulary. POS tags: N for nouns {'dog', 'cat'}, V for verbs {'chases', 'sleeps'}, D for determiners {'the', 'a'}, A for adverbs ({'dilligently'}), plus 'stop'. Per-POS transitions drawn from dirichletDrift({alpha: ones([5,1]), concentration: 10}), memoized. drawWord(pos) returns uniformDraw(...) for the respective list, or 'dilligently' for A, or 'stop' for stop.

Helper:

webppl
1var comparray = function(arr1, arr2) {
2 return JSON.stringify(arr1) === JSON.stringify(arr2);
3};

Use factor(comparray(['the', 'dog', 'chases', 'a', 'cat', 'stop'], generateSentence('start')) * 5) to softly condition on the observed sentence. Then sample five new sentences from generateSentence('start'). End your program with Infer({method: 'MCMC', burn: 10000, samples: 1000, lag: 10, onlyMAP: true}, ...) returning a record {sent1, sent2, sent3, sent4, sent5}.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var comparray = function(arr1,arr2){
2 return (JSON.stringify(arr1) === JSON.stringify(arr2));
3};
4
5var drawWord = function(pos){
6 return (pos=="N") ? uniformDraw(['dog','cat']) :
7 (pos=="V") ? uniformDraw(['chases','sleeps']) :
8 (pos=="D") ? uniformDraw(['the','a']) :
9 (pos=="A") ? 'dilligently' :
10 'stop';
11};
12var POS = ["N", "V", "D", "A", "stop"];
13var ANSWER = (Infer({method:'MCMC', burn:10000, samples: 1000, lag:10, onlyMAP: true}, function() {
14 var posToDistribution = mem(function(pos) {
15 return dirichletDrift({alpha:ones([POS.length,1]), concentration:10});
16 });
17
18 var transition = function(pos) {
19 return categorical({ps: posToDistribution(pos), vs: POS});
20 };
21
22 let generateSentence = function(lastPOS) {
23 let nextPOS = transition(lastPOS);
24 let word = drawWord(nextPOS);
25 return (word == 'stop') ? [word] : [word].concat(generateSentence(nextPOS));
26 };
27 let obs = ['the', 'dog', 'chases', 'a', 'cat', 'stop'];
28
29 factor(comparray(obs, generateSentence('start'))*5);
30
31 var sent1 = generateSentence('start');
32 var sent2 = generateSentence('start');
33 var sent3 = generateSentence('start');
34 var sent4 = generateSentence('start');
35 var sent5 = generateSentence('start');
36 return {sent1: sent1, sent2: sent2, sent3: sent3, sent4: sent4, sent5: sent5};
37}));
38
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var tags = ['N', 'V', 'D', 'A', 'stop'];
2
3var tagIndex = function(tag) {
4 return _.indexOf(tags, tag);
5};
6
7var transitionDist = mem(function(fromTag) {
8 return dirichletDrift({alpha: ones([5, 1]), concentration: 10});
9});
10
11var nextTag = function(fromTag) {
12 var probs = transitionDist(fromTag);
13 var idx = sample(Categorical({vs: tags, ps: [T.get(probs, 0), T.get(probs, 1), T.get(probs, 2), T.get(probs, 3), T.get(probs, 4)]}));
14 return idx;
15};
16
17var drawWord = function(pos) {
18 return pos === 'N' ? uniformDraw(['dog', 'cat']) :
19 pos === 'V' ? uniformDraw(['chases', 'sleeps']) :
20 pos === 'D' ? uniformDraw(['the', 'a']) :
21 pos === 'A' ? 'dilligently' :
22 'stop';
23};
24
25var generateSentence = function(currentTag) {
26 var next = nextTag(currentTag);
27 return next === 'stop' ? ['stop'] : [drawWord(next)].concat(generateSentence(next));
28};
29
30var comparray = function(arr1, arr2) {
31 return JSON.stringify(arr1) === JSON.stringify(arr2);
32};
33
34var model = function() {
35 factor(comparray(['the', 'dog', 'chases', 'a', 'cat', 'stop'], generateSentence('start')) * 5);
36
37 var sent1 = generateSentence('start');
38 var sent2 = generateSentence('start');
39 var sent3 = generateSentence('start');
40 var sent4 = generateSentence('start');
41 var sent5 = generateSentence('start');
42
43 return {sent1: sent1, sent2: sent2, sent3: sent3, sent4: sent4, sent5: sent5};
44};
45
46var ANSWER = Infer({method: 'MCMC', burn: 10000, samples: 1000, lag: 10, onlyMAP: true}, model);
02output overlaydistribution
GT s46 +p1 bin
00.500.501.001.00{"sent1":["stop"],"sent2":["sleeps","a","stop"],"sent3":["stop"],"sent4":["stop"],"sent5":["stop"]} A = 1.000 B = 1.000{"sent1":["stop"],"sent2":["sleeps","a","stop"],"sent3":["stop"],"sent4":["stop"],"sent5":["stop"]} A = 1.000 B = 1.0001.001.00{"sent1":["stop"],"sent2":["sleeps","a","stop"],"sent3":["stop"],"sent4":["stop"],"sent5":["stop"]}
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=1 1.000 23.0259 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer fail ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking fail ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-observing-sequences / ex3.b
shape distribution s46 +p TV=11.000 runs 8/8
per-run
00 prompt

Use a phrase structure grammar instead of an HMM. Vocabulary: D='the','a'; N='cat','dog'; V='chases','sleeps'; A='diligently'. Production rules: AP -> A; NP -> [D, N]; VP -> [V, AP] | [V, NP]; S -> [NP, VP]. Condition on [['the', 'dog'], ['chases', ['a', 'cat']]] being a sentence (using comparray and S()), then sample 5 new sentences. Use MCMC with onlyMAP=true. End with the Infer(...) returning {sent1...sent5}.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var comparray = function(arr1,arr2){
2 return (JSON.stringify(arr1) === JSON.stringify(arr2));
3};
4
5var uniformDraw = function (xs) {return xs[randomInteger(xs.length)]};
6
7var D = function() {return uniformDraw(['the', 'a'])};
8var N = function() {return uniformDraw(['cat', 'dog'])};
9var V = function() {return uniformDraw(['chases', 'sleeps'])};
10var A = function() {return uniformDraw(['diligently'])};
11var AP = function() {return uniformDraw([A()])};
12var NP = function() {return [D(), N()]};
13var VP = function() {return uniformDraw([[V(), AP()],
14 [V(), NP()]])};
15var S = function() {return [NP(), VP()]};
16var ANSWER = (Infer({method:'MCMC', burn:10000, samples: 1000, onlyMAP: true}, function() {
17 let obs = [['the', 'dog'], ['chases', ['a', 'cat']]];
18 condition(comparray(obs, S()));
19
20 var sent1 = S();
21 var sent2 = S();
22 var sent3 = S();
23 var sent4 = S();
24 var sent5 = S();
25 return {sent1: sent1, sent2: sent2, sent3: sent3, sent4: sent4, sent5: sent5};
26}));
27
s46 +psonnet-46-primer-v3TV=11.000
webppl
1var D = ['the', 'a'];
2var N = ['cat', 'dog'];
3var V = ['chases', 'sleeps'];
4var A = ['diligently'];
5
6var AP = function() {
7 return sample(Categorical({vs: A, ps: [1/A.length, 1/A.length].slice(0, A.length)}));
8};
9
10var apSample = function() {
11 return A[randomInteger(A.length)];
12};
13
14var npSample = function() {
15 return [D[randomInteger(D.length)], N[randomInteger(N.length)]];
16};
17
18var vpSample = function() {
19 var choice = flip(0.5);
20 return choice ? [V[randomInteger(V.length)], apSample()] : [V[randomInteger(V.length)], npSample()];
21};
22
23var sSample = function() {
24 return [npSample(), vpSample()];
25};
26
27var comparray = function(a, b) {
28 if (Array.isArray(a) && Array.isArray(b)) {
29 if (a.length !== b.length) return false;
30 return _.every(map2(function(x, y) { return comparray(x, y); }, a, b));
31 } else {
32 return a === b;
33 }
34};
35
36var observed = [['the', 'dog'], ['chases', ['a', 'cat']]];
37
38var model = function() {
39 condition(comparray(sSample(), observed));
40 var sent1 = sSample();
41 var sent2 = sSample();
42 var sent3 = sSample();
43 var sent4 = sSample();
44 var sent5 = sSample();
45 return {sent1: sent1, sent2: sent2, sent3: sent3, sent4: sent4, sent5: sent5};
46};
47
48var ANSWER = Infer({method: 'MCMC', samples: 1000, onlyMAP: true}, model);
02output overlaydistribution
GT s46 +p2 bins
00.500.501.001.00{"sent1":[["the","dog"],["sleeps","diligently"]],"sent2":[["the","cat"],["sleeps","diligently"]],"sent3":[["a","dog"],["chases","diligently"]],"sent4":[["the","cat"],["sleeps",["a","cat"]]],"sent5":[["the","cat"],["sleeps","diligently"]]} A = 1.000 B = 0.000{"sent1":[["the","dog"],["sleeps","diligently"]],"sent2":[["the","cat"],["sleeps","diligently"]],"sent3":[["a","dog"],["chases","diligently"]],"sent4":[["the","cat"],["sleeps",["a","cat"]]],"sent5":[["the","cat"],["sleeps","diligently"]]} A = 1.000 B = 0.0001.00{"sent1":[["the","dog"],["sleeps","diligently"]],"sent2":[["the","cat"],["sleeps","diligently"]],"sent3":[["a","dog"],["chases","diligently"]],"sent4":[["the","cat"],["sleeps",["a","cat"]]],"sent5":[["the","cat"],["sleeps","diligently"]]}{"sent1":[["the","dog"],["chases","diligently"]],"sent2":[["a","dog"],["sleeps","diligently"]],"sent3":[["the","cat"],["chases","diligently"]],"sent4":[["the","dog"],["chases","diligently"]],"sent5":[["the","cat"],["sleeps","diligently"]]} A = 0.000 B = 1.000{"sent1":[["the","dog"],["chases","diligently"]],"sent2":[["a","dog"],["sleeps","diligently"]],"sent3":[["the","cat"],["chases","diligently"]],"sent4":[["the","dog"],["chases","diligently"]],"sent5":[["the","cat"],["sleeps","diligently"]]} A = 0.000 B = 1.0001.00{"sent1":[["the","dog"],["chases","diligently"]],"sent2":[["a","dog"],["sleeps","diligently"]],"sent3":[["the","cat"],["chases","diligently"]],"sent4":[["the","dog"],["chases","diligently"]],"sent5":[["the","cat"],["sleeps","diligently"]]}
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer fail ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=1 1.000 23.0259 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=1 1.000 23.0259 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=1 1.000 23.0259 ·
probmods2-agents-as-programs / ex1.a
shape distribution s46 +p TV<.050.003 runs 8/8
per-run
00 prompt

Modify the factor(...) line in the coin-flipping model so that the soft condition makes heads happen with approximately 95% probability:

webppl
1Infer({method: 'enumerate'}, function () {
2 var A = flip()
3 factor(A) // edit this line
4 return A
5});

Hint: a factor of c gives weight exp(c). End your program with the Infer(...).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (Infer({method: 'enumerate'}, function () {
2 var A = flip();
3 factor(A*3);
4 return A;
5}));
6
s46 +psonnet-46-primer-v3TV<.050.003
webppl
1var ANSWER = Infer({method: 'enumerate'}, function () {
2 var A = flip();
3 factor(A ? Math.log(19) : 0);
4 return A;
5});
02output overlaydistribution
GT s46 +p2 bins
00.480.480.950.95false A = 0.047 B = 0.050false A = 0.047 B = 0.0500.050.05falsetrue A = 0.953 B = 0.950true A = 0.953 B = 0.9500.950.95true
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<.05 0.003 0.0001 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.05 0.045 0.0378 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.05 0.003 0.0001 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.05 0.003 0.0001 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.05 0.003 0.0001 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.05 0.003 0.0001 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.05 0.003 0.0001 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.05 0.003 0.0001 ·
probmods2-agents-as-programs / ex1.b
shape distribution s46 +p TV<.50.101 runs 8/8
per-run
00 prompt

Three coins are flipped. Use factor to favor outcomes where the number of heads (true's) equals 2:

webppl
1Infer({}, function() {
2 var a = flip(0.5);
3 var b = flip(0.5);
4 var c = flip(0.5);
5 factor(...); // fill in
6 return a;
7})

End your program with the Infer(...).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (Infer({}, function() {
2 var a = flip(0.5);
3 var b = flip(0.5);
4 var c = flip(0.5);
5 factor(1*((a+b+c)==2));
6 return a;
7}));
8
s46 +psonnet-46-primer-v3TV<.50.101
webppl
1var ANSWER = Infer({}, function() {
2 var a = flip(0.5);
3 var b = flip(0.5);
4 var c = flip(0.5);
5 var numHeads = (a ? 1 : 0) + (b ? 1 : 0) + (c ? 1 : 0);
6 factor(numHeads === 2 ? 0 : -Infinity);
7 return a;
8});
02output overlaydistribution
GT s46 +p2 bins
00.330.330.670.67false A = 0.435 B = 0.333false A = 0.435 B = 0.3330.430.33falsetrue A = 0.565 B = 0.667true A = 0.565 B = 0.6670.570.67true
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<.5 0.052 0.0056 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.5 0.101 0.0214 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.5 0.101 0.0214 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.5 0.101 0.0214 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.5 0.101 0.0214 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.5 0.101 0.0214 ·
probmods2-agents-as-programs / ex2.a
shape distribution s46 +p TV<.057.8e-5 runs 8/8
per-run
00 prompt

Ultimatum game: a proposer allocates $10 between themselves and a responder in $1 increments. The responder accepts or rejects. If accepted, both get the split; if rejected, both get $0.

Assume the responder is a strict utilitarian (accepts any offer >= $1). The proposer is a soft maximizer who wants to keep as much of the $10 as possible. End your program with the Infer(...) over the proposer's offer.

webppl
1var responder = function(offer) { /* fill in */ }
2Infer({method: "enumerate"}, function(){
3 // sample offer, compute reward = responder(offer) ? (10-offer) : 0
4 // factor(reward)
5 return offer
6})
system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var responder = function(offer) {
2 return (offer>0 ? true : false);
3};
4var ANSWER = (Infer({method: "enumerate"}, function(){
5 var offer = uniformDraw([0,1,2,3,4,5,6,7,8,9,10]);
6 var reward = responder(offer) ? (10 - offer) : 0;
7 factor(reward);
8 return offer;
9}));
10
s46 +psonnet-46-primer-v3TV<.057.8e-5
webppl
1var responder = function(offer) {
2 return offer >= 1;
3};
4
5var ANSWER = Infer({method: "enumerate"}, function() {
6 var offer = randomInteger(10) + 1; // offers from 1 to 10
7 var reward = responder(offer) ? (10 - offer) : 0;
8 factor(reward);
9 return offer;
10});
02output overlaydistribution
GT s46 +p11 bins · 0 … 10
00.320.320.630.630 A = 0.000 B = 0.0000 A = 0.000 B = 0.00001 A = 0.632 B = 0.6321 A = 0.632 B = 0.6320.630.6312 A = 0.233 B = 0.2332 A = 0.233 B = 0.2330.230.2323 A = 0.086 B = 0.0863 A = 0.086 B = 0.0860.090.0934 A = 0.031 B = 0.0314 A = 0.031 B = 0.0310.030.0345 A = 0.012 B = 0.0125 A = 0.012 B = 0.0120.010.0156 A = 0.004 B = 0.0046 A = 0.004 B = 0.00467 A = 0.002 B = 0.0027 A = 0.002 B = 0.00278 A = 0.001 B = 0.0018 A = 0.001 B = 0.00189 A = 0.000 B = 0.0009 A = 0.000 B = 0.000910 A = 0.000 B = 0.00010 A = 0.000 B = 0.00010
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<.05 7.8e-5 0.0001 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-agents-as-programs / ex2.b
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Modified ultimatum game: the responder accepts in proportion to the fraction of $10 allocated to her, raised to a power alpha = 2 (a spitefulness parameter):

webppl
1var alpha = 2;
2var responder = function(offer, alpha) {
3 var p = Math.pow(offer/10, alpha);
4 return flip(p);
5}

Use offers 0..10 in $1 increments. End with the Infer(...) over the proposer's offer (factor on reward).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var alpha = 2;
2
3var responder = function(offer, alpha) {
4 var p = Math.pow(offer/10,alpha);
5 return flip(p);
6};
7var ANSWER = (Infer({method: "enumerate"}, function(){
8 var offer = uniformDraw([0,1,2,3,4,5,6,7,8,9,10]);
9 var reward = responder(offer,alpha) ? (10 - offer) : 0;
10 factor(reward);
11 return offer;
12}));
13
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var alpha = 2;
2
3var responder = function(offer, alpha) {
4 var p = Math.pow(offer / 10, alpha);
5 return flip(p);
6};
7
8var model = function() {
9 var offer = randomInteger(11); // 0..10
10 var accepted = responder(offer, alpha);
11 var reward = accepted ? (10 - offer) : 0;
12 factor(reward);
13 return offer;
14};
15
16var ANSWER = Infer({method: 'enumerate'}, model);
02output overlaydistribution
GT s46 +p11 bins · 0 … 10
00.130.130.270.270 A = 0.002 B = 0.0020 A = 0.002 B = 0.00201 A = 0.184 B = 0.1841 A = 0.184 B = 0.1840.180.1812 A = 0.270 B = 0.2702 A = 0.270 B = 0.2700.270.2723 A = 0.224 B = 0.2243 A = 0.224 B = 0.2240.220.2234 A = 0.147 B = 0.1474 A = 0.147 B = 0.1470.150.1545 A = 0.085 B = 0.0855 A = 0.085 B = 0.0850.090.0956 A = 0.046 B = 0.0466 A = 0.046 B = 0.0460.050.0567 A = 0.023 B = 0.0237 A = 0.023 B = 0.0230.020.0278 A = 0.011 B = 0.0118 A = 0.011 B = 0.0110.010.0189 A = 0.005 B = 0.0059 A = 0.005 B = 0.0050.010.01910 A = 0.002 B = 0.00210 A = 0.002 B = 0.00210
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-agents-as-programs / ex2.d
shape distribution s46 +p TV<10.833 runs 8/8
per-run
00 prompt

In the ultimatum game (responder accepts with probability (offer/10)^alpha), the proposer doesn't know alpha but believes it is uniformly distributed on [0.5, 5]. The proposer offered $2 and the responder rejected it. End with the Infer(...) returning the posterior over alpha. Use MCMC with 50000 samples.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var responder = function(offer, alpha) {
2 var p = Math.pow(offer/10,alpha);
3 return flip(p);
4};
5var ANSWER = (Infer({method: "MCMC", samples:50000}, function(){
6 var alpha = uniform(0.5,5);
7 var offer = 2;
8 var reward = responder(offer, alpha) ? (10 - offer) : 0;
9 condition(reward==0);
10 return alpha;
11}));
12
s46 +psonnet-46-primer-v3TV<10.833
webppl
1var model = function() {
2 var alpha = uniform(0.5, 5);
3
4 // Probability that responder accepts offer of $2 out of $10
5 var pAccept = Math.pow(2 / 10, alpha);
6
7 // Responder rejected, so observe false (not accepted)
8 observe(Bernoulli({p: pAccept}), false);
9
10 return alpha;
11};
12
13var ANSWER = Infer({method: 'MCMC', samples: 50000}, model);
02output overlaydistribution
GT s46 +p24 bins · 0.59 … 4.91
00.0230.0230.0470.04712344.91 · 0.0473.78 · 0.046x = 0.59 A = 0.0293 B = 0.0276 Δ = 0.0017x = 0.78 A = 0.0325 B = 0.0328 Δ = -0.0003x = 0.97 A = 0.0335 B = 0.0340 Δ = -0.0005x = 1.16 A = 0.0393 B = 0.0378 Δ = 0.0015x = 1.34 A = 0.0387 B = 0.0381 Δ = 0.0006x = 1.53 A = 0.0394 B = 0.0412 Δ = -0.0018x = 1.72 A = 0.0437 B = 0.0429 Δ = 0.0008x = 1.91 A = 0.0392 B = 0.0396 Δ = -0.0004x = 2.09 A = 0.0446 B = 0.0440 Δ = 0.0006x = 2.28 A = 0.0416 B = 0.0430 Δ = -0.0015x = 2.47 A = 0.0448 B = 0.0430 Δ = 0.0018x = 2.66 A = 0.0407 B = 0.0437 Δ = -0.0030x = 2.84 A = 0.0444 B = 0.0427 Δ = 0.0018x = 3.03 A = 0.0439 B = 0.0435 Δ = 0.0003x = 3.22 A = 0.0453 B = 0.0446 Δ = 0.0007x = 3.41 A = 0.0449 B = 0.0448 Δ = 0.0001x = 3.59 A = 0.0448 B = 0.0428 Δ = 0.0021x = 3.78 A = 0.0443 B = 0.0462 Δ = -0.0019x = 3.97 A = 0.0427 B = 0.0445 Δ = -0.0018x = 4.16 A = 0.0409 B = 0.0445 Δ = -0.0035x = 4.34 A = 0.0467 B = 0.0447 Δ = 0.0020x = 4.53 A = 0.0437 B = 0.0446 Δ = -0.0009x = 4.72 A = 0.0444 B = 0.0451 Δ = -0.0007x = 4.91 A = 0.0467 B = 0.0445 Δ = 0.0023
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.5 0.144 1.1342 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<1 0.833 10.1402 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<1 0.833 10.1402 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<1 0.853 10.3914 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<1 0.833 10.1402 ·
probmods2-agents-as-programs / ex2.e
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Ultimatum game with uncertain alpha. Responder accepts with probability Math.pow(offer/10, alpha); the proposer doesn't know alpha but believes it is uniform on [0.5, 5].

Setup: in round 1, the proposer offered $2 and the responder rejected. In round 2, what should the proposer offer to maximize expected payoff?

Two-stage inference: 1. proposer1: Infer (MCMC, 50000 samples) the posterior over alpha given that round 1's offer of $2 was rejected. 2. End your program with an outer Infer (forward, 1000 samples) that samples an alpha2 from proposer1, then runs an inner Infer (MCMC, 5000 samples) over offers 0..10 with factor(reward2) where reward2 = responder(offer2, alpha2) ? (10 - offer2) : 0. Sample one round-2 offer from that inner posterior and return it. The outer Infer is the distribution over the chosen round-2 offer.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var responder = function(offer, alpha) {
2 var p = Math.pow(offer/10,alpha);
3 return flip(p);
4};
5
6var proposer1 = Infer({method: "MCMC", samples:50000}, function(){
7 var alpha = uniform(0.5,5);
8 var offer1 = 2;
9 var reward1 = responder(offer1, alpha) ? (10 - offer1) : 0;
10 condition(reward1==0);
11 return alpha;
12});
13var ANSWER = (Infer({method: "forward", samples:1000}, function(){
14 var alpha2 = sample(proposer1);
15 var proposer2 = Infer({method: "MCMC", samples:5000}, function(){
16 var offer2 = uniformDraw([0,1,2,3,4,5,6,7,8,9,10]);
17 var reward2 = responder(offer2, alpha2) ? (10 - offer2) : 0;
18 factor(reward2);
19 return offer2;
20 });
21 return sample(proposer2);
22}));
23
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var responder = function(offer, alpha) {
2 return flip(Math.pow(offer / 10, alpha));
3};
4
5// Stage 1: Infer posterior over alpha given rejection of offer=2
6var proposer1 = Infer({method: 'MCMC', samples: 50000}, function() {
7 var alpha = uniform(0.5, 5);
8 var accepted = responder(2, alpha);
9 condition(!accepted);
10 return alpha;
11});
12
13// Stage 2: For each alpha2 sampled from posterior, find best offer
14var ANSWER = Infer({method: 'forward', samples: 1000}, function() {
15 var alpha2 = sample(proposer1);
16
17 var innerDist = Infer({method: 'MCMC', samples: 5000}, function() {
18 var offer2 = randomInteger(11); // 0..10
19 var accepted = responder(offer2, alpha2);
20 var reward2 = accepted ? (10 - offer2) : 0;
21 factor(reward2);
22 return offer2;
23 });
24
25 var chosenOffer = sample(innerDist);
26 return chosenOffer;
27});
02output overlaydistribution
GT s46 +p11 bins · 0 … 10
00.100.100.190.190 A = 0.013 B = 0.0130 A = 0.013 B = 0.0130.010.0101 A = 0.140 B = 0.1401 A = 0.140 B = 0.1400.140.1412 A = 0.192 B = 0.1922 A = 0.192 B = 0.1920.190.1923 A = 0.171 B = 0.1713 A = 0.171 B = 0.1710.170.1734 A = 0.143 B = 0.1434 A = 0.143 B = 0.1430.140.1445 A = 0.118 B = 0.1185 A = 0.118 B = 0.1180.120.1256 A = 0.089 B = 0.0896 A = 0.089 B = 0.0890.090.0967 A = 0.058 B = 0.0587 A = 0.058 B = 0.0580.060.0678 A = 0.047 B = 0.0478 A = 0.047 B = 0.0470.050.0589 A = 0.018 B = 0.0189 A = 0.018 B = 0.0180.020.02910 A = 0.011 B = 0.01110 A = 0.011 B = 0.0110.010.0110
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<.5 0.356 0.3853 ·
haiku-45-primer-v3 haiku-4.5 +primer fail ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.05 0.048 0.0083 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.05 0.048 0.0083 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.05 0.048 0.0083 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<.05 0.048 0.0083 ·
probmods2-agents-as-programs / ex3
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Prisoner's Dilemma. Two thieves are interrogated separately. If a thief confesses she gets a lenient sentence (lenient = 6 years). If she doesn't but the other does, she gets 10 years. If neither confesses, both go free. With lenient = 6, use factor(percentYearsFreedom) (where percentYearsFreedom = (10 - years_in_jail) / 10). The other thief flips uniformly to decide whether to rat. End your program with the Infer(...) returning the posterior over the focal thief's rat decision.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var thiefRats = function(){
2 return flip();
3};
4
5var lenient = 6;
6var ANSWER = (Infer({}, function(){
7 var otherThiefRats = thiefRats();
8 var IRat = thiefRats();
9 var years = (otherThiefRats?
10 (IRat? lenient : 10) :
11 (IRat? lenient : 0));
12 var percentYearsFreedom = (10-years)/10;
13 factor(percentYearsFreedom);
14 return IRat;
15}));
16
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var model = function() {
2 // Focal thief's decision: rat or not
3 var rat = flip(0.5);
4
5 // Other thief flips uniformly
6 var otherRat = flip(0.5);
7
8 var lenient = 6;
9
10 // Compute years in jail for focal thief
11 var years = rat ? lenient : (otherRat ? 10 : 0);
12
13 // percentYearsFreedom = (10 - years) / 10
14 var percentYearsFreedom = (10 - years) / 10;
15
16 factor(percentYearsFreedom);
17
18 return rat;
19};
20
21var ANSWER = Infer({method: 'enumerate'}, model);
02output overlaydistribution
GT s46 +p2 bins
00.280.280.550.55false A = 0.555 B = 0.555false A = 0.555 B = 0.5550.550.55falsetrue A = 0.445 B = 0.445true A = 0.445 B = 0.4450.450.45true
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.05 0.006 0.0001 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=1 1.000 22.3387 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=1 1.000 22.3387 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-agents-as-programs / ex4.a
shape record(alpha_001, alpha_1, alpha_4, alpha_10) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Implement the Frank & Goodman RSA model. The world has three objects represented as records {shape, color}: {shape: "square", color: "blue"}, {shape: "circle", color: "blue"}, {shape: "square", color: "green"}, drawn uniformly. Possible utterances: 'blue', 'green', 'square', 'circle'. Truth function: color/shape utterances must match the corresponding attribute, otherwise true.

Build: - literalListener(utterance): Infer over meaningPrior conditional on truth - speaker(obj, alpha): uniformDraw utterance, factor alpha * literalListener(utterance).score(obj) - pragmaticListener(utterance, alpha): Infer over meaningPrior conditional on speaker(obj, alpha)

Return an object literal with pragmaticListener('blue', alpha) for four alphas, keyed as: - alpha_001 (alpha=0.01) - alpha_1 (alpha=1) - alpha_4 (alpha=4) - alpha_10 (alpha=10)

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var meaningPrior = function() {
2 uniformDraw([
3 {shape: "square", color: "blue"},
4 {shape: "circle", color: "blue"},
5 {shape: "square", color: "green"}
6 ])
7};
8
9var utterances = ["blue","green","square","circle"];
10
11var meaning = function(utterance, obj){
12 (utterance === "blue" || utterance === "green") ? utterance === obj.color :
13 (utterance === "circle" || utterance === "square") ? utterance === obj.shape :
14 true
15};
16
17var literalListener = function(utterance){
18 return Infer({model: function(){
19 var obj = meaningPrior();
20 condition(meaning(utterance, obj));
21 return obj;
22 }});
23};
24
25var speaker = function(obj,alpha){
26 return Infer({model: function(){
27 var utterance = uniformDraw(utterances);
28 factor(alpha * literalListener(utterance).score(obj));
29 return utterance;
30 }});
31};
32
33var pragmaticListener = function(utterance,alpha){
34 return Infer({model: function(){
35 var obj = meaningPrior();
36 observe(speaker(obj,alpha),utterance);
37 return obj;
38 }});
39};
40var ANSWER = (({
41 alpha_001: pragmaticListener("blue", 0.01),
42 alpha_1: pragmaticListener("blue", 1),
43 alpha_4: pragmaticListener("blue", 4),
44 alpha_10: pragmaticListener("blue", 10)
45}));
46
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var objects = [
2 {shape: "square", color: "blue"},
3 {shape: "circle", color: "blue"},
4 {shape: "square", color: "green"}
5];
6
7var utterances = ['blue', 'green', 'square', 'circle'];
8
9var meaningPrior = function() {
10 return uniformDraw(objects);
11};
12
13var meaning = function(utterance, obj) {
14 if (utterance === 'blue' || utterance === 'green') {
15 return obj.color === utterance;
16 } else if (utterance === 'square' || utterance === 'circle') {
17 return obj.shape === utterance;
18 } else {
19 return true;
20 }
21};
22
23var literalListener = mem(function(utterance) {
24 return Infer({method: 'enumerate'}, function() {
25 var obj = meaningPrior();
26 condition(meaning(utterance, obj));
27 return obj;
28 });
29});
30
31var speaker = function(obj, alpha) {
32 return Infer({method: 'enumerate'}, function() {
33 var utterance = uniformDraw(utterances);
34 factor(alpha * literalListener(utterance).score(obj));
35 return utterance;
36 });
37};
38
39var pragmaticListener = function(utterance, alpha) {
40 return Infer({method: 'enumerate'}, function() {
41 var obj = meaningPrior();
42 observe(speaker(obj, alpha), utterance);
43 return obj;
44 });
45};
46
47var ANSWER = {
48 alpha_001: pragmaticListener('blue', 0.01),
49 alpha_1: pragmaticListener('blue', 1),
50 alpha_4: pragmaticListener('blue', 4),
51 alpha_10: pragmaticListener('blue', 10)
52};
02outputrecord(alpha_001, alpha_1, alpha_4, alpha_10)
GT
alpha_001=dist(2)
alpha_1=dist(2)
alpha_4=dist(2)
alpha_10=dist(2)
s46 +p
alpha_001=dist(2)
alpha_1=dist(2)
alpha_4=dist(2)
alpha_10=dist(2)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.05 1.1e-16 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-agents-as-programs / ex4.b
shape record(L1, L2) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Frank & Goodman pragmatic listener / pragmatic speaker / RSA model. The world has three objects represented as records {shape, color}: {shape: "square", color: "blue"}, {shape: "circle", color: "blue"}, {shape: "square", color: "green"}, drawn uniformly. Possible utterances: 'blue', 'green', 'square', 'circle'. Truth function: a color/shape utterance must match the corresponding attribute, otherwise the utterance is true.

Build the level-1 stack with alpha = 1: - literalListener(utterance): Infer over meaningPrior conditioning on meaning(utterance, obj) being true. - speaker(obj): Infer over utterances drawn uniformly with factor(alpha * literalListener(utterance).score(obj)). - pragmaticListener(utterance) = L1: Infer over meaningPrior conditioning on observe(speaker(obj), utterance).

Build the level-2 stack with alpha = 1: - speaker2(obj): Infer over utterances drawn uniformly with factor(alpha * pragmaticListener(utterance).score(obj)). - listener3(utterance) = L2: Infer over meaningPrior conditioning on observe(speaker2(obj), utterance).

End your program with an object literal {L1, L2} where L1 = pragmaticListener('blue') and L2 = listener3('blue').

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var meaningPrior = function() {
2 uniformDraw([
3 {shape: "square", color: "blue"},
4 {shape: "circle", color: "blue"},
5 {shape: "square", color: "green"}
6 ])
7};
8
9var utterances = ["blue","green","square","circle"];
10
11var meaning = function(utterance, obj){
12 (utterance === "blue" || utterance === "green") ? utterance === obj.color :
13 (utterance === "circle" || utterance === "square") ? utterance === obj.shape :
14 true
15};
16
17var alpha = 1;
18
19var literalListener = function(utterance){
20 return Infer({model: function(){
21 var obj = meaningPrior();
22 condition(meaning(utterance, obj));
23 return obj;
24 }});
25};
26
27var speaker = function(obj){
28 return Infer({model: function(){
29 var utterance = uniformDraw(utterances);
30 factor(alpha * literalListener(utterance).score(obj));
31 return utterance;
32 }});
33};
34
35var pragmaticListener = function(utterance){
36 return Infer({model: function(){
37 var obj = meaningPrior();
38 observe(speaker(obj),utterance);
39 return obj;
40 }});
41};
42
43var speaker2 = function(obj){
44 return Infer({model: function(){
45 var utterance = uniformDraw(utterances);
46 factor(alpha * pragmaticListener(utterance).score(obj));
47 return utterance;
48 }});
49};
50
51var listener3 = function(utterance){
52 return Infer({model: function(){
53 var obj = meaningPrior();
54 observe(speaker2(obj),utterance);
55 return obj;
56 }});
57};
58var ANSWER = (({
59 L1: pragmaticListener("blue"),
60 L2: listener3("blue")
61}));
62
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var objects = [
2 {shape: "square", color: "blue"},
3 {shape: "circle", color: "blue"},
4 {shape: "square", color: "green"}
5];
6
7var utterances = ['blue', 'green', 'square', 'circle'];
8
9var meaning = function(utterance, obj) {
10 if (utterance === 'blue' || utterance === 'green') {
11 return obj.color === utterance;
12 } else {
13 return obj.shape === utterance;
14 }
15};
16
17var meaningPrior = function() {
18 return uniformDraw(objects);
19};
20
21var alpha = 1;
22
23var literalListener = mem(function(utterance) {
24 return Infer({method: 'enumerate'}, function() {
25 var obj = meaningPrior();
26 condition(meaning(utterance, obj));
27 return obj;
28 });
29});
30
31var speaker = mem(function(obj) {
32 return Infer({method: 'enumerate'}, function() {
33 var utterance = uniformDraw(utterances);
34 factor(alpha * literalListener(utterance).score(obj));
35 return utterance;
36 });
37});
38
39var pragmaticListener = mem(function(utterance) {
40 return Infer({method: 'enumerate'}, function() {
41 var obj = meaningPrior();
42 observe(speaker(obj), utterance);
43 return obj;
44 });
45});
46
47var speaker2 = mem(function(obj) {
48 return Infer({method: 'enumerate'}, function() {
49 var utterance = uniformDraw(utterances);
50 factor(alpha * pragmaticListener(utterance).score(obj));
51 return utterance;
52 });
53});
54
55var listener3 = mem(function(utterance) {
56 return Infer({method: 'enumerate'}, function() {
57 var obj = meaningPrior();
58 observe(speaker2(obj), utterance);
59 return obj;
60 });
61});
62
63var L1 = pragmaticListener('blue');
64var L2 = listener3('blue');
65
66var ANSWER = {L1: L1, L2: L2};
02outputrecord(L1, L2)
GT
L1=dist(2)
L2=dist(2)
s46 +p
L1=dist(2)
L2=dist(2)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-inference-algorithms / ex1.1
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Heart-shaped implicit curve: a point (x, y) is *on the curve* if x^2 + (y - x^(2/3))^2 - 1 is within 0.01 of 0. The reference model draws x and y from independent Gaussians around the bounding box center, and conditions on onCurve(x, y).

Helpers (include them or equivalent in your program):

webppl
1var onCurve = function(x, y) {
2 var x2 = x*x;
3 var term1 = y - Math.pow(x2, 1/3);
4 var crossSection = x2 + term1*term1 - 1;
5 return Math.abs(crossSection) < 0.01;
6};
7var xbounds = [-1, 1];
8var ybounds = [-1, 1.6];
9var xmu = 0.5 * (xbounds[0] + xbounds[1]);
10var ymu = 0.5 * (ybounds[0] + ybounds[1]);
11var xsigma = 0.5 * (xbounds[1] - xbounds[0]);
12var ysigma = 0.5 * (ybounds[1] - ybounds[0]);

Use Metropolis-Hastings MCMC instead of rejection sampling on the independent-Gaussians model var x = gaussian(xmu, xsigma); var y = gaussian(ymu, ysigma); condition(onCurve(x, y)). End your program with Infer({method: 'MCMC', samples: 10000, lag: 10}, model) returning the posterior over {x, y}.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var onCurve = function(x, y) {
2 var x2 = x*x;
3 var term1 = y - Math.pow(x2, 1/3);
4 var crossSection = x2 + term1*term1 - 1;
5 return Math.abs(crossSection) < 0.01;
6};
7var xbounds = [-1, 1];
8var ybounds = [-1, 1.6];
9
10var xmu = 0.5 * (xbounds[0] + xbounds[1]);
11var ymu = 0.5 * (ybounds[0] + ybounds[1]);
12var xsigma = 0.5 * (xbounds[1] - xbounds[0]);
13var ysigma = 0.5 * (ybounds[1] - ybounds[0]);
14
15var model = function() {
16 var x = gaussian(xmu, xsigma);
17 var y = gaussian(ymu, ysigma);
18 condition(onCurve(x, y));
19 return {x: x, y: y};
20};
21var ANSWER = (Infer({method: 'MCMC',
22 samples: 10000,
23 lag: 10}, model));
24
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var onCurve = function(x, y) {
2 var x2 = x*x;
3 var term1 = y - Math.pow(x2, 1/3);
4 var crossSection = x2 + term1*term1 - 1;
5 return Math.abs(crossSection) < 0.01;
6};
7
8var xbounds = [-1, 1];
9var ybounds = [-1, 1.6];
10var xmu = 0.5 * (xbounds[0] + xbounds[1]);
11var ymu = 0.5 * (ybounds[0] + ybounds[1]);
12var xsigma = 0.5 * (xbounds[1] - xbounds[0]);
13var ysigma = 0.5 * (ybounds[1] - ybounds[0]);
14
15var model = function() {
16 var x = gaussian(xmu, xsigma);
17 var y = gaussian(ymu, ysigma);
18 condition(onCurve(x, y));
19 return {x: x, y: y};
20};
21
22var ANSWER = Infer({method: 'MCMC', samples: 10000, lag: 10}, model);
02output overlaydistribution
GT s46 +p48 bins
00.0050.0050.0100.010{"x":-0.5810586310091981,"y":-0.1224675087705216} A = 0.009 B = 0.009{"x":-0.5810586310091981,"y":-0.1224675087705216} A = 0.009 B = 0.009{"x":-0.5810586310091981,"y":-0.1224675087705216}{"x":0.677634785848371,"y":0.03832479244767284} A = 0.008 B = 0.008{"x":0.677634785848371,"y":0.03832479244767284} A = 0.008 B = 0.008{"x":0.6450011069846323,"y":-0.012080784555934976} A = 0.008 B = 0.008{"x":0.6450011069846323,"y":-0.012080784555934976} A = 0.008 B = 0.008{"x":0.6985404268355182,"y":0.07569600557789552} A = 0.007 B = 0.007{"x":0.6985404268355182,"y":0.07569600557789552} A = 0.007 B = 0.007{"x":0.5745934653314195,"y":-0.12600823472185868} A = 0.007 B = 0.007{"x":0.5745934653314195,"y":-0.12600823472185868} A = 0.007 B = 0.007{"x":0.5745934653314195,"y":-0.12600823472185868}{"x":-0.7418105022980765,"y":0.1471680825785406} A = 0.007 B = 0.007{"x":-0.7418105022980765,"y":0.1471680825785406} A = 0.007 B = 0.007{"x":-0.7187565836760806,"y":0.10078984333192162} A = 0.007 B = 0.007{"x":-0.7187565836760806,"y":0.10078984333192162} A = 0.007 B = 0.007{"x":-0.7373007189257397,"y":0.1360475882346665} A = 0.006 B = 0.006{"x":-0.7373007189257397,"y":0.1360475882346665} A = 0.006 B = 0.006{"x":0.654702850748931,"y":-0.0022909567507710116} A = 0.006 B = 0.006{"x":0.654702850748931,"y":-0.0022909567507710116} A = 0.006 B = 0.006{"x":0.654702850748931,"y":-0.0022909567507710116}{"x":-0.43262464197025463,"y":-0.3266570132550005} A = 0.006 B = 0.006{"x":-0.43262464197025463,"y":-0.3266570132550005} A = 0.006 B = 0.006{"x":-0.8155000442272854,"y":0.290561689416666} A = 0.006 B = 0.006{"x":-0.8155000442272854,"y":0.290561689416666} A = 0.006 B = 0.006{"x":0.7354877878056911,"y":0.13706707317698885} A = 0.006 B = 0.006{"x":0.7354877878056911,"y":0.13706707317698885} A = 0.006 B = 0.006{"x":0.5965575671938308,"y":-0.09777411365364996} A = 0.005 B = 0.005{"x":0.5965575671938308,"y":-0.09777411365364996} A = 0.005 B = 0.005{"x":0.5965575671938308,"y":-0.09777411365364996}{"x":-0.730969235869185,"y":0.13564195119077796} A = 0.005 B = 0.005{"x":-0.730969235869185,"y":0.13564195119077796} A = 0.005 B = 0.005{"x":0.5083884529500386,"y":-0.22034429158166702} A = 0.005 B = 0.005{"x":0.5083884529500386,"y":-0.22034429158166702} A = 0.005 B = 0.005{"x":-0.5166530759481761,"y":-0.20709396930832458} A = 0.005 B = 0.005{"x":-0.5166530759481761,"y":-0.20709396930832458} A = 0.005 B = 0.005{"x":-0.5312492806743694,"y":-0.1917547107440643} A = 0.005 B = 0.005{"x":-0.5312492806743694,"y":-0.1917547107440643} A = 0.005 B = 0.005{"x":-0.5312492806743694,"y":-0.1917547107440643}{"x":-0.7671939577859452,"y":0.1936240155570231} A = 0.005 B = 0.005{"x":-0.7671939577859452,"y":0.1936240155570231} A = 0.005 B = 0.005{"x":0.4076536846111626,"y":-0.36086223738776535} A = 0.005 B = 0.005{"x":0.4076536846111626,"y":-0.36086223738776535} A = 0.005 B = 0.005{"x":0.7039949912535975,"y":0.0754486500080862} A = 0.005 B = 0.005{"x":0.7039949912535975,"y":0.0754486500080862} A = 0.005 B = 0.005{"x":-0.6427411937825929,"y":-0.01901973221762715} A = 0.005 B = 0.005{"x":-0.6427411937825929,"y":-0.01901973221762715} A = 0.005 B = 0.005{"x":-0.6427411937825929,"y":-0.01901973221762715}{"x":-0.4098733357723475,"y":-0.36086223738776535} A = 0.005 B = 0.005{"x":-0.4098733357723475,"y":-0.36086223738776535} A = 0.005 B = 0.005{"x":0.7281426802214979,"y":0.11876037031559575} A = 0.005 B = 0.005{"x":0.7281426802214979,"y":0.11876037031559575} A = 0.005 B = 0.005{"x":-0.7582352788655037,"y":0.18279960973424209} A = 0.005 B = 0.005{"x":-0.7582352788655037,"y":0.18279960973424209} A = 0.005 B = 0.005{"x":0.6985404268355182,"y":0.06863667728746176} A = 0.005 B = 0.005{"x":0.6985404268355182,"y":0.06863667728746176} A = 0.005 B = 0.005{"x":0.6985404268355182,"y":0.06863667728746176}{"x":-0.780261841036533,"y":0.2264388572413129} A = 0.004 B = 0.004{"x":-0.780261841036533,"y":0.2264388572413129} A = 0.004 B = 0.004{"x":-0.7282257964326686,"y":0.11876037031559575} A = 0.004 B = 0.004{"x":-0.7282257964326686,"y":0.11876037031559575} A = 0.004 B = 0.004{"x":0.5402172536411802,"y":-0.17233437827624792} A = 0.004 B = 0.004{"x":0.5402172536411802,"y":-0.17233437827624792} A = 0.004 B = 0.004{"x":0.5588920921314633,"y":-0.15255422878372388} A = 0.004 B = 0.004{"x":0.5588920921314633,"y":-0.15255422878372388} A = 0.004 B = 0.004{"x":0.5588920921314633,"y":-0.15255422878372388}{"x":0.5601271296999406,"y":-0.15255422878372388} A = 0.004 B = 0.004{"x":0.5601271296999406,"y":-0.15255422878372388} A = 0.004 B = 0.004{"x":-0.7958284153027836,"y":0.24866390884606396} A = 0.004 B = 0.004{"x":-0.7958284153027836,"y":0.24866390884606396} A = 0.004 B = 0.004{"x":-0.4824569270588421,"y":-0.2605704516523437} A = 0.004 B = 0.004{"x":-0.4824569270588421,"y":-0.2605704516523437} A = 0.004 B = 0.004{"x":-0.4741577349127636,"y":-0.27225410190484833} A = 0.004 B = 0.004{"x":-0.4741577349127636,"y":-0.27225410190484833} A = 0.004 B = 0.004{"x":-0.4741577349127636,"y":-0.27225410190484833}{"x":0.4671166570380212,"y":-0.27936019295077197} A = 0.004 B = 0.004{"x":0.4671166570380212,"y":-0.27936019295077197} A = 0.004 B = 0.004{"x":0.6379719149855366,"y":-0.028164682783727635} A = 0.004 B = 0.004{"x":0.6379719149855366,"y":-0.028164682783727635} A = 0.004 B = 0.004{"x":-0.6958830427636622,"y":0.07377134600438615} A = 0.004 B = 0.004{"x":-0.6958830427636622,"y":0.07377134600438615} A = 0.004 B = 0.004{"x":-0.7418105022980765,"y":0.153587798908057} A = 0.004 B = 0.004{"x":-0.7418105022980765,"y":0.153587798908057} A = 0.004 B = 0.004{"x":-0.7418105022980765,"y":0.153587798908057}{"x":-0.7348147101715224,"y":0.13775211023985037} A = 0.004 B = 0.004{"x":-0.7348147101715224,"y":0.13775211023985037} A = 0.004 B = 0.004{"x":0.7316509897578922,"y":0.1360475882346665} A = 0.004 B = 0.004{"x":0.7316509897578922,"y":0.1360475882346665} A = 0.004 B = 0.004{"x":-0.47567415244258227,"y":-0.2758632984461403} A = 0.004 B = 0.004{"x":-0.47567415244258227,"y":-0.2758632984461403} A = 0.004 B = 0.004{"x":0.7907805770541788,"y":0.24128029930595046} A = 0.004 B = 0.004{"x":0.7907805770541788,"y":0.24128029930595046} A = 0.004 B = 0.004{"x":0.7907805770541788,"y":0.24128029930595046}{"x":0.7039949912535975,"y":0.07502144414598735} A = 0.004 B = 0.004{"x":0.7039949912535975,"y":0.07502144414598735} A = 0.004 B = 0.004{"x":-0.6649350646432385,"y":0.019225600363829642} A = 0.004 B = 0.004{"x":-0.6649350646432385,"y":0.019225600363829642} A = 0.004 B = 0.004{"x":0.7314486079146749,"y":0.13458589462115025} A = 0.004 B = 0.004{"x":0.7314486079146749,"y":0.13458589462115025} A = 0.004 B = 0.004{"x":0.670483810913046,"y":0.019225600363829642} A = 0.003 B = 0.003{"x":0.670483810913046,"y":0.019225600363829642} A = 0.003 B = 0.003{"x":0.670483810913046,"y":0.019225600363829642}{"x":0.774233187768848,"y":0.20382931807814952} A = 0.003 B = 0.003{"x":0.774233187768848,"y":0.20382931807814952} A = 0.003 B = 0.003{"x":-0.6427411937825929,"y":-0.01754701757291166} A = 0.003 B = 0.003{"x":-0.6427411937825929,"y":-0.01754701757291166} A = 0.003 B = 0.003{"x":0.6422643277103656,"y":-0.025486582766217236} A = 0.003 B = 0.003{"x":0.6422643277103656,"y":-0.025486582766217236} A = 0.003 B = 0.003
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-inference-algorithms / ex1.2
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Heart-shaped implicit curve: a point (x, y) is *on the curve* if x^2 + (y - x^(2/3))^2 - 1 is within 0.01 of 0. The reference model draws x and y from independent Gaussians around the bounding box center, and conditions on onCurve(x, y).

Helpers (include them or equivalent in your program):

webppl
1var onCurve = function(x, y) {
2 var x2 = x*x;
3 var term1 = y - Math.pow(x2, 1/3);
4 var crossSection = x2 + term1*term1 - 1;
5 return Math.abs(crossSection) < 0.01;
6};
7var xbounds = [-1, 1];
8var ybounds = [-1, 1.6];
9var xmu = 0.5 * (xbounds[0] + xbounds[1]);
10var ymu = 0.5 * (ybounds[0] + ybounds[1]);
11var xsigma = 0.5 * (xbounds[1] - xbounds[0]);
12var ysigma = 0.5 * (ybounds[1] - ybounds[0]);

Change the model to draw x and y *jointly* via a diagCovGaussian centered at (xmu, ymu) with diagonal covariance (xsigma, ysigma), so MH MCMC successfully traces the curve. Use T.get to extract the x and y components of the sample. End your program with Infer({method: 'MCMC', samples: 1000, lag: 100}, model) returning the posterior over {x, y}.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var onCurve = function(x, y) {
2 var x2 = x*x;
3 var term1 = y - Math.pow(x2, 1/3);
4 var crossSection = x2 + term1*term1 - 1;
5 return Math.abs(crossSection) < 0.01;
6};
7var xbounds = [-1, 1];
8var ybounds = [-1, 1.6];
9
10var xmu = 0.5 * (xbounds[0] + xbounds[1]);
11var ymu = 0.5 * (ybounds[0] + ybounds[1]);
12var xsigma = 0.5 * (xbounds[1] - xbounds[0]);
13var ysigma = 0.5 * (ybounds[1] - ybounds[0]);
14
15var model = function() {
16 var xy = diagCovGaussian({mu: Vector([xmu, ymu]),
17 sigma: Vector([xsigma, ysigma])});
18 var x = T.get(xy, 0);
19 var y = T.get(xy, 1);
20 condition(onCurve(x, y));
21 return {x: x, y: y};
22};
23var ANSWER = (Infer({method: 'MCMC',
24 samples: 1000,
25 lag: 100}, model));
26
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var onCurve = function(x, y) {
2 var x2 = x*x;
3 var term1 = y - Math.pow(x2, 1/3);
4 var crossSection = x2 + term1*term1 - 1;
5 return Math.abs(crossSection) < 0.01;
6};
7
8var xbounds = [-1, 1];
9var ybounds = [-1, 1.6];
10var xmu = 0.5 * (xbounds[0] + xbounds[1]);
11var ymu = 0.5 * (ybounds[0] + ybounds[1]);
12var xsigma = 0.5 * (xbounds[1] - xbounds[0]);
13var ysigma = 0.5 * (ybounds[1] - ybounds[0]);
14
15var model = function() {
16 var mu = Vector([xmu, ymu]);
17 var sigma = Vector([xsigma, ysigma]);
18 var xy = sample(DiagCovGaussian({mu: mu, sigma: sigma}));
19 var x = T.get(xy, 0);
20 var y = T.get(xy, 1);
21 condition(onCurve(x, y));
22 return {x: x, y: y};
23};
24
25var ANSWER = Infer({method: 'MCMC', samples: 1000, lag: 100}, model);
02output overlaydistribution
GT s46 +p48 bins
00.0060.0060.0110.011{"x":-0.3459221389446751,"y":1.4313995790870238} A = 0.011 B = 0.011{"x":-0.3459221389446751,"y":1.4313995790870238} A = 0.011 B = 0.011{"x":-0.3459221389446751,"y":1.4313995790870238}{"x":-0.9824182899254787,"y":0.800142969908913} A = 0.009 B = 0.009{"x":-0.9824182899254787,"y":0.800142969908913} A = 0.009 B = 0.009{"x":-1.0005872894491943,"y":0.9403626580870658} A = 0.009 B = 0.009{"x":-1.0005872894491943,"y":0.9403626580870658} A = 0.009 B = 0.009{"x":-0.8471059233387676,"y":1.4337030880550288} A = 0.009 B = 0.009{"x":-0.8471059233387676,"y":1.4337030880550288} A = 0.009 B = 0.009{"x":-0.12323521471768298,"y":-0.7477910079320407} A = 0.008 B = 0.008{"x":-0.12323521471768298,"y":-0.7477910079320407} A = 0.008 B = 0.008{"x":-0.12323521471768298,"y":-0.7477910079320407}{"x":-0.7812140378472965,"y":0.2305335993740225} A = 0.008 B = 0.008{"x":-0.7812140378472965,"y":0.2305335993740225} A = 0.008 B = 0.008{"x":0.06194358124675301,"y":-0.8383057533729217} A = 0.008 B = 0.008{"x":0.06194358124675301,"y":-0.8383057533729217} A = 0.008 B = 0.008{"x":-0.8390600676647956,"y":0.3452587239131968} A = 0.008 B = 0.008{"x":-0.8390600676647956,"y":0.3452587239131968} A = 0.008 B = 0.008{"x":-0.102321222065728,"y":1.2093495202265978} A = 0.007 B = 0.007{"x":-0.102321222065728,"y":1.2093495202265978} A = 0.007 B = 0.007{"x":-0.102321222065728,"y":1.2093495202265978}{"x":-0.9997017087622113,"y":1.0752323038934026} A = 0.007 B = 0.007{"x":-0.9997017087622113,"y":1.0752323038934026} A = 0.007 B = 0.007{"x":-0.9949849967270745,"y":1.0420971290607306} A = 0.007 B = 0.007{"x":-0.9949849967270745,"y":1.0420971290607306} A = 0.007 B = 0.007{"x":0.963374899295324,"y":0.693668498091961} A = 0.007 B = 0.007{"x":0.963374899295324,"y":0.693668498091961} A = 0.007 B = 0.007{"x":-0.46161166942591697,"y":-0.28668984368651307} A = 0.007 B = 0.007{"x":-0.46161166942591697,"y":-0.28668984368651307} A = 0.007 B = 0.007{"x":-0.46161166942591697,"y":-0.28668984368651307}{"x":-0.16850162246005151,"y":1.2895819104981525} A = 0.006 B = 0.006{"x":-0.16850162246005151,"y":1.2895819104981525} A = 0.006 B = 0.006{"x":-0.9865419422266085,"y":0.8003306204112358} A = 0.006 B = 0.006{"x":-0.9865419422266085,"y":0.8003306204112358} A = 0.006 B = 0.006{"x":0.37255608656963063,"y":-0.40852077939188003} A = 0.006 B = 0.006{"x":0.37255608656963063,"y":-0.40852077939188003} A = 0.006 B = 0.006{"x":-0.369656648378221,"y":1.446549241556659} A = 0.006 B = 0.006{"x":-0.369656648378221,"y":1.446549241556659} A = 0.006 B = 0.006{"x":-0.369656648378221,"y":1.446549241556659}{"x":-0.3048267424711005,"y":1.401364080025946} A = 0.006 B = 0.006{"x":-0.3048267424711005,"y":1.401364080025946} A = 0.006 B = 0.006{"x":-0.7736787084485782,"y":1.4689781557810944} A = 0.006 B = 0.006{"x":-0.7736787084485782,"y":1.4689781557810944} A = 0.006 B = 0.006{"x":-0.02729435008949764,"y":1.0864946755162914} A = 0.006 B = 0.006{"x":-0.02729435008949764,"y":1.0864946755162914} A = 0.006 B = 0.006{"x":-0.019408473314031886,"y":1.0700048263669} A = 0.006 B = 0.006{"x":-0.019408473314031886,"y":1.0700048263669} A = 0.006 B = 0.006{"x":-0.019408473314031886,"y":1.0700048263669}{"x":-0.2593545001678585,"y":-0.559790654297957} A = 0.006 B = 0.006{"x":-0.2593545001678585,"y":-0.559790654297957} A = 0.006 B = 0.006{"x":-0.19607626997662292,"y":-0.6419906121887936} A = 0.006 B = 0.006{"x":-0.19607626997662292,"y":-0.6419906121887936} A = 0.006 B = 0.006{"x":1.0021806180677155,"y":0.9337959387632427} A = 0.006 B = 0.006{"x":1.0021806180677155,"y":0.9337959387632427} A = 0.006 B = 0.006{"x":-0.27900730860931994,"y":1.38619773786755} A = 0.006 B = 0.006{"x":-0.27900730860931994,"y":1.38619773786755} A = 0.006 B = 0.006{"x":-0.27900730860931994,"y":1.38619773786755}{"x":0.9578874140414366,"y":0.6820106797165668} A = 0.006 B = 0.006{"x":0.9578874140414366,"y":0.6820106797165668} A = 0.006 B = 0.006{"x":1.0020372314409798,"y":0.9483500806388093} A = 0.006 B = 0.006{"x":1.0020372314409798,"y":0.9483500806388093} A = 0.006 B = 0.006{"x":0.8934787853884093,"y":0.4824833085661637} A = 0.006 B = 0.006{"x":0.8934787853884093,"y":0.4824833085661637} A = 0.006 B = 0.006{"x":-0.5473606518349908,"y":-0.1662096718388661} A = 0.006 B = 0.006{"x":-0.5473606518349908,"y":-0.1662096718388661} A = 0.006 B = 0.006{"x":-0.5473606518349908,"y":-0.1662096718388661}{"x":-0.1876525624049826,"y":-0.6543343432816553} A = 0.006 B = 0.006{"x":-0.1876525624049826,"y":-0.6543343432816553} A = 0.006 B = 0.006{"x":-0.21207365156989452,"y":1.331276759958553} A = 0.005 B = 0.005{"x":-0.21207365156989452,"y":1.331276759958553} A = 0.005 B = 0.005{"x":0.534585793693865,"y":1.5062822024084261} A = 0.005 B = 0.005{"x":0.534585793693865,"y":1.5062822024084261} A = 0.005 B = 0.005{"x":0.7489657073110882,"y":1.4891729034841985} A = 0.005 B = 0.005{"x":0.7489657073110882,"y":1.4891729034841985} A = 0.005 B = 0.005{"x":0.7489657073110882,"y":1.4891729034841985}{"x":0.9856246897537608,"y":0.8369378458356392} A = 0.005 B = 0.005{"x":0.9856246897537608,"y":0.8369378458356392} A = 0.005 B = 0.005{"x":-0.7450348265364759,"y":0.16148410588524542} A = 0.005 B = 0.005{"x":-0.7450348265364759,"y":0.16148410588524542} A = 0.005 B = 0.005{"x":0.16769039447366785,"y":-0.6773198602556932} A = 0.005 B = 0.005{"x":0.16769039447366785,"y":-0.6773198602556932} A = 0.005 B = 0.005{"x":0.7085965846954086,"y":0.08984162014246355} A = 0.005 B = 0.005{"x":0.7085965846954086,"y":0.08984162014246355} A = 0.005 B = 0.005{"x":0.7085965846954086,"y":0.08984162014246355}{"x":0.40975583940014537,"y":-0.3656313790227781} A = 0.005 B = 0.005{"x":0.40975583940014537,"y":-0.3656313790227781} A = 0.005 B = 0.005{"x":-0.874748066081909,"y":0.4320574052762929} A = 0.005 B = 0.005{"x":-0.874748066081909,"y":0.4320574052762929} A = 0.005 B = 0.005{"x":0.3609070572434082,"y":-0.42231912316084685} A = 0.005 B = 0.005{"x":0.3609070572434082,"y":-0.42231912316084685} A = 0.005 B = 0.005{"x":0.9022028632760194,"y":0.5123072807815279} A = 0.005 B = 0.005{"x":0.9022028632760194,"y":0.5123072807815279} A = 0.005 B = 0.005{"x":0.9022028632760194,"y":0.5123072807815279}{"x":0.35105809234750185,"y":-0.43893578527746} A = 0.005 B = 0.005{"x":0.35105809234750185,"y":-0.43893578527746} A = 0.005 B = 0.005{"x":-0.5212654946470561,"y":1.5000151311052887} A = 0.005 B = 0.005{"x":-0.5212654946470561,"y":1.5000151311052887} A = 0.005 B = 0.005{"x":0.41357233481768724,"y":-0.35703598342952036} A = 0.005 B = 0.005{"x":0.41357233481768724,"y":-0.35703598342952036} A = 0.005 B = 0.005{"x":-0.3071384897226943,"y":1.4120250379104367} A = 0.005 B = 0.005{"x":-0.3071384897226943,"y":1.4120250379104367} A = 0.005 B = 0.005{"x":-0.3071384897226943,"y":1.4120250379104367}{"x":-0.4727473088111983,"y":-0.26911104434039} A = 0.005 B = 0.005{"x":-0.4727473088111983,"y":-0.26911104434039} A = 0.005 B = 0.005{"x":-0.8025093557406847,"y":1.462091553829982} A = 0.005 B = 0.005{"x":-0.8025093557406847,"y":1.462091553829982} A = 0.005 B = 0.005{"x":0.761532365118837,"y":0.17906270575765904} A = 0.005 B = 0.005{"x":0.761532365118837,"y":0.17906270575765904} A = 0.005 B = 0.005
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer TV<1 1.000 16.7784 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-inference-algorithms / ex1.3
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Heart-shaped implicit curve: a point (x, y) is *on the curve* if x^2 + (y - x^(2/3))^2 - 1 is within 0.01 of 0. The reference model draws x and y from independent Gaussians around the bounding box center, and conditions on onCurve(x, y).

Helpers (include them or equivalent in your program):

webppl
1var onCurve = function(x, y) {
2 var x2 = x*x;
3 var term1 = y - Math.pow(x2, 1/3);
4 var crossSection = x2 + term1*term1 - 1;
5 return Math.abs(crossSection) < 0.01;
6};
7var xbounds = [-1, 1];
8var ybounds = [-1, 1.6];
9var xmu = 0.5 * (xbounds[0] + xbounds[1]);
10var ymu = 0.5 * (ybounds[0] + ybounds[1]);
11var xsigma = 0.5 * (xbounds[1] - xbounds[0]);
12var ysigma = 0.5 * (ybounds[1] - ybounds[0]);

Using the original independent-Gaussians model, use HMC instead of MH. End your program with Infer({method: 'MCMC', samples: 10000, kernel: {HMC: {steps: 10, stepSize: .5}}}, model) returning the posterior over {x, y}.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var onCurve = function(x, y) {
2 var x2 = x*x;
3 var term1 = y - Math.pow(x2, 1/3);
4 var crossSection = x2 + term1*term1 - 1;
5 return Math.abs(crossSection) < 0.01;
6};
7var xbounds = [-1, 1];
8var ybounds = [-1, 1.6];
9
10var xmu = 0.5 * (xbounds[0] + xbounds[1]);
11var ymu = 0.5 * (ybounds[0] + ybounds[1]);
12var xsigma = 0.5 * (xbounds[1] - xbounds[0]);
13var ysigma = 0.5 * (ybounds[1] - ybounds[0]);
14
15var model = function() {
16 var x = gaussian(xmu, xsigma);
17 var y = gaussian(ymu, ysigma);
18 condition(onCurve(x, y));
19 return {x: x, y: y};
20};
21var ANSWER = (Infer({method: 'MCMC',
22 samples: 10000,
23 kernel: {HMC : { steps: 10, stepSize: .5 }} }, model));
24
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var onCurve = function(x, y) {
2 var x2 = x*x;
3 var term1 = y - Math.pow(x2, 1/3);
4 var crossSection = x2 + term1*term1 - 1;
5 return Math.abs(crossSection) < 0.01;
6};
7var xbounds = [-1, 1];
8var ybounds = [-1, 1.6];
9var xmu = 0.5 * (xbounds[0] + xbounds[1]);
10var ymu = 0.5 * (ybounds[0] + ybounds[1]);
11var xsigma = 0.5 * (xbounds[1] - xbounds[0]);
12var ysigma = 0.5 * (ybounds[1] - ybounds[0]);
13
14var model = function() {
15 var x = gaussian(xmu, xsigma);
16 var y = gaussian(ymu, ysigma);
17 condition(onCurve(x, y));
18 return {x: x, y: y};
19};
20
21var ANSWER = Infer({method: 'MCMC', samples: 10000, kernel: {HMC: {steps: 10, stepSize: .5}}}, model);
02output overlaydistribution
GT s46 +p48 bins
00.0390.0390.0790.079{"x":-0.9341766753389376,"y":1.3184236011577293} A = 0.079 B = 0.079{"x":-0.9341766753389376,"y":1.3184236011577293} A = 0.079 B = 0.079{"x":-0.9341766753389376,"y":1.3184236011577293}{"x":-0.11641543440502738,"y":1.2343688975920037} A = 0.054 B = 0.054{"x":-0.11641543440502738,"y":1.2343688975920037} A = 0.054 B = 0.054{"x":-0.01461927707274957,"y":1.0582985474543665} A = 0.048 B = 0.048{"x":-0.01461927707274957,"y":1.0582985474543665} A = 0.048 B = 0.048{"x":-0.46789574224724206,"y":-0.28517754175634813} A = 0.042 B = 0.042{"x":-0.46789574224724206,"y":-0.28517754175634813} A = 0.042 B = 0.042{"x":0.61502140545566,"y":-0.061428125649572944} A = 0.040 B = 0.040{"x":0.61502140545566,"y":-0.061428125649572944} A = 0.040 B = 0.040{"x":0.61502140545566,"y":-0.061428125649572944}{"x":0.9052867005160372,"y":0.5110251608400044} A = 0.038 B = 0.038{"x":0.9052867005160372,"y":0.5110251608400044} A = 0.038 B = 0.038{"x":0.6844386712270067,"y":0.04081118345106344} A = 0.035 B = 0.035{"x":0.6844386712270067,"y":0.04081118345106344} A = 0.035 B = 0.035{"x":-0.9152179672132673,"y":0.5499994147090224} A = 0.035 B = 0.035{"x":-0.9152179672132673,"y":0.5499994147090224} A = 0.035 B = 0.035{"x":-0.23549781617292087,"y":-0.5868926125446496} A = 0.034 B = 0.034{"x":-0.23549781617292087,"y":-0.5868926125446496} A = 0.034 B = 0.034{"x":-0.23549781617292087,"y":-0.5868926125446496}{"x":0.995704610756105,"y":0.9977610480655436} A = 0.034 B = 0.034{"x":0.995704610756105,"y":0.9977610480655436} A = 0.034 B = 0.034{"x":0.3308823423736242,"y":-0.4629000956731093} A = 0.032 B = 0.032{"x":0.3308823423736242,"y":-0.4629000956731093} A = 0.032 B = 0.032{"x":-0.9452414883519986,"y":0.6454687154321894} A = 0.031 B = 0.031{"x":-0.9452414883519986,"y":0.6454687154321894} A = 0.031 B = 0.031{"x":0.9711028173313134,"y":0.7366261973335155} A = 0.030 B = 0.030{"x":0.9711028173313134,"y":0.7366261973335155} A = 0.030 B = 0.030{"x":0.9711028173313134,"y":0.7366261973335155}{"x":-0.8890479415562179,"y":0.4739252338583719} A = 0.028 B = 0.028{"x":-0.8890479415562179,"y":0.4739252338583719} A = 0.028 B = 0.028{"x":-0.7395257861496647,"y":0.1486250343698654} A = 0.028 B = 0.028{"x":-0.7395257861496647,"y":0.1486250343698654} A = 0.028 B = 0.028{"x":-0.9303159081126877,"y":0.5950334680713287} A = 0.027 B = 0.027{"x":-0.9303159081126877,"y":0.5950334680713287} A = 0.027 B = 0.027{"x":0.8087036067546571,"y":0.2733927498772759} A = 0.026 B = 0.026{"x":0.8087036067546571,"y":0.2733927498772759} A = 0.026 B = 0.026{"x":0.8087036067546571,"y":0.2733927498772759}{"x":-0.8502975326531995,"y":0.36248459878684103} A = 0.025 B = 0.025{"x":-0.8502975326531995,"y":0.36248459878684103} A = 0.025 B = 0.025{"x":-0.7193871863907841,"y":0.11254128487213477} A = 0.023 B = 0.023{"x":-0.7193871863907841,"y":0.11254128487213477} A = 0.023 B = 0.023{"x":-0.36382445784055695,"y":1.4454802391440977} A = 0.021 B = 0.021{"x":-0.36382445784055695,"y":1.4454802391440977} A = 0.021 B = 0.021{"x":-0.6556463064156958,"y":1.5043714010996867} A = 0.019 B = 0.019{"x":-0.6556463064156958,"y":1.5043714010996867} A = 0.019 B = 0.019{"x":-0.6556463064156958,"y":1.5043714010996867}{"x":0.2503474571337073,"y":-0.5719691506907615} A = 0.019 B = 0.019{"x":0.2503474571337073,"y":-0.5719691506907615} A = 0.019 B = 0.019{"x":-0.164137674933637,"y":-0.6889009504724839} A = 0.018 B = 0.018{"x":-0.164137674933637,"y":-0.6889009504724839} A = 0.018 B = 0.018{"x":-0.7491448100405761,"y":1.49044543606978} A = 0.016 B = 0.016{"x":-0.7491448100405761,"y":1.49044543606978} A = 0.016 B = 0.016{"x":-0.9665372516149988,"y":0.7369013669074493} A = 0.016 B = 0.016{"x":-0.9665372516149988,"y":0.7369013669074493} A = 0.016 B = 0.016{"x":-0.9665372516149988,"y":0.7369013669074493}{"x":-0.8865107000090767,"y":0.4541219387088812} A = 0.015 B = 0.015{"x":-0.8865107000090767,"y":0.4541219387088812} A = 0.015 B = 0.015{"x":0.22620565304228918,"y":-0.60023529094916} A = 0.015 B = 0.015{"x":0.22620565304228918,"y":-0.60023529094916} A = 0.015 B = 0.015{"x":-0.9826181624372019,"y":0.8026804925417466} A = 0.014 B = 0.014{"x":-0.9826181624372019,"y":0.8026804925417466} A = 0.014 B = 0.014{"x":0.5895863406719727,"y":-0.10241563187990538} A = 0.014 B = 0.014{"x":0.5895863406719727,"y":-0.10241563187990538} A = 0.014 B = 0.014{"x":0.5895863406719727,"y":-0.10241563187990538}{"x":-0.5036787891662713,"y":-0.23192607148368072} A = 0.013 B = 0.013{"x":-0.5036787891662713,"y":-0.23192607148368072} A = 0.013 B = 0.013{"x":0.1983769611102737,"y":-0.6398738208368485} A = 0.012 B = 0.012{"x":0.1983769611102737,"y":-0.6398738208368485} A = 0.012 B = 0.012{"x":0.02799879692196801,"y":1.088718777988433} A = 0.010 B = 0.010{"x":0.02799879692196801,"y":1.088718777988433} A = 0.010 B = 0.010{"x":-0.28523352908398336,"y":1.3925503355285889} A = 0.010 B = 0.010{"x":-0.28523352908398336,"y":1.3925503355285889} A = 0.010 B = 0.010{"x":-0.28523352908398336,"y":1.3925503355285889}{"x":-0.5386686298110793,"y":-0.18290368835938287} A = 0.009 B = 0.009{"x":-0.5386686298110793,"y":-0.18290368835938287} A = 0.009 B = 0.009{"x":-0.9226187401062613,"y":0.5697136740983553} A = 0.009 B = 0.009{"x":-0.9226187401062613,"y":0.5697136740983553} A = 0.009 B = 0.009{"x":0.373395508499323,"y":1.4512145889711618} A = 0.007 B = 0.007{"x":0.373395508499323,"y":1.4512145889711618} A = 0.007 B = 0.007{"x":-0.9092781204126013,"y":0.5136573581169696} A = 0.007 B = 0.007{"x":-0.9092781204126013,"y":0.5136573581169696} A = 0.007 B = 0.007{"x":-0.9092781204126013,"y":0.5136573581169696}{"x":0.7063979031922456,"y":0.08045189708715611} A = 0.006 B = 0.006{"x":0.7063979031922456,"y":0.08045189708715611} A = 0.006 B = 0.006{"x":0.9700426010907026,"y":0.7357226947036823} A = 0.006 B = 0.006{"x":0.9700426010907026,"y":0.7357226947036823} A = 0.006 B = 0.006{"x":-0.5214576245858968,"y":-0.20614672876186552} A = 0.006 B = 0.006{"x":-0.5214576245858968,"y":-0.20614672876186552} A = 0.006 B = 0.006{"x":-0.168419071742342,"y":1.2945454000976286} A = 0.005 B = 0.005{"x":-0.168419071742342,"y":1.2945454000976286} A = 0.005 B = 0.005{"x":-0.168419071742342,"y":1.2945454000976286}{"x":-0.8340747474767976,"y":1.4401478646314847} A = 0.005 B = 0.005{"x":-0.8340747474767976,"y":1.4401478646314847} A = 0.005 B = 0.005{"x":0.9978838972337464,"y":1.0279998674710635} A = 0.005 B = 0.005{"x":0.9978838972337464,"y":1.0279998674710635} A = 0.005 B = 0.005{"x":0.5612898880777135,"y":1.5050044431593748} A = 0.005 B = 0.005{"x":0.5612898880777135,"y":1.5050044431593748} A = 0.005 B = 0.005{"x":0.88672628844336,"y":1.375000627933844} A = 0.005 B = 0.005{"x":0.88672628844336,"y":1.375000627933844} A = 0.005 B = 0.005{"x":0.88672628844336,"y":1.375000627933844}{"x":0.6416926922257251,"y":-0.02894793852035636} A = 0.004 B = 0.004{"x":0.6416926922257251,"y":-0.02894793852035636} A = 0.004 B = 0.004{"x":0.49821221138294813,"y":1.4954305129930898} A = 0.004 B = 0.004{"x":0.49821221138294813,"y":1.4954305129930898} A = 0.004 B = 0.004{"x":-0.987571009569439,"y":0.8625860215204055} A = 0.003 B = 0.003{"x":-0.987571009569439,"y":0.8625860215204055} A = 0.003 B = 0.003
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-inference-algorithms / ex2.1
shape record(point2, interpolationWeight) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Two-endpoint interpolation: point1 = -10 is fixed; point2 is uniform on [-100, 100]; interpolationWeight is uniform on [0, 1]; pointInMiddle = point1 * interpolationWeight + point2 * (1 - interpolationWeight). We observe(Gaussian({mu: 0, sigma: 0.1}), pointInMiddle).

Helper:

webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return point1 * interpolationWeight + point2 * (1 - interpolationWeight);
3};

Run MCMC with samples: 5000, lag: 100. End your program with an object literal {point2, interpolationWeight} where each value is the marginal distribution of the corresponding latent (use marginalize).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return (point1 * interpolationWeight +
3 point2 * (1 - interpolationWeight));
4};
5
6var model = function(){
7 var point1 = -10;
8 var point2 = uniform(-100, 100);
9 var interpolationWeight = uniform(0, 1);
10 var pointInMiddle = interpolate(point1, point2, interpolationWeight);
11 observe(Gaussian({mu: 0, sigma:0.1}), pointInMiddle);
12 return {point2, interpolationWeight, pointInMiddle};
13};
14
15var posterior = Infer({method: 'MCMC', samples: 5000, lag: 100}, model);
16var ANSWER = (({
17 point2: marginalize(posterior, function(x) {return x.point2}),
18 interpolationWeight: marginalize(posterior, function(x) {return x.interpolationWeight})
19}));
20
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return point1 * interpolationWeight + point2 * (1 - interpolationWeight);
3};
4
5var model = function() {
6 var point1 = -10;
7 var point2 = uniform(-100, 100);
8 var interpolationWeight = uniform(0, 1);
9 var pointInMiddle = interpolate(point1, point2, interpolationWeight);
10 observe(Gaussian({mu: 0, sigma: 0.1}), pointInMiddle);
11 return {point2: point2, interpolationWeight: interpolationWeight};
12};
13
14var posterior = Infer({method: 'MCMC', samples: 5000, lag: 100}, model);
15
16var ANSWER = {
17 point2: marginalize(posterior, function(x) { return x.point2; }),
18 interpolationWeight: marginalize(posterior, function(x) { return x.interpolationWeight; })
19};
02outputrecord(point2, interpolationWeight)
GT
point2=dist(48)
interpolationWeight=dist(48)
s46 +p
point2=dist(48)
interpolationWeight=dist(48)
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-inference-algorithms / ex2.2
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Two-endpoint interpolation: point1 = -10 is fixed; point2 is uniform on [-100, 100]; interpolationWeight is uniform on [0, 1]; pointInMiddle = point1 * interpolationWeight + point2 * (1 - interpolationWeight). We observe(Gaussian({mu: 0, sigma: 0.1}), pointInMiddle).

Helper:

webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return point1 * interpolationWeight + point2 * (1 - interpolationWeight);
3};

Run MCMC with samples: 5000, lag: 100. End your program with the joint marginal distribution over (point2, interpolationWeight) as a Distribution (use marginalize returning an object {point2, inter} for each sample).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return (point1 * interpolationWeight +
3 point2 * (1 - interpolationWeight));
4};
5
6var model = function(){
7 var point1 = -10;
8 var point2 = uniform(-100, 100);
9 var interpolationWeight = uniform(0, 1);
10 var pointInMiddle = interpolate(point1, point2, interpolationWeight);
11 observe(Gaussian({mu: 0, sigma:0.1}), pointInMiddle);
12 return {point2, interpolationWeight, pointInMiddle};
13};
14
15var posterior = Infer({method: 'MCMC', samples: 5000, lag: 100}, model);
16var ANSWER = (marginalize(posterior, function(x) {
17 return {'point2': x.point2, 'inter': x.interpolationWeight};
18}));
19
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return point1 * interpolationWeight + point2 * (1 - interpolationWeight);
3};
4
5var model = function() {
6 var point1 = -10;
7 var point2 = uniform(-100, 100);
8 var interpolationWeight = uniform(0, 1);
9 var pointInMiddle = interpolate(point1, point2, interpolationWeight);
10 observe(Gaussian({mu: 0, sigma: 0.1}), pointInMiddle);
11 return {point2: point2, inter: interpolationWeight};
12};
13
14var dist = Infer({method: 'MCMC', samples: 5000, lag: 100}, model);
15
16var ANSWER = marginalize(dist, function(x) { return {point2: x.point2, inter: x.inter}; });
02output overlaydistribution
GT s46 +p48 bins
00.0050.0050.0100.010{"point2":99.70626800036933,"inter":0.9102091991817258} A = 0.002 B = 0.002{"point2":99.70626800036933,"inter":0.9102091991817258} A = 0.002 B = 0.002{"point2":99.70626800036933,"inter":0.9102091991817258}{"point2":81.85141876567201,"inter":0.8912661806479968} A = 0.002 B = 0.002{"point2":81.85141876567201,"inter":0.8912661806479968} A = 0.002 B = 0.002{"point2":99.8310266518356,"inter":0.9102091991817258} A = 0.002 B = 0.002{"point2":99.8310266518356,"inter":0.9102091991817258} A = 0.002 B = 0.002{"point2":45.8064167274317,"inter":0.8205766923479705} A = 0.002 B = 0.002{"point2":45.8064167274317,"inter":0.8205766923479705} A = 0.002 B = 0.002{"point2":47.388737152716885,"inter":0.8254439992089617} A = 0.002 B = 0.002{"point2":47.388737152716885,"inter":0.8254439992089617} A = 0.002 B = 0.002{"point2":47.388737152716885,"inter":0.8254439992089617}{"point2":64.20858538749977,"inter":0.8661382833992683} A = 0.002 B = 0.002{"point2":64.20858538749977,"inter":0.8661382833992683} A = 0.002 B = 0.002{"point2":72.23738707719014,"inter":0.8777332306108486} A = 0.002 B = 0.002{"point2":72.23738707719014,"inter":0.8777332306108486} A = 0.002 B = 0.002{"point2":99.39840537549048,"inter":0.9092381812754077} A = 0.002 B = 0.002{"point2":99.39840537549048,"inter":0.9092381812754077} A = 0.002 B = 0.002{"point2":47.94372803570422,"inter":0.8279584394501249} A = 0.002 B = 0.002{"point2":47.94372803570422,"inter":0.8279584394501249} A = 0.002 B = 0.002{"point2":47.94372803570422,"inter":0.8279584394501249}{"point2":45.02058863762417,"inter":0.8184380568733283} A = 0.002 B = 0.002{"point2":45.02058863762417,"inter":0.8184380568733283} A = 0.002 B = 0.002{"point2":48.508802015754334,"inter":0.8289946154631531} A = 0.002 B = 0.002{"point2":48.508802015754334,"inter":0.8289946154631531} A = 0.002 B = 0.002{"point2":62.63398910039734,"inter":0.861905739307025} A = 0.002 B = 0.002{"point2":62.63398910039734,"inter":0.861905739307025} A = 0.002 B = 0.002{"point2":61.06106532891815,"inter":0.8597763991863759} A = 0.002 B = 0.002{"point2":61.06106532891815,"inter":0.8597763991863759} A = 0.002 B = 0.002{"point2":61.06106532891815,"inter":0.8597763991863759}{"point2":74.30390936465125,"inter":0.8815250142887652} A = 0.002 B = 0.002{"point2":74.30390936465125,"inter":0.8815250142887652} A = 0.002 B = 0.002{"point2":98.76038294866424,"inter":0.9080925426893515} A = 0.002 B = 0.002{"point2":98.76038294866424,"inter":0.9080925426893515} A = 0.002 B = 0.002{"point2":47.06636121228245,"inter":0.825155151361348} A = 0.001 B = 0.001{"point2":47.06636121228245,"inter":0.825155151361348} A = 0.001 B = 0.001{"point2":47.92844811432565,"inter":0.8252291766045944} A = 0.001 B = 0.001{"point2":47.92844811432565,"inter":0.8252291766045944} A = 0.001 B = 0.001{"point2":47.92844811432565,"inter":0.8252291766045944}{"point2":45.267203353786016,"inter":0.8184380568733283} A = 0.001 B = 0.001{"point2":45.267203353786016,"inter":0.8184380568733283} A = 0.001 B = 0.001{"point2":53.054268535715316,"inter":0.840845972624368} A = 0.001 B = 0.001{"point2":53.054268535715316,"inter":0.840845972624368} A = 0.001 B = 0.001{"point2":56.837173556907366,"inter":0.8506251836465988} A = 0.001 B = 0.001{"point2":56.837173556907366,"inter":0.8506251836465988} A = 0.001 B = 0.001{"point2":59.792794804702254,"inter":0.8575885512070717} A = 0.001 B = 0.001{"point2":59.792794804702254,"inter":0.8575885512070717} A = 0.001 B = 0.001{"point2":59.792794804702254,"inter":0.8575885512070717}{"point2":62.598148881623324,"inter":0.8644896628666283} A = 0.001 B = 0.001{"point2":62.598148881623324,"inter":0.8644896628666283} A = 0.001 B = 0.001{"point2":62.19116775842372,"inter":0.8608514956681087} A = 0.001 B = 0.001{"point2":62.19116775842372,"inter":0.8608514956681087} A = 0.001 B = 0.001{"point2":62.23693211362408,"inter":0.861905739307025} A = 0.001 B = 0.001{"point2":62.23693211362408,"inter":0.861905739307025} A = 0.001 B = 0.001{"point2":64.2231277802486,"inter":0.8650803139007449} A = 0.001 B = 0.001{"point2":64.2231277802486,"inter":0.8650803139007449} A = 0.001 B = 0.001{"point2":64.2231277802486,"inter":0.8650803139007449}{"point2":65.54542670279167,"inter":0.8677726787881266} A = 0.001 B = 0.001{"point2":65.54542670279167,"inter":0.8677726787881266} A = 0.001 B = 0.001{"point2":65.17566553947259,"inter":0.8677682956344989} A = 0.001 B = 0.001{"point2":65.17566553947259,"inter":0.8677682956344989} A = 0.001 B = 0.001{"point2":67.69515263644848,"inter":0.8711000017932351} A = 0.001 B = 0.001{"point2":67.69515263644848,"inter":0.8711000017932351} A = 0.001 B = 0.001{"point2":69.97698445895912,"inter":0.8752402966846623} A = 0.001 B = 0.001{"point2":69.97698445895912,"inter":0.8752402966846623} A = 0.001 B = 0.001{"point2":69.97698445895912,"inter":0.8752402966846623}{"point2":99.74673692870263,"inter":0.9095237623445885} A = 0.001 B = 0.001{"point2":99.74673692870263,"inter":0.9095237623445885} A = 0.001 B = 0.001{"point2":99.61739144159532,"inter":0.9090037149287143} A = 0.001 B = 0.001{"point2":99.61739144159532,"inter":0.9090037149287143} A = 0.001 B = 0.001{"point2":41.788841027206786,"inter":0.8097214361653272} A = 0.001 B = 0.001{"point2":41.788841027206786,"inter":0.8097214361653272} A = 0.001 B = 0.001{"point2":42.73282326040387,"inter":0.8101954971298728} A = 0.001 B = 0.001{"point2":42.73282326040387,"inter":0.8101954971298728} A = 0.001 B = 0.001{"point2":42.73282326040387,"inter":0.8101954971298728}{"point2":43.9518268554942,"inter":0.8151885757848872} A = 0.001 B = 0.001{"point2":43.9518268554942,"inter":0.8151885757848872} A = 0.001 B = 0.001{"point2":45.8064167274317,"inter":0.8177822887840397} A = 0.001 B = 0.001{"point2":45.8064167274317,"inter":0.8177822887840397} A = 0.001 B = 0.001{"point2":47.92844811432565,"inter":0.827400823186026} A = 0.001 B = 0.001{"point2":47.92844811432565,"inter":0.827400823186026} A = 0.001 B = 0.001{"point2":46.498368192554494,"inter":0.8207226002642115} A = 0.001 B = 0.001{"point2":46.498368192554494,"inter":0.8207226002642115} A = 0.001 B = 0.001{"point2":46.498368192554494,"inter":0.8207226002642115}{"point2":56.389711440297305,"inter":0.84852926006659} A = 0.001 B = 0.001{"point2":56.389711440297305,"inter":0.84852926006659} A = 0.001 B = 0.001{"point2":61.15366482747024,"inter":0.858394557163355} A = 0.001 B = 0.001{"point2":61.15366482747024,"inter":0.858394557163355} A = 0.001 B = 0.001{"point2":63.74307264604806,"inter":0.8645823446473331} A = 0.001 B = 0.001{"point2":63.74307264604806,"inter":0.8645823446473331} A = 0.001 B = 0.001{"point2":65.8993649598801,"inter":0.8674823775346792} A = 0.001 B = 0.001{"point2":65.8993649598801,"inter":0.8674823775346792} A = 0.001 B = 0.001{"point2":65.8993649598801,"inter":0.8674823775346792}{"point2":69.52009804341881,"inter":0.8750789250851914} A = 0.001 B = 0.001{"point2":69.52009804341881,"inter":0.8750789250851914} A = 0.001 B = 0.001{"point2":77.15030736223355,"inter":0.8850137199085992} A = 0.001 B = 0.001{"point2":77.15030736223355,"inter":0.8850137199085992} A = 0.001 B = 0.001{"point2":76.57004564161912,"inter":0.8846863712409536} A = 0.001 B = 0.001{"point2":76.57004564161912,"inter":0.8846863712409536} A = 0.001 B = 0.001{"point2":75.87915298003941,"inter":0.8836646488054739} A = 0.001 B = 0.001{"point2":75.87915298003941,"inter":0.8836646488054739} A = 0.001 B = 0.001{"point2":75.87915298003941,"inter":0.8836646488054739}{"point2":80.17667271906382,"inter":0.8893428459323129} A = 0.001 B = 0.001{"point2":80.17667271906382,"inter":0.8893428459323129} A = 0.001 B = 0.001{"point2":76.27383351731709,"inter":0.8836237255359354} A = 0.001 B = 0.001{"point2":76.27383351731709,"inter":0.8836237255359354} A = 0.001 B = 0.001{"point2":87.96145963735171,"inter":0.8971228888853303} A = 0.001 B = 0.001{"point2":87.96145963735171,"inter":0.8971228888853303} A = 0.001 B = 0.001
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<.05 4.0e-15 -0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.05 4.0e-15 -0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.05 4.0e-15 -0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.05 4.0e-15 -0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-inference-algorithms / ex2.3
shape value s46 +p val+ runs 8/8
per-run
00 prompt

Two-endpoint interpolation: point1 = -10 is fixed; point2 is uniform on [-100, 100]; interpolationWeight is uniform on [0, 1]; pointInMiddle = point1 * interpolationWeight + point2 * (1 - interpolationWeight). We observe(Gaussian({mu: 0, sigma: 0.1}), pointInMiddle).

Helper:

webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return point1 * interpolationWeight + point2 * (1 - interpolationWeight);
3};

Run MCMC with samples: 100, lag: 0. From posterior.samples, extract the array of pointInMiddle values in order. End your program with that array of length 100.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return (point1 * interpolationWeight +
3 point2 * (1 - interpolationWeight));
4};
5
6var model = function(){
7 var point1 = -10;
8 var point2 = uniform(-100, 100);
9 var interpolationWeight = uniform(0, 1);
10 var pointInMiddle = interpolate(point1, point2, interpolationWeight);
11 observe(Gaussian({mu: 0, sigma:0.1}), pointInMiddle);
12 return {point2, interpolationWeight, pointInMiddle};
13};
14
15var posterior = Infer({method: 'MCMC', samples: 100, lag: 0}, model);
16var ANSWER = (map(function(d) { d["value"]["pointInMiddle"] }, posterior.samples));
17
s46 +psonnet-46-primer-v3val+
webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return point1 * interpolationWeight + point2 * (1 - interpolationWeight);
3};
4
5var point1 = -10;
6
7var model = function() {
8 var point2 = uniform(-100, 100);
9 var interpolationWeight = uniform(0, 1);
10 var pointInMiddle = interpolate(point1, point2, interpolationWeight);
11 observe(Gaussian({mu: 0, sigma: 0.1}), pointInMiddle);
12 return pointInMiddle;
13};
14
15var posterior = Infer({method: 'MCMC', samples: 100, lag: 0}, model);
16
17var ANSWER = map(function(s) { return s.value; }, posterior.samples);
02outputvalue
GT
[-15.6980, -13.4220, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549]
s46 +p
[-15.6980, -13.4220, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -6.1144, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.7865, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.2616, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549, -1.1549]
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer val- ·
haiku-45-primer-v3 haiku-4.5 +primer val- ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking val- ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking val- ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer val+ ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer val+ ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking val+ ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking val+ ·
probmods2-inference-algorithms / ex2.4
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Two-endpoint interpolation: point1 = -10 is fixed; point2 is uniform on [-100, 100]; interpolationWeight is uniform on [0, 1]; pointInMiddle = point1 * interpolationWeight + point2 * (1 - interpolationWeight). We observe(Gaussian({mu: 0, sigma: 0.1}), pointInMiddle).

Helper:

webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return point1 * interpolationWeight + point2 * (1 - interpolationWeight);
3};

Rewrite this as rejection sampling. Convert the observe into a condition(Math.abs(pointInMiddle) < 0.01). End your program with Infer({method: 'rejection', samples: 1000}, model) returning the posterior over {point2, interpolationWeight, pointInMiddle}.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return (point1 * interpolationWeight +
3 point2 * (1 - interpolationWeight));
4};
5
6var model = function(){
7 var point1 = -10;
8 var point2 = uniform(-100, 100);
9 var interpolationWeight = uniform(0, 1);
10 var pointInMiddle = interpolate(point1, point2, interpolationWeight);
11 condition(Math.abs(pointInMiddle) < 0.01);
12 return {point2, interpolationWeight, pointInMiddle};
13};
14var ANSWER = (Infer({method: 'rejection', samples: 1000}, model));
15
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return point1 * interpolationWeight + point2 * (1 - interpolationWeight);
3};
4
5var model = function() {
6 var point1 = -10;
7 var point2 = uniform(-100, 100);
8 var interpolationWeight = uniform(0, 1);
9 var pointInMiddle = interpolate(point1, point2, interpolationWeight);
10 condition(Math.abs(pointInMiddle) < 0.01);
11 return { point2: point2, interpolationWeight: interpolationWeight, pointInMiddle: pointInMiddle };
12};
13
14var ANSWER = Infer({method: 'rejection', samples: 1000}, model);
02output overlaydistribution
GT s46 +p48 bins
00.0050.0050.0100.010{"point2":51.07985169866842,"interpolationWeight":0.8361499147815411,"pointInMiddle":0.007938905957651343} A = 0.001 B = 0.001{"point2":51.07985169866842,"interpolationWeight":0.8361499147815411,"pointInMiddle":0.007938905957651343} A = 0.001 B = 0.001{"point2":51.07985169866842,"interpolationWeight":0.8361499147815411,"pointInMiddle":0.007938905957651343}{"point2":65.34802671366538,"interpolationWeight":0.8672740176308187,"pointInMiddle":0.0006408651505545038} A = 0.001 B = 0.001{"point2":65.34802671366538,"interpolationWeight":0.8672740176308187,"pointInMiddle":0.0006408651505545038} A = 0.001 B = 0.001{"point2":17.771508698598964,"interpolationWeight":0.6400977086043197,"pointInMiddle":-0.0049703838591650396} A = 0.001 B = 0.001{"point2":17.771508698598964,"interpolationWeight":0.6400977086043197,"pointInMiddle":-0.0049703838591650396} A = 0.001 B = 0.001{"point2":3.8200919430500164,"interpolationWeight":0.2768073137490357,"pointInMiddle":-0.005410583470349728} A = 0.001 B = 0.001{"point2":3.8200919430500164,"interpolationWeight":0.2768073137490357,"pointInMiddle":-0.005410583470349728} A = 0.001 B = 0.001{"point2":71.63150186885701,"interpolationWeight":0.8776012858810968,"pointInMiddle":-0.008409139657054254} A = 0.001 B = 0.001{"point2":71.63150186885701,"interpolationWeight":0.8776012858810968,"pointInMiddle":-0.008409139657054254} A = 0.001 B = 0.001{"point2":71.63150186885701,"interpolationWeight":0.8776012858810968,"pointInMiddle":-0.008409139657054254}{"point2":8.83910678860353,"interpolationWeight":0.4694715986715952,"pointInMiddle":-0.0053187929870706085} A = 0.001 B = 0.001{"point2":8.83910678860353,"interpolationWeight":0.4694715986715952,"pointInMiddle":-0.0053187929870706085} A = 0.001 B = 0.001{"point2":34.53431146877349,"interpolationWeight":0.7755005396812444,"pointInMiddle":-0.0020711095929861756} A = 0.001 B = 0.001{"point2":34.53431146877349,"interpolationWeight":0.7755005396812444,"pointInMiddle":-0.0020711095929861756} A = 0.001 B = 0.001{"point2":20.16318804860458,"interpolationWeight":0.6687973637741744,"pointInMiddle":-0.00987260132684753} A = 0.001 B = 0.001{"point2":20.16318804860458,"interpolationWeight":0.6687973637741744,"pointInMiddle":-0.00987260132684753} A = 0.001 B = 0.001{"point2":27.390703851439298,"interpolationWeight":0.7327352062734908,"pointInMiddle":-0.006781247856080697} A = 0.001 B = 0.001{"point2":27.390703851439298,"interpolationWeight":0.7327352062734908,"pointInMiddle":-0.006781247856080697} A = 0.001 B = 0.001{"point2":27.390703851439298,"interpolationWeight":0.7327352062734908,"pointInMiddle":-0.006781247856080697}{"point2":4.654901291897829,"interpolationWeight":0.3171649188768916,"pointInMiddle":0.006880712504200748} A = 0.001 B = 0.001{"point2":4.654901291897829,"interpolationWeight":0.3171649188768916,"pointInMiddle":0.006880712504200748} A = 0.001 B = 0.001{"point2":64.47853036464946,"interpolationWeight":0.8657215140189715,"pointInMiddle":0.0008642954571911332} A = 0.001 B = 0.001{"point2":64.47853036464946,"interpolationWeight":0.8657215140189715,"pointInMiddle":0.0008642954571911332} A = 0.001 B = 0.001{"point2":18.51705076195411,"interpolationWeight":0.6492199179812947,"pointInMiddle":0.0032134052098431454} A = 0.001 B = 0.001{"point2":18.51705076195411,"interpolationWeight":0.6492199179812947,"pointInMiddle":0.0032134052098431454} A = 0.001 B = 0.001{"point2":0.2390702291241098,"interpolationWeight":0.023483434336701484,"pointInMiddle":-0.0013783042704012538} A = 0.001 B = 0.001{"point2":0.2390702291241098,"interpolationWeight":0.023483434336701484,"pointInMiddle":-0.0013783042704012538} A = 0.001 B = 0.001{"point2":0.2390702291241098,"interpolationWeight":0.023483434336701484,"pointInMiddle":-0.0013783042704012538}{"point2":18.308074865176025,"interpolationWeight":0.6465235420032683,"pointInMiddle":0.0062380360487281905} A = 0.001 B = 0.001{"point2":18.308074865176025,"interpolationWeight":0.6465235420032683,"pointInMiddle":0.0062380360487281905} A = 0.001 B = 0.001{"point2":21.569418027034246,"interpolationWeight":0.683455277705134,"pointInMiddle":-0.006867337621908831} A = 0.001 B = 0.001{"point2":21.569418027034246,"interpolationWeight":0.683455277705134,"pointInMiddle":-0.006867337621908831} A = 0.001 B = 0.001{"point2":68.27422178872408,"interpolationWeight":0.872185373071203,"pointInMiddle":0.004590456067678161} A = 0.001 B = 0.001{"point2":68.27422178872408,"interpolationWeight":0.872185373071203,"pointInMiddle":0.004590456067678161} A = 0.001 B = 0.001{"point2":18.31201955047601,"interpolationWeight":0.6470439854917872,"pointInMiddle":-0.007102416785385479} A = 0.001 B = 0.001{"point2":18.31201955047601,"interpolationWeight":0.6470439854917872,"pointInMiddle":-0.007102416785385479} A = 0.001 B = 0.001{"point2":18.31201955047601,"interpolationWeight":0.6470439854917872,"pointInMiddle":-0.007102416785385479}{"point2":0.16302214083863475,"interpolationWeight":0.016658952570897473,"pointInMiddle":-0.006283162982576945} A = 0.001 B = 0.001{"point2":0.16302214083863475,"interpolationWeight":0.016658952570897473,"pointInMiddle":-0.006283162982576945} A = 0.001 B = 0.001{"point2":12.866046758537792,"interpolationWeight":0.5629125234779373,"pointInMiddle":-0.0055373242752247975} A = 0.001 B = 0.001{"point2":12.866046758537792,"interpolationWeight":0.5629125234779373,"pointInMiddle":-0.0055373242752247975} A = 0.001 B = 0.001{"point2":40.21178103135898,"interpolationWeight":0.8006566444717591,"pointInMiddle":0.009384917840375095} A = 0.001 B = 0.001{"point2":40.21178103135898,"interpolationWeight":0.8006566444717591,"pointInMiddle":0.009384917840375095} A = 0.001 B = 0.001{"point2":22.999310367709697,"interpolationWeight":0.6967138352132827,"pointInMiddle":0.008234282029232709} A = 0.001 B = 0.001{"point2":22.999310367709697,"interpolationWeight":0.6967138352132827,"pointInMiddle":0.008234282029232709} A = 0.001 B = 0.001{"point2":22.999310367709697,"interpolationWeight":0.6967138352132827,"pointInMiddle":0.008234282029232709}{"point2":96.9257135765994,"interpolationWeight":0.9064303087852967,"pointInMiddle":0.005006002274212662} A = 0.001 B = 0.001{"point2":96.9257135765994,"interpolationWeight":0.9064303087852967,"pointInMiddle":0.005006002274212662} A = 0.001 B = 0.001{"point2":62.01489461381263,"interpolationWeight":0.8611221525260974,"pointInMiddle":0.0012735500262444077} A = 0.001 B = 0.001{"point2":62.01489461381263,"interpolationWeight":0.8611221525260974,"pointInMiddle":0.0012735500262444077} A = 0.001 B = 0.001{"point2":44.347126494245884,"interpolationWeight":0.8161428304759456,"pointInMiddle":-0.007891151002205277} A = 0.001 B = 0.001{"point2":44.347126494245884,"interpolationWeight":0.8161428304759456,"pointInMiddle":-0.007891151002205277} A = 0.001 B = 0.001{"point2":38.80273130887636,"interpolationWeight":0.7951214133610727,"pointInMiddle":-0.0013653853180830566} A = 0.001 B = 0.001{"point2":38.80273130887636,"interpolationWeight":0.7951214133610727,"pointInMiddle":-0.0013653853180830566} A = 0.001 B = 0.001{"point2":38.80273130887636,"interpolationWeight":0.7951214133610727,"pointInMiddle":-0.0013653853180830566}{"point2":43.10137491442765,"interpolationWeight":0.8115428209384274,"pointInMiddle":0.007335320663989009} A = 0.001 B = 0.001{"point2":43.10137491442765,"interpolationWeight":0.8115428209384274,"pointInMiddle":0.007335320663989009} A = 0.001 B = 0.001{"point2":20.81155026765967,"interpolationWeight":0.6757218862142405,"pointInMiddle":-0.00848859638820798} A = 0.001 B = 0.001{"point2":20.81155026765967,"interpolationWeight":0.6757218862142405,"pointInMiddle":-0.00848859638820798} A = 0.001 B = 0.001{"point2":0.8538521816443705,"interpolationWeight":0.07838535653953611,"pointInMiddle":0.0030691085587546407} A = 0.001 B = 0.001{"point2":0.8538521816443705,"interpolationWeight":0.07838535653953611,"pointInMiddle":0.0030691085587546407} A = 0.001 B = 0.001{"point2":0.6044975103880432,"interpolationWeight":0.0566877758932381,"pointInMiddle":0.00335213205876439} A = 0.001 B = 0.001{"point2":0.6044975103880432,"interpolationWeight":0.0566877758932381,"pointInMiddle":0.00335213205876439} A = 0.001 B = 0.001{"point2":0.6044975103880432,"interpolationWeight":0.0566877758932381,"pointInMiddle":0.00335213205876439}{"point2":5.07323409723341,"interpolationWeight":0.33691084474253397,"pointInMiddle":-0.0051019354674646245} A = 0.001 B = 0.001{"point2":5.07323409723341,"interpolationWeight":0.33691084474253397,"pointInMiddle":-0.0051019354674646245} A = 0.001 B = 0.001{"point2":28.812549601214705,"interpolationWeight":0.7424959539148264,"pointInMiddle":-0.005611438805720681} A = 0.001 B = 0.001{"point2":28.812549601214705,"interpolationWeight":0.7424959539148264,"pointInMiddle":-0.005611438805720681} A = 0.001 B = 0.001{"point2":32.60305463373419,"interpolationWeight":0.7651621605197017,"pointInMiddle":0.004809305447250445} A = 0.001 B = 0.001{"point2":32.60305463373419,"interpolationWeight":0.7651621605197017,"pointInMiddle":0.004809305447250445} A = 0.001 B = 0.001{"point2":5.086616993702833,"interpolationWeight":0.3377846549531292,"pointInMiddle":-0.009410721925093402} A = 0.001 B = 0.001{"point2":5.086616993702833,"interpolationWeight":0.3377846549531292,"pointInMiddle":-0.009410721925093402} A = 0.001 B = 0.001{"point2":5.086616993702833,"interpolationWeight":0.3377846549531292,"pointInMiddle":-0.009410721925093402}{"point2":97.32996777403329,"interpolationWeight":0.9067940257242033,"pointInMiddle":0.0037942153686358893} A = 0.001 B = 0.001{"point2":97.32996777403329,"interpolationWeight":0.9067940257242033,"pointInMiddle":0.0037942153686358893} A = 0.001 B = 0.001{"point2":1.5257064769348858,"interpolationWeight":0.13314860742815565,"pointInMiddle":-0.008925290094668137} A = 0.001 B = 0.001{"point2":1.5257064769348858,"interpolationWeight":0.13314860742815565,"pointInMiddle":-0.008925290094668137} A = 0.001 B = 0.001{"point2":71.36399704760129,"interpolationWeight":0.8771680556901056,"pointInMiddle":-0.005902045818626078} A = 0.001 B = 0.001{"point2":71.36399704760129,"interpolationWeight":0.8771680556901056,"pointInMiddle":-0.005902045818626078} A = 0.001 B = 0.001{"point2":3.475851625371007,"interpolationWeight":0.25831677049888657,"pointInMiddle":-0.005186846217003271} A = 0.001 B = 0.001{"point2":3.475851625371007,"interpolationWeight":0.25831677049888657,"pointInMiddle":-0.005186846217003271} A = 0.001 B = 0.001{"point2":3.475851625371007,"interpolationWeight":0.25831677049888657,"pointInMiddle":-0.005186846217003271}{"point2":12.47820879987546,"interpolationWeight":0.5555604777151464,"pointInMiddle":-0.00979561916415772} A = 0.001 B = 0.001{"point2":12.47820879987546,"interpolationWeight":0.5555604777151464,"pointInMiddle":-0.00979561916415772} A = 0.001 B = 0.001{"point2":8.973647516969947,"interpolationWeight":0.47347046959172295,"pointInMiddle":-0.009814282757640846} A = 0.001 B = 0.001{"point2":8.973647516969947,"interpolationWeight":0.47347046959172295,"pointInMiddle":-0.009814282757640846} A = 0.001 B = 0.001{"point2":4.931018222868815,"interpolationWeight":0.3304111738582853,"pointInMiddle":-0.0023570350487194247} A = 0.001 B = 0.001{"point2":4.931018222868815,"interpolationWeight":0.3304111738582853,"pointInMiddle":-0.0023570350487194247} A = 0.001 B = 0.001{"point2":40.35186642704494,"interpolationWeight":0.8014716888173679,"pointInMiddle":-0.00372899334529464} A = 0.001 B = 0.001{"point2":40.35186642704494,"interpolationWeight":0.8014716888173679,"pointInMiddle":-0.00372899334529464} A = 0.001 B = 0.001{"point2":40.35186642704494,"interpolationWeight":0.8014716888173679,"pointInMiddle":-0.00372899334529464}{"point2":30.667776844293286,"interpolationWeight":0.7542552524540485,"pointInMiddle":-0.006107446144052453} A = 0.001 B = 0.001{"point2":30.667776844293286,"interpolationWeight":0.7542552524540485,"pointInMiddle":-0.006107446144052453} A = 0.001 B = 0.001{"point2":12.036806403251376,"interpolationWeight":0.5462350219776817,"pointInMiddle":-0.0004690267465559117} A = 0.001 B = 0.001{"point2":12.036806403251376,"interpolationWeight":0.5462350219776817,"pointInMiddle":-0.0004690267465559117} A = 0.001 B = 0.001{"point2":86.73896530686426,"interpolationWeight":0.896619128497265,"pointInMiddle":0.0009585416964732474} A = 0.001 B = 0.001{"point2":86.73896530686426,"interpolationWeight":0.896619128497265,"pointInMiddle":0.0009585416964732474} A = 0.001 B = 0.001{"point2":24.086743457865765,"interpolationWeight":0.7067963610043736,"pointInMiddle":-0.00564277664339663} A = 0.001 B = 0.001{"point2":24.086743457865765,"interpolationWeight":0.7067963610043736,"pointInMiddle":-0.00564277664339663} A = 0.001 B = 0.001{"point2":24.086743457865765,"interpolationWeight":0.7067963610043736,"pointInMiddle":-0.00564277664339663}{"point2":8.603333532205909,"interpolationWeight":0.4624870252060196,"pointInMiddle":-0.0004668520193948922} A = 0.001 B = 0.001{"point2":8.603333532205909,"interpolationWeight":0.4624870252060196,"pointInMiddle":-0.0004668520193948922} A = 0.001 B = 0.001{"point2":16.721666344527634,"interpolationWeight":0.6259706587802119,"pointInMiddle":-0.0053127408613447} A = 0.001 B = 0.001{"point2":16.721666344527634,"interpolationWeight":0.6259706587802119,"pointInMiddle":-0.0053127408613447} A = 0.001 B = 0.001{"point2":0.7308888072169424,"interpolationWeight":0.06814197109455417,"pointInMiddle":-0.00033510770330924533} A = 0.001 B = 0.001{"point2":0.7308888072169424,"interpolationWeight":0.06814197109455417,"pointInMiddle":-0.00033510770330924533} A = 0.001 B = 0.001
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-inference-algorithms / ex2.5
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Two-endpoint interpolation: point1 = -10 is fixed; point2 is uniform on [-100, 100]; interpolationWeight is uniform on [0, 1]; pointInMiddle = point1 * interpolationWeight + point2 * (1 - interpolationWeight). We observe(Gaussian({mu: 0, sigma: 0.1}), pointInMiddle).

Helper:

webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return point1 * interpolationWeight + point2 * (1 - interpolationWeight);
3};

Replace point2's prior with a drift kernel: uniformDrift({a: -100, b: 100, width: 0.1}). End your program with Infer({method: 'MCMC', samples: 500}, model) returning the posterior over {point2, interpolationWeight, pointInMiddle}.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return (point1 * interpolationWeight +
3 point2 * (1 - interpolationWeight));
4};
5
6var model = function(){
7 var point1 = -10;
8 var point2 = uniformDrift({a: -100, b: 100, width: .1});
9 var interpolationWeight = uniform(0, 1);
10 var pointInMiddle = interpolate(point1, point2, interpolationWeight);
11 observe(Gaussian({mu: 0, sigma:0.1}), pointInMiddle);
12 return {point2, interpolationWeight, pointInMiddle};
13};
14var ANSWER = (Infer({method: 'MCMC', samples: 500}, model));
15
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var interpolate = function(point1, point2, interpolationWeight) {
2 return point1 * interpolationWeight + point2 * (1 - interpolationWeight);
3};
4
5var model = function() {
6 var point1 = -10;
7 var point2 = uniformDrift({a: -100, b: 100, width: 0.1});
8 var interpolationWeight = uniform(0, 1);
9 var pointInMiddle = interpolate(point1, point2, interpolationWeight);
10 observe(Gaussian({mu: 0, sigma: 0.1}), pointInMiddle);
11 return {point2: point2, interpolationWeight: interpolationWeight, pointInMiddle: pointInMiddle};
12};
13
14var ANSWER = Infer({method: 'MCMC', samples: 500}, model);
02output overlaydistribution
GT s46 +p48 bins
00.0100.0100.0200.020{"point2":-98.98399215093289,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.657769725785935} A = 0.020 B = 0.020{"point2":-98.98399215093289,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.657769725785935} A = 0.020 B = 0.020{"point2":-98.98399215093289,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.657769725785935}{"point2":-97.87181027253325,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.222100898729359} A = 0.020 B = 0.020{"point2":-97.87181027253325,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.222100898729359} A = 0.020 B = 0.020{"point2":-99.58134073447034,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.418519366843714} A = 0.016 B = 0.016{"point2":-99.58134073447034,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.418519366843714} A = 0.016 B = 0.016{"point2":-98.06739700899008,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.305533882243385} A = 0.016 B = 0.016{"point2":-98.06739700899008,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.305533882243385} A = 0.016 B = 0.016{"point2":-98.52620252417587,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.223754911623375} A = 0.016 B = 0.016{"point2":-98.52620252417587,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.223754911623375} A = 0.016 B = 0.016{"point2":-98.52620252417587,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.223754911623375}{"point2":-98.39795585955841,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.223430761029661} A = 0.014 B = 0.014{"point2":-98.39795585955841,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.223430761029661} A = 0.014 B = 0.014{"point2":-99.46569420687285,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.41410617218667} A = 0.012 B = 0.012{"point2":-99.46569420687285,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.41410617218667} A = 0.012 B = 0.012{"point2":-97.82868830271168,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.304705725624345} A = 0.012 B = 0.012{"point2":-97.82868830271168,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.304705725624345} A = 0.012 B = 0.012{"point2":-97.82328860510273,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22197825751017} A = 0.012 B = 0.012{"point2":-97.82328860510273,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22197825751017} A = 0.012 B = 0.012{"point2":-97.82328860510273,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22197825751017}{"point2":-98.17687961667289,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.222871978502246} A = 0.012 B = 0.012{"point2":-98.17687961667289,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.222871978502246} A = 0.012 B = 0.012{"point2":-98.38217929955636,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.223390884894817} A = 0.012 B = 0.012{"point2":-98.38217929955636,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.223390884894817} A = 0.012 B = 0.012{"point2":-98.68526912369471,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.224156961320558} A = 0.012 B = 0.012{"point2":-98.68526912369471,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.224156961320558} A = 0.012 B = 0.012{"point2":-99.48048156028668,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.226166905081817} A = 0.012 B = 0.012{"point2":-99.48048156028668,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.226166905081817} A = 0.012 B = 0.012{"point2":-99.48048156028668,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.226166905081817}{"point2":-99.4294680004787,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.412723741569643} A = 0.010 B = 0.010{"point2":-99.4294680004787,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.412723741569643} A = 0.010 B = 0.010{"point2":-99.47524947866175,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.41447081153453} A = 0.010 B = 0.010{"point2":-99.47524947866175,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.41447081153453} A = 0.010 B = 0.010{"point2":-98.65966662142506,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.30758865438572} A = 0.010 B = 0.010{"point2":-98.65966662142506,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.30758865438572} A = 0.010 B = 0.010{"point2":-98.18133536261226,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.305929170723582} A = 0.010 B = 0.010{"point2":-98.18133536261226,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.305929170723582} A = 0.010 B = 0.010{"point2":-98.18133536261226,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.305929170723582}{"point2":-98.07417222247884,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22261237983817} A = 0.010 B = 0.010{"point2":-98.07417222247884,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22261237983817} A = 0.010 B = 0.010{"point2":-98.23854782364988,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22302784833297} A = 0.010 B = 0.010{"point2":-98.23854782364988,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22302784833297} A = 0.010 B = 0.010{"point2":-98.53760849697431,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22378374085543} A = 0.010 B = 0.010{"point2":-98.53760849697431,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22378374085543} A = 0.010 B = 0.010{"point2":-99.05389496855089,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225088683691856} A = 0.010 B = 0.010{"point2":-99.05389496855089,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225088683691856} A = 0.010 B = 0.010{"point2":-99.05389496855089,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225088683691856}{"point2":-99.25686656338827,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225601705712116} A = 0.010 B = 0.010{"point2":-99.25686656338827,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225601705712116} A = 0.010 B = 0.010{"point2":-99.32515526323029,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225774309207605} A = 0.010 B = 0.010{"point2":-99.32515526323029,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225774309207605} A = 0.010 B = 0.010{"point2":-99.38763093196772,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225932219942939} A = 0.010 B = 0.010{"point2":-99.38763093196772,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225932219942939} A = 0.010 B = 0.010{"point2":-99.50594252971231,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.415642091050819} A = 0.008 B = 0.008{"point2":-99.50594252971231,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.415642091050819} A = 0.008 B = 0.008{"point2":-99.50594252971231,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.415642091050819}{"point2":-99.032265301821,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.658126560947574} A = 0.008 B = 0.008{"point2":-99.032265301821,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.658126560947574} A = 0.008 B = 0.008{"point2":-98.790116911289,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.656336599892898} A = 0.008 B = 0.008{"point2":-98.790116911289,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.656336599892898} A = 0.008 B = 0.008{"point2":-98.68355063993407,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.655548861948208} A = 0.008 B = 0.008{"point2":-98.68355063993407,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.655548861948208} A = 0.008 B = 0.008{"point2":-98.74628695229745,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.656012608808544} A = 0.008 B = 0.008{"point2":-98.74628695229745,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.656012608808544} A = 0.008 B = 0.008{"point2":-98.74628695229745,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.656012608808544}{"point2":-98.61997754125537,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.307450960310968} A = 0.008 B = 0.008{"point2":-98.61997754125537,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.307450960310968} A = 0.008 B = 0.008{"point2":-98.436102522868,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.306813039240021} A = 0.008 B = 0.008{"point2":-98.436102522868,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.306813039240021} A = 0.008 B = 0.008{"point2":-98.38100558498589,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.306621890393767} A = 0.008 B = 0.008{"point2":-98.38100558498589,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.306621890393767} A = 0.008 B = 0.008{"point2":-98.44922070504906,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.306858550396997} A = 0.008 B = 0.008{"point2":-98.44922070504906,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.306858550396997} A = 0.008 B = 0.008{"point2":-98.44922070504906,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.306858550396997}{"point2":-98.23633812525716,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.306119992845908} A = 0.008 B = 0.008{"point2":-98.23633812525716,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.306119992845908} A = 0.008 B = 0.008{"point2":-97.94270951201241,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.305101301557311} A = 0.008 B = 0.008{"point2":-97.94270951201241,"interpolationWeight":0.9965306811303598,"pointInMiddle":-10.305101301557311} A = 0.008 B = 0.008{"point2":-98.39833756520908,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22343172581197} A = 0.008 B = 0.008{"point2":-98.39833756520908,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22343172581197} A = 0.008 B = 0.008{"point2":-98.68049825119697,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.224144902674375} A = 0.008 B = 0.008{"point2":-98.68049825119697,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.224144902674375} A = 0.008 B = 0.008{"point2":-98.68049825119697,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.224144902674375}{"point2":-98.71557276960172,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.224233555474813} A = 0.008 B = 0.008{"point2":-98.71557276960172,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.224233555474813} A = 0.008 B = 0.008{"point2":-98.68100203313779,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.224146176011313} A = 0.008 B = 0.008{"point2":-98.68100203313779,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.224146176011313} A = 0.008 B = 0.008{"point2":-98.9898684702722,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.224926853148407} A = 0.008 B = 0.008{"point2":-98.9898684702722,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.224926853148407} A = 0.008 B = 0.008{"point2":-99.06571319180912,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225118554909928} A = 0.008 B = 0.008{"point2":-99.06571319180912,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225118554909928} A = 0.008 B = 0.008{"point2":-99.06571319180912,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.225118554909928}{"point2":-99.20843553618303,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22547929359115} A = 0.008 B = 0.008{"point2":-99.20843553618303,"interpolationWeight":0.9974724442566903,"pointInMiddle":-10.22547929359115} A = 0.008 B = 0.008{"point2":-99.51776818692339,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.416093370724356} A = 0.006 B = 0.006{"point2":-99.51776818692339,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.416093370724356} A = 0.006 B = 0.006{"point2":-99.44638215277217,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.413369203634788} A = 0.006 B = 0.006{"point2":-99.44638215277217,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.413369203634788} A = 0.006 B = 0.006{"point2":-99.34805415459383,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.409616902504668} A = 0.006 B = 0.006{"point2":-99.34805415459383,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.409616902504668} A = 0.006 B = 0.006{"point2":-99.34805415459383,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.409616902504668}{"point2":-99.19212566349765,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.403666505220095} A = 0.006 B = 0.006{"point2":-99.19212566349765,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.403666505220095} A = 0.006 B = 0.006{"point2":-99.032265301821,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.397566063566712} A = 0.006 B = 0.006{"point2":-99.032265301821,"interpolationWeight":0.9618389349967801,"pointInMiddle":-13.397566063566712} A = 0.006 B = 0.006{"point2":-98.74620033424193,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.656011968527823} A = 0.006 B = 0.006{"point2":-98.74620033424193,"interpolationWeight":0.9926079993728508,"pointInMiddle":-10.656011968527823} A = 0.006 B = 0.006
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer fail ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking fail ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-inference-algorithms / ex4.a
shape distribution s46 +p TV<11.000 runs 8/8
per-run
00 prompt

Implement a topic model with two latent topics over the vocabulary ['DNA', 'evolution', 'parsing', 'phonology']. For each word in each document, a topic is drawn from a per-document topic distribution, then a word is observed under that topic's distribution. Topic distributions over the vocabulary are drawn from Dirichlet(eta = ones); per-document topic distributions are drawn from Dirichlet(alpha = ones).

webppl
1var vocabulary = ['DNA', 'evolution', 'parsing', 'phonology'];
2var eta = ones([vocabulary.length, 1])
3var numTopics = 2
4var alpha = ones([numTopics, 1])
5
6var corpus = /* 6 short documents */;
7
8Infer({method: 'MCMC', samples: 200, lag: 50}, function() {
9 var topics = repeat(numTopics, function() {
10 return T.toScalars(dirichlet({alpha: eta}))
11 })
12 mapData({data: corpus}, function(doc) {
13 // your code: per-doc topic dist, then per-word topic + observe
14 })
15 return topics
16});

End with the Infer(...) returning the joint posterior over topic distributions.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var vocabulary = ['DNA', 'evolution', 'parsing', 'phonology'];
2var eta = ones([vocabulary.length, 1]);
3
4var numTopics = 2;
5var alpha = ones([numTopics, 1]);
6
7var corpus = [
8 'DNA evolution DNA evolution DNA evolution DNA evolution DNA evolution'.split(' '),
9 'DNA evolution DNA evolution DNA evolution DNA evolution DNA evolution'.split(' '),
10 'DNA evolution DNA evolution DNA evolution DNA evolution DNA evolution'.split(' '),
11 'parsing phonology parsing phonology parsing phonology parsing phonology parsing phonology'.split(' '),
12 'parsing phonology parsing phonology parsing phonology parsing phonology parsing phonology'.split(' '),
13 'parsing phonology parsing phonology parsing phonology parsing phonology parsing phonology'.split(' ')
14];
15var ANSWER = (Infer({method: 'MCMC', samples: 200, lag: 50}, function() {
16 var topics = repeat(numTopics, function() {
17 return T.toScalars(dirichlet({alpha: eta}));
18 });
19
20 mapData({data: corpus}, function(doc) {
21 var docTopicDist = dirichlet({alpha: alpha});
22 mapData({data: doc}, function(word) {
23 var z = discrete(docTopicDist);
24 var topic = topics[z];
25 observe(Categorical({vs: vocabulary, ps: topic}), word);
26 });
27 });
28 return topics;
29}));
30
s46 +psonnet-46-primer-v3TV<11.000
webppl
1var vocabulary = ['DNA', 'evolution', 'parsing', 'phonology'];
2var eta = ones([vocabulary.length, 1]);
3var numTopics = 2;
4var alpha = ones([numTopics, 1]);
5
6var corpus = [
7 ['DNA', 'evolution', 'DNA', 'evolution'],
8 ['DNA', 'DNA', 'evolution', 'evolution'],
9 ['evolution', 'DNA', 'evolution', 'DNA'],
10 ['parsing', 'phonology', 'parsing', 'phonology'],
11 ['phonology', 'parsing', 'phonology', 'parsing'],
12 ['parsing', 'parsing', 'phonology', 'phonology']
13];
14
15var ANSWER = Infer({method: 'MCMC', samples: 200, lag: 50}, function() {
16 var topics = repeat(numTopics, function() {
17 return T.toScalars(dirichlet({alpha: eta}));
18 });
19
20 mapData({data: corpus}, function(doc) {
21 var topicDist = T.toScalars(dirichlet({alpha: alpha}));
22 mapData({data: doc}, function(word) {
23 var topicIdx = sample(Categorical({vs: _.range(numTopics), ps: topicDist}));
24 var wordDist = topics[topicIdx];
25 observe(Categorical({vs: vocabulary, ps: wordDist}), word);
26 });
27 });
28
29 return topics;
30});
02output overlaydistribution
GT s46 +p48 bins · top 48 of 60
00.170.170.330.33[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.03560363946649995,0.08741968262940499,0.4712660154274694,0.4057106624766257]] A = 0.330 B = 0.000[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.03560363946649995,0.08741968262940499,0.4712660154274694,0.4057106624766257]] A = 0.330 B = 0.000[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.03560363946649995,0.08741968262940499,0.4712660154274694,0.4057106624766257]][[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.04286695153882787,0.06330509482722826,0.37980715722634195,0.5140207964076019]] A = 0.320 B = 0.000[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.04286695153882787,0.06330509482722826,0.37980715722634195,0.5140207964076019]] A = 0.320 B = 0.000[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.12005996814605394,0.04857170560438741,0.364115972951276,0.46725235329828263]] A = 0.090 B = 0.000[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.12005996814605394,0.04857170560438741,0.364115972951276,0.46725235329828263]] A = 0.090 B = 0.000[[0.512074329321596,0.3074020888410914,0.13066105998136096,0.049862521855951664],[0.1031274931021108,0.007420408590634178,0.17903888284612332,0.7104132154611316]] A = 0.000 B = 0.080[[0.512074329321596,0.3074020888410914,0.13066105998136096,0.049862521855951664],[0.1031274931021108,0.007420408590634178,0.17903888284612332,0.7104132154611316]] A = 0.000 B = 0.080[[0.38065299779822026,0.3299247163099222,0.15867752137875826,0.13074476451309933],[0.01345978513204631,0.10670211604040278,0.401535543997136,0.4783025548304149]] A = 0.075 B = 0.000[[0.38065299779822026,0.3299247163099222,0.15867752137875826,0.13074476451309933],[0.01345978513204631,0.10670211604040278,0.401535543997136,0.4783025548304149]] A = 0.075 B = 0.000[[0.38065299779822026,0.3299247163099222,0.15867752137875826,0.13074476451309933],[0.01345978513204631,0.10670211604040278,0.401535543997136,0.4783025548304149]][[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.051894542086595385,0.16227028284500078,0.37075515965754235,0.41508001541086137]] A = 0.000 B = 0.065[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.051894542086595385,0.16227028284500078,0.37075515965754235,0.41508001541086137]] A = 0.000 B = 0.065[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.04745342084000766,0.029594511457219735,0.5064967766446136,0.416455291058159]] A = 0.060 B = 0.000[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.04745342084000766,0.029594511457219735,0.5064967766446136,0.416455291058159]] A = 0.060 B = 0.000[[0.38065299779822026,0.3299247163099222,0.15867752137875826,0.13074476451309933],[0.050516006079644994,0.1871657361366196,0.3153632802687446,0.44695497751499075]] A = 0.050 B = 0.000[[0.38065299779822026,0.3299247163099222,0.15867752137875826,0.13074476451309933],[0.050516006079644994,0.1871657361366196,0.3153632802687446,0.44695497751499075]] A = 0.050 B = 0.000[[0.04745342084000766,0.029594511457219735,0.5064967766446136,0.416455291058159],[0.2996797867988111,0.38797492717024495,0.1415926318934814,0.17075265413746246]] A = 0.000 B = 0.040[[0.04745342084000766,0.029594511457219735,0.5064967766446136,0.416455291058159],[0.2996797867988111,0.38797492717024495,0.1415926318934814,0.17075265413746246]] A = 0.000 B = 0.040[[0.04745342084000766,0.029594511457219735,0.5064967766446136,0.416455291058159],[0.2996797867988111,0.38797492717024495,0.1415926318934814,0.17075265413746246]][[0.48951509935516396,0.3160645233024357,0.07688334889056077,0.11753702845183948],[0.03713151358009502,0.13316560235572922,0.39754125347879155,0.43216163058538437]] A = 0.000 B = 0.035[[0.48951509935516396,0.3160645233024357,0.07688334889056077,0.11753702845183948],[0.03713151358009502,0.13316560235572922,0.39754125347879155,0.43216163058538437]] A = 0.000 B = 0.035[[0.15295165262946586,0.1996916665470667,0.23072951452448973,0.4166271662989778],[0.17788532690099823,0.33010599244279615,0.2608030402593208,0.2312056403968847]] A = 0.030 B = 0.000[[0.15295165262946586,0.1996916665470667,0.23072951452448973,0.4166271662989778],[0.17788532690099823,0.33010599244279615,0.2608030402593208,0.2312056403968847]] A = 0.030 B = 0.000[[0.38065299779822026,0.3299247163099222,0.15867752137875826,0.13074476451309933],[0.20877320691512508,0.03552328855769797,0.3483225818168015,0.40738092271037546]] A = 0.000 B = 0.030[[0.38065299779822026,0.3299247163099222,0.15867752137875826,0.13074476451309933],[0.20877320691512508,0.03552328855769797,0.3483225818168015,0.40738092271037546]] A = 0.000 B = 0.030[[0.3862871618235049,0.42045345200561673,0.14825924633430204,0.04500013983657634],[0.09369734852519869,0.33709125420150204,0.3524341958369066,0.21677720143639267]] A = 0.000 B = 0.025[[0.3862871618235049,0.42045345200561673,0.14825924633430204,0.04500013983657634],[0.09369734852519869,0.33709125420150204,0.3524341958369066,0.21677720143639267]] A = 0.000 B = 0.025[[0.3862871618235049,0.42045345200561673,0.14825924633430204,0.04500013983657634],[0.09369734852519869,0.33709125420150204,0.3524341958369066,0.21677720143639267]][[0.24431953023325223,0.5363157860378962,0.15269311774451225,0.06667156598433933],[0.013921333564961683,0.018282984924567192,0.1841635739102446,0.7836321076002265]] A = 0.000 B = 0.025[[0.24431953023325223,0.5363157860378962,0.15269311774451225,0.06667156598433933],[0.013921333564961683,0.018282984924567192,0.1841635739102446,0.7836321076002265]] A = 0.000 B = 0.025[[0.14413928480227392,0.3211761613253109,0.4861739396078801,0.04851061426453512],[0.33431872821800446,0.32627623286990015,0.0514439135664562,0.2879611253456392]] A = 0.000 B = 0.025[[0.14413928480227392,0.3211761613253109,0.4861739396078801,0.04851061426453512],[0.33431872821800446,0.32627623286990015,0.0514439135664562,0.2879611253456392]] A = 0.000 B = 0.025[[0.23025267165740707,0.6679965433197775,0.03860871406390177,0.06314207095891376],[0.1513750575001934,0.08579285233096544,0.3126938121033907,0.45013827806545037]] A = 0.000 B = 0.025[[0.23025267165740707,0.6679965433197775,0.03860871406390177,0.06314207095891376],[0.1513750575001934,0.08579285233096544,0.3126938121033907,0.45013827806545037]] A = 0.000 B = 0.025[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.1031274931021108,0.007420408590634178,0.17903888284612332,0.7104132154611316]] A = 0.000 B = 0.020[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.1031274931021108,0.007420408590634178,0.17903888284612332,0.7104132154611316]] A = 0.000 B = 0.020[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.1031274931021108,0.007420408590634178,0.17903888284612332,0.7104132154611316]][[0.24431953023325223,0.5363157860378962,0.15269311774451225,0.06667156598433933],[0.1031274931021108,0.007420408590634178,0.17903888284612332,0.7104132154611316]] A = 0.000 B = 0.020[[0.24431953023325223,0.5363157860378962,0.15269311774451225,0.06667156598433933],[0.1031274931021108,0.007420408590634178,0.17903888284612332,0.7104132154611316]] A = 0.000 B = 0.020[[0.14055478533131333,0.7478407044510835,0.025503813031632683,0.08610069718597063],[0.37894573790102803,0.06436693044294492,0.4038341206475013,0.1528532110085257]] A = 0.000 B = 0.020[[0.14055478533131333,0.7478407044510835,0.025503813031632683,0.08610069718597063],[0.37894573790102803,0.06436693044294492,0.4038341206475013,0.1528532110085257]] A = 0.000 B = 0.020[[0.48951509935516396,0.3160645233024357,0.07688334889056077,0.11753702845183948],[0.37894573790102803,0.06436693044294492,0.4038341206475013,0.1528532110085257]] A = 0.000 B = 0.020[[0.48951509935516396,0.3160645233024357,0.07688334889056077,0.11753702845183948],[0.37894573790102803,0.06436693044294492,0.4038341206475013,0.1528532110085257]] A = 0.000 B = 0.020[[0.48951509935516396,0.3160645233024357,0.07688334889056077,0.11753702845183948],[0.027111979845765743,0.05811805153858504,0.5967470756042769,0.31802289301137243]] A = 0.000 B = 0.020[[0.48951509935516396,0.3160645233024357,0.07688334889056077,0.11753702845183948],[0.027111979845765743,0.05811805153858504,0.5967470756042769,0.31802289301137243]] A = 0.000 B = 0.020[[0.48951509935516396,0.3160645233024357,0.07688334889056077,0.11753702845183948],[0.027111979845765743,0.05811805153858504,0.5967470756042769,0.31802289301137243]][[0.10947254108463893,0.6771665920164992,0.08586310415284801,0.1274977627460138],[0.16043010236873786,0.11266341003439558,0.35125382099070007,0.37565266660616636]] A = 0.000 B = 0.020[[0.10947254108463893,0.6771665920164992,0.08586310415284801,0.1274977627460138],[0.16043010236873786,0.11266341003439558,0.35125382099070007,0.37565266660616636]] A = 0.000 B = 0.020[[0.38065299779822026,0.3299247163099222,0.15867752137875826,0.13074476451309933],[0.09369734852519869,0.33709125420150204,0.3524341958369066,0.21677720143639267]] A = 0.000 B = 0.015[[0.38065299779822026,0.3299247163099222,0.15867752137875826,0.13074476451309933],[0.09369734852519869,0.33709125420150204,0.3524341958369066,0.21677720143639267]] A = 0.000 B = 0.015[[0.6299409600175474,0.17875314567025488,0.13991500683916402,0.05139088747303359],[0.07087263053758092,0.33702381192947095,0.31586111656810983,0.27624244096483824]] A = 0.000 B = 0.015[[0.6299409600175474,0.17875314567025488,0.13991500683916402,0.05139088747303359],[0.07087263053758092,0.33702381192947095,0.31586111656810983,0.27624244096483824]] A = 0.000 B = 0.015[[0.1583776602520072,0.11557175951465484,0.6141698803848445,0.11188069984849337],[0.2996797867988111,0.38797492717024495,0.1415926318934814,0.17075265413746246]] A = 0.000 B = 0.015[[0.1583776602520072,0.11557175951465484,0.6141698803848445,0.11188069984849337],[0.2996797867988111,0.38797492717024495,0.1415926318934814,0.17075265413746246]] A = 0.000 B = 0.015[[0.1583776602520072,0.11557175951465484,0.6141698803848445,0.11188069984849337],[0.2996797867988111,0.38797492717024495,0.1415926318934814,0.17075265413746246]][[0.5119010241298915,0.22730137668965525,0.18080899947071985,0.07998859970973338],[0.07687027791110622,0.22664585917995894,0.46512480126386585,0.231359061645069]] A = 0.000 B = 0.015[[0.5119010241298915,0.22730137668965525,0.18080899947071985,0.07998859970973338],[0.07687027791110622,0.22664585917995894,0.46512480126386585,0.231359061645069]] A = 0.000 B = 0.015[[0.4639220855404156,0.3139764507842518,0.1743105434062746,0.04779092026905795],[0.04628173237768381,0.08746974995284547,0.4296198686575559,0.43662864901191495]] A = 0.000 B = 0.015[[0.4639220855404156,0.3139764507842518,0.1743105434062746,0.04779092026905795],[0.04628173237768381,0.08746974995284547,0.4296198686575559,0.43662864901191495]] A = 0.000 B = 0.015[[0.3074403504012918,0.5299401514234103,0.06424813099354962,0.09837136718174819],[0.11273800545941781,0.3181155936400586,0.24206065434590862,0.32708574655461503]] A = 0.000 B = 0.015[[0.3074403504012918,0.5299401514234103,0.06424813099354962,0.09837136718174819],[0.11273800545941781,0.3181155936400586,0.24206065434590862,0.32708574655461503]] A = 0.000 B = 0.015[[0.18333950267772844,0.1472573705984025,0.2225101642134672,0.44689296251040195],[0.17788532690099823,0.33010599244279615,0.2608030402593208,0.2312056403968847]] A = 0.010 B = 0.000[[0.18333950267772844,0.1472573705984025,0.2225101642134672,0.44689296251040195],[0.17788532690099823,0.33010599244279615,0.2608030402593208,0.2312056403968847]] A = 0.010 B = 0.000[[0.18333950267772844,0.1472573705984025,0.2225101642134672,0.44689296251040195],[0.17788532690099823,0.33010599244279615,0.2608030402593208,0.2312056403968847]][[0.40737603013885243,0.251968609019243,0.16273733413183714,0.17791802671006754],[0.01345978513204631,0.10670211604040278,0.401535543997136,0.4783025548304149]] A = 0.010 B = 0.000[[0.40737603013885243,0.251968609019243,0.16273733413183714,0.17791802671006754],[0.01345978513204631,0.10670211604040278,0.401535543997136,0.4783025548304149]] A = 0.010 B = 0.000[[0.22164646964637275,0.5439470369448495,0.12435282908483955,0.11005366432393827],[0.050516006079644994,0.1871657361366196,0.3153632802687446,0.44695497751499075]] A = 0.010 B = 0.000[[0.22164646964637275,0.5439470369448495,0.12435282908483955,0.11005366432393827],[0.050516006079644994,0.1871657361366196,0.3153632802687446,0.44695497751499075]] A = 0.010 B = 0.000[[0.22164646964637275,0.5439470369448495,0.12435282908483955,0.11005366432393827],[0.12005996814605394,0.04857170560438741,0.364115972951276,0.46725235329828263]] A = 0.010 B = 0.000[[0.22164646964637275,0.5439470369448495,0.12435282908483955,0.11005366432393827],[0.12005996814605394,0.04857170560438741,0.364115972951276,0.46725235329828263]] A = 0.010 B = 0.000[[0.15475816853292804,0.15344514966043973,0.18938699151842703,0.5024096902882053],[0.1805989245151792,0.23106445435524559,0.4139990727712658,0.17433754835830947]] A = 0.000 B = 0.010[[0.15475816853292804,0.15344514966043973,0.18938699151842703,0.5024096902882053],[0.1805989245151792,0.23106445435524559,0.4139990727712658,0.17433754835830947]] A = 0.000 B = 0.010[[0.15475816853292804,0.15344514966043973,0.18938699151842703,0.5024096902882053],[0.1805989245151792,0.23106445435524559,0.4139990727712658,0.17433754835830947]][[0.28060576758952366,0.17328148713749622,0.28412053282444527,0.2619922124485349],[0.20004414388401157,0.08688332942431876,0.42739870554426074,0.28567382114740886]] A = 0.000 B = 0.010[[0.28060576758952366,0.17328148713749622,0.28412053282444527,0.2619922124485349],[0.20004414388401157,0.08688332942431876,0.42739870554426074,0.28567382114740886]] A = 0.000 B = 0.010[[0.38065299779822026,0.3299247163099222,0.15867752137875826,0.13074476451309933],[0.10827482539445042,0.10723180584752358,0.18239440812825794,0.6020989606297681]] A = 0.000 B = 0.010[[0.38065299779822026,0.3299247163099222,0.15867752137875826,0.13074476451309933],[0.10827482539445042,0.10723180584752358,0.18239440812825794,0.6020989606297681]] A = 0.000 B = 0.010[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.12416895346795064,0.16798078435442654,0.3433636055248022,0.3644866566528207]] A = 0.000 B = 0.010[[0.529040361125981,0.40919901332987424,0.015925983115092242,0.0458346424290524],[0.12416895346795064,0.16798078435442654,0.3433636055248022,0.3644866566528207]] A = 0.000 B = 0.010[[0.24431953023325223,0.5363157860378962,0.15269311774451225,0.06667156598433933],[0.12805148626276514,0.057206386072899136,0.4374995193146055,0.3772426083497302]] A = 0.000 B = 0.010[[0.24431953023325223,0.5363157860378962,0.15269311774451225,0.06667156598433933],[0.12805148626276514,0.057206386072899136,0.4374995193146055,0.3772426083497302]] A = 0.000 B = 0.010[[0.24431953023325223,0.5363157860378962,0.15269311774451225,0.06667156598433933],[0.12805148626276514,0.057206386072899136,0.4374995193146055,0.3772426083497302]][[0.14055478533131333,0.7478407044510835,0.025503813031632683,0.08610069718597063],[0.3278097500608299,0.08305635340472717,0.17425719819491478,0.4148766983395283]] A = 0.000 B = 0.010[[0.14055478533131333,0.7478407044510835,0.025503813031632683,0.08610069718597063],[0.3278097500608299,0.08305635340472717,0.17425719819491478,0.4148766983395283]] A = 0.000 B = 0.010[[0.48951509935516396,0.3160645233024357,0.07688334889056077,0.11753702845183948],[0.052926747082320647,0.12063517583166952,0.3778847490059128,0.4485533280800972]] A = 0.000 B = 0.010[[0.48951509935516396,0.3160645233024357,0.07688334889056077,0.11753702845183948],[0.052926747082320647,0.12063517583166952,0.3778847490059128,0.4485533280800972]] A = 0.000 B = 0.010[[0.2100200595120942,0.50405453275851,0.18087201175814357,0.10505339597125213],[0.17134889563285804,0.16406059053817146,0.3684243046661596,0.29616620916281094]] A = 0.000 B = 0.010[[0.2100200595120942,0.50405453275851,0.18087201175814357,0.10505339597125213],[0.17134889563285804,0.16406059053817146,0.3684243046661596,0.29616620916281094]] A = 0.000 B = 0.010[[0.6299409600175474,0.17875314567025488,0.13991500683916402,0.05139088747303359],[0.17134889563285804,0.16406059053817146,0.3684243046661596,0.29616620916281094]] A = 0.000 B = 0.010[[0.6299409600175474,0.17875314567025488,0.13991500683916402,0.05139088747303359],[0.17134889563285804,0.16406059053817146,0.3684243046661596,0.29616620916281094]] A = 0.000 B = 0.010[[0.6299409600175474,0.17875314567025488,0.13991500683916402,0.05139088747303359],[0.17134889563285804,0.16406059053817146,0.3684243046661596,0.29616620916281094]][[0.17192673637859726,0.3588827484776484,0.29667524416143976,0.1725152709823146],[0.16884511905748714,0.43949895315018583,0.20924321178091201,0.18241271601141518]] A = 0.000 B = 0.010[[0.17192673637859726,0.3588827484776484,0.29667524416143976,0.1725152709823146],[0.16884511905748714,0.43949895315018583,0.20924321178091201,0.18241271601141518]] A = 0.000 B = 0.010[[0.464574560967558,0.14578050506354226,0.13840011470820254,0.2512448192606972],[0.16884511905748714,0.43949895315018583,0.20924321178091201,0.18241271601141518]] A = 0.000 B = 0.010[[0.464574560967558,0.14578050506354226,0.13840011470820254,0.2512448192606972],[0.16884511905748714,0.43949895315018583,0.20924321178091201,0.18241271601141518]] A = 0.000 B = 0.010[[0.2046388083211205,0.21503537581317786,0.13435788012399533,0.44596793574170623],[0.4470787957239581,0.21721731997954835,0.1023916434753827,0.2333122408211109]] A = 0.000 B = 0.010[[0.2046388083211205,0.21503537581317786,0.13435788012399533,0.44596793574170623],[0.4470787957239581,0.21721731997954835,0.1023916434753827,0.2333122408211109]] A = 0.000 B = 0.010[[0.2046388083211205,0.21503537581317786,0.13435788012399533,0.44596793574170623],[0.27103418860475764,0.054870701623067376,0.2367248140288123,0.4373702957433627]] A = 0.000 B = 0.010[[0.2046388083211205,0.21503537581317786,0.13435788012399533,0.44596793574170623],[0.27103418860475764,0.054870701623067376,0.2367248140288123,0.4373702957433627]] A = 0.000 B = 0.010[[0.2046388083211205,0.21503537581317786,0.13435788012399533,0.44596793574170623],[0.27103418860475764,0.054870701623067376,0.2367248140288123,0.4373702957433627]][[0.43424981714610567,0.11730600445417047,0.08241834475452409,0.36602583364519975],[0.277456892889772,0.459758602490058,0.05104421685123497,0.21174028776893503]] A = 0.000 B = 0.010[[0.43424981714610567,0.11730600445417047,0.08241834475452409,0.36602583364519975],[0.277456892889772,0.459758602490058,0.05104421685123497,0.21174028776893503]] A = 0.000 B = 0.010[[0.035900120523545784,0.44837601730608856,0.23534840330460197,0.28037545886576376],[0.2996797867988111,0.38797492717024495,0.1415926318934814,0.17075265413746246]] A = 0.000 B = 0.010[[0.035900120523545784,0.44837601730608856,0.23534840330460197,0.28037545886576376],[0.2996797867988111,0.38797492717024495,0.1415926318934814,0.17075265413746246]] A = 0.000 B = 0.010[[0.43020226231047953,0.1834102514018465,0.2882423476879584,0.09814513859971544],[0.3722149246211651,0.2656974275445865,0.07800360398868235,0.28408404384556607]] A = 0.000 B = 0.010[[0.43020226231047953,0.1834102514018465,0.2882423476879584,0.09814513859971544],[0.3722149246211651,0.2656974275445865,0.07800360398868235,0.28408404384556607]] A = 0.000 B = 0.010
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer fail ·
haiku-45-primer-v3 haiku-4.5 +primer TV<1 0.995 18.1212 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking fail ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<1 1.000 19.0535 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV<1 1.000 18.9206 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<1 1.000 19.0371 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV<1 1.000 18.9206 ·
probmods2-generative-models / ex1.b
shape record(p1, p2, p3) s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Verify by sampling 1000 times each that the following three programs have the same marginal distribution:

Program 1: flip() ? flip(.7) : flip(.1) Program 2: flip(flip() ? .7 : .1) Program 3: flip(.4)

Return an object literal {p1, p2, p3} where each value is an array of 1000 samples from the corresponding program (use repeat(1000, function() {...})).

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (({
2 p1: repeat(1000, function() { return flip() ? flip(.7) : flip(.1); }),
3 p2: repeat(1000, function() { return flip(flip() ? .7 : .1); }),
4 p3: repeat(1000, function() { return flip(.4); })
5}));
6
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var p1 = repeat(1000, function() { return flip() ? flip(.7) : flip(.1); });
2var p2 = repeat(1000, function() { return flip(flip() ? .7 : .1); });
3var p3 = repeat(1000, function() { return flip(.4); });
4
5var ANSWER = {p1: p1, p2: p2, p3: p3};
02outputrecord(p1, p2, p3)
GT
p1=...
p2=...
p3=...
s46 +p
p1=...
p2=...
p3=...
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 ·
probmods2-generative-models / ex1.c
shape samples s46 +p shape! runs 8/8
per-run
00 prompt

Write a *new* WebPPL expression with the same marginal distribution as flip(.4) (i.e., true with probability 0.4) that looks structurally different from flip(.4), flip() ? flip(.7) : flip(.1), and flip(flip() ? .7 : .1). End with that expression - the harness will rerun your program multiple times to estimate its marginal.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (flip() ? false : flip(.8));
2
s46 +psonnet-46-primer-v3shape!
webppl
1var ANSWER = sample(Bernoulli({p: 0.4}));
02output overlaysamples
GT s46 +p2 bins
00.300.300.610.61false A = 0.610 B = 0.000false A = 0.610 B = 0.0000.61falsetrue A = 0.390 B = 0.000true A = 0.390 B = 0.0000.39true
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer shape! ·
haiku-45-primer-v3 haiku-4.5 +primer shape! ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking shape! ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking shape! ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer shape! ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer shape! ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.05 0.010 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking shape! ·
probmods2-generative-models / ex2.b
shape samples s46 +p TV=11.000 runs 8/8
per-run
00 prompt

Given:

webppl
1var foo = function() { return flip(); };
2[foo(), foo(), foo()];

Each call to foo() independently flips, so the list can have any combination of trues and falses. Modify the program using mem so that [foo(), foo(), foo()] is always either [true, true, true] or [false, false, false]. End with the list expression - the harness will rerun your program multiple times. Use a ; to terminate each top-level statement.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var foo = mem(function() { return flip(); });
2var ANSWER = ([foo(), foo(), foo()]);
3
s46 +psonnet-46-primer-v3TV=11.000
webppl
1var foo = mem(function() { return flip(); });
2var ANSWER = [foo(), foo(), foo()];
02output overlaysamples
GT s46 +p3 bins
00.500.501.001.00[true,true,true] A = 0.510 B = 0.000[true,true,true] A = 0.510 B = 0.0000.51[true,true,true][false,false,false] A = 0.490 B = 0.000[false,false,false] A = 0.490 B = 0.0000.49[false,false,false]true A = 0.000 B = 1.000true A = 0.000 B = 1.0001.00true
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=1 1.000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=1 1.000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=1 1.000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking fail ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=1 1.000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=1 1.000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=1 1.000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=1 1.000 ·
probmods2-generative-models / ex2.c
shape samples s46 +p TV=11.000 runs 8/8
per-run
00 prompt

Given the memoized program:

webppl
1var foo = mem(function() { return flip(); });
2[foo(), foo(), foo()];

Modify it so that the first two elements are always equal but the third can differ. Hint: pass an argument to foo that distinguishes the two calls you want to be the same. End with the list expression. Use a ; to terminate each top-level statement.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var foo = mem(function(x) { return flip(); });
2var ANSWER = ([foo(0), foo(0), foo(1)]);
3
s46 +psonnet-46-primer-v3TV=11.000
webppl
1var foo = mem(function(id) { return flip(); });
2var ANSWER = [foo('a'), foo('a'), foo('b')];
02output overlaysamples
GT s46 +p6 bins
00.330.330.670.67[true,true,false] A = 0.210 B = 0.000[true,true,false] A = 0.210 B = 0.0000.21[true,true,false][false,false,true] A = 0.260 B = 0.000[false,false,true] A = 0.260 B = 0.0000.26[false,false,true][true,true,true] A = 0.300 B = 0.000[true,true,true] A = 0.300 B = 0.0000.30[true,true,true][false,false,false] A = 0.230 B = 0.000[false,false,false] A = 0.230 B = 0.0000.23[false,false,false]true A = 0.000 B = 0.667true A = 0.000 B = 0.6670.67truefalse A = 0.000 B = 0.333false A = 0.000 B = 0.3330.33false
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=1 1.000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=1 1.000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=1 1.000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=1 1.000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=1 1.000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=1 1.000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=1 1.000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=1 1.000 ·
probmods2-generative-models / ex4.b
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Given a simple symptoms model:

webppl
1var allergies = flip(0.3)
2var cold = flip(0.2)
3var sneeze = cold || allergies
4var fever = cold

End with Infer({method: 'forward', samples: 1000}, ...) returning the joint distribution over {sneeze, fever}.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (Infer({method: "forward", samples: 1000}, function() {
2 var allergies = flip(0.3);
3 var cold = flip(0.2);
4
5 var sneeze = cold || allergies;
6 var fever = cold;
7
8 return {"sneeze": sneeze, "fever": fever};
9}));
10
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var model = function() {
2 var allergies = flip(0.3);
3 var cold = flip(0.2);
4 var sneeze = cold || allergies;
5 var fever = cold;
6 return {sneeze: sneeze, fever: fever};
7};
8
9var ANSWER = Infer({method: 'forward', samples: 1000}, model);
02output overlaydistribution
GT s46 +p3 bins
00.270.270.540.54{"sneeze":true,"fever":false} A = 0.247 B = 0.247{"sneeze":true,"fever":false} A = 0.247 B = 0.2470.250.25{"sneeze":true,"fever":false}{"sneeze":false,"fever":false} A = 0.536 B = 0.536{"sneeze":false,"fever":false} A = 0.536 B = 0.5360.540.54{"sneeze":false,"fever":false}{"sneeze":true,"fever":true} A = 0.217 B = 0.217{"sneeze":true,"fever":true} A = 0.217 B = 0.2170.220.22{"sneeze":true,"fever":true}
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-generative-models / ex4.c
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Given a multi-patient symptoms model attempted via per-person functions:

webppl
1var allergies = function(person) { return flip(.3) }
2var cold = function(person) { return flip(.2) }
3var sneeze = function(person) { return cold(person) || allergies(person) }
4[sneeze('bob'), sneeze('alice')]

Add fever, then end with Infer({method: 'forward', samples: 1000}, ...) returning the joint distribution over Bob's symptoms {sneeze, fever}. The raw program double-counts: sneeze('bob') flips a fresh cold, and so does fever('bob'). Fix this by using mem on cold and allergies so the same person has consistent disease state within a sample.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (Infer({method: "forward", samples: 1000}, function() {
2 var allergies = mem(function(person) { return flip(.3); });
3 var cold = mem(function(person) { return flip(.2); });
4
5 var sneeze = function(person) { return cold(person) || allergies(person); };
6 var fever = function(person) { return cold(person); };
7
8 return {"sneeze": sneeze('bob'), "fever": fever('bob')};
9}));
10
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var allergies = mem(function(person) { return flip(0.3); });
2var cold = mem(function(person) { return flip(0.2); });
3var sneeze = function(person) { return cold(person) || allergies(person); };
4var fever = function(person) { return cold(person); };
5
6var model = function() {
7 return { sneeze: sneeze('bob'), fever: fever('bob') };
8};
9
10var ANSWER = Infer({method: 'forward', samples: 1000}, model);
02output overlaydistribution
GT s46 +p3 bins
00.270.270.550.55{"sneeze":true,"fever":true} A = 0.204 B = 0.204{"sneeze":true,"fever":true} A = 0.204 B = 0.2040.200.20{"sneeze":true,"fever":true}{"sneeze":false,"fever":false} A = 0.549 B = 0.549{"sneeze":false,"fever":false} A = 0.549 B = 0.5490.550.55{"sneeze":false,"fever":false}{"sneeze":true,"fever":false} A = 0.247 B = 0.247{"sneeze":true,"fever":false} A = 0.247 B = 0.2470.250.25{"sneeze":true,"fever":false}
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<.5 0.109 0.0462 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<.5 0.109 0.0462 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<.5 0.079 1.0777 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<.5 0.128 0.0668 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-generative-models / ex5.b
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Given:

webppl
1var makeCoin = function(weight) {
2 return function() { return flip(weight) ? 'h' : 't' }
3}
4var bend = function(coin) {
5 return function() {
6 return coin() == 'h' ? makeCoin(.7)() : makeCoin(.1)()
7 }
8}
9var fairCoin = makeCoin(.5)
10var bentCoin = bend(fairCoin)

End with Infer({method: 'forward', samples: 10000}, bentCoin) returning the bent coin's distribution.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var makeCoin = function(weight) {
2 return function() {
3 return flip(weight) ? 'h' : 't';
4 };
5};
6var bend = function(coin) {
7 return function() {
8 return coin() == 'h' ? makeCoin(.7)() : makeCoin(.1)();
9 };
10};
11
12var fairCoin = makeCoin(.5);
13var bentCoin = bend(fairCoin);
14var ANSWER = (Infer({method: 'forward', samples: 10000}, bentCoin));
15
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var makeCoin = function(weight) {
2 return function() { return flip(weight) ? 'h' : 't' }
3}
4var bend = function(coin) {
5 return function() {
6 return coin() == 'h' ? makeCoin(.7)() : makeCoin(.1)()
7 }
8}
9var fairCoin = makeCoin(.5)
10var bentCoin = bend(fairCoin)
11
12var ANSWER = Infer({method: 'forward', samples: 10000}, bentCoin);
02output overlaydistribution
GT s46 +p2 bins
00.300.300.600.60t A = 0.600 B = 0.600t A = 0.600 B = 0.6000.600.60th A = 0.400 B = 0.400h A = 0.400 B = 0.4000.400.40h
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-generative-models / ex6.b
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

The recursive geometric distribution is defined as:

webppl
1var geometric = function() {
2 return flip() ? 0 : 1 + geometric()
3}

End with Infer({method: 'forward', samples: 10000}, geometric) returning its distribution.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var geometric = function() {
2 return flip() ? 0 : 1 + geometric();
3};
4var ANSWER = (Infer({method: "forward", samples:10000}, geometric));
5
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var geometric = function() {
2 return flip() ? 0 : 1 + geometric();
3};
4
5var ANSWER = Infer({method: 'forward', samples: 10000}, geometric);
02output overlaydistribution
GT s46 +p13 bins · 0 … 13
00.250.250.500.500 A = 0.497 B = 0.4970 A = 0.497 B = 0.4970.500.5001 A = 0.248 B = 0.2481 A = 0.248 B = 0.2480.250.2512 A = 0.129 B = 0.1292 A = 0.129 B = 0.1290.130.1323 A = 0.064 B = 0.0643 A = 0.064 B = 0.0640.060.0634 A = 0.035 B = 0.0354 A = 0.035 B = 0.0350.030.0345 A = 0.013 B = 0.0135 A = 0.013 B = 0.0130.010.0156 A = 0.007 B = 0.0076 A = 0.007 B = 0.0070.010.0167 A = 0.004 B = 0.0047 A = 0.004 B = 0.00478 A = 0.002 B = 0.0028 A = 0.002 B = 0.00289 A = 0.001 B = 0.0019 A = 0.001 B = 0.001910 A = 0.000 B = 0.00010 A = 0.000 B = 0.0001011 A = 0.000 B = 0.00011 A = 0.000 B = 0.0001113 A = 0.000 B = 0.00013 A = 0.000 B = 0.00013
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·
probmods2-generative-models / ex7.a
shape samples s46 +p TV=11.000 runs 8/8
per-run
00 prompt

Convert this joint probability table into a compact WebPPL program:

| A | B | P(A,B) | |---|---|--------| | F | F | 0.14 | | F | T | 0.06 | | T | F | 0.4 | | T | T | 0.4 |

Requirement: fix P(A) first, then define the probability of B as a function of A. Use flip(...) for both. End with the expression [a, b] - the harness will rerun your program multiple times. Use a ; to terminate each top-level statement.

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var a = flip(0.8);
2var b = flip(a ? 0.5 : 0.3);
3var ANSWER = ([a, b]);
4
s46 +psonnet-46-primer-v3TV=11.000
webppl
1var a = flip(0.8);
2var b = a ? flip(0.5) : flip(0.3);
3var ANSWER = [a, b];
02output overlaysamples
GT s46 +p6 bins
00.250.250.500.50[true,false] A = 0.360 B = 0.000[true,false] A = 0.360 B = 0.0000.36[true,false][true,true] A = 0.460 B = 0.000[true,true] A = 0.460 B = 0.0000.46[true,true][false,false] A = 0.160 B = 0.000[false,false] A = 0.160 B = 0.0000.16[false,false][false,true] A = 0.020 B = 0.000[false,true] A = 0.020 B = 0.0000.02[false,true]true A = 0.000 B = 0.500true A = 0.000 B = 0.5000.50truefalse A = 0.000 B = 0.500false A = 0.000 B = 0.5000.50false
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV<1 1.000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV<1 1.000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV<1 1.000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV<1 1.000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV<.5 0.080 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=1 1.000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV<.5 0.080 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=1 1.000 ·
probmods2-generative-models / ex7.b
shape distribution s46 +p TV=00.000 runs 8/8
per-run
00 prompt

Wrap the joint probability program for (A, B) - where P(A=T)=0.8 and P(B=T|A) is 0.5 if A=T else 0.3 - in Infer({method: 'forward', samples: 10000}, ...) to verify the joint distribution. End with the Infer(...) returning [a, b].

system prompt constant across atoms
(system prompt loads here)
WebPPL primer applied to *-primer-* runs
(primer loads here)
01 code comparing GT vs s46 +p
GTground truth
webppl
1var ANSWER = (Infer({method: "forward", samples: 10000}, function() {
2 var a = flip(0.8);
3 var b = flip(a ? 0.5 : 0.3);
4 return [a, b];
5}));
6
s46 +psonnet-46-primer-v3TV=00.000
webppl
1var model = function() {
2 var a = flip(0.8);
3 var b = flip(a ? 0.5 : 0.3);
4 return [a, b];
5};
6
7var ANSWER = Infer({method: 'forward', samples: 10000}, model);
02output overlaydistribution
GT s46 +p4 bins
00.200.200.410.41[true,false] A = 0.396 B = 0.396[true,false] A = 0.396 B = 0.3960.400.40[true,false][true,true] A = 0.406 B = 0.406[true,true] A = 0.406 B = 0.4060.410.41[true,true][false,true] A = 0.063 B = 0.063[false,true] A = 0.063 B = 0.0630.060.06[false,true][false,false] A = 0.136 B = 0.136[false,false] A = 0.136 B = 0.1360.140.14[false,false]
03 other runs 8 total
run flags bucket TV KL actions
haiku-45-noprimer-v3 haiku-4.5 no-primer TV=0 0.000 0.0000 ·
haiku-45-primer-v3 haiku-4.5 +primer TV=0 0.000 0.0000 ·
haiku-45-think-noprimer-v3 haiku-4.5 no-primer thinking TV=0 0.000 0.0000 ·
haiku-45-think-primer-v3 haiku-4.5 +primer thinking TV=0 0.000 0.0000 ·
sonnet-46-noprimer-v3 sonnet-4.6 no-primer TV=0 0.000 0.0000 ·
sonnet-46-primer-v3 primary sonnet-4.6 +primer TV=0 0.000 0.0000 ·
sonnet-46-think-noprimer-v3 sonnet-4.6 no-primer thinking TV=0 0.000 0.0000 ·
sonnet-46-think-primer-v3 sonnet-4.6 +primer thinking TV=0 0.000 0.0000 ·