Search in sources :

Example 6 with Factor

use of com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor in project aic-praise by aic-sri-international.

the class ConstantFactor method add.

@Override
public Factor add(Factor another) {
    Factor result = null;
    if (another instanceof ConstantFactor) {
        ConstantFactor anotherConstant = (ConstantFactor) another;
        result = addTwoConstantFactors(anotherConstant);
    } else if (another instanceof ExpressionFactor) {
        ExpressionFactor anotherExpression = (ExpressionFactor) another;
        result = evaluateAsFactor(Plus.make(makeSymbol(getConstant()), (Expression) another), anotherExpression.getContext());
    } else if (another instanceof TableFactor) {
        TableFactor anotherTable = (TableFactor) another;
        result = addATableFactor(anotherTable);
    } else {
        throw new Error("Unknown class for another : class was " + another.getClass());
    }
    return result;
}
Also used : ExpressionFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.api.ExpressionFactor) DefaultExpressionFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.core.DefaultExpressionFactor) TableFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.table.TableFactor) Expression(com.sri.ai.expresso.api.Expression) ExpressionFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.api.ExpressionFactor) TableFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.table.TableFactor) Factor(com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor) DefaultExpressionFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.core.DefaultExpressionFactor)

Example 7 with Factor

use of com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor in project aic-praise by aic-sri-international.

the class AbstractExpressionFactor method evaluateAsFactor.

public Factor evaluateAsFactor(Expression expression) {
    Expression resultFactorExpression = evaluate(expression);
    Factor result = makeFactor(resultFactorExpression);
    return result;
}
Also used : Expression(com.sri.ai.expresso.api.Expression) ConstantFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.ConstantFactor) ExpressionFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.api.ExpressionFactor) Factor(com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor) ZeroFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.ZeroFactor) IdentityFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.IdentityFactor)

Example 8 with Factor

use of com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor in project aic-praise by aic-sri-international.

the class AbstractExpressionFactor method sumOut.

@Override
public Factor sumOut(List<? extends Variable> variablesToSumOut) {
    Expression sum = makeSum(variablesToSumOut);
    Factor result = evaluateAsFactor(sum);
    return result;
}
Also used : Expression(com.sri.ai.expresso.api.Expression) ConstantFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.ConstantFactor) ExpressionFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.api.ExpressionFactor) Factor(com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor) ZeroFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.ZeroFactor) IdentityFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.IdentityFactor)

Example 9 with Factor

use of com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor in project aic-praise by aic-sri-international.

the class AnytimeExactBPTest method solveWithAnytimeExactBP.

private Expression solveWithAnytimeExactBP(Expression query, ExpressionFactorNetwork factorNetwork, Context context) {
    Expression result;
    println("\nSolving with Anytime\n");
    long initialTime = System.currentTimeMillis();
    ExactBPNode<Variable, Factor> exactBP = new ExpressionExactBP(query, factorNetwork);
    AnytimeExactBP<Variable, Factor> anytimeExactBP = new AnytimeExactBP<>(exactBP);
    Approximation<Factor> current = null;
    while (anytimeExactBP.hasNext()) {
        current = anytimeExactBP.next();
        println("Current bound on " + exactBP.getMessageVariable() + ": " + current);
    }
    long finalTime = System.currentTimeMillis();
    if (current == null) {
        throw new Error("Anytime BP should have at least one approximation, but had none.");
    } else {
        ExpressionFactor resultFactor = (ExpressionFactor) ((IntensionalConvexHullOfFactors) current).getFactor();
        result = PRAiSEUtil.normalize(query, resultFactor, context);
        println("P(" + exactBP.getMessageVariable() + "): " + result);
        println("Time: " + (finalTime - initialTime) + " ms.");
    }
    return result;
}
Also used : ExpressionFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.api.ExpressionFactor) Variable(com.sri.ai.praise.core.representation.interfacebased.factor.api.Variable) AnytimeExactBP(com.sri.ai.praise.core.inference.byinputrepresentation.interfacebased.core.exactbp.anytime.rodrigo.AnytimeExactBP) Expression(com.sri.ai.expresso.api.Expression) ExpressionFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.api.ExpressionFactor) Factor(com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor) ExpressionExactBP(com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.core.ExpressionExactBP)

