def test_sample_binary_random_variable(): cpt = {'T': {'T': 1.0, 'F': 0.0}, 'F': {'T': 0.0, 'F': 1.0}, 'prior': {'T': 1.0, 'F': 0.0}} for i in range(100): s = problem_1.sample_binary_random_variable('prior', cpt) assert s == 'T' s = problem_1.sample_binary_random_variable('T', cpt) assert s == 'T' s = problem_1.sample_binary_random_variable('F', cpt) assert s == 'F'
def particle_filtering_umbrella_network(numSamples, umbrella_evidence, rain_cpt, umbrella_cpt): # S is a list of N particles # each particle is 'T' or 'F' # initialize the particles with the prior probability of rain P(rain=T)=0.5 S = [problem_1.sample_binary_random_variable('prior', rain_cpt) for n in range(numSamples)] W = [1.0] * numSamples for i, e in enumerate(umbrella_evidence): for n in range(numSamples): S[n] = problem_1.sample_binary_random_variable(S[n], rain_cpt) W[n] *= umbrella_cpt[S[n]][e] S, W = weighted_sample_with_replacement(S, W) return S
def weighted_sample_umbrella_network(umbrella_evidence, rain_cpt, umbrella_cpt): # return sample x and weight w x = [] w = 1.0 # sample rain for t=0 rain_0 = problem_1.sample_binary_random_variable('prior', rain_cpt) w *= weight_for_evidence(rain_0, umbrella_cpt, umbrella_evidence[0]) x.append(rain_0) # sample rain for t>0 for t in range(1, len(umbrella_evidence)): # sample rain_t rain_t_minus_1 = x[t - 1] rain_t = problem_1.sample_binary_random_variable(rain_t_minus_1, rain_cpt) x.append(rain_t) # update the weight w *= weight_for_evidence(rain_t, umbrella_cpt, umbrella_evidence[t]) return x, w