예제 #1
0
def test_solve_sokoban_elem():
    puzzle_t1 ='#######\n#@ $. #\n#######'
    wh = Warehouse()
    wh.extract_locations(puzzle_t1.split(sep='\n'))
    # first test
    answer = solve_sokoban_elem(wh)
    expected_answer = ['Right', 'Right']
    fcn = test_solve_sokoban_elem
    print('<<  First test of {} >>'.format(fcn.__name__))
    if answer==expected_answer:
        print(fcn.__name__, ' passed!  :-)\n')
    else:
        print(fcn.__name__, ' failed!  :-(\n')
        print('Expected ');print(expected_answer)
        print('But, received ');print(answer)
    #second test
    puzzle_t2 ='#######\n#@ $ #.#\n#######'
    wh = Warehouse()
    wh.extract_locations(puzzle_t2.split(sep='\n'))
    # second test
    answer = solve_sokoban_elem(wh)
    expected_answer = ['Impossible']
    print('<<  Second test of {} >>'.format(fcn.__name__))
    if answer==expected_answer:
        print(fcn.__name__, ' passed!  :-)\n')
    else:
        print(fcn.__name__, ' failed!  :-(\n')
        print('Expected ');print(expected_answer)
        print('But, received ');print(answer)
예제 #2
0
def test_solve_sokoban_elem():
    puzzle_t1 = '#######\n#@ $. #\n#######'
    wh = Warehouse()
    wh.from_string(puzzle_t1)
    # first test
    answer = solve_sokoban_elem(wh)
    expected_answer = ['Right', 'Right']
    fcn = test_solve_sokoban_elem
    print('<<  First test of {} >>'.format(fcn.__name__))
    if answer == expected_answer:
        print(fcn.__name__, ' passed!  :-)\n')
    else:
        print(fcn.__name__, ' failed!  :-(\n')
        print('Expected ')
        print(expected_answer)
        print('But, received ')
        print(answer)
    # second test
    puzzle_t2 = '#######\n#@ $ #.#\n#######'
    wh = Warehouse()
    wh.from_string(puzzle_t2)
    # second test
    answer = solve_sokoban_elem(wh)
    expected_answer = 'Impossible'
    print('<<  Second test of {} >>'.format(fcn.__name__))
    if answer == expected_answer:
        print(fcn.__name__, ' passed!  :-)\n')
    else:
        print(fcn.__name__, ' failed!  :-(\n')
        print('Expected ')
        print(expected_answer)
        print('But, received ')
        print(answer)
예제 #3
0
def test_elem(n):
    problem_file = "./warehouses/warehouse_%s.txt" % str(n)
    print(n, ": ", end="")
    wh = Warehouse()
    wh.load_warehouse(problem_file)
    time1 = time.time()
    solve_sokoban_elem(wh)
    print('{:06.3f}s'.format(time.time() - time1))
예제 #4
0
def test_solve_comparison():
    problem_file = "./warehouses/warehouse_35.txt"
    wh = Warehouse()
    wh.read_warehouse_file(problem_file)
    print(wh)

    bfs = True
    elem = True
    macro = True    

    if (bfs):
        sp = SokobanPuzzle(wh)
        start = time.time()
        answer = breadth_first_graph_search(sp).solution()
        end = time.time()
        print("BFS Elem took:", end - start, "secs")
        print(answer)
        
    if (elem):
        start = time.time()
        answer = solve_sokoban_elem(wh)
        end = time.time()
        print("A* elem took:", end - start, "secs")
        print(answer)

    if (macro):
        start = time.time()
        answer = solve_sokoban_macro(wh)
        end = time.time()
        print("A* macro took:", end - start, "secs")
        print(answer)
예제 #5
0
def test(n):
    problem_file = "./warehouses/warehouse_%s.txt" % str(n)
    print("Testing:", problem_file)
    wh = Warehouse()
    wh.load_warehouse(problem_file)
    time1 = time.time()
    answer = solve_sokoban_elem(wh)
    print(time.time() - time1)
    print(answer)