Example 10 with Factor

use of com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor in project aic-praise by aic-sri-international.

the class ProceduralAttachmentFactorTest method testReals.

@Test
public void testReals() {
    ExpressoConfiguration.setDisplayNumericsExactlyForSymbols(false);
    ExpressoConfiguration.setDisplayNumericsMostDecimalPlacesInApproximateRepresentationOfNumericalSymbols(3);
    Theory theory;
    Context context;
    Procedure<Double> procedure1;
    Procedure<Double> procedure2;
    Procedure<Double> procedure3;
    Procedure<Double> procedure4;
    Procedure<Double> procedure5;
    Wrapper<Boolean> ran1 = new Wrapper<Boolean>(false);
    Wrapper<Boolean> ran2 = new Wrapper<Boolean>(false);
    Wrapper<Boolean> ran3 = new Wrapper<Boolean>(false);
    Wrapper<Boolean> ran4 = new Wrapper<Boolean>(false);
    Wrapper<Boolean> ran5 = new Wrapper<Boolean>(false);
    ExpressionFactorNetwork network;
    Factor queryResult;
    theory = new CommonTheory();
    context = new TrueContext(theory);
    context = context.extendWithSymbolsAndTypes(parse("V1"), parse("Boolean"), parse("V2"), parse("Boolean"), parse("V3"), parse("Boolean"), parse("V4"), parse("Boolean"), parse("V5"), parse("Boolean"), parse("O1"), parse("Real"), parse("O2"), parse("Real"), parse("O3"), parse("Real"), parse("O4"), parse("Real"), parse("O5"), parse("Real"));
    procedure1 = p -> {
        println("Proceeding with procedure 1!");
        ran1.value = true;
        return 1.0;
    };
    procedure2 = p -> {
        println("Proceeding with procedure 2!");
        ran2.value = true;
        return 2.0;
    };
    procedure3 = p -> {
        println("Proceeding with procedure 3!");
        ran3.value = true;
        // this is going to make the condition fail!
        return 30.0;
    };
    procedure4 = p -> {
        println("Proceeding with procedure 4!");
        ran4.value = true;
        return 4.0;
    };
    procedure5 = p -> {
        println("Proceeding with procedure 5!");
        ran5.value = true;
        return 5.0;
    };
    ProceduralAttachments proceduralAttachments = new DefaultProceduralAttachments(map("O1", procedure1, "O2", procedure2, "O3", procedure3, "O4", procedure4, "O5", procedure5));
    List<Expression> factorExpressions = list(parse("if V1 and O1 > 0.9 and O1 < 1.1 and V2 then 0.8 else 0.2"), parse("if V2 and O2 > 1.9 and O2 < 2.1 and V3 then 0.8 else 0.2"), parse("if V3 and O3 > 2.9 and O3 < 3.1 and V4 then 0.8 else 0.2"), parse("if V4 and O4 > 3.9 and O4 < 4.1 and V5 then 0.8 else 0.2"), parse("if V5 and O5 > 4.9 and O5 < 5.1 then 0.8 else 0.2"));
    network = expressionFactorNetwork(factorExpressions, proceduralAttachments, context);
    ExactBP algorithm = new ExactBP(new DefaultExpressionVariable(parse("V1")), network);
    queryResult = algorithm.apply();
    println("Result computed for query V1.");
    println("Result: " + queryResult);
    assertTrue(ran1.value);
    assertTrue(ran2.value);
    assertTrue(ran3.value);
    assertFalse(ran4.value);
    assertFalse(ran5.value);
    ran1.value = false;
    ran2.value = false;
    ran3.value = false;
    ran4.value = false;
    ran5.value = false;
// TODO: why is the test below failing?
// // We need to create the procedural attachments and network again because procedures are run only once and then just use cached values.
// proceduralAttachments =
// new DefaultProceduralAttachments(
// map(
// "O1", procedure1,
// "O2", procedure2,
// "O3", procedure3,
// "O4", procedure4,
// "O5", procedure5
// ));
// network = expressionFactorNetwork(factorExpressions, proceduralAttachments, context);
// 
// algorithm = new ExactBP(new DefaultExpressionVariable(parse("O1")), network);
// queryResult = algorithm.apply();
// println("Result computed for query O1.");
// println("Result: " + queryResult);
// 
// assertTrue(ran1.value);
// assertTrue(ran2.value);
// assertTrue(ran3.value);
// assertFalse(ran4.value);
// assertFalse(ran5.value);
// assertEquals(queryResult.toString(), "if O1 > 0.99 then if O1 < 1.01 then 0.006 else 0 else 0");
}
Also used : TrueContext(com.sri.ai.grinder.core.TrueContext) Context(com.sri.ai.grinder.api.Context) Wrapper(com.sri.ai.util.base.Wrapper) ExpressionFactorNetwork(com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.core.ExpressionFactorNetwork) DefaultExpressionVariable(com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.core.DefaultExpressionVariable) CommonTheory(com.sri.ai.grinder.application.CommonTheory) Theory(com.sri.ai.grinder.api.Theory) TrueContext(com.sri.ai.grinder.core.TrueContext) CommonTheory(com.sri.ai.grinder.application.CommonTheory) ExactBP(com.sri.ai.praise.core.inference.byinputrepresentation.interfacebased.core.exactbp.fulltime.core.ExactBP) Expression(com.sri.ai.expresso.api.Expression) Factor(com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor) ProceduralAttachments(com.sri.ai.praise.other.integration.proceduralattachment.api.ProceduralAttachments) DefaultProceduralAttachments(com.sri.ai.praise.other.integration.proceduralattachment.core.DefaultProceduralAttachments) DefaultProceduralAttachments(com.sri.ai.praise.other.integration.proceduralattachment.core.DefaultProceduralAttachments) Test(org.junit.Test)

