/* Student mood after exam in Picat. Cf my Gamble model gamble_student_mood_after_exam.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 : difficulty Probabilities: easy: 0.5982384823848238 hard: 0.4017615176151761 mean = [easy = 0.598238,hard = 0.401762] var : grade Probabilities: good: 0.6744579945799458 bad: 0.3255420054200542 mean = [good = 0.674458,bad = 0.325542] var : mood Probabilities: good: 0.5000000000000000 bad: 0.5000000000000000 mean = [good = 0.5,bad = 0.5] var : preparation Probabilities: good: 1.0000000000000000 mean = [good = 1.0] */ go ?=> reset_store, run_model(10_000,$model,[show_probs_trunc,mean]), nl, % fail, nl. go => true. model() => BadGood = [bad,good], Difficulty = categorical([0.6,0.4],[easy,hard]), Preparation = categorical([0.7,0.3],BadGood), Grade = cases([ [(Difficulty == easy, Preparation==bad), categorical([0.95,0.05],BadGood)], [(Difficulty == easy, Preparation==good), categorical([0.5,0.5],BadGood)], [(Difficulty == hard, Preparation==bad), categorical([0.6,0.4],BadGood)], [(Difficulty == hard, Preparation==good), categorical([0.05,0.95],BadGood)], [true, unknown_grade] ]), Mood = cond(Grade == bad, categorical([0.9,0.1],BadGood), categorical([0.3,0.7],BadGood)), % observe(Difficulty==easy), observe(Preparation==good), % observe(Grade==bad), % observe(Mood==bad), if observed_ok then add_all([ ["difficulty",Difficulty], ["preparation",Preparation], ["grade",Grade], ["mood",Mood] ]) end.