/* Grass in Picat. This is a port of the R2 model Grass.cs We observe that the grass is wet. Did it rain? Output from the R2 model: """ Mean: 0.699 Variance: 0.21061 Number of accepted samples = 790 """ Cf my Gamble model gamble_grass.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 : rain Probabilities: true: 0.7112424195303996 false: 0.2887575804696004 mean = [true = 0.711242,false = 0.288758] var : cloudy Probabilities: true: 0.5838905302441300 false: 0.4161094697558700 mean = [true = 0.583891,false = 0.416109] var : sprinkler Probabilities: false: 0.5691183330741720 true: 0.4308816669258280 mean = [false = 0.569118,true = 0.430882] var : wet roof Probabilities: false: 0.5062976208987716 true: 0.4937023791012284 mean = [false = 0.506298,true = 0.493702] var : temp2 Probabilities: true: 0.9583268542994868 false: 0.0416731457005131 mean = [true = 0.958327,false = 0.0416731] var : temp3 Probabilities: true: 0.9273829886487327 false: 0.0726170113512673 mean = [true = 0.927383,false = 0.072617] */ go ?=> reset_store, run_model(10_000,$model,[show_probs_trunc,mean]), nl, % show_store_lengths, % fail, nl. go => true. model() => Cloudy = flip(0.5), Rain = condt(Cloudy,flip(0.8),flip(0.2)), Sprinkler = condt(Cloudy,flip(0.1),flip(0.5)), Temp1 = flip(0.7), WetRoof = check((Temp1,Rain)), Temp2 = flip(0.9), Temp3 = flip(0.9), WetGrass = check( ( (Temp2,Rain) ; (Temp3,Sprinkler)) ), % We observe that the grass is wet. % Did it rain? observe(WetGrass), if observed_ok then add("rain",Rain), add("cloudy",Cloudy), add("sprinkler",Sprinkler), add("wet roof",WetRoof), add("temp2",Temp2), add("temp3",Temp3), end.