public static UndirectedModel createRandomGrid(int w, int h, int maxOutcomes, Random r) { Variable[][] vars = new Variable[w][h]; UndirectedModel mdl = new UndirectedModel(w * h); for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { vars[i][j] = new Variable(r.nextInt(maxOutcomes - 1) + 2); } } for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { Factor ptl; if (i < w - 1) { ptl = randomEdgePotential (r, vars[i][j], vars[i + 1][j]); mdl.addFactor (ptl); } if (j < h - 1) { ptl = randomEdgePotential (r, vars[i][j], vars[i][j + 1]); mdl.addFactor (ptl); } } } return mdl; }
public static UndirectedModel createRandomGrid(int w, int h, int maxOutcomes, Random r) { Variable[][] vars = new Variable[w][h]; UndirectedModel mdl = new UndirectedModel(w * h); for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { vars[i][j] = new Variable(r.nextInt(maxOutcomes - 1) + 2); } } for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { Factor ptl; if (i < w - 1) { ptl = randomEdgePotential (r, vars[i][j], vars[i + 1][j]); mdl.addFactor (ptl); } if (j < h - 1) { ptl = randomEdgePotential (r, vars[i][j], vars[i][j + 1]); mdl.addFactor (ptl); } } } return mdl; }
public void timeMarginalization () { java.util.Random r = new java.util.Random (7732847); Variable[] vars = new Variable[] { new Variable (2), new Variable (2), }; TableFactor ptl = randomEdgePotential (r, vars[0], vars[1]); long stime = System.currentTimeMillis (); for (int i = 0; i < 1000; i++) { Factor marg = ptl.marginalize (vars[0]); Factor marg2 = ptl.marginalize (vars[1]); } long etime = System.currentTimeMillis (); logger.info ("Marginalization (2-outcome) took "+(etime-stime)+" ms."); Variable[] vars45 = new Variable[] { new Variable (45), new Variable (45), }; TableFactor ptl45 = randomEdgePotential (r, vars45[0], vars45[1]); stime = System.currentTimeMillis(); for (int i = 0; i < 1000; i++) { Factor marg = ptl45.marginalize (vars45[0]); Factor marg2 = ptl45.marginalize (vars45[1]); } etime = System.currentTimeMillis(); logger.info ("Marginalization (45-outcome) took "+(etime-stime)+" ms."); }
public void timeMarginalization () { java.util.Random r = new java.util.Random (7732847); Variable[] vars = new Variable[] { new Variable (2), new Variable (2), }; TableFactor ptl = randomEdgePotential (r, vars[0], vars[1]); long stime = System.currentTimeMillis (); for (int i = 0; i < 1000; i++) { Factor marg = ptl.marginalize (vars[0]); Factor marg2 = ptl.marginalize (vars[1]); } long etime = System.currentTimeMillis (); logger.info ("Marginalization (2-outcome) took "+(etime-stime)+" ms."); Variable[] vars45 = new Variable[] { new Variable (45), new Variable (45), }; TableFactor ptl45 = randomEdgePotential (r, vars45[0], vars45[1]); stime = System.currentTimeMillis(); for (int i = 0; i < 1000; i++) { Factor marg = ptl45.marginalize (vars45[0]); Factor marg2 = ptl45.marginalize (vars45[1]); } etime = System.currentTimeMillis(); logger.info ("Marginalization (45-outcome) took "+(etime-stime)+" ms."); }
private UndirectedModel createRandomTree(int nnodes, int maxOutcomes, Random r) { Variable[] vars = new Variable[nnodes]; UndirectedModel mdl = new UndirectedModel(nnodes); for (int i = 0; i < nnodes; i++) { vars[i] = new Variable(r.nextInt(maxOutcomes - 1) + 2); } // Add some random edges for (int i = 0; i < nnodes; i++) { for (int j = i + 1; j < nnodes; j++) { if (!mdl.isConnected(vars[i], vars[j]) && r.nextBoolean()) { Factor ptl = randomEdgePotential (r, vars[i], vars[j]); mdl.addFactor (ptl); } } } // Ensure exactly one connected component for (int i = 0; i < nnodes; i++) { for (int j = i + 1; j < nnodes; j++) { if (!mdl.isConnected(vars[i], vars[j])) { System.out.println ("forced edge: " + i + " " + j); Factor ptl = randomEdgePotential (r, vars[i], vars[j]); mdl.addFactor (ptl); } } } return mdl; }
private UndirectedModel createRandomTree(int nnodes, int maxOutcomes, Random r) { Variable[] vars = new Variable[nnodes]; UndirectedModel mdl = new UndirectedModel(nnodes); for (int i = 0; i < nnodes; i++) { vars[i] = new Variable(r.nextInt(maxOutcomes - 1) + 2); } // Add some random edges for (int i = 0; i < nnodes; i++) { for (int j = i + 1; j < nnodes; j++) { if (!mdl.isConnected(vars[i], vars[j]) && r.nextBoolean()) { Factor ptl = randomEdgePotential (r, vars[i], vars[j]); mdl.addFactor (ptl); } } } // Ensure exactly one connected component for (int i = 0; i < nnodes; i++) { for (int j = i + 1; j < nnodes; j++) { if (!mdl.isConnected(vars[i], vars[j])) { System.out.println ("forced edge: " + i + " " + j); Factor ptl = randomEdgePotential (r, vars[i], vars[j]); mdl.addFactor (ptl); } } } return mdl; }
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)); } }
if (r.nextBoolean()) { hasOne = true; model.addFactor (randomEdgePotential (r, vars[i], vars[j])); for (int j = i + 1; j < numV; j++) { if (!model.isConnected(vars[i], vars[j])) { Factor ptl = randomEdgePotential (r, vars[i], vars[j]); model.addFactor (ptl);
if (r.nextBoolean()) { hasOne = true; model.addFactor (randomEdgePotential (r, vars[i], vars[j])); for (int j = i + 1; j < numV; j++) { if (!model.isConnected(vars[i], vars[j])) { Factor ptl = randomEdgePotential (r, vars[i], vars[j]); model.addFactor (ptl);
public void testLogMarginalize () { 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 logmarg1 = new LogTableFactor ((AbstractTableFactor) ptl).marginalize(v1); Factor marglog1 = new LogTableFactor((AbstractTableFactor) ptl.marginalize(v1)); assertTrue ("LogMarg failed! Correct: "+marglog1+" Log-marg: "+logmarg1, logmarg1.almostEquals (marglog1)); Factor logmarg2 = new LogTableFactor ((AbstractTableFactor) ptl).marginalize(v2); Factor marglog2 = new LogTableFactor((AbstractTableFactor) ptl.marginalize(v2)); assertTrue (logmarg2.almostEquals (marglog2)); } }
public void testLogMarginalize () { 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 logmarg1 = new LogTableFactor ((AbstractTableFactor) ptl).marginalize(v1); Factor marglog1 = new LogTableFactor((AbstractTableFactor) ptl.marginalize(v1)); assertTrue ("LogMarg failed! Correct: "+marglog1+" Log-marg: "+logmarg1, logmarg1.almostEquals (marglog1)); Factor logmarg2 = new LogTableFactor ((AbstractTableFactor) ptl).marginalize(v2); Factor marglog2 = new LogTableFactor((AbstractTableFactor) ptl.marginalize(v2)); assertTrue (logmarg2.almostEquals (marglog2)); } }