Aggregations

Factor (com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor)61 ExpressionFactor (com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.api.ExpressionFactor)34 ConstantFactor (com.sri.ai.praise.core.representation.interfacebased.factor.core.ConstantFactor)26 TableFactor (com.sri.ai.praise.core.representation.interfacebased.factor.core.table.TableFactor)21 Expression (com.sri.ai.expresso.api.Expression)20 DefaultExpressionFactor (com.sri.ai.praise.core.representation.interfacebased.factor.core.expression.core.DefaultExpressionFactor)18 Context (com.sri.ai.grinder.api.Context)16 CommonTheory (com.sri.ai.grinder.application.CommonTheory)16 TrueContext (com.sri.ai.grinder.core.TrueContext)16 Test (org.junit.Test)14 Theory (com.sri.ai.grinder.api.Theory)13 DifferenceArithmeticTheory (com.sri.ai.grinder.theory.differencearithmetic.DifferenceArithmeticTheory)11 Variable (com.sri.ai.praise.core.representation.interfacebased.factor.api.Variable)10 RandomTableFactorMaker.makeRandomTableFactor (com.sri.ai.praise.core.representation.interfacebased.factor.core.table.helper.RandomTableFactorMaker.makeRandomTableFactor)10 ArrayList (java.util.ArrayList)10 CompoundTheory (com.sri.ai.grinder.theory.compound.CompoundTheory)9 EqualityTheory (com.sri.ai.grinder.theory.equality.EqualityTheory)9 LinearRealArithmeticTheory (com.sri.ai.grinder.theory.linearrealarithmetic.LinearRealArithmeticTheory)9 PropositionalTheory (com.sri.ai.grinder.theory.propositional.PropositionalTheory)9 TupleTheory (com.sri.ai.grinder.theory.tuple.TupleTheory)9