예제 #6
0
def test_solve_sokoban_elem():
    problem_file = "./warehouses/warehouse_27.txt"
    wh = Warehouse()
    wh.read_warehouse_file(problem_file)
    # wh.extract_locations(puzzle_t1.split(sep='\n'))
    print(wh)
    print('\nElementary solution')
    answer = solve_sokoban_elem(wh)
    print(answer)
예제 #7
0
def test_expected(n, expected):
    wh = Warehouse()
    # removes unneccessary \n
    wh.from_lines(n.split(sep='\n'))
    answer = solve_sokoban_elem(wh)
    print(answer)
    if answer == expected:
        print('Test Passed')
    else:
        print("Test Failed")
예제 #8
0
def test_solve_sokoban_elem():
#    problem_file = "./warehouses/warehouse_01.txt"
    wh = Warehouse()
#    wh.read_warehouse_file(problem_file)
    wh.extract_locations(puzzle_t1.split(sep='\n'))
    print(wh)
    print('\nElementary solution')
    answer = solve_sokoban_elem(wh)
    print(answer)
    if  answer ==  ['Right', 'Right']:
        print('Test solve_sokoban_elem passed\n')
    else:
        print('** Test solve_sokoban_elem failed\n')
예제 #9
0
def test_warehouse(warehouse_number):
    average_time = 0
    result = None
    for i in range(TESTS_PER_WAREHOUSE):
        problem_file = "./warehouses/warehouse_{:02d}.txt".format(
            warehouse_number)
        wh = Warehouse()
        wh.read_warehouse_file(problem_file)
        start_time = time.process_time()
        result = solve_sokoban_elem(wh)
        average_time += (time.process_time() -
                         start_time) / TESTS_PER_WAREHOUSE
        print("{}%".format((i + 1) * 100 / TESTS_PER_WAREHOUSE))

    with open(DATA_FILENAME, 'a') as file:
        file.write("{:02d},{},{}\n".format(warehouse_number, average_time,
                                           result))
예제 #10
0
    def tester(num):
        problem_file = "./warehouses/warehouse_{:02d}.txt".format(num)
        print('Warehouse number:{0}'.format(num))
        wh = Warehouse()
        wh.load_warehouse(problem_file)

        t0 = time.time()
        result = solve_sokoban_macro(wh)
        t1 = time.time()

        print('Macro Solver took {:.6f} seconds'.format(t1 - t0))

        wh = Warehouse()
        wh.load_warehouse(problem_file)

        t0 = time.time()
        result = solve_sokoban_elem(wh)
        t1 = time.time()
        print('Elem Solver took {:.6f} seconds\n'.format(t1 - t0))
예제 #11
0
def test_solve_sokoban_elem():
    problem_file = "./warehouses/warehouse_01.txt"
    wh = Warehouse()
    wh.read_warehouse_file(problem_file)
    answer = solve_sokoban_elem(wh)
    assert (answer == ['Right', 'Right'])
예제 #12
0
def test_solve_sokoban_elem():
    puzzle_t1 = '#######\n#@ $. #\n#######'
    wh = Warehouse()
    wh.extract_locations(puzzle_t1.split(sep='\n'))
    # first test
    answer = solve_sokoban_elem(wh)
    expected_answer = ['Right', 'Right']
    fcn = test_solve_sokoban_elem
    print('<<  First test of {} >>'.format(fcn.__name__))
    if answer == expected_answer:
        print(fcn.__name__, ' passed!  :-)\n')
    else:
        print(fcn.__name__, ' failed!  :-(\n')
        print('Expected ')
        print(expected_answer)
        print('But, received ')
        print(answer)
    # second test
    puzzle_t2 = '#######\n#@ $ #.#\n#######'
    wh = Warehouse()
    wh.extract_locations(puzzle_t2.split(sep='\n'))
    answer = solve_sokoban_elem(wh)
    expected_answer = ['Impossible']
    print('<<  Second test of {} >>'.format(fcn.__name__))
    if answer == expected_answer:
        print(fcn.__name__, ' passed!  :-)\n')
    else:
        print(fcn.__name__, ' failed!  :-(\n')
        print('Expected ')
        print(expected_answer)
        print('But, received ')
        print(answer)
