Commit 9605a723 authored by Kento HASEGAWA's avatar Kento HASEGAWA
Browse files

Update scripts for adc2019-system

parent 6e51ca5f
Loading
Loading
Loading
Loading

kwmr_solver_pynq.py

0 → 100644
+98 −0
Changes for kwmr_solver_pynq.py: 98 added lines, 0 removed lines.
Original line number Diff line number Diff line
import argparse
import os
import random
import subprocess
import uuid

proc = None
stop_flag = False

def stop():
    global proc
    global stop_flag

    stop_flag = True
    if not proc is None:
        proc.terminate()
        print('stopped')

def solve(params):
    global proc
    global stop_flag

    stop_flag = False

    # 必要な変数があるか確認
    assert('problem' in params)

    problem = params['problem']

    basedir = os.path.abspath(os.path.dirname(__file__))

    pid = str(uuid.uuid4())
    problem_filepath = f'{basedir}/P{pid}.txt'
    with open(problem_filepath, 'w') as fp:
        fp.write(problem)

    aid = str(uuid.uuid4())
    solution_filepath = f'{basedir}/A{aid}.txt'
    if os.path.exists(solution_filepath):
        os.remove(solution_filepath)

    seed = random.randint(0, 2147483647) # seed: uint32_t <= 2147483647

    cmds = f'python3 {basedir}/solver_soft/scripts/main.py -p {problem_filepath} -s {seed} -o {solution_filepath}'.split()

    proc = subprocess.Popen(
        cmds,
        stdin=subprocess.PIPE,
        # stderr=subprocess.PIPE,
        # stdout=subprocess.PIPE
    )

    try:
        proc.communicate(problem.encode())
        status = 'done'
    except Exception as ex:
        status = 'failed'
    finally:
        returncode = proc.returncode

    solution = ''
    if returncode == 0:
        status = 'done'
        if os.path.exists(solution_filepath):
            with open(solution_filepath, 'r') as fp:
                solution = fp.read()
        else:
            status = 'failed'
    else:
        status = 'failed'

    return {
        'status': status,
        'solution': solution
    }

def main(args):

    with open(args['problem'], 'r') as fp:
        problem = fp.read()
    
    params = {
        'problem': problem,
        'timeout': args['timeout']
    }

    ret = solve(params)

    print(ret)

if __name__ == "__main__":
    
    parser = argparse.ArgumentParser(description='Wrapper Script for ADC2019 Solver')
    parser.add_argument('problem', type=str, help='File path to the problem file')
    parser.add_argument('-t', '--timeout', type=int, default=10, help='Timeout for the process of the solver')
    args = vars(parser.parse_args())

    main(args)
+3 −0
Changes for scripts/main.py: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
import numpy as np
from argparse import ArgumentParser
import sys
import time

import mySolverModule
@@ -105,9 +106,11 @@ def main(args):

	if W_ext[0] > info['W'][0] or H_ext[0] > info['H'][0]:
		print('Fail satisfying constraint T_T')
        sys.exit(1)
	else:
		print('Satisfy constraint ^_^')
		if args['output'] is not None: mySolverModule.output_to_file(args['output'], W_ext[0], H_ext[0], info['blocks'][0], info['line_num'][0], info['block_info'], result)
        sys.exit(0)

if __name__ == '__main__':