/* Asia problem in Picat. Cf my Gamble model gamble_asia.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 : smoker Probabilities: true: 0.6674836601307189 false: 0.3325163398692810 mean = [true = 0.667484,false = 0.332516] var : tb Probabilities: false: 0.9256535947712419 true: 0.0743464052287582 mean = [false = 0.925654,true = 0.0743464] var : cancer Probabilities: false: 0.9242919389978214 true: 0.0757080610021787 mean = [false = 0.924292,true = 0.0757081] var : tb or cancer Probabilities: false: 0.8540305010893247 true: 0.1459694989106754 mean = [false = 0.854031,true = 0.145969] var : bronchitis Probabilities: true: 1.0000000000000000 mean = [true = 1.0] var : xray Probabilities: false: 0.8090958605664488 true: 0.1909041394335512 mean = [false = 0.809096,true = 0.190904] var : dyspnoea 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() => Smoker = flip(0.5), TB = flip(condt(Smoker,0.05,0.1)), Cancer = flip(condt(Smoker,0.1,0.01)), TBOrCancer = cond((TB ; Cancer),true,false), Bronchitis = flip(condt(Smoker,0.6,0.3)), Xray = flip(condt(TBOrCancer,0.98,0.05)), Dyspnoea = flip(cond(TBOrCancer, cond(Bronchitis,0.9,0.7), cond(Bronchitis,0.8,0.1))), observe(Bronchitis), observe(Dyspnoea), if observed_ok then add("smoker",Smoker), add("tb",TB), add("cancer",Cancer), add("tb or cancer",TBOrCancer), add("bronchitis",Bronchitis), add("xray",Xray), add("dyspnoea",Dyspnoea), end.