def __init__(self, formula, mrf, parent=None, assignment=None): """ Instantiates the formula grounding for a given - formula: the formula grounded in this node - mrf: the MRF associated to this problem - parent: the formula grounding this fg has been created from - assignment: dictionary mapping variables to their values """ self.mrf = mrf self.formula = formula self.parent = Ref(parent) self.trueGroundings = Number(0.) self.processed = Boolean(False) if parent is None: self.depth = 0 else: self.depth = parent.depth + 1 self.children = List() self.assignment = assignment self.domains = ListDict() if parent is None: for var in self.formula.getVariables(self.mrf.mln): self.domains.extend( var, list(self.mrf.domains[self.formula.getVarDomain( var, self.mrf.mln)])) else: for (v, d) in parent.domains.iteritems(): self.domains.extend(v, list(d)) self.domains.epochEndsHere()
def __init__(self, formula, mrf): """ formula might be a formula or a FormulaGrounding instance. """ self.mrf = mrf self.costs = .0 if isinstance(formula, Logic.Formula): self.formula = formula self.root = FormulaGrounding(formula, mrf) elif isinstance(formula, FormulaGrounding): self.root = formula self.formula = formula.formula self.values_processed = ListDict() self.variable_stack = List(None) self.var2fgs = ListDict({None: [self.root]}) self.gndAtom2fgs = ListDict() self.manipulatedFgs = List()