Search in sources :

Example 56 with Factor

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

the class GradientAnytimeExactBP method getAbsoluteVolumeVariationFromVariableToFactorWithRespectTo.

// implementation based on logVolume
private Double getAbsoluteVolumeVariationFromVariableToFactorWithRespectTo(Anytime<Factor> sub, Collection<? extends Variable> subAtomicPolytopeIndices) {
    // root is a factor
    Approximation<Factor> subApproximation = sub.getCurrentApproximation();
    AtomicPolytope subAtomicPolytope = transformApproximationToAtomicPolytopeOrThrowsErrorIfNotPossible(subApproximation);
    Approximation<Factor> rootApproximation = getCurrentApproximation();
    IntensionalConvexHullOfFactors rootConvexHull = transformApproximationToConvexHullOrThrowsErrorIfNotPossible(rootApproximation);
    Collection<? extends Variable> rootIndices = rootConvexHull.getIndices();
    Factor rootFactor = rootConvexHull.getFactor();
    Factor normalizedMaxFactor = createNormalizedMaxFactor(rootIndices);
    Factor normalizedMinFactor = createNormalizedMinFactor(rootIndices);
    Factor invertedMaxMinusMinFactor = computeInvertedMaxMinusMinFactor(rootFactor, subAtomicPolytopeIndices);
    Factor normalizedMaxFactorWithoutOneSub = createNormalizedMaxFactorWithoutOneSub(sub, rootIndices);
    Factor normalizedMinFactorWithoutOneSub = createNormalizedMinFactorWithoutOneSub(sub, rootIndices);
    Factor minusNormalizedMinFactorWithoutOneSub = normalizedMinFactorWithoutOneSub.multiply(new ConstantFactor(1.));
    Factor MaxMinusMinFactorWithoutOneSub = normalizedMaxFactorWithoutOneSub.add(minusNormalizedMinFactorWithoutOneSub);
    Factor firstTermProduct = invertedMaxMinusMinFactor.multiply(MaxMinusMinFactorWithoutOneSub);
    Factor firstTerm = firstTermProduct.sumOut(new ArrayList<>(rootConvexHull.getFreeVariables()));
    return null;
}
Also used : IntensionalConvexHullOfFactors(com.sri.ai.praise.core.representation.interfacebased.polytope.core.byexpressiveness.convexhull.IntensionalConvexHullOfFactors) ConstantFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.ConstantFactor) Factor(com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor) ConstantFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.ConstantFactor) AtomicPolytope(com.sri.ai.praise.core.representation.interfacebased.polytope.api.AtomicPolytope)

Example 57 with Factor

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

the class GradientAnytimeExactBP method getAbsoluteVolumeVariationFromFactorToVariableWithRespectTo.

