/* Simple mixture model in Picat. From SPPL model simple-mixture-model.pynb """ X ~= .525 * norm(loc=-8, scale=2) \ | .100 * norm(loc=0, scale=2) \ | .375 * norm(loc=7, scale=3) modelc = n.model.(observe/fail ((0 < n.X) < 10) | ((-6 < n.X) < -3)) """ Cf my Gamble model gamble_simple_mixture_model.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. /* cluster = none var : c Probabilities: 2: 0.3362427686998883 3: 0.3361412767684969 1: 0.3276159545316147 mean = 2.00853 HPD intervals: HPD interval (0.94): 1.00000000000000..3.00000000000000 Histogram: 1: 3228 ########################################################## (0.328 / 0.328) 2: 3313 ############################################################ (0.336 / 0.664) 3: 3312 ############################################################ (0.336 / 1.000) var : x Probabilities (truncated): 6.122068079948838: 0.0001014919313915 6.100607623505209: 0.0001014919313915 5.945705802809558: 0.0001014919313915 5.880594559328464: 0.0001014919313915 ......... -5.970247478818552: 0.0001014919313915 -5.976228456951426: 0.0001014919313915 -5.997922219365943: 0.0001014919313915 -5.998829062810534: 0.0001014919313915 mean = -0.452729 HPD intervals: HPD interval (0.94): -5.55213483598706..3.96309688685640 Histogram: -5.999: 51 ## (0.005 / 0.005) -5.696: 134 #### (0.014 / 0.019) -5.393: 207 ####### (0.021 / 0.040) -5.090: 273 ######### (0.028 / 0.067) -4.787: 326 ########### (0.033 / 0.101) -4.484: 364 ############ (0.037 / 0.138) -4.181: 393 ############# (0.040 / 0.177) -3.878: 359 ############ (0.036 / 0.214) -3.575: 317 ########## (0.032 / 0.246) -3.272: 270 ######### (0.027 / 0.273) -2.969: 211 ####### (0.021 / 0.295) -2.666: 143 ##### (0.015 / 0.309) -2.363: 101 ### (0.010 / 0.320) -2.060: 39 # (0.004 / 0.324) -1.757: 15 (0.002 / 0.325) -1.453: 17 # (0.002 / 0.327) -1.150: 3 (0.000 / 0.327) -0.847: 10 (0.001 / 0.328) -0.544: 83 ### (0.008 / 0.337) -0.241: 1004 ################################# (0.102 / 0.438) 0.062: 1825 ############################################################ (0.185 / 0.624) 0.365: 490 ################ (0.050 / 0.673) 0.668: 103 ### (0.010 / 0.684) 0.971: 114 #### (0.012 / 0.695) 1.274: 177 ###### (0.018 / 0.713) 1.577: 207 ####### (0.021 / 0.734) 1.880: 271 ######### (0.028 / 0.762) 2.183: 340 ########### (0.035 / 0.796) 2.486: 338 ########### (0.034 / 0.831) 2.789: 341 ########### (0.035 / 0.865) 3.092: 345 ########### (0.035 / 0.900) 3.395: 271 ######### (0.028 / 0.928) 3.698: 228 ####### (0.023 / 0.951) 4.001: 157 ##### (0.016 / 0.967) 4.304: 136 #### (0.014 / 0.981) 4.607: 90 ### (0.009 / 0.990) 4.910: 55 ## (0.006 / 0.995) 5.213: 22 # (0.002 / 0.998) 5.516: 15 (0.002 / 0.999) 5.819: 8 (0.001 / 1.000) cluster = 1 var : c Probabilities: 1: 1.0000000000000000 mean = 1.0 HPD intervals: HPD interval (0.94): 1.00000000000000..1.00000000000000 Histogram: 1: 3219 ############################################################ (1.000 / 1.000) var : x Probabilities (truncated): -0.741629495947117: 0.0003106554830693 -0.835165893952397: 0.0003106554830693 -0.890587531628747: 0.0003106554830693 -0.893960962972735: 0.0003106554830693 ......... -5.989517396289762: 0.0003106554830693 -5.990588479098215: 0.0003106554830693 -5.99452041150006: 0.0003106554830693 -5.999914376187061: 0.0003106554830693 mean = -4.09605 HPD intervals: HPD interval (0.94): -5.76214415343110..-2.36213212537784 Histogram: -6.000: 15 ##### (0.005 / 0.005) -5.868: 40 ############## (0.012 / 0.017) -5.737: 47 ################ (0.015 / 0.032) -5.606: 73 ######################### (0.023 / 0.054) -5.474: 83 ############################ (0.026 / 0.080) -5.343: 98 ################################## (0.030 / 0.111) -5.211: 101 ################################### (0.031 / 0.142) -5.080: 132 ############################################# (0.041 / 0.183) -4.948: 128 ############################################ (0.040 / 0.223) -4.817: 139 ################################################ (0.043 / 0.266) -4.685: 141 ################################################ (0.044 / 0.310) -4.554: 175 ############################################################ (0.054 / 0.364) -4.422: 175 ############################################################ (0.054 / 0.418) -4.291: 175 ############################################################ (0.054 / 0.473) -4.160: 173 ########################################################### (0.054 / 0.527) -4.028: 146 ################################################## (0.045 / 0.572) -3.897: 174 ############################################################ (0.054 / 0.626) -3.765: 143 ################################################# (0.044 / 0.670) -3.634: 140 ################################################ (0.043 / 0.714) -3.502: 148 ################################################### (0.046 / 0.760) -3.371: 122 ########################################## (0.038 / 0.798) -3.239: 101 ################################### (0.031 / 0.829) -3.108: 90 ############################### (0.028 / 0.857) -2.976: 82 ############################ (0.025 / 0.883) -2.845: 83 ############################ (0.026 / 0.908) -2.713: 68 ####################### (0.021 / 0.929) -2.582: 33 ########### (0.010 / 0.940) -2.451: 51 ################# (0.016 / 0.956) -2.319: 38 ############# (0.012 / 0.967) -2.188: 25 ######### (0.008 / 0.975) -2.056: 21 ####### (0.007 / 0.982) -1.925: 14 ##### (0.004 / 0.986) -1.793: 7 ## (0.002 / 0.988) -1.662: 9 ### (0.003 / 0.991) -1.530: 12 #### (0.004 / 0.995) -1.399: 4 # (0.001 / 0.996) -1.267: 2 # (0.001 / 0.997) -1.136: 5 ## (0.002 / 0.998) -1.005: 2 # (0.001 / 0.999) -0.873: 4 # (0.001 / 1.000) cluster = 2 var : c Probabilities: 2: 1.0000000000000000 mean = 2.0 HPD intervals: HPD interval (0.94): 2.00000000000000..2.00000000000000 Histogram: 2: 3345 ############################################################ (1.000 / 1.000) var : x Probabilities (truncated): 0.69696929313362: 0.0002989536621824 0.654728418813444: 0.0002989536621824 0.620366824930181: 0.0002989536621824 0.617334033325364: 0.0002989536621824 ......... -0.595150924549528: 0.0002989536621824 -0.616364758159774: 0.0002989536621824 -0.625332274161877: 0.0002989536621824 -0.753362739867929: 0.0002989536621824 mean = 0.0044262 HPD intervals: HPD interval (0.94): -0.38342495013771..0.37558825882213 Histogram: -0.753: 1 (0.000 / 0.000) -0.717: 0 (0.000 / 0.000) -0.681: 0 (0.000 / 0.000) -0.645: 0 (0.000 / 0.000) -0.608: 5 # (0.001 / 0.002) -0.572: 3 # (0.001 / 0.003) -0.536: 10 ## (0.003 / 0.006) -0.500: 4 # (0.001 / 0.007) -0.463: 15 ### (0.004 / 0.011) -0.427: 32 ####### (0.010 / 0.021) -0.391: 39 ######### (0.012 / 0.033) -0.355: 64 ############### (0.019 / 0.052) -0.318: 61 ############## (0.018 / 0.070) -0.282: 71 ################ (0.021 / 0.091) -0.246: 134 ############################## (0.040 / 0.131) -0.209: 118 ########################### (0.035 / 0.167) -0.173: 148 ################################## (0.044 / 0.211) -0.137: 208 ############################################### (0.062 / 0.273) -0.101: 174 ######################################## (0.052 / 0.325) -0.064: 226 ################################################### (0.068 / 0.393) -0.028: 250 ######################################################### (0.075 / 0.467) 0.008: 264 ############################################################ (0.079 / 0.546) 0.044: 225 ################################################### (0.067 / 0.613) 0.081: 241 ####################################################### (0.072 / 0.686) 0.117: 178 ######################################## (0.053 / 0.739) 0.153: 186 ########################################## (0.056 / 0.794) 0.189: 145 ################################# (0.043 / 0.838) 0.226: 162 ##################################### (0.048 / 0.886) 0.262: 95 ###################### (0.028 / 0.914) 0.298: 80 ################## (0.024 / 0.938) 0.334: 67 ############### (0.020 / 0.958) 0.371: 49 ########### (0.015 / 0.973) 0.407: 27 ###### (0.008 / 0.981) 0.443: 24 ##### (0.007 / 0.988) 0.479: 17 #### (0.005 / 0.993) 0.516: 8 ## (0.002 / 0.996) 0.552: 6 # (0.002 / 0.998) 0.588: 4 # (0.001 / 0.999) 0.624: 2 (0.001 / 0.999) 0.661: 2 (0.001 / 1.000) cluster = 3 var : c Probabilities: 3: 1.0000000000000000 mean = 3.0 HPD intervals: HPD interval (0.94): 3.00000000000000..3.00000000000000 Histogram: 3: 3295 ############################################################ (1.000 / 1.000) var : x Probabilities (truncated): 6.44983808151958: 0.0003034901365706 6.388075568952464: 0.0003034901365706 5.949182603754092: 0.0003034901365706 5.919868370525854: 0.0003034901365706 ......... -0.7870224375522: 0.0003034901365706 -0.909248939387656: 0.0003034901365706 -0.961592659788761: 0.0003034901365706 -1.816252460163774: 0.0003034901365706 mean = 2.60091 HPD intervals: HPD interval (0.94): 0.51231491063963..4.79524055710487 Histogram: -1.816: 1 (0.000 / 0.000) -1.610: 0 (0.000 / 0.000) -1.403: 0 (0.000 / 0.000) -1.196: 0 (0.000 / 0.000) -0.990: 2 (0.001 / 0.001) -0.783: 1 (0.000 / 0.001) -0.576: 3 # (0.001 / 0.002) -0.370: 8 ## (0.002 / 0.005) -0.163: 11 ### (0.003 / 0.008) 0.044: 18 #### (0.005 / 0.013) 0.250: 30 ####### (0.009 / 0.022) 0.457: 30 ####### (0.009 / 0.032) 0.664: 58 ############## (0.018 / 0.049) 0.870: 75 ################## (0.023 / 0.072) 1.077: 108 ########################## (0.033 / 0.105) 1.284: 123 ############################## (0.037 / 0.142) 1.490: 155 ###################################### (0.047 / 0.189) 1.697: 185 ############################################# (0.056 / 0.245) 1.903: 214 #################################################### (0.065 / 0.310) 2.110: 220 ##################################################### (0.067 / 0.377) 2.317: 212 ################################################### (0.064 / 0.441) 2.523: 211 ################################################### (0.064 / 0.505) 2.730: 248 ############################################################ (0.075 / 0.581) 2.937: 216 #################################################### (0.066 / 0.646) 3.143: 234 ######################################################### (0.071 / 0.717) 3.350: 169 ######################################### (0.051 / 0.768) 3.557: 176 ########################################### (0.053 / 0.822) 3.763: 159 ###################################### (0.048 / 0.870) 3.970: 124 ############################## (0.038 / 0.908) 4.177: 79 ################### (0.024 / 0.932) 4.383: 60 ############### (0.018 / 0.950) 4.590: 48 ############ (0.015 / 0.964) 4.797: 34 ######## (0.010 / 0.975) 5.003: 37 ######### (0.011 / 0.986) 5.210: 18 #### (0.005 / 0.992) 5.417: 14 ### (0.004 / 0.996) 5.623: 7 ## (0.002 / 0.998) 5.830: 4 # (0.001 / 0.999) 6.037: 1 (0.000 / 0.999) 6.243: 2 (0.001 / 1.000) */ go ?=> member(Cluster,[none,1,2,3]), println(cluster=Cluster), reset_store, run_model(10_000,$model(Cluster), [show_probs_trunc,mean,show_hpd_intervals,hpd_intervals=[0.94], show_histogram]), nl, % show_store_lengths, fail, nl. go => true. model(Cluster) => C = categorical([1/3,1/3,1/3],1..3), X = cases([[C==1, 0.525 * normal_dist(-8,2)], [C==2, 0.100 * normal_dist(0,2)], [true, 0.375 * normal_dist(7,3)]]), observe( ((X >0, X < 10) ; (X > -6, X < 3) )), if Cluster != none then observe(C == Cluster) end, if observed_ok then add("c",C), add("x",X) end.