/* * File: ImportanceSamplingTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright Oct 22, 2009, Sandia Corporation. * Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive * license for use of this work by or on behalf of the U.S. Government. * Export of this program may require a license from the United States * Government. See CopyrightHistory.txt for complete details. * */ package gov.sandia.cognition.statistics.method; import gov.sandia.cognition.statistics.ProbabilityDensityFunction; import gov.sandia.cognition.statistics.UnivariateProbabilityDensityFunction; import gov.sandia.cognition.statistics.distribution.BetaDistribution; import gov.sandia.cognition.statistics.distribution.UnivariateGaussian; import gov.sandia.cognition.util.DefaultWeightedValue; import java.util.ArrayList; import junit.framework.TestCase; import java.util.Random; /** * Unit tests for ImportanceSamplingTest. * * @author krdixon */ public class ImportanceSamplingTest extends TestCase { /** * Random number generator to use for a fixed random seed. */ public final Random RANDOM = new Random( 1 ); /** * Default tolerance of the regression tests, {@value}. */ public final double TOLERANCE = 1e-5; /** * Tests for class ImportanceSamplingTest. * @param testName Name of the test. */ public ImportanceSamplingTest( String testName) { super(testName); } /** * Tests the constructors of class ImportanceSamplingTest. */ public void testConstructors() { System.out.println( "Constructors" ); ImportanceSampling instance = new ImportanceSampling(); assertNotNull( instance ); } /** * Test of sample method, of class ImportanceSampling. */ public void testSample() { System.out.println("sample"); ProbabilityDensityFunction<Double> importanceDistribution = new UnivariateGaussian.PDF( 1.0, 2.0 ); UnivariateProbabilityDensityFunction targetDistribution = new BetaDistribution.PDF( 1.0, 2.0 ); int numSamples = 100000; ArrayList<DefaultWeightedValue<Double>> result = ImportanceSampling.sample(importanceDistribution, targetDistribution, RANDOM, numSamples); UnivariateGaussian estimate = UnivariateGaussian.WeightedMaximumLikelihoodEstimator.learn(result,0.0); System.out.println( "Estimate: " + estimate ); System.out.println( "Target: Mean: " + targetDistribution.getMean() + " Variance: " + targetDistribution.getVariance() ); assertEquals( targetDistribution.getMean(), estimate.getMean(), 10.0/Math.sqrt(numSamples) ); assertEquals( targetDistribution.getVariance(), estimate.getVariance(), 10.0/Math.sqrt(numSamples) ); } }