assertEquals (mdl.numVariables (), vertices.size ()); if (factor.varSet ().size() == 2) numEdgePtls++; assertEquals (numEdgePtls, g.edgeSet ().size ());
assertEquals (mdl.numVariables (), vertices.size ()); if (factor.varSet ().size() == 2) numEdgePtls++; assertEquals (numEdgePtls, g.edgeSet ().size ());
/** * Tests that models can be created that have multiple factors over the same edge, and that * potentialOfEdge returns the product in that case. */ public void testMultipleEdgePotentials () { Variable v1 = new Variable (2); Variable v2 = new Variable (2); Variable[] vars = new Variable[]{v1, v2}; FactorGraph mdl = new FactorGraph (vars); Factor ptl1 = new TableFactor (vars, new double[]{0.5, 0.5, 0.5, 0.5}); mdl.addFactor (ptl1); Factor ptl2 = new TableFactor (vars, new double[]{0.25, 0.25, 0.5, 0.5}); mdl.addFactor (ptl2); try { mdl.factorOf (v1, v2); fail (); } catch (RuntimeException e) {} Collection factors = mdl.allFactorsContaining (new HashVarSet (vars)); assertEquals (2, factors.size ()); assertTrue (factors.contains (ptl1)); assertTrue (factors.contains (ptl2)); double[] vals = {0.125, 0.125, 0.25, 0.25}; Factor total = TableFactor.multiplyAll (factors); Factor expected = new TableFactor (vars, vals); assertTrue ("Arrays not equal\n Expected " + ArrayUtils.toString (vals) + "\n Actual " + ArrayUtils.toString (((TableFactor) total).toValueArray ()), expected.almostEquals (total, 1e-10)); }
/** * Tests that models can be created that have multiple factors over the same edge, and that * potentialOfEdge returns the product in that case. */ public void testMultipleEdgePotentials () { Variable v1 = new Variable (2); Variable v2 = new Variable (2); Variable[] vars = new Variable[]{v1, v2}; FactorGraph mdl = new FactorGraph (vars); Factor ptl1 = new TableFactor (vars, new double[]{0.5, 0.5, 0.5, 0.5}); mdl.addFactor (ptl1); Factor ptl2 = new TableFactor (vars, new double[]{0.25, 0.25, 0.5, 0.5}); mdl.addFactor (ptl2); try { mdl.factorOf (v1, v2); fail (); } catch (RuntimeException e) {} Collection factors = mdl.allFactorsContaining (new HashVarSet (vars)); assertEquals (2, factors.size ()); assertTrue (factors.contains (ptl1)); assertTrue (factors.contains (ptl2)); double[] vals = {0.125, 0.125, 0.25, 0.25}; Factor total = TableFactor.multiplyAll (factors); Factor expected = new TableFactor (vars, vals); assertTrue ("Arrays not equal\n Expected " + ArrayUtils.toString (vals) + "\n Actual " + ArrayUtils.toString (((TableFactor) total).toValueArray ()), expected.almostEquals (total, 1e-10)); }