Beispiel #1
0
def test_solve_sokoban_macro():
    wh = Warehouse()
    wh.extract_locations(puzzle_t3.split(sep='\n'))
    print(wh)
    answer = solve_sokoban_macro(wh)
    assert (answer == [((2, 3), 'Right'), ((2, 4), 'Right'), ((3, 3), 'Left'),
                       ((3, 2), 'Left')])
Beispiel #2
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)
Beispiel #3
0
def test_macro(n):
    problem_file = "./warehouses/warehouse_%s.txt" % str(n)
    print(n, ": ", end="")
    wh = Warehouse()
    wh.load_warehouse(problem_file)
    time1 = time.time()
    a = solve_sokoban_macro(wh)
    print('{:06.3f}s'.format(time.time() - time1))
Beispiel #4
0
def test_expected(n, expected):
    wh = Warehouse()
    # removes unneccessary \n
    wh.from_lines(n.split(sep='\n'))
    answer = solve_sokoban_macro(wh)
    if answer == expected:
        print('Test Passed')
    else:
        print("Test Failed")
Beispiel #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_macro(wh)
    print(time.time() - time1)
    print(answer)
Beispiel #6
0
def test_check_macro_action_seq():
    wh = Warehouse()
    wh.extract_locations(puzzle_t1.split(sep='\n'))
    print(wh)
    answer = solve_sokoban_macro(wh.copy())
    print(answer)

    print("\ntesting [((2, 3), 'Right')]")
    print( check_macro_action_seq(wh.copy(),[((2, 3), 'Right')]) )
    print("\ntesting [((2, 3), 'Left')]")
    print( check_macro_action_seq(wh.copy(), [((2, 3), 'Left')]) )
Beispiel #7
0
def test_solve_sokoban_macro():
    puzzle_t2 ='#######\n#@ $ .#\n#######'
    wh = Warehouse()    
    wh.from_string(puzzle_t2)
    # first test
    answer=solve_sokoban_macro(wh)
    expected_answer = [((1, 3), 'Right'), ((1, 4), 'Right')]
    fcn = test_solve_sokoban_macro
    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)
Beispiel #8
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))
Beispiel #9
0
def test_solve_sokoban_macro():
    wh = Warehouse()
    wh.extract_locations(puzzle_t3.split(sep='\n'))
    print(wh)
    answer = solve_sokoban_macro(wh)
    print(answer)
Beispiel #10
0
def test_solve_sokoban_macro():
    #    puzzle_t2 ='#######\n#@ $ .#\n#######'
    #    wh = Warehouse()
    #    wh.extract_locations(puzzle_t2.split(sep='\n'))
    #    # first test
    #    answer=solve_sokoban_macro(wh)
    #    expected_answer = [((1, 3), 'Right'), ((1, 4), 'Right')]
    #    fcn = test_solve_sokoban_macro
    #    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
    #    wh = Warehouse()
    #    wh.load_warehouse("./warehouses/warehouse_01.txt")
    #    answer=solve_sokoban_macro(wh)
    #    expected_answer = [((1, 3), 'Right'), ((1, 4), 'Right')]
    #    fcn = test_solve_sokoban_macro
    #    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)

    #    wh = Warehouse()
    #    wh.load_warehouse("./warehouses/warehouse_03.txt")
    #    answer=solve_sokoban_macro(wh)
    #    expected_answer = [((2, 6), 'Left'), ((2, 5), 'Left'), ((2, 4), 'Left'), ((2, 3), 'Down'),\
    #                       ((3, 6), 'Up'), ((2, 6), 'Left'), ((2, 5), 'Left'), ((2, 4), 'Left'), \
    #                       ((2, 3), 'Right'), ((3, 3), 'Down'), ((4, 3), 'Left'), ((2, 4), 'Down'), ((3, 4), 'Down')]
    #
    #    fcn = test_solve_sokoban_macro
    #    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_macro(wh)
    expected_answer = [((2, 4), 'Right'), ((2, 5), 'Right'), ((2, 2), 'Right'), \
                       ((2, 3), 'Right'), ((2, 6), 'Left'), ((2, 5), 'Down'), \
                       ((3, 5), 'Down'), ((4, 5), 'Right'), ((2, 4), 'Right'), \
                       ((2, 5), 'Down'), ((4, 6), 'Right'), ((4, 7), 'Right'), \
                       ((4, 8), 'Left'), ((4, 7), 'Left'), ((4, 6), 'Left'), \
                       ((4, 5), 'Left'), ((4, 4), 'Left'), ((4, 3), 'Left'), \
                       ((3, 5), 'Down'), ((4, 5), 'Right'), ((4, 2), 'Right'), \
                       ((4, 3), 'Right')]

    fcn = test_solve_sokoban_macro
    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)
Beispiel #11
0
import csv
from sokoban import Warehouse

if __name__ == "__main__":

    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()