Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
def main():
    # 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 = StrategyBFS()
    # Ex. 1:
    #strategy = StrategyDFS()

    # Ex. 3:
    #strategy = StrategyBestFirst(AStar(client.initial_state))
    #strategy = StrategyBestFirst(WAStar(client.initial_state, 5)) # You can test other W values than 5, but use 5 for the report.
    #strategy = StrategyBestFirst(Greedy(client.initial_state))

    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 response == 'false':
                print(
                    'Server responsed with "{}" to the action "{}" applied in:\n{}\n'
                    .format(response, state.action, state),
                    file=sys.stderr,
                    flush=True)
                break
Ejemplo n.º 3
0
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")
Ejemplo n.º 4
0
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