Package aima.test.core.unit.probability.bayes.approx

Source Code of aima.test.core.unit.probability.bayes.approx.LikelihoodWeightingTest

package aima.test.core.unit.probability.bayes.approx;

import org.junit.Assert;
import org.junit.Test;

import aima.core.probability.ProbabilityModel;
import aima.core.probability.RandomVariable;
import aima.core.probability.bayes.BayesianNetwork;
import aima.core.probability.bayes.approx.LikelihoodWeighting;
import aima.core.probability.example.BayesNetExampleFactory;
import aima.core.probability.example.ExampleRV;
import aima.core.probability.proposition.AssignmentProposition;
import aima.core.util.MockRandomizer;

/**
*
* @author Ciaran O'Reilly
* @author Ravi Mohan
*/
public class LikelihoodWeightingTest {

  public static final double DELTA_THRESHOLD = ProbabilityModel.DEFAULT_ROUNDING_THRESHOLD;

  @Test
  public void testLikelihoodWeighting_basic() {
    BayesianNetwork bn = BayesNetExampleFactory
        .constructCloudySprinklerRainWetGrassNetwork();
    AssignmentProposition[] e = new AssignmentProposition[] { new AssignmentProposition(
        ExampleRV.SPRINKLER_RV, Boolean.TRUE) };
    MockRandomizer r = new MockRandomizer(
        new double[] { 0.5, 0.5, 0.5, 0.5 });

    LikelihoodWeighting lw = new LikelihoodWeighting(r);

    double[] estimate = lw.likelihoodWeighting(
        new RandomVariable[] { ExampleRV.RAIN_RV }, e, bn, 1000)
        .getValues();

    Assert.assertArrayEquals(new double[] { 1.0, 0.0 }, estimate,
        DELTA_THRESHOLD);
  }

  @Test
  public void testLikelihoodWeighting_AIMA3e_pg533() {
    // AIMA3e pg. 533
    // <b>P</b>(Rain | Cloudy = true, WetGrass = true)
    BayesianNetwork bn = BayesNetExampleFactory
        .constructCloudySprinklerRainWetGrassNetwork();
    AssignmentProposition[] e = new AssignmentProposition[] {
        new AssignmentProposition(ExampleRV.CLOUDY_RV, Boolean.TRUE),
        new AssignmentProposition(ExampleRV.WET_GRASS_RV, Boolean.TRUE) };
    // sample P(Sprinkler | Cloudy = true) = <0.1, 0.9>; suppose
    // Sprinkler=false
    // sample P(Rain | Cloudy = true) = <0.8, 0.2>; suppose Rain=true
    MockRandomizer r = new MockRandomizer(new double[] { 0.5, 0.5 });

    LikelihoodWeighting lw = new LikelihoodWeighting(r);
    double[] estimate = lw.likelihoodWeighting(
        new RandomVariable[] { ExampleRV.RAIN_RV }, e, bn, 1)
        .getValues();

    // Here the event [true,false,true,true] should have weight 0.45,
    // and this is tallied under Rain = true, which when normalized
    // should be <1.0, 0.0>;
    Assert.assertArrayEquals(new double[] { 1.0, 0.0 }, estimate,
        DELTA_THRESHOLD);
  }
}
TOP

Related Classes of aima.test.core.unit.probability.bayes.approx.LikelihoodWeightingTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.