#     third test
    wh = Warehouse()
    wh.load_warehouse("./warehouses/warehouse_01.txt")
    answer = solve_sokoban_elem(wh)
    expected_answer = [
        'Down', 'Left', 'Up', 'Right', 'Right', 'Right', 'Down', 'Left', 'Up',
        'Left', 'Left', 'Down', 'Down', 'Right', 'Up', 'Left', 'Up', 'Right',
        'Up', 'Up', 'Left', 'Down', 'Right', 'Down', 'Down', 'Right', 'Right',
        'Up', 'Left', 'Down', 'Left', 'Up', 'Up'
    ]

    fcn = test_solve_sokoban_elem
    print('<<  First test of {} >>'.format(fcn.__name__))
    if answer == expected_answer:
        print(fcn.__name__, ' passed!  :-)\n')
    else:
        print(fcn.__name__, ' failed!  :-(\n')
        print('Expected ')
        print(expected_answer)
        print('But, received ')
        print(answer)


#     4 test
    wh = Warehouse()
    wh.load_warehouse("./warehouses/warehouse_03.txt")
    answer = solve_sokoban_elem(wh)
    expected_answer = ['Right', 'Up', 'Up', 'Left', 'Left', 'Left', 'Up', \
                       'Left', 'Down', 'Right', 'Right', 'Right', 'Right', \
                       'Down', 'Down', 'Left', 'Up', 'Right', 'Up', 'Left', \
                       'Left', 'Left', 'Down', 'Down', 'Left', 'Left', 'Left', \
                       'Up', 'Up', 'Right', 'Right', 'Down', 'Right', 'Down', \
                       'Left', 'Up', 'Up', 'Up', 'Right', 'Down', 'Down']

    fcn = test_solve_sokoban_elem
    print('<<  First test of {} >>'.format(fcn.__name__))
    if answer == expected_answer:
        print(fcn.__name__, ' passed!  :-)\n')
        print('Number of moves: ', len(expected_answer))
    else:
        print(fcn.__name__, ' failed!  :-(\n')
        print('Expected (' + str(len(expected_answer)) + ' moves)')
        print(expected_answer)
        print('But, received  (' + str(len(answer)) + ' moves)')
        print(answer)

    wh = Warehouse()
    wh.load_warehouse("./warehouses/warehouse_47.txt")
    answer = solve_sokoban_elem(wh)
    expected_answer = ['Right', 'Right', 'Right', 'Up', 'Up', 'Up', 'Left', \
                       'Left', 'Down', 'Right', 'Right', 'Down', 'Down', 'Left', \
                       'Left', 'Left', 'Left', 'Up', 'Up', 'Right', 'Right', \
                       'Right', 'Up', 'Right', 'Down', 'Down', 'Up', 'Left', \
                       'Left', 'Left', 'Left', 'Down', 'Down', 'Right', 'Right', \
                       'Right', 'Right', 'Right', 'Right', 'Down', 'Right', \
                       'Right', 'Up', 'Left', 'Left', 'Left', 'Left', 'Left', \
                       'Left', 'Right', 'Right', 'Up', 'Up', 'Up', 'Right', \
                       'Right', 'Down', 'Left', 'Up', 'Left', 'Down', 'Down', \
                       'Up', 'Left', 'Left', 'Left', 'Left', 'Down', 'Down', \
                       'Down', 'Right', 'Right', 'Up', 'Right', 'Right', 'Left', \
                       'Left', 'Down', 'Left', 'Left', 'Up', 'Right', 'Right']

    fcn = test_solve_sokoban_elem
    print('<<  First test of {} >>'.format(fcn.__name__))
    if answer == expected_answer:
        print(fcn.__name__, ' passed!  :-)\n')
        print('Number of moves: ', len(expected_answer))
    else:
        print(fcn.__name__, ' failed!  :-(\n')
        print('Expected (' + str(len(expected_answer)) + ' moves)')
        print(expected_answer)
        print('But, received  (' + str(len(answer)) + ' moves)')
        print(answer)

    wh = Warehouse()
    wh.load_warehouse("./warehouses/warehouse_147.txt")
    answer = solve_sokoban_elem(wh)
    expected_answer = ['Left', 'Left', 'Left', 'Left', 'Left', 'Left', 'Down', \
                       'Down', 'Down', 'Right', 'Right', 'Up', 'Left', 'Down', \
                       'Left', 'Up', 'Up', 'Left', 'Up', 'Right', 'Right', \
                       'Right', 'Right', 'Right', 'Right', 'Down', 'Right', 'Right', \
                       'Right', 'Up', 'Up', 'Left', 'Left', 'Down', 'Left', \
                       'Left', 'Left', 'Left', 'Left', 'Left', 'Down', 'Down', \
                       'Right', 'Right', 'Right', 'Down', 'Right', 'Down', 'Down', \
                       'Left', 'Up', 'Right', 'Up', 'Left', 'Left', 'Left', 'Right', \
                       'Right', 'Down', 'Down', 'Down', 'Left', 'Left', 'Up', \
                       'Up', 'Left', 'Up', 'Up', 'Up', 'Left', 'Up', 'Right', \
                       'Right', 'Right', 'Right', 'Right', 'Right', 'Left', 'Left', \
                       'Left', 'Left', 'Left', 'Down', 'Down', 'Right', 'Right', \
                       'Down', 'Left', 'Down', 'Left', 'Up', 'Up', 'Up', 'Left', \
                       'Up', 'Right', 'Right', 'Right', 'Right', 'Right', 'Down', \
                       'Right', 'Down', 'Right', 'Right', 'Up', 'Left', 'Right', \
                       'Right', 'Up', 'Up', 'Left', 'Left', 'Down', 'Left', 'Left', \
                       'Left', 'Left', 'Left', 'Left', 'Right', 'Right', 'Right', \
                       'Right', 'Right', 'Right', 'Up', 'Right', 'Right', 'Down', \
                       'Down', 'Left', 'Down', 'Left', 'Left', 'Up', 'Right', 'Up', \
                       'Left', 'Left', 'Down', 'Right', 'Right', 'Right', 'Down',\
                       'Right', 'Up']

    fcn = test_solve_sokoban_elem
    print('<<  First test of {} >>'.format(fcn.__name__))
    if answer == expected_answer:
        print(fcn.__name__, ' passed!  :-)\n')
        print('Number of moves: ', len(expected_answer))
    else:
        print(fcn.__name__, ' failed!  :-(\n')
        print('Expected (' + str(len(expected_answer)) + ' moves)')
        print(expected_answer)
        print('But, received  (' + str(len(answer)) + ' moves)')
        print(answer)
예제 #13
0
    num = int(input("Warehouse Num: "))
    problem_file = "./warehouses/warehouse_{:02d}.txt".format(num)

    # Test marco solver

    wh = Warehouse()
    wh.load_warehouse(problem_file)
    print(wh)
    print("Macro Solver")
    t0 = time.time()
    result = mySokobanSolver.solve_sokoban_macro(wh)
    t1 = time.time()

    print('Macro Solver took {:.6f} seconds'.format(t1 - t0))
    print("Solution: {0}".format(result))
    print("Solution Len: {0} \n".format(len(result)))

    # Test element solver

    wh = Warehouse()
    wh.load_warehouse(problem_file)
    print("Element Solver")
    t0 = time.time()
    result = mySokobanSolver.solve_sokoban_elem(wh)
    t1 = time.time()

    print('Elem Solver took {:.6f} seconds'.format(t1 - t0))
    print("Solution: {0}".format(result))
    print("Solution Len: {0} \n".format(len(result)))