示例#1
0
def get_plan(domain_file, problem_file):
    """
    This method calls the planner.
    The planner can be either FF Planner (ff) or Madagascar (mg).
    It needs to be set in config.py in the root directory.

    :param domain_file: domain file (operator file) for the planner
    :type domain_file: str
    :param problem_file: problem file (fact file) for the planner
    :type problem_file: str
    :param result_file: result file to store output of the planner
    :type result_file: str

    :rtype: list

    """
    plan = ""

    if PLANNER == "FF":
        result_file = temp_output_file
        param = FF_PATH + "ff"
        param += " -o " + domain_file
        param += " -f " + problem_file
        param += " > " + result_file

        p = subprocess.Popen([param], shell=True)
        p.wait()
        plan = FileUtils.get_plan_from_file(result_file)

    elif PLANNER == "FD":
        cmd = FD_PATH + 'fast-downward.py ' + domain_file + ' ' + problem_file + ' --search "astar(lmcut())"'
        plan = os.popen(cmd).read()
        proc_plan = plan.split('\n')
        cost = [i for i, s in enumerate(proc_plan) if 'Plan cost:' in s]
        if 'Solution found!' not in proc_plan:
            print("No Solution")
            return [], 0
        plan = proc_plan[proc_plan.index('Solution found!') + 2:cost[0] - 1]

    return plan
示例#2
0
    def get_plan_from_query(self, init_state, domain_name, objects,
                            pred_type_mapping, action_parameters):

        f = open(Q_DOMAIN_FILE, "w")
        self.write_query_to_file(f, domain_name, objects, pred_type_mapping,
                                 action_parameters)
        f.close()

        f = open(Q_PROBLEM_FILE, "w")
        FileUtils.writeProblemToFile(self, f, domain_name, domain_name + "-1",
                                     True, objects, pred_type_mapping)
        f.close()

        self.call_planner(Q_DOMAIN_FILE, Q_PROBLEM_FILE, Q_RESULT_FILE)
        self.plan = FileUtils.get_plan_from_file(Q_RESULT_FILE)
        planRaw = self.plan

        if len(planRaw) != 0:
            f = open(Q_PLAN_FILE, "w")
            FileUtils.writePlanToFile(self, f, init_state, domain_name,
                                      domain_name + "-1", objects)
            f.close()

        return planRaw