def parse(alist): iterator = iter(alist) assert iterator.next() == ":action" name = iterator.next() parameters_tag_opt = iterator.next() if parameters_tag_opt == ":parameters": parameters = pddl_types.parse_typed_list(iterator.next(), only_variables=True) precondition_tag_opt = iterator.next() else: parameters = [] precondition_tag_opt = parameters_tag_opt if precondition_tag_opt == ":precondition": p = iterator.next() if len(p) > 0: precondition = conditions.parse_condition(p) else: precondition = conditions.Conjunction([]) effect_tag = iterator.next() else: precondition = conditions.Conjunction([]) effect_tag = precondition_tag_opt assert effect_tag == ":effect" effect_list = iterator.next() eff = [] effects.parse_effects(effect_list, eff) for rest in iterator: assert False, rest return Action(name, parameters, precondition, eff)
def parse(alist): iterator = iter(alist) assert iterator.next() == ":action" name = iterator.next() parameters_tag_opt = iterator.next() if parameters_tag_opt == ":parameters": parameters = pddl_types.parse_typed_list(iterator.next(), only_variables=True) precondition_tag_opt = iterator.next() else: parameters = [] precondition_tag_opt = parameters_tag_opt if precondition_tag_opt == ":precondition": precondition = conditions.parse_condition(iterator.next()) effect_tag = iterator.next() else: precondition = conditions.Conjunction([]) effect_tag = precondition_tag_opt assert effect_tag == ":effect" effect_list = iterator.next() eff = [] effects.parse_effects(effect_list,eff) for rest in iterator: assert False, rest return Action(name, parameters, precondition, eff)
def parse(alist): iterator = iter(alist) action_tag = next(iterator) assert action_tag == ':action' name = next(iterator) parameters_tag_opt = next(iterator) if parameters_tag_opt == ':parameters': parameters = pddl_types.parse_typed_list(next(iterator), only_variables=True) precondition_tag_opt = next(iterator) else: parameters = [] precondition_tag_opt = parameters_tag_opt if precondition_tag_opt == ':precondition': precondition_list = next(iterator) if not precondition_list: # Note that :precondition () is allowed in PDDL. precondition = conditions.Conjunction([]) else: precondition = \ conditions.parse_condition(precondition_list) precondition = precondition.simplified() effect_tag = next(iterator) else: precondition = conditions.Conjunction([]) effect_tag = precondition_tag_opt assert effect_tag == ':effect' effect_list = next(iterator) try: cost_eff_pairs = effects.parse_effects(effect_list) if 1 == len(cost_eff_pairs): cost_eff_pairs = [(cost_eff_pairs[0][0], cost_eff_pairs[0][1], '')] else: # Convert floats to fractions to output # TODO : Benchmark this fraction conversion all_fractions = [] for cep in cost_eff_pairs: all_fractions.append( fractions.Fraction(cep[2]).limit_denominator()) lcm = reduce(lambda a, b: a * b / fractions.gcd(a, b), [f.denominator for f in all_fractions], 1) # Use the fractions and lcm to build the weights #for i in range(len(cost_eff_pairs)): # for j in range(len(cost_eff_pairs[i])): # print(cost_eff_pairs[i][j]) cost_eff_pairs = [(cost_eff_pairs[i][0], cost_eff_pairs[i][1], '_DETDUP_%d_WEIGHT_%d_%d' % (i, all_fractions[i].numerator, all_fractions[i].denominator)) for i in range(len(cost_eff_pairs))] except ValueError, e: raise SystemExit('Error in Action %s\nReason: %s.' % (name, e))
def parse(alist): iterator = iter(alist) assert iterator.next() == ":action" name = iterator.next() parameters_tag_opt = iterator.next() if parameters_tag_opt == ":parameters": parameters = pddl_types.parse_typed_list(iterator.next(), only_variables=True) precondition_tag_opt = iterator.next() else: parameters = [] precondition_tag_opt = parameters_tag_opt if precondition_tag_opt == ":precondition": precondition = conditions.parse_condition(iterator.next()) effect_tag = iterator.next() else: precondition = conditions.Conjunction([]) effect_tag = precondition_tag_opt assert effect_tag == ":effect" effect_list = iterator.next() eff = [] try: cost = effects.parse_effects(effect_list, eff) except ValueError, e: raise SystemExit("Error in Action %s\nReason: %s." % (name, e))
def parse(action_list): iterator = iter(action_list) if (iterator.next() != ":action"): raise Error("STRIPS file does not contain actions") name = iterator.next() params = iterator.next() if params == ":parameters": parameters = strip_types.parse_typed_list(iterator.next()) precond = iterator.next() else: parameters = [] precond = params if precond == ":precondition": precondition = conditions.parse_condition(iterator.next()) effect_iter = iterator.next() else: precondition = conditions.Conjunction([]) effect_iter = precond assert effect_iter == ":effect" effect_list = iterator.next() eff = [] cost = effects.parse_effects(effect_list, eff) for rest in iterator: assert False, rest return Action(name, parameters, precondition, eff)
def parse(alist): iterator = iter(alist) assert iterator.next() == ":action" name = iterator.next() parameters_tag_opt = iterator.next() if parameters_tag_opt == ":parameters": parameters = pddl_types.parse_typed_list(iterator.next(), only_variables=True) precondition_tag_opt = iterator.next() else: parameters = [] precondition_tag_opt = parameters_tag_opt if precondition_tag_opt == ":precondition": precondition = conditions.parse_condition(iterator.next()) precondition = precondition.simplified() effect_tag = iterator.next() else: precondition = conditions.Conjunction([]) effect_tag = precondition_tag_opt assert effect_tag == ":effect" effect_list = iterator.next() eff = [] try: cost = effects.parse_effects(effect_list, eff) except ValueError, e: raise SystemExit("Error in Action %s\nReason: %s." % (name, e))
def parse(alist): iterator = iter(alist) action_tag = next(iterator) assert action_tag == ":action" name = next(iterator) parameters_tag_opt = next(iterator) if parameters_tag_opt == ":parameters": parameters = pddl_types.parse_typed_list(next(iterator), only_variables=True) precondition_tag_opt = next(iterator) else: parameters = [] precondition_tag_opt = parameters_tag_opt if precondition_tag_opt == ":precondition": precondition_list = next(iterator) if not precondition_list: # Note that :precondition () is allowed in PDDL. precondition = conditions.Conjunction([]) else: precondition = conditions.parse_condition(precondition_list) precondition = precondition.simplified() effect_tag = next(iterator) else: precondition = conditions.Conjunction([]) effect_tag = precondition_tag_opt assert effect_tag == ":effect" effect_list = next(iterator) try: cost_eff_pairs = effects.parse_effects(effect_list) if 1 == len(cost_eff_pairs): cost_eff_pairs = [(cost_eff_pairs[0][0], cost_eff_pairs[0][1], '')] else: cost_eff_pairs = [(cost_eff_pairs[i][0], cost_eff_pairs[i][1], "_DETDUP_%d" % i) for i in range(len(cost_eff_pairs))] except ValueError as e: raise SystemExit("Error in Action %s\nReason: %s." % (name, e)) for rest in iterator: assert False, rest return [Action(name + suffix, parameters, len(parameters), precondition, eff, cost) for (cost, eff, suffix) in cost_eff_pairs]