Example #1
0
def free_energy(eps,q,mu,samples=1000,use_annealed_approx=False):
    """Compute free energy for true distribution given best approximation.  Return beta*free_energy,actually"""
    # def Q(xs):
    #     return product(fd(ep,mu) if x else 1 - fd(ep,mu) for x,ep in zip(xs,eps))
    Sq = -sum((p*log(p)+(1-p)*log(1-p) for p in probs(eps,mu)))
    def E(xs):
        """Compute energy function for P,unnormalized"""
        ff = falling_fac(q,sum(xs))
        if ff == 0:
            return 1000
        else:
            return log(ff) + sum(ep*x for (x,ep) in zip(xs,eps))
    if use_annealed_approx: # to get around impossible states where E=\infty
        mean_E = log(mean(exp(E(rstate(eps,mu))) for i in range(samples))) # take <E(xs)>_Q
    else:
        mean_E = mean(E(rstate(eps,mu)) for i in range(samples)) # take <E(xs)>_Q
    return beta*mean_E - Sq
Example #2
0
 def proposal(ss):
     #state = [int(random.random() < p) for _ in range(len(ss))]
     state = rstate(eps,mu)
     #print "proposed state with occ:",sum(state)
     return state