def compute_join_cost(self, left_joinee, right_joinee): left_vars = pddl_to_prolog.get_variables([left_joinee]) right_vars = pddl_to_prolog.get_variables([right_joinee]) if len(left_vars) > len(right_vars): left_vars, right_vars = right_vars, left_vars common_vars = left_vars & right_vars return (len(left_vars) - len(common_vars), len(right_vars) - len(common_vars), -len(common_vars))
def get_connected_conditions(conditions): agraph = graph.Graph(conditions) var_to_conditions = {var: [] for var in get_variables(conditions)} for cond in conditions: for var in cond.args: if var[0] == "?": var_to_conditions[var].append(cond) # Connect conditions with a common variable for var, conds in var_to_conditions.items(): for cond in conds[1:]: agraph.connect(conds[0], cond) return sorted(map(sorted, agraph.connected_components()))
def get_connected_conditions(conditions): agraph = graph.Graph(conditions) var_to_conditions = dict([(var, []) for var in get_variables(conditions)]) for cond in conditions: for var in cond.args: if isinstance(var, pddl.Variable): var_to_conditions[var].append(cond) # Connect conditions with a common variable for var, conds in var_to_conditions.iteritems(): for cond in conds[1:]: agraph.connect(conds[0], cond) return agraph.connected_components()
def get_connected_conditions(conditions): agraph = graph.Graph(conditions) var_to_conditions = dict([(var, []) for var in get_variables(conditions)]) for cond in conditions: for var in cond.args: if var[0] == "?": var_to_conditions[var].append(cond) # Connect conditions with a common variable for var, conds in var_to_conditions.items(): for cond in conds[1:]: agraph.connect(conds[0], cond) return sorted(map(sorted, agraph.connected_components()))
def get_connected_conditions(conditions): agraph = graph.Graph(conditions) var_to_conditions = dict([(var, []) for var in get_variables(conditions)]) for cond in conditions: for var in cond.args: if isinstance(var,pddl.Variable): var_to_conditions[var].append(cond) # Connect conditions with a common variable for var, conds in var_to_conditions.iteritems(): for cond in conds[1:]: agraph.connect(conds[0], cond) return agraph.connected_components()
def project_rule(rule, conditions, name_generator): predicate = next(name_generator) effect_variables = set(rule.effect.args) & get_variables(conditions) effect = pddl.Atom(predicate, sorted(effect_variables)) projected_rule = Rule(conditions, effect) return projected_rule