示例#1
0
def parse_domain_structure(entry, the_functions, the_axioms, the_actions,
                           the_durative_actions, the_types, the_predicates):
    if entry[0] == ":derived":
        axiom = axioms.Axiom.parse(entry)
        the_axioms.append(axiom)
    elif entry[0] == ":durative-action":
        action = actions.DurativeAction.parse(entry)
        the_durative_actions.append(action)
    elif entry[0] == ":functions":
        the_functions.extend(
            pddl_types.parse_typed_list(
                entry[1:],
                constructor=functions.Function.parse_typed,
                functions=True,
                types=the_types))
        for function in the_functions:
            Task.FUNCTION_SYMBOLS[function.name] = function.type
            if function.type != "number":
                the_predicates.append(
                    predicates.Predicate(
                        conditions.function_predicate_name(function.name),
                        function.arguments +
                        [pddl_types.TypedObject("?val", function.type)]))
    elif entry[0] == ":action":
        action = actions.Action.parse(entry)
        the_actions.append(action)
    else:
        assert False, "unknown entity"
	def __init__(self, time, init_fact):
		self.time = time
		self.fact = init_fact # nested list
		if self.fact[0] == 'not':
			self.type = 'NEGATED_BOOLEAN'
			self.value = False
			self.predicate = tuple(self.fact[1])
			self.atom = conditions.Atom(self.fact[1][0], [conditions.parse_term(term) for term in self.fact[1][1:]])
		elif self.fact[0] == '=':
			if f_expression.isFloat(self.fact[2]):
				self.type = 'NUMERICAL_FUNCTION'
				self.value = float(self.fact[2])
				self.predicate = tuple(self.fact[1])
				self.atom = f_expression.parse_assignment(fact)
			else:
				self.type = 'OBJECT_FUNCTION'
				self.value = self.fact[2]
				self.predicate = tuple(self.fact[1])
				function = conditions.parse_term(self.fact[1])
				terms = function.args
				terms.append(conditions.parse_term(self.fact[2]))
				atomname = conditions.function_predicate_name(function.name)
				self.atom = conditions.Atom(atomname, terms)
		else:
			self.type = 'BOOLEAN'
			self.value = True
			self.atom = conditions.Atom(self.fact[0], [conditions.parse_term(term) for term in self.fact[1:]])
			self.predicate = tuple(self.fact)
示例#3
0
def parse_task(task_pddl):
    iterator = iter(task_pddl)

    assert iterator.next() == "define"
    problem_line = iterator.next()
    assert problem_line[0] == "problem" and len(problem_line) == 2
    yield problem_line[1]
    domain_line = iterator.next()
    assert domain_line[0] == ":domain" and len(domain_line) == 2
    yield domain_line[1]

    objects_opt = iterator.next()
    if objects_opt[0] == ":objects":
        yield pddl_types.parse_typed_list(objects_opt[1:])
        init = iterator.next()
    else:
        yield []
        init = objects_opt

    assert init[0] == ":init"
    initial = []
    for fact in init[1:]:
        if fact[0] == "=":
            if conditions.is_function_comparison(fact):  # numeric function
                initial.append(f_expression.parse_assignment(fact))
            else:  # object function
                function = conditions.parse_term(fact[1])
                terms = function.args
                terms.append(conditions.parse_term(fact[2]))
                atomname = conditions.function_predicate_name(function.name)
                initial.append(conditions.Atom(atomname, terms))
        else:
            initial.append(
                conditions.Atom(
                    fact[0],
                    [conditions.parse_term(term) for term in fact[1:]]))
    yield initial

    goal = iterator.next()
    assert goal[0] == ":goal" and len(goal) == 2
    yield conditions.parse_condition(goal[1])

    metric_defined = False
    for entry in iterator:
        if entry[0] == ":metric":
            metric_defined = True
            #        if entry[2][0] in ["total-time", "total-cost"] :
            metric = (entry[1], entry[2])

            yield metric
    if not metric_defined:
        metric = ()
        yield metric
示例#4
0
def parse_init_fact(fact):
    if fact[0] == "=":
        if conditions.is_function_comparison(fact): # numeric function
            return f_expression.parse_assignment(fact)
        else: # object function
            function = conditions.parse_term(fact[1])
            terms = function.args
            terms.append(conditions.parse_term(fact[2]))
            atomname = conditions.function_predicate_name(function.name)
            return conditions.Atom(atomname, terms)
    else:
        return conditions.Atom(fact[0], [conditions.parse_term(term) for term in fact[1:]])