private Double getAbsoluteVolumeVariationFromFactorToVariableWithRespectTo(Anytime<Factor> sub, Collection<? extends Variable> subAtomicPolytopeIndices) {
    // root is a variable
    Approximation<Factor> subApproximation = sub.getCurrentApproximation();
    AtomicPolytope subAtomicPolytope = transformApproximationToAtomicPolytopeOrThrowsErrorIfNotPossible(subApproximation);
    Approximation<Factor> rootApproximation = getCurrentApproximation();
    IntensionalConvexHullOfFactors rootConvexHull = transformApproximationToConvexHullOrThrowsErrorIfNotPossible(rootApproximation);
    Collection<? extends Variable> rootIndices = rootConvexHull.getIndices();
    Factor rootFactor = rootConvexHull.getFactor();
    Factor normalizedMaxFactor = createNormalizedMaxFactor(rootIndices);
    Factor normalizedMinFactor = createNormalizedMinFactor(rootIndices);
    Factor invertedMaxMinusMinFactor = computeInvertedMaxMinusMinFactor(rootFactor, subAtomicPolytopeIndices);
    List<Variable> rootFreeVariables = new ArrayList<>(rootConvexHull.getFreeVariables());
    Factor maxFactor = rootFactor.max(rootIndices);
    Factor maxNormalizationConstant = maxFactor.sumOut(rootFreeVariables);
    Factor invertedMaxNormalizationConstant = maxNormalizationConstant.invert();
    Factor maxProduct = invertedMaxMinusMinFactor.multiply(invertedMaxNormalizationConstant);
    Factor minFactor = rootFactor.min(rootIndices);
    Factor minNormalizationConstant = minFactor.sumOut(rootFreeVariables);
    Factor invertedMinNormalizationConstant = minNormalizationConstant.invert();
    Factor minProduct = invertedMaxMinusMinFactor.multiply(invertedMinNormalizationConstant);
    Polytope summedOutPolytopeWithoutOneSub = sumOutWithoutOneSub(sub);
    IntensionalConvexHullOfFactors rootConvexHullWithoutOneSub = (IntensionalConvexHullOfFactors) summedOutPolytopeWithoutOneSub;
    Factor rootFactorWithoutOneSub = rootConvexHullWithoutOneSub.getFactor();
    Factor summedOutRootFactorWithoutOneSub = rootFactorWithoutOneSub.sumOut(rootFreeVariables);
    return null;
// TODO
}
Also used : Polytopes.identityPolytope(com.sri.ai.praise.core.representation.interfacebased.polytope.core.byexpressiveness.convexhull.Polytopes.identityPolytope) AtomicPolytope(com.sri.ai.praise.core.representation.interfacebased.polytope.api.AtomicPolytope) Polytope(com.sri.ai.praise.core.representation.interfacebased.polytope.api.Polytope) Variable(com.sri.ai.praise.core.representation.interfacebased.factor.api.Variable) IntensionalConvexHullOfFactors(com.sri.ai.praise.core.representation.interfacebased.polytope.core.byexpressiveness.convexhull.IntensionalConvexHullOfFactors) ConstantFactor(com.sri.ai.praise.core.representation.interfacebased.factor.core.ConstantFactor) Factor(com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor) ArrayList(java.util.ArrayList) AtomicPolytope(com.sri.ai.praise.core.representation.interfacebased.polytope.api.AtomicPolytope)

Example 58 with Factor

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

the class BFS method next.

@Override
public AEBPFactorTreeNode next() {
    if (!hasNext()) {
        throw new NoSuchElementException();
    }
    AEBPFactorTreeNode next = queue.remove();
    for (Variable variableNeighbour : model.getEntireGraph().getNeighbors(next.getRoot())) {
        AEBPVariableTreeNode variableTreeNode;
        if (fromNodeToPartition.get(variableNeighbour) == null) {
            variableTreeNode = new AEBPVariableTreeNode(variableNeighbour, next, isExhausted);
            next.addChild(variableTreeNode);
            fromNodeToPartition.put(variableNeighbour, variableTreeNode);
        } else {
            variableTreeNode = (AEBPVariableTreeNode) fromNodeToPartition.get(variableNeighbour);
        }
        for (Factor factorNeighbour : model.getEntireGraph().getNeighbors(variableNeighbour)) {
            if (!visited.contains(factorNeighbour)) {
                AEBPFactorTreeNode factorTreeNode = new AEBPFactorTreeNode(factorNeighbour, variableTreeNode, isExhausted);
                // variableTreeNode.addChild(factorTreeNode);
                visited.add(factorNeighbour);
                queue.add(factorTreeNode);
            }
        }
    }
    return next;
}
Also used : Variable(com.sri.ai.praise.core.representation.interfacebased.factor.api.Variable) AEBPFactorTreeNode(com.sri.ai.praise.core.inference.byinputrepresentation.interfacebased.core.exactbp.anytime.gabriel.aebptree.AEBPFactorTreeNode) AEBPVariableTreeNode(com.sri.ai.praise.core.inference.byinputrepresentation.interfacebased.core.exactbp.anytime.gabriel.aebptree.AEBPVariableTreeNode) Factor(com.sri.ai.praise.core.representation.interfacebased.factor.api.Factor) NoSuchElementException(java.util.NoSuchElementException)

Example 59 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 max.

@Override
public Factor max(Collection<? extends Variable> variablesToMaximize) {
    Factor result = this;
    List<? extends Variable> variablesOfInterest = keepOnlyVariablesOfInterest(variablesToMaximize);
    if (variablesOfInterest.isEmpty()) {
        return result;
    }
    Expression set = makeIntensionalMultiSet(variablesOfInterest);
    Expression max = apply(MAX, set);
    result = evaluateAsFactor(max);
    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 60 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 invert.

@Override
public Factor invert() {
    if (isZero()) {
        throw new Error("Cannot invert the Zero factor.");
    } else {
        Factor result;
        result = new ConstantFactor(1 / getConstant());
        return result;
    }
}
Also used : 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)

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