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.GibbsAsk; 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 GibbsAskTest { public static final double DELTA_THRESHOLD = ProbabilityModel.DEFAULT_ROUNDING_THRESHOLD; @Test public void testGibbsAsk_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, 0.5, 0.5, 0.6, 0.5, 0.5, 0.6, 0.5, 0.5 }); GibbsAsk ga = new GibbsAsk(r); double[] estimate = ga.gibbsAsk( new RandomVariable[] { ExampleRV.RAIN_RV }, e, bn, 3) .getValues(); Assert.assertArrayEquals(new double[] { 0.3333333333333333, 0.6666666666666666 }, estimate, DELTA_THRESHOLD); } }