private void verifyCachesConsistent(FactorGraph mdl) { Factor pot, pot2, pot3; for (Iterator it = mdl.factors().iterator(); it.hasNext(); ) { pot = (Factor) it.next(); // System.out.println("Testing model "+i+" potential "+pot); Object[] vars = pot.varSet().toArray(); switch (vars.length) { case 1: pot2 = mdl.factorOf((Variable) vars[0]); assertTrue(pot == pot2); break; case 2: Variable var1 = (Variable) vars[0]; Variable var2 = (Variable) vars[1]; pot2 = mdl.factorOf(var1, var2); pot3 = mdl.factorOf(var2, var1); assertTrue(pot == pot2); assertTrue(pot2 == pot3); break; // Factors of size > 2 aren't now cached. default: break; } } }
private void initJtCpts(FactorGraph mdl, JunctionTree jt) { for (Iterator it = jt.getVerticesIterator(); it.hasNext(); ) { VarSet c = (VarSet) it.next(); // DiscreteFactor ptl = createBlankFactor (c); // jt.setCPF(c, ptl); jt.setCPF(c, new ConstantFactor(1.0)); } for (Iterator it = mdl.factors().iterator(); it.hasNext(); ) { Factor ptl = (Factor) it.next(); VarSet parent = jt.findParentCluster(ptl.varSet()); assert parent != null : "Unable to find parent cluster for ptl " + ptl + "in jt " + jt; Factor cpf = jt.getCPF(parent); Factor newCpf = cpf.multiply(ptl); jt.setCPF(parent, newCpf); /* debug if (jt.isNaN()) { throw new RuntimeException ("Got a NaN"); } */ } }