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')])
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)
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))
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")
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)
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')]) )
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)
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))
def test_solve_sokoban_macro(): wh = Warehouse() wh.extract_locations(puzzle_t3.split(sep='\n')) print(wh) answer = solve_sokoban_macro(wh) print(answer)
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)
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()