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);
}
}