Esempio n. 1
0
def main(args):

    # Read the board from standard in
    board = sys.stdin.read().splitlines()
    for i in range(len(board)):
        board[i] = list(board[i])

    # Define the heuristics
    def manhatten_heuristic(state, goal_state):
        dr = abs(state[0] - goal_state[0])
        dc = abs(state[1] - goal_state[1])
        return dr + dc

    def no_heuristic(state, goal_state):
        return 0

    # A*
    astar_problem = GridProblem(board, manhatten_heuristic)
    astar_result = uniform_cost.search(astar_problem)
    make_graphics('astar_', args.image_destination, args.postfix,
                  board, astar_result)

    # Dijsktra
    dijkstra_problem = GridProblem(board, no_heuristic)
    dijkstra_result = uniform_cost.search(dijkstra_problem)
    make_graphics('dijkstra_', args.image_destination, args.postfix,
                  board, dijkstra_result)

    # BFS
    bfs_problem = GridProblem(board, no_heuristic)
    bfs_result = breadth_first.search(bfs_problem)
    make_graphics('bfs_', args.image_destination, args.postfix,
                  board, bfs_result)
Esempio n. 2
0
def main(args):
    # Reading input
    rows, cols = [int(x) for x in sys.stdin.readline().split(' ')]
    cars = []
    for line in sys.stdin:
        line = line.strip('()\n')
        parts = line.split(',')
        parts = [int(part) for part in parts]
        cars.append(tuple(parts))

    # Making a 2D-representation
    board = [[-1 for c in range(cols)] for r in range(rows)]
    for ci in range(len(cars)):
        (ori, c, r, size) = cars[ci]
        dr = [0, 1][ori]
        dc = [1, 0][ori]
        for i in range(size):
            board[r + (dr * i)][c + (dc * i)] = ci

    # Solving
    heuristic = str_to_heuristic(args.heuristic, cars, board)
    problem = RushHourProblem(cars, board, heuristic)
    (end_state, parent, explored, _) = uniform_cost.search(problem)

    # Results
    print('Explored states:'.rjust(17), len(explored))

    move = 0
    while end_state in parent:
        if args.image_destination:
            make_graphics(end_state, args.image_destination, move)
        move += 1
        end_state = parent[end_state]
    if args.image_destination:
        make_graphics(end_state, args.image_destination, move)

    print('Moves:'.rjust(17), move)
    print('Branching factor:', '{:1.3f}'.format(
        exp(log(len(explored)) / move)))