/* Sprinkler problem in Picat. From http://www.cs.ubc.ca/~murphyk/Bayes/bnintro.html Cf my Gamble model gamble_sprinkler.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. main => go. /* var : cloudy Probabilities: true: 0.5803020961775586 false: 0.4196979038224414 mean = [true = 0.580302,false = 0.419698] var : rain Probabilities: true: 0.7185573366214550 false: 0.2814426633785450 mean = [true = 0.718557,false = 0.281443] var : sprinkler Probabilities: false: 0.5866214549938348 true: 0.4133785450061652 mean = [false = 0.586621,true = 0.413379] var : wet grass Probabilities: true: 1.0000000000000000 mean = [true = 1.0] */ go ?=> reset_store, run_model(10_000,$model,[show_probs_trunc,mean]), nl, % fail, nl. go => true. model() => Cloudy = flip(0.5), Sprinkler = condt(Cloudy,flip(0.1),flip(0.5)), Rain = condt(Cloudy,flip(0.8),flip(0.2)), WetGrass = cases([ [(not Sprinkler, not Rain), false], [(Sprinkler, not Rain), flip(0.9)], [(not Sprinkler, Rain), flip(0.9)], [(Sprinkler, Rain), flip(0.99)], [true,false] ]), observe(WetGrass), if observed_ok then add_all([ ["cloudy",Cloudy], ["sprinkler",Sprinkler], ["rain",Rain], ["wet grass",WetGrass] ]) end