コード例 #1
0
 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)
コード例 #2
0
 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)
コード例 #3
0
    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))
コード例 #4
0
 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))
コード例 #5
0
    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)
コード例 #6
0
ファイル: actions.py プロジェクト: aldukeman/fdss
 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))
コード例 #7
0
 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]