def run(num_vars, num_values, num_missing, polytree, p): bn = multinomial.random_network(num_vars, num_values, polytree=polytree, p=p) z, missing = random_var(num_vars, num_values, num_missing=num_missing) x = bn.var(npr.choice(missing)) # if len(missing) == 1: # print bn # print x.dist(z) print "exact", i_exact = inference.enumeration_ask(bn, x, np.array(z)) print "likelihood", i_likel = inference.likelihood_weighting(bn, x, np.array(z)) lr1 = likelihood_ratio(i_exact, i_likel) print "%6.4f" % (lr1,), print "gibbs", i_gibbs = inference.gibbs(bn, x, np.array(z)) lr2 = likelihood_ratio(i_exact, i_gibbs) print "%6.4f" % (lr2,) return lr1, lr2