示例#5
0
文件: tasks.py 项目: aldukeman/lmtd
def parse_task(task_pddl):
  iterator = iter(task_pddl)

  assert iterator.next() == "define"
  problem_line = iterator.next()
  assert problem_line[0] == "problem" and len(problem_line) == 2
  yield problem_line[1]
  domain_line = iterator.next()
  assert domain_line[0] == ":domain" and len(domain_line) == 2
  yield domain_line[1]

  objects_opt = iterator.next()
  if objects_opt[0] == ":objects":
    yield pddl_types.parse_typed_list(objects_opt[1:])
    init = iterator.next()
  else:
    yield []
    init = objects_opt

  assert init[0] == ":init"
  initial = []
  for fact in init[1:]:
    if fact[0] == "=":
        if conditions.is_function_comparison(fact): # numeric function
            initial.append(f_expression.parse_assignment(fact))
        else: # object function
            function = conditions.parse_term(fact[1])
            terms = function.args
            terms.append(conditions.parse_term(fact[2]))
            atomname = conditions.function_predicate_name(function.name)
            initial.append(conditions.Atom(atomname, terms))
    else:
        initial.append(conditions.Atom(fact[0], [conditions.parse_term(term) for term in fact[1:]]))
  yield initial

  goal = iterator.next()
  assert goal[0] == ":goal" and len(goal) == 2
  yield conditions.parse_condition(goal[1])

  for entry in iterator:
    if entry[0] == ":metric" and entry[1]=="minimize":
        if entry[2][0] in ["total-time", "total-cost"] :
            continue
    assert False, entry
示例#6
0
文件: tasks.py 项目: aldukeman/lmtd
def parse_domain_structure(entry,the_functions,the_axioms,the_actions,the_durative_actions, 
                           the_types, the_predicates):
    if entry[0] == ":derived":
      axiom = axioms.Axiom.parse(entry)
      the_axioms.append(axiom)
    elif entry[0] == ":durative-action":
      action = actions.DurativeAction.parse(entry)
      the_durative_actions.append(action)
    elif entry[0] == ":functions":
      the_functions = pddl_types.parse_typed_list(entry[1:], 
        constructor=functions.Function.parse_typed, functions=True, types=the_types)
      for function in the_functions:
        Task.FUNCTION_SYMBOLS[function.name] = function.type
        if function.type != "number":
            the_predicates.append(
                predicates.Predicate(conditions.function_predicate_name(function.name),
                                     function.arguments + [pddl_types.TypedObject("?val", function.type)]))
    else:
      action = actions.Action.parse(entry)
      the_actions.append(action)
示例#7
0
def parse_task(task_pddl):
    iterator = iter(task_pddl)

    assert iterator.next() == "define"
    problem_line = iterator.next()
    assert problem_line[0] == "problem" and len(problem_line) == 2
    yield problem_line[1]
    domain_line = iterator.next()
    assert domain_line[0] == ":domain" and len(domain_line) == 2
    yield domain_line[1]

    module_opt = iterator.next()
    if module_opt[0] == ":moduleoptions":
        yield [modules.ModuleInit.parse(mi) for mi in module_opt[1:]]
        module_exit_opt = iterator.next()
    else:
        yield []
        module_exit_opt = module_opt

    if module_exit_opt[0] == ":moduleexitoptions":
        yield [modules.ModuleExit.parse(mi) for mi in module_exit_opt[1:]]
        objects_opt = iterator.next()
    else:
        yield []
        objects_opt = module_exit_opt

    if objects_opt[0] == ":objects":
        yield pddl_types.parse_typed_list(objects_opt[1:])
        init = iterator.next()
    else:
        yield []
        init = objects_opt

    assert init[0] == ":init"
    initial = []
    for fact in init[1:]:
        if fact[0] == "=":
            if conditions.is_function_comparison(fact):  # numeric function
                initial.append(f_expression.parse_assignment(fact))
            else:  # object function
                function = conditions.parse_term(fact[1])
                terms = function.args
                terms.append(conditions.parse_term(fact[2]))
                atomname = conditions.function_predicate_name(function.name)
                initial.append(conditions.Atom(atomname, terms))
        else:
            initial.append(
                conditions.Atom(
                    fact[0],
                    [conditions.parse_term(term) for term in fact[1:]]))
    yield initial

    goal = iterator.next()
    assert goal[0] == ":goal" and len(goal) == 2
    yield conditions.parse_condition(goal[1])

    for entry in iterator:
        if entry[0] == ":metric" and entry[1] == "minimize":
            if entry[2][0] in ["total-time", "total-cost"]:
                continue
        assert False, "Can only minimize total-time or total-cost, got: " + str(
            entry)