use of com.sri.ai.grinder.sgdpllt.core.TrueContext in project aic-praise by aic-sri-international.
the class InferenceForFactorGraphAndEvidenceTest method runTestWithFactorizationOption.
/**
* @param useFactorization
* @param queryExpression
* @param evidence
* @param expected
* @param isBayesianNetwork
* @param factorGraph
* @param mapFromRandomVariableNameToTypeName
* @param mapFromNonUniquelyNamedConstantNameToTypeName
* @param mapFromUniquelyNamedConstantNameToTypeName
* @param mapFromCategoricalTypeNameToSizeString
*/
private void runTestWithFactorizationOption(boolean useFactorization, Expression queryExpression, Expression evidence, Expression expected, boolean isBayesianNetwork, List<Expression> factors, Map<String, String> mapFromRandomVariableNameToTypeName, Map<String, String> mapFromNonUniquelyNamedConstantNameToTypeName, Map<String, String> mapFromUniquelyNamedConstantNameToTypeName, Map<String, String> mapFromCategoricalTypeNameToSizeString, Collection<Type> additionalTypes) {
InferenceForFactorGraphAndEvidence inferencer;
Expression marginal;
inferencer = new InferenceForFactorGraphAndEvidence(new ExpressionFactorsAndTypes(factors, mapFromRandomVariableNameToTypeName, mapFromNonUniquelyNamedConstantNameToTypeName, mapFromUniquelyNamedConstantNameToTypeName, mapFromCategoricalTypeNameToSizeString, additionalTypes), isBayesianNetwork, evidence, useFactorization, null);
marginal = inferencer.solve(queryExpression);
TrueContext context = new TrueContext();
marginal = Expressions.roundToAGivenPrecision(marginal, 9, context);
expected = Expressions.roundToAGivenPrecision(expected, 9, context);
if (expected.equals(marginal)) {
// Ok!
} else // check if they are not identical, but equivalent expressions
if (inferencer.evaluate(apply(MINUS, expected, marginal)).equals(ZERO)) {
// first attempt was to compare with equality, but this requires a more complete test of equality theory literals to exclude such a complex equality from being considered a literal, which is much more expensive
// Ok!
} else {
throw new AssertionError("expected:<" + expected + "> but was:<" + marginal + ">, which is not even equivalent.");
}
// Not working yet, need to debug
// Expression negationMarginal;
// negationMarginal = inferencer.solve(Not.make(queryExpression));
// negationMarginal = Expressions.roundToAGivenPrecision(negationMarginal, 9, context);
// expected = inferencer.evaluate(parse(negationMarginal + " = 1 - " + marginal));
// assertEquals(expected, TRUE);
}
Aggregations