private int addVar (Variable var) { int ci = vars.size (); vars.add (var); var2idx.put (var, ci); // expand all rows for (int i = 0; i < numRows (); i++) { Object[] oldVal = (Object[]) values.get (i); Object[] newVal = new Object[ci+1]; System.arraycopy (oldVal, 0, newVal, 0, ci); values.set (i, newVal); } return ci; }
private void setVariables (Variable[] varr) { vars.addAll (Arrays.asList (varr)); for (int i = 0; i < varr.length; i++) { Variable v = varr[i]; var2idx.put (v, i); } }
public AssignmentIterator assignmentIterator () { return subVarSet.assignmentIterator (); }
private void initSizes () { sizes = new int [vertsList.size()]; for (int i = 0; i < sizes.length; i++) { Variable var = vertsList.get (i); if (var.isContinuous ()) { throw new UnsupportedOperationException ("Attempt to create AssignmentIterator over "+vertsList+", but "+var+" is continuous."); } sizes[i] = var.getNumOutcomes (); } max = vertsList.weight (); }
protected Factor slice_general (Variable[] vars, Assignment observed) { VarSet toKeep = new HashVarSet (vars); toKeep.removeAll (observed.varSet ()); double[] vals = new double [toKeep.weight ()]; AssignmentIterator it = toKeep.assignmentIterator (); while (it.hasNext ()) { Assignment union = Assignment.union (observed, it.assignment ()); vals[it.indexOfCurrentAssn ()] = logValue (union); it.advance (); } return LogTableFactor.makeFromLogValues (toKeep.toVariableArray (), vals); }
protected Factor slice_general (Variable[] vars, Assignment observed) { VarSet toKeep = new HashVarSet (vars); toKeep.removeAll (observed.varSet ()); double[] vals = new double [toKeep.weight ()]; AssignmentIterator it = toKeep.assignmentIterator (); while (it.hasNext ()) { Assignment union = Assignment.union (observed, it.assignment ()); vals[it.indexOfCurrentAssn ()] = value (union); it.advance (); } return new TableFactor (toKeep, vals); }
varSet.add(v); if (!findSuperClique(cliques, varSet)) { cliques.add(varSet); if (logger.isLoggable (Level.FINER)) { logger.finer (" Elim clique " + varSet + " size " + varSet.size () + " weight " + varSet.weight ()); VarSet c = (VarSet) it.next(); logger.finer(c.toString()); totSize += c.size(); maxSize = Math.max(c.size(), maxSize); totWeight += c.weight(); maxWeight = Math.max(c.weight(), maxWeight);
assert pairVarSet.size() == 2; // for now Variable v1 = pairVarSet.get (0); Variable v2 = pairVarSet.get (1); Variable[] vars = new Variable[] { v1, v2 }; ptl = new TableFactor (vars); vs.remove (v1); vs.remove (v2); Assignment localObs = (Assignment) observed.marginalize (vs); if (hasV1 && hasV2) { if (cliquePtl.varSet().size() == 2) { slice = cliquePtl; } else {
private boolean findSuperClique(List l, VarSet c) { for (Iterator it = l.iterator(); it.hasNext();) { VarSet c2 = (VarSet) it.next(); if (c2.containsAll(c)) { return true; } } return false; }
public VarSet intersection (VarSet c) { return subVarSet.intersection (c); }
public Iterator iterator () { return subVarSet.iterator (); }
public boolean isEmpty () { return subVarSet.isEmpty (); }
public CPT (DiscreteFactor subFactor, Variable child) { this.subFactor = subFactor; this.child = child; if (!subFactor.containsVar (child)) { throw new IllegalArgumentException ("Invalid child var for CPT\n Child: " + child + "\n Factor: " + subFactor); } parents = new HashVarSet (subFactor.varSet ()); parents.remove (child); }
/** * Returns true iff this potential is over the given variable */ public boolean containsVar (Variable var) { return vars.contains (var); }
private void checkVariables (Variable[] vars) { for (int i = 0; i < vars.length; i++) { Variable v1 = vars[i]; Variable v2 = (Variable) this.vars.get (i); if (v1 != v2) throw new IllegalArgumentException ("Attempt to add row with incompatible variables."); } }
protected Factor slice_general (Variable[] vars, Assignment observed) { VarSet toKeep = new HashVarSet (vars); toKeep.removeAll (observed.varSet ()); double[] vals = new double [toKeep.weight ()]; AssignmentIterator it = toKeep.assignmentIterator (); while (it.hasNext ()) { Assignment union = Assignment.union (observed, it.assignment ()); vals[it.indexOfCurrentAssn ()] = logValue (union); it.advance (); } return LogTableFactor.makeFromLogValues (toKeep.toVariableArray (), vals); }