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