Ejemplo n.º 1
0
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'
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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