def test_greedy_dfs(weights): def compare(original, final, moves, row, column, assert_error_message): for delta_r, delta_c in moves: original.swap(row, column, row + delta_r, column + delta_c) row += delta_r column += delta_c for r in range(original.rows): for c in range(original.columns): assert isinstance(original.cell(r, c), type(final.cell(r, c))), assert_error_message # solution should contain move list that gets you to the final board state starting from original board state original = Board.create_randomized_board(5, 6) _, moves, final_board = GreedyDfs(weights).solve(original, 20) compare(original, final_board, moves[1:], moves[0][0], moves[0][1], "Greedy DFS yielded an incorrect 4-way move list!") # same with diagonals enabled original = Board.create_randomized_board(5, 6) h = GreedyDfs(weights) h.diagonals = True _, moves, final_board = h.solve(original, 20) compare(original, final_board, moves[1:], moves[0][0], moves[0][1], "Greedy DFS yielded an incorrect 8-way move list!")
def run(rows, columns, depth, weights): def update_board_with_matches(board, matches): for piece, clusters in matches: for r, c in clusters: board.update(r, c, type(piece)) b = Board.create_randomized_board(5, 6) # b = Board([Fire, Wood, Water, Dark, Light, Light, # Water, Fire, Water, Light, Heart, Light, # Fire, Water, Dark, Heart, Heart, Wood, # Light, Water, Light, Fire, Wood, Wood, # Dark, Heart, Dark, Light, Heart, Light], 5, 6) m = Board.create_empty_board(rows, columns) update_board_with_matches(m, b.get_matches()) h = GreedyDfs(weights) if False else PrunedBfs(weights) h.diagonals = True start = time.time() moves = h.solve(b, depth) performance = time.time() - start print('---------------------------------------------') print(b) print(m) print('run time : ' + str(performance)) print('best move score : ' + str(moves[0])) print('start : ' + str(moves[1][0])) print('moves : ' + str(moves[1][1:])) print(moves[2]) m = Board.create_empty_board(rows, columns) update_board_with_matches(m, moves[2].get_matches()) print(m)
from pazudorasolver.heuristics.pruned_bfs import PrunedBfs weights = { Fire.symbol: 1.0, Wood.symbol: 1.0, Water.symbol: 1.0, Dark.symbol: 1.0, Light.symbol: 1.0, Heart.symbol: 1.0, Poison.symbol: 0.5, Jammer.symbol: 0.5, Unknown.symbol: 0.0 } board = Board.create_randomized_board(5, 6) matches = board.get_matches() print(board) print(matches) # try GreedyDfs heuristic solver1 = GreedyDfs(weights) solution = solver1.solve(board, 50) print(solution) # try PrunedBfs heuristic solver2 = PrunedBfs(weights) solution = solver2.solve(board, 50) print(solution)
Heart.symbol: 1.0, Poison.symbol: 0.5, Jammer.symbol: 0.5, Unknown.symbol: 0.0 } #board = Board.create_randomized_board(5, 6) piece_list = [ Fire, Wood, Water, Dark, Light, Heart, Fire, Water, Dark, Light, Heart, Fire, Fire, Water, Dark, Heart, Heart, Wood, Light, Water, Light, Fire, Wood, Wood, Dark, Water, Dark, Light, Light, Light ] number_of_rows = 5 number_of_columns = 6 board = Board(piece_list, number_of_rows, number_of_columns) matches = board.get_matches() print(board) print(matches) solver1 = GreedyDfs(weights) solution = solver1.solve(board, 100) print(solution) solver2 = PrunedBfs(weights) solution = solver2.solve(board, 100) print(solution)