/* Flipping three coins in Picat. From http://www.statistics101.net/statistics101web_000007.htm """ From CliffsQuickReview Statistics, p. 38, example 1 What is the probability of simultaneously flipping 3 coins and having them all land heads? """ Exact: Picat> pdf_all($binomial_dist(3,1/2)).sort_down(2).printf_list 2 0.375 1 0.375 3 0.125 0 0.125 Picat> X=binomial_dist_pdf(3,1/2,3) X = 0.125 Picat> X = pdf($binomial_dist(3,1/2),3) X = 0.125 Cf my Gamble model gamble_flipping_three_coins.rkt This program was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import ppl_distributions, ppl_utils. import util. % import ordset. main => go. /* var : heads Probabilities: 2: 0.3793000000000000 1: 0.3779000000000000 0: 0.1237000000000000 3: 0.1191000000000000 mean = 1.4938 var : p Probabilities: false: 0.8809000000000000 true: 0.1191000000000000 mean = [false = 0.8809,true = 0.1191] */ go ?=> reset_store, run_model(10_000,$model,[show_probs_trunc,mean]), nl, % show_store_lengths,nl, % fail, nl. go => true. model() => Coin = [0,1], Sample = resample(3,Coin), Heads = count_occurrences(1,Sample), P = check(Heads == 3), add("heads",Heads), add("p",P). /* Another approach var : heads Probabilities: 2: 0.3774000000000000 1: 0.3677000000000000 3: 0.1291000000000000 0: 0.1258000000000000 mean = 1.5098 var : p Probabilities: false: 0.8709000000000000 true: 0.1291000000000000 mean = [false = 0.8709,true = 0.1291] */ go2 ?=> reset_store, run_model(10_000,$model2,[show_probs_trunc,mean]), nl, % show_store_lengths,nl, % fail, nl. go2 => true. model2() => Throws = bern_n(1/2,3), Heads = Throws.sum, P = check(Heads == 3), add("heads",Heads), add("p",P).