def __init__(self, start_state, goal_state, strategy_str): # Save info. of initial and goal states. self.start_state = start_state self.goal_state = goal_state # Process strategy. if strategy_str == 'bfs': self.strategy = StrategyBFS() elif strategy_str == 'dfs': self.strategy = StrategyDFS() elif strategy_str == 'astar': self.strategy = StrategyBestFirst(AStar(self.start_state)) elif strategy_str == 'wastar': self.strategy = StrategyBestFirst(WAStar( self.start_state, 5)) # default w = 5 (g + w*h) elif strategy_str == 'greedy': self.strategy = StrategyBestFirst(Greedy(self.start_state)) else: # Default to BFS strategy. self.strategy = StrategyBFS() print( 'Defaulting to BFS search. Use arguments -bfs, -dfs, -astar, -wastar, or -greedy to set the search strategy.', file=sys.stderr, flush=True)
def main(strategy_str: "str"): # Read server messages from stdin. server_messages = sys.stdin # Use stderr to print to console through server. print( "SearchClient initializing. I am sending this using the error output stream.", file=sys.stderr, flush=True, ) # Read level and create the initial state of the problem. client = SearchClient(server_messages) strategy = None if strategy_str == "bfs": strategy = StrategyBFS() elif strategy_str == "dfs": strategy = StrategyDFS() elif strategy_str == "astar": strategy = StrategyBestFirst(AStar(client.initial_state)) elif strategy_str == "wastar": strategy = StrategyBestFirst(WAStar(client.initial_state, 5)) elif strategy_str == "greedy": strategy = StrategyBestFirst(Greedy(client.initial_state)) else: # Default to BFS strategy. strategy = StrategyBFS() print( "Defaulting to BFS search. Use arguments -bfs, -dfs, -astar, -wastar, or -greedy to set the search strategy.", file=sys.stderr, flush=True, ) solution = client.search(strategy) if solution is None: print(strategy.search_status(), file=sys.stderr, flush=True) print("Unable to solve level.", file=sys.stderr, flush=True) sys.exit(0) else: print("\nSummary for {}.".format(strategy), file=sys.stderr, flush=True) print( "Found solution of length {}.".format(len(solution)), file=sys.stderr, flush=True, ) print("{}.".format(strategy.search_status()), file=sys.stderr, flush=True) for state in solution: print(state.action, flush=True) response = server_messages.readline().rstrip() if "false" in response: print( 'Server responsed with "{}" to the action "{}" applied in:\n{}\n'.format( response, state.action, state ), file=sys.stderr, flush=True, ) break
def main(strat, lvl, log): start = time.time() # Read server messages from stdin. if lvl == "": server_messages = sys.stdin else: server_messages = open("../levels/" + lvl, "r") # Use stderr to print to console through server. print( 'SearchClient initializing. I am sending this using the error output stream.', file=sys.stderr, flush=True) # Read level and create the initial state of the problem. client = SearchClient(server_messages) # c2 = SearchClient(server_messages=None, init_state=client.initial_state) if strat == "BFS": strategy = StrategyBFS() # Ex. 1: elif strat == "DFS": strategy = StrategyDFS() # Ex. 3: elif strat == "astar": strategy = StrategyBestFirst(AStar(client.initial_state, client.info)) elif strat == "wstar": strategy = StrategyBestFirst( WAStar(client.initial_state, client.info, 5) ) # You can test other W values than 5, but use 5 for the report. elif strat == "greedy": strategy = StrategyBestFirst(Greedy(client.initial_state, client.info)) elif strat == "custom": strategy = Custom(client.initial_state, client.info) else: raise Exception("Invalid strategy") if strat != "custom": solution = client.search(strategy) else: solution = strategy.return_solution() if solution is None: print(strategy.search_status(), file=sys.stderr, flush=True) print('Unable to solve level.', file=sys.stderr, flush=True) sys.exit(0) elif not log: print('\nSummary for {}.'.format(strategy), file=sys.stderr, flush=True) print('Found solution of length {}.'.format(len(solution)), file=sys.stderr, flush=True) # print('{}.'.format(strategy.search_status()), file=sys.stderr, flush=True) for state in solution: print(state.action, flush=True) response = server_messages.readline().rstrip() if response == 'false': print( 'Server responded with "{}" to the action "{}" applied in:\n{}\n' .format(response, state.action, state), file=sys.stderr, flush=True) break else: # Log info log_name = log print('Found solution of length {}.'.format(len(solution)), file=sys.stderr, flush=True) with open(log_name, "a") as myfile: myfile.write( tabulate([[ lvl.ljust(22), format(len(solution)), "{0:.2f}".format(time.time() - start) ]], tablefmt="plain") + "\n") shutil.copy2('planner.py', log_name + "_planner")
def main(strategy_str: 'str'): # Read server messages from stdin. server_messages = sys.stdin sys.stderr.write("ayy??\n") # Use stderr to print to console through server. print( 'SearchClient initializing. I am sending this using the error output stream.', file=sys.stderr, flush=True) print("ayylmao", file=sys.stdout, flush=True) # Read level and create the initial state of the problem. client = SearchClient(server_messages) strategy = None if strategy_str == 'bfs': strategy = StrategyBFS() elif strategy_str == 'dfs': strategy = StrategyDFS() elif strategy_str == 'astar': strategy = StrategyBestFirst(AStar(client.initial_state)) elif strategy_str == 'wastar': strategy = StrategyBestFirst(WAStar(client.initial_state, 5)) elif strategy_str == 'greedy': strategy = StrategyBestFirst(Greedy(client.initial_state)) else: # Default to BFS strategy. strategy = StrategyBFS() print( 'Defaulting to BFS search. Use arguments -bfs, -dfs, -astar, -wastar, or -greedy to set the search strategy.', file=sys.stderr, flush=True) solution = client.search(strategy) if solution is None: print(strategy.search_status(), file=sys.stderr, flush=True) print('Unable to solve level.', file=sys.stderr, flush=True) sys.exit(0) else: print('\nSummary for {}.'.format(strategy), file=sys.stderr, flush=True) print('Found solution of length {}.'.format(len(solution)), file=sys.stderr, flush=True) print('{}.'.format(strategy.search_status()), file=sys.stderr, flush=True) for state in solution: print(state.action, flush=True) response = server_messages.readline().rstrip() if 'false' in response: print( 'Server responsed with "{}" to the action "{}" applied in:\n{}\n' .format(response, state.action, state), file=sys.stderr, flush=True) break