public void testCycleChecking () { DirectedModel dm = new DirectedModel (vars); dm.addFactor (pA); dm.addFactor (pB); dm.addFactor (pC); try { TableFactor f1 = new TableFactor (new Variable[] { B, C }); dm.addFactor (new CPT (f1, B)); assertTrue ("Test failed: No exception thrown.", false); } catch (IllegalArgumentException e) { // Exception is expected } try { TableFactor f1 = new TableFactor (new Variable[] { A, C }); dm.addFactor (new CPT (f1, A)); assertTrue ("Test failed: No exception thrown.", false); } catch (IllegalArgumentException e) { // Exception is expected } }
public void testFactorReplace () { DirectedModel dm = new DirectedModel (vars); dm.addFactor (pA); dm.addFactor (pB); dm.addFactor (pC); assertEquals (3, dm.factors ().size ()); TableFactor f1 = new TableFactor (new Variable[] { B, C }); CPT p1 = new CPT (f1, C); try { dm.addFactor (p1); } catch (IllegalArgumentException e) { // expected } }
public void testCptOfVar () { DirectedModel dm = new DirectedModel (vars); dm.addFactor (pA); dm.addFactor (pB); dm.addFactor (pC); assertTrue (pA == dm.getCptofVar (A)); assertTrue (pB == dm.getCptofVar (B)); assertTrue (pC == dm.getCptofVar (C)); }
protected void beforeFactorAdd (Factor factor) { super.beforeFactorAdd (factor); if (!(factor instanceof CPT)) { throw new IllegalArgumentException ("Factors of a directed model must be an instance of CPT, was "+factor); } CPT cpt = (CPT) factor; Variable child = cpt.getChild (); VarSet parents = cpt.getParents (); if (graph.containsVertex (child)) { checkForNoCycle (parents, child, cpt); } }
protected void beforeFactorAdd (Factor factor) { super.beforeFactorAdd (factor); if (!(factor instanceof CPT)) { throw new IllegalArgumentException ("Factors of a directed model must be an instance of CPT, was "+factor); } CPT cpt = (CPT) factor; Variable child = cpt.getChild (); VarSet parents = cpt.getParents (); if (graph.containsVertex (child)) { checkForNoCycle (parents, child, cpt); } }
public void testCycleChecking () { DirectedModel dm = new DirectedModel (vars); dm.addFactor (pA); dm.addFactor (pB); dm.addFactor (pC); try { TableFactor f1 = new TableFactor (new Variable[] { B, C }); dm.addFactor (new CPT (f1, B)); assertTrue ("Test failed: No exception thrown.", false); } catch (IllegalArgumentException e) { // Exception is expected } try { TableFactor f1 = new TableFactor (new Variable[] { A, C }); dm.addFactor (new CPT (f1, A)); assertTrue ("Test failed: No exception thrown.", false); } catch (IllegalArgumentException e) { // Exception is expected } }
public void testCptOfVar () { DirectedModel dm = new DirectedModel (vars); dm.addFactor (pA); dm.addFactor (pB); dm.addFactor (pC); assertTrue (pA == dm.getCptofVar (A)); assertTrue (pB == dm.getCptofVar (B)); assertTrue (pC == dm.getCptofVar (C)); }
public void testFactorReplace () { DirectedModel dm = new DirectedModel (vars); dm.addFactor (pA); dm.addFactor (pB); dm.addFactor (pC); assertEquals (3, dm.factors ().size ()); TableFactor f1 = new TableFactor (new Variable[] { B, C }); CPT p1 = new CPT (f1, C); try { dm.addFactor (p1); } catch (IllegalArgumentException e) { // expected } }
protected void beforeFactorAdd (Factor factor) { super.beforeFactorAdd (factor); if (!(factor instanceof CPT)) { throw new IllegalArgumentException ("Factors of a directed model must be an instance of CPT, was "+factor); } CPT cpt = (CPT) factor; Variable child = cpt.getChild (); VarSet parents = cpt.getParents (); if (graph.containsVertex (child)) { checkForNoCycle (parents, child, cpt); } }
public void testSimpleModel () { FactorGraph fg1 = new FactorGraph (vars); fg1.addFactor (pA); fg1.addFactor (pB); fg1.addFactor (fC); DirectedModel dm = new DirectedModel (vars); dm.addFactor (pA); dm.addFactor (pB); dm.addFactor (pC); BruteForceInferencer inf = new BruteForceInferencer (); DiscreteFactor joint1 = (DiscreteFactor) inf.joint (fg1); DiscreteFactor joint2 = (DiscreteFactor) inf.joint (dm); comparePotentials (joint1, joint2); }
public void testSimpleModel () { FactorGraph fg1 = new FactorGraph (vars); fg1.addFactor (pA); fg1.addFactor (pB); fg1.addFactor (fC); DirectedModel dm = new DirectedModel (vars); dm.addFactor (pA); dm.addFactor (pB); dm.addFactor (pC); BruteForceInferencer inf = new BruteForceInferencer (); DiscreteFactor joint1 = (DiscreteFactor) inf.joint (fg1); DiscreteFactor joint2 = (DiscreteFactor) inf.joint (dm); comparePotentials (joint1, joint2); }
private DirectedModel createDirectedModel () { int NUM_OUTCOMES = 2; cc.mallet.util.Randoms random = new cc.mallet.util.Randoms (13413); Dirichlet dirichlet = new Dirichlet (NUM_OUTCOMES, 1.0); double[] pA = dirichlet.randomVector (random); double[] pB = dirichlet.randomVector (random); TDoubleArrayList pC = new TDoubleArrayList (NUM_OUTCOMES * NUM_OUTCOMES * NUM_OUTCOMES); for (int i = 0; i < (NUM_OUTCOMES * NUM_OUTCOMES); i++) { pC.add (dirichlet.randomVector (random)); } Variable[] vars = new Variable[] { new Variable (NUM_OUTCOMES), new Variable (NUM_OUTCOMES), new Variable (NUM_OUTCOMES) }; DirectedModel mdl = new DirectedModel (); mdl.addFactor (new CPT (new TableFactor (vars[0], pA), vars[0])); mdl.addFactor (new CPT (new TableFactor (vars[1], pB), vars[1])); mdl.addFactor (new CPT (new TableFactor (vars, pC.toNativeArray ()), vars[2])); return mdl; }
private DirectedModel createDirectedModel () { int NUM_OUTCOMES = 2; cc.mallet.util.Randoms random = new cc.mallet.util.Randoms (13413); Dirichlet dirichlet = new Dirichlet (NUM_OUTCOMES, 1.0); double[] pA = dirichlet.randomVector (random); double[] pB = dirichlet.randomVector (random); TDoubleArrayList pC = new TDoubleArrayList (NUM_OUTCOMES * NUM_OUTCOMES * NUM_OUTCOMES); for (int i = 0; i < (NUM_OUTCOMES * NUM_OUTCOMES); i++) { pC.add (dirichlet.randomVector (random)); } Variable[] vars = new Variable[] { new Variable (NUM_OUTCOMES), new Variable (NUM_OUTCOMES), new Variable (NUM_OUTCOMES) }; DirectedModel mdl = new DirectedModel (); mdl.addFactor (new CPT (new TableFactor (vars[0], pA), vars[0])); mdl.addFactor (new CPT (new TableFactor (vars[1], pB), vars[1])); mdl.addFactor (new CPT (new TableFactor (vars, pC.toNativeArray ()), vars[2])); return mdl; }