def expand_group(group, task, reachable_facts): result = [] for fact in group: try: pos = list(fact.args).index("?X") except ValueError: result.append(fact) else: # NOTE: This could be optimized by only trying objects of the correct # type, or by using a unifier which directly generates the # applicable objects. It is not worth optimizing this at this stage, # though. for obj in task.objects + [pddl.ObjectTerm("undefined")]: newargs = list(fact.args) newargs[pos] = pddl.ObjectTerm(obj.name) atom = pddl.Atom(fact.predicate, newargs) if atom in reachable_facts: result.append(atom) return result
def translate_typed_object(prog, obj, type_dict): supertypes = type_dict[obj.type].supertype_names for type_name in [obj.type] + supertypes: prog.add_fact(pddl.Atom(type_name, [pddl.ObjectTerm(obj.name)]))