public void testFindVariable () { FactorGraph mdl = models [0]; Variable[] vars = new Variable [mdl.numVariables ()]; Iterator it = mdl.variablesIterator (); while (it.hasNext()) { Variable var = (Variable) it.next(); String name = new String (var.getLabel()); assertTrue (var == mdl.findVariable (name)); } assertTrue (mdl.findVariable ("xsdfasdf") == null); }
public void testFindVariable () { FactorGraph mdl = models [0]; Variable[] vars = new Variable [mdl.numVariables ()]; Iterator it = mdl.variablesIterator (); while (it.hasNext()) { Variable var = (Variable) it.next(); String name = new String (var.getLabel()); assertTrue (var == mdl.findVariable (name)); } assertTrue (mdl.findVariable ("xsdfasdf") == null); }
public void testUndirectedIndices() { for (int mdlIdx = 0; mdlIdx < models.length; mdlIdx++) { FactorGraph mdl = models[mdlIdx]; for (Iterator it = mdl.variablesIterator (); it.hasNext();) { Variable var1 = (Variable) it.next(); Variable var2 = mdl.get(mdl.getIndex(var1)); assertTrue("Mismatch in Variable index for " + var1 + " vs " + var2 + " in model " + mdlIdx + "\n" + mdl, var1 == var2); } } logger.info("Test undirectedIndices passed."); }
public void testUndirectedIndices() { for (int mdlIdx = 0; mdlIdx < models.length; mdlIdx++) { FactorGraph mdl = models[mdlIdx]; for (Iterator it = mdl.variablesIterator (); it.hasNext();) { Variable var1 = (Variable) it.next(); Variable var2 = mdl.get(mdl.getIndex(var1)); assertTrue("Mismatch in Variable index for " + var1 + " vs " + var2 + " in model " + mdlIdx + "\n" + mdl, var1 == var2); } } logger.info("Test undirectedIndices passed."); }
public void testLoopyConvergence () { Random r = new Random (67); FactorGraph mdl = createRandomGrid (5, 5, 2, r); LoopyBP loopy = new LoopyBP (); loopy.computeMarginals (mdl); assertTrue (loopy.iterationsUsed() > 8); }
public void testJtConsistency() { for (int mdlIdx = 0; mdlIdx < models.length; mdlIdx++) { UndirectedModel mdl = models[mdlIdx]; JunctionTreeInferencer jti = new JunctionTreeInferencer(); JunctionTree jt = jti.buildJunctionTree(mdl); for (Iterator it = jt.getVerticesIterator(); it.hasNext();) { VarSet parent = (VarSet) it.next(); for (Iterator it2 = jt.getChildren(parent).iterator(); it2.hasNext();) { VarSet child = (VarSet) it2.next(); Factor ptl = jt.getSepsetPot(parent, child); Set intersection = parent.intersection (child); assertTrue (intersection.equals (ptl.varSet())); } } } }
public void testLoopyConvergence () { Random r = new Random (67); FactorGraph mdl = createRandomGrid (5, 5, 2, r); LoopyBP loopy = new LoopyBP (); loopy.computeMarginals (mdl); assertTrue (loopy.iterationsUsed() > 8); }
private void compareMarginals (String msg, Factor[] pre, Factor[] post) { for (int i = 0; i < pre.length; i++) { Factor ptl1 = pre[i]; Factor ptl2 = post[i]; assertTrue (msg + "\n" + ptl1.dumpToString () + "\n" + ptl2.dumpToString (), ptl1.almostEquals (ptl2, 1e-3)); } }
private void compareMarginals (String msg, Factor[] pre, Factor[] post) { for (int i = 0; i < pre.length; i++) { Factor ptl1 = pre[i]; Factor ptl2 = post[i]; assertTrue (msg + "\n" + ptl1.dumpToString () + "\n" + ptl2.dumpToString (), ptl1.almostEquals (ptl2, 1e-3)); } }
public void testJtConsistency() { for (int mdlIdx = 0; mdlIdx < models.length; mdlIdx++) { UndirectedModel mdl = models[mdlIdx]; JunctionTreeInferencer jti = new JunctionTreeInferencer(); JunctionTree jt = jti.buildJunctionTree(mdl); for (Iterator it = jt.getVerticesIterator(); it.hasNext();) { VarSet parent = (VarSet) it.next(); for (Iterator it2 = jt.getChildren(parent).iterator(); it2.hasNext();) { VarSet child = (VarSet) it2.next(); Factor ptl = jt.getSepsetPot(parent, child); Set intersection = parent.intersection (child); assertTrue (intersection.equals (ptl.varSet())); } } } }
public void testLogNormalize () { FactorGraph mdl = models [0]; Iterator it = mdl.variablesIterator (); Variable v1 = (Variable) it.next(); Variable v2 = (Variable) it.next(); Random rand = new Random (3214123); for (int i = 0; i < 10; i++) { Factor ptl = randomEdgePotential (rand, v1, v2); Factor norm1 = new LogTableFactor((AbstractTableFactor) ptl); Factor norm2 = ptl.duplicate(); norm1.normalize(); norm2.normalize(); assertTrue ("LogNormalize failed! Correct: "+norm2+" Log-normed: "+norm1, norm1.almostEquals (norm2)); } }
public void testLogNormalize () { FactorGraph mdl = models [0]; Iterator it = mdl.variablesIterator (); Variable v1 = (Variable) it.next(); Variable v2 = (Variable) it.next(); Random rand = new Random (3214123); for (int i = 0; i < 10; i++) { Factor ptl = randomEdgePotential (rand, v1, v2); Factor norm1 = new LogTableFactor((AbstractTableFactor) ptl); Factor norm2 = ptl.duplicate(); norm1.normalize(); norm2.normalize(); assertTrue ("LogNormalize failed! Correct: "+norm2+" Log-normed: "+norm1, norm1.almostEquals (norm2)); } }
public void testMultiply() { TableFactor p1 = new TableFactor (new Variable[]{}); System.out.println(p1); Variable[] vars = new Variable[]{ new Variable(2), new Variable(2), }; double[] probs = new double[]{1, 3, 5, 6}; TableFactor p2 = new TableFactor (vars, probs); Factor p3 = p1.multiply(p2); assertTrue("Should be equal: " + p2 + "\n" + p3, p2.almostEquals(p3)); }
public void testMultiply() { TableFactor p1 = new TableFactor (new Variable[]{}); System.out.println(p1); Variable[] vars = new Variable[]{ new Variable(2), new Variable(2), }; double[] probs = new double[]{1, 3, 5, 6}; TableFactor p2 = new TableFactor (vars, probs); Factor p3 = p1.multiply(p2); assertTrue("Should be equal: " + p2 + "\n" + p3, p2.almostEquals(p3)); }
public void testTrpJoint() { FactorGraph model = createTriangle(); TRP trp = new TRP().setTerminator (new TRP.IterationTerminator(25)); trp.computeMarginals(model); // For each assignment to the model, check that // TRP.lookupLogJoint and TRP.lookupJoint are consistent VarSet all = new HashVarSet (model.variablesSet ()); for (Iterator it = all.assignmentIterator(); it.hasNext();) { Assignment assn = (Assignment) it.next(); double log = trp.lookupLogJoint(assn); double prob = trp.lookupJoint(assn); assertTrue(Maths.almostEquals(Math.exp(log), prob)); } logger.info("Test trpJoint passed."); }
public void testTrpJoint() { FactorGraph model = createTriangle(); TRP trp = new TRP().setTerminator (new TRP.IterationTerminator(25)); trp.computeMarginals(model); // For each assignment to the model, check that // TRP.lookupLogJoint and TRP.lookupJoint are consistent VarSet all = new HashVarSet (model.variablesSet ()); for (Iterator it = all.assignmentIterator(); it.hasNext();) { Assignment assn = (Assignment) it.next(); double log = trp.lookupLogJoint(assn); double prob = trp.lookupJoint(assn); assertTrue(Maths.almostEquals(Math.exp(log), prob)); } logger.info("Test trpJoint passed."); }
private void compareMarginals (String msg, FactorGraph fg, Inferencer inf1, Inferencer inf2) { for (int i = 0; i < fg.numVariables (); i++) { Variable var = fg.get (i); Factor ptl1 = inf1.lookupMarginal (var); Factor ptl2 = inf2.lookupMarginal (var); assertTrue (msg + "\n" + ptl1.dumpToString () + "\n" + ptl2.dumpToString (), ptl1.almostEquals (ptl2, 1e-5)); } }
/** Tests that running TRP doesn't inadvertantly change potentials in the original graph. */ public void testTrpNonDestructivity() { FactorGraph model = createTriangle(); TRP trp = new TRP(new TRP.IterationTerminator(25)); BruteForceInferencer brute = new BruteForceInferencer(); Factor joint1 = brute.joint(model); trp.computeMarginals(model); Factor joint2 = brute.joint(model); assertTrue(joint1.almostEquals(joint2)); logger.info("Test trpNonDestructivity passed."); }
private void compareMarginals (String msg, FactorGraph fg, Inferencer inf1, Inferencer inf2) { for (int i = 0; i < fg.numVariables (); i++) { Variable var = fg.get (i); Factor ptl1 = inf1.lookupMarginal (var); Factor ptl2 = inf2.lookupMarginal (var); assertTrue (msg + "\n" + ptl1.dumpToString () + "\n" + ptl2.dumpToString (), ptl1.almostEquals (ptl2, 1e-5)); } }
/** Tests that running TRP doesn't inadvertantly change potentials in the original graph. */ public void testTrpNonDestructivity() { FactorGraph model = createTriangle(); TRP trp = new TRP(new TRP.IterationTerminator(25)); BruteForceInferencer brute = new BruteForceInferencer(); Factor joint1 = brute.joint(model); trp.computeMarginals(model); Factor joint2 = brute.joint(model); assertTrue(joint1.almostEquals(joint2)); logger.info("Test trpNonDestructivity passed."); }