def run_handler(self, json_filename):
        json = fm.from_json(loc.abs_path([loc.RUNS_PATH, json_filename]))
        with open(loc.abs_path([loc.LOGS_PATH, f"{json_filename}.log"]),
                  'w') as l:
            for t in tqdm(json):
                try:
                    task = self.task_from_json(t)

                    #if task.target == loc.MINIZINC and task.n < 16:
                    #if task.target == loc.CLINGO:
                    self.task_handler(task)
                except:
                    print(f"\n\nFAIL\n\n")
 def build_mzn_command(task: Task):
     cmd = fm.from_txt(loc.MINIZINC_CMD_PATH)
     cmd = cmd.replace("[[MZN_PATH]]", Env.get_value(Env.MINIZINC))
     for m in re.findall(r'\[\[[^\[]+\]\]', cmd):
         t = m.replace("[[", "").replace("]]", "")
         cmd = cmd.replace(m, task.params[t])
     fm.to_txt(cmd, loc.abs_path([task.folder, "command.sh"]))
     return f"sh {os.path.join(task.folder, 'command.sh')} {os.path.join(task.folder, loc.MINIZINC_MODEL)} {os.path.join(task.folder, loc.MINIZINC_DATABASE)}"
 def build_clingo_command(task: Task):
     cmd = fm.from_txt(loc.CLINGO_CMD_PATH)
     cmd = cmd.replace('[[n]]', str(task.n))
     cmd = cmd.replace('[[model_path]]',
                       os.path.join(task.folder, 'knights_tour.lp'))
     cmd = cmd.replace('[[database_path]]',
                       os.path.join(task.folder, 'database.lp'))
     fm.to_txt(cmd, loc.abs_path([task.folder, "command.sh"]))
     return f"sh {os.path.join(task.folder, 'command.sh')}"
Esempio n. 4
0
 def __init__(self, name: str, target: str, n: int, k: int, knight1: Pos,
              knight2: Pos, occ: list, params: dict):
     self.name = name
     self.target = target
     self.n = n
     self.k = k
     self.knight1 = knight1
     self.knight2 = knight2
     self.occ = occ
     self.params = params
     self.folder = loc.abs_path([loc.LOGS_PATH, name])
     try:
         os.mkdir(self.folder)
     except:
         pass
    def eval_handler(self, json_filename):
        solutions = []
        json = fm.from_json(loc.abs_path([loc.RUNS_PATH, json_filename]))
        for t in tqdm(json):
            try:
                task = self.task_from_json(t)
                lg = fm.from_txt(os.path.join(task.folder, task.name + ".log"))
                sol = OutputParser.parse(task, lg)
                with open(
                        loc.abs_path(
                            [task.folder, task.name + ".solution.log"]),
                        'w') as s:
                    s.write(str(sol))

                solutions.append(sol)
            except:
                solutions.append(task)

        #solutions.sort(key=lambda x: x.time, reverse=False)
        #solutions.sort(key=lambda x: x.pcoverage, reverse=False)

        for s in solutions:
            if type(s) == Task:
                print(s.name)

        solutions = list(filter(lambda x: type(x) != Task, solutions))
        for i in [16]:
            for t in [loc.CLINGO]:
                si = list(filter(lambda x: x.n == i and t in x.name,
                                 solutions))
                si_c = [x.coverage for x in si]
                si_p = [x.pcoverage for x in si]
                avg_si_c = sum(si_c) / len(si_c)
                std = numpy.std(si_c)
                avg_si_p = sum(si_p) / len(si_p)
                print(f"\n n={i} | {t} | {avg_si_c} +- {std} | {avg_si_p}\n")
    def generate_handler(self, json_filename):

        clingo_params = []

        minizinc_params = [
            {
                "solver": "gecode"
            },
            {
                "allsolutions": "--all-solutions"
            },
            {
                "mzn2fzn": ""
            },
            #{ "mzn2fzn":         "-c" },
            {
                "threads": "-p 4"
            },
            {
                "optimization": "-O5"
            },
            {
                "verbose": ""
            },
            #{ "verbose":         "-v" },
            {
                "varchoice": "impact"
            },
            {
                "constrainchoice": "indomain_middle"
            },
            {
                "strategy": "complete"
            },
            {
                "timeout": "--solver-time-limit 300000"
            }
        ]

        tasks = []
        for n in [8, 10, 12, 14, 16]:
            for i in range(0, 20):
                k = random.randint(4, 10)
                counter = 0
                occ = []
                mtx = [[False for y in range(1, n + 1)]
                       for x in range(1, n + 1)]
                while counter < k + 2:
                    x = random.randint(1, n)
                    y = random.randint(1, n)
                    if not mtx[x - 1][y - 1]:
                        mtx[x - 1][y - 1] = True
                        occ.append({"x": x, "y": y})
                        counter += 1
                knight1 = occ.pop()
                knight2 = occ.pop()
                for target in [loc.MINIZINC, loc.CLINGO]:
                    tasks.append({
                        "name":
                        f"{i}_{n}x{n}_{target}",
                        "target":
                        target,
                        "n":
                        n,
                        "k":
                        k,
                        "knight1":
                        knight1,
                        "knight2":
                        knight2,
                        "occ":
                        occ,
                        "params":
                        clingo_params
                        if target == loc.CLINGO else minizinc_params
                    })
        fm.to_json(tasks, loc.abs_path([loc.RUNS_PATH, json_filename]))