예제 #1
0
def AStar(initial_state):
    global COUNT, BACKLINKS
    # TODO: initialze and put first state into
    # priority queue with respective priority
    # add any auxiliary data structures as needed
    OPEN = PriorityQ()
    CLOSED = []
    #define the g score which means
    #the cost of the move will increase by 1 at each depth
    g = {}
    g[initial_state] = 0
    BACKLINKS[initial_state] = None
    #in priority queue, the state is the element
    #and the F score is the priority
    #F socre is the heuristics score plus g scorce
    OPEN.insert(initial_state, g[initial_state] + 0)

    while not OPEN.isEmpty():
        COUNT += 1
        S = OPEN.deletemin()
        while S in CLOSED:
            S = OPEN.deletemin()
        CLOSED.append(S)
        # DO NOT CHANGE THIS SECTION: begining
        if Problem.GOAL_TEST(S):
            print(Problem.GOAL_MESSAGE_FUNCTION(S))
            path = backtrace(S)
            return path, Problem.PROBLEM_NAME
            # DO NOT CHANGE THIS SECTION: end

            # TODO: finish A* implementation
        for op in Problem.OPERATORS:
            if op.precond(S):
                new_state = op.state_transf(S)
                if not (new_state in CLOSED):
                    h = heuristics(new_state)
                    g[new_state] = g[S] + 1
                    if new_state not in OPEN:
                        OPEN.insert(new_state, h + g[new_state])
                        BACKLINKS[new_state] = S
예제 #2
0
def AStar(initial_state):
     # this breaks pq ties
    global COUNT, BACKLINKS
    # TODO: initialze and put first state into
    # priority queue with respective priority
    # add any auxiliary data structures as needed
    OPEN = PriorityQ()
    CLOSED = []
    OPEN.insert(initial_state,0)
    BACKLINKS[initial_state] = None

    while not OPEN.isEmpty():
        COUNT += 1
        S = OPEN.deletemin()
        while S in CLOSED:
            S = OPEN.deletemin()

        CLOSED.append(S)
        # DO NOT CHANGE THIS SECTION: begining
        if Problem.GOAL_TEST(S):
            print(Problem.GOAL_MESSAGE_FUNCTION(S))
            path = backtrace(S)
            return path, Problem.PROBLEM_NAME
        # DO NOT CHANGE THIS SECTION: end

        # TODO: finish A* implementation
        for op in Problem.OPERATORS:
          #Optionally uncomment the following when debugging
          #a new problem formulation.
          # print("Trying operator: "+op.name)
          if op.precond(S):
            new_state = op.state_transf(S)
            if not (new_state in CLOSED):
                h = heuristics(new_state)
                #new_pq_item = ( new_state,h)
                OPEN.insert(new_state , h)
                BACKLINKS[new_state] = S
예제 #3
0
def AStar(initial_state):
    global COUNT, BACKLINKS
    OPEN = PriorityQ()  #currently discovered, not yet evaluated states
    CLOSED = []  #already evaluated states
    BACKLINKS[initial_state] = None  #Tracks most efficient previous step

    #Calculate F, G, H scores for Starting state
    initialize_scores(initial_state)

    #Only one state is known as of now
    OPEN.insert(initial_state, F_SCORE[initial_state])

    while OPEN.isEmpty() != True:
        S, priority = OPEN.deletemin()
        while S in CLOSED:
            S = OPEN.deletemin()
        CLOSED.append(S)

        # DO NOT CHANGE THIS SECTION: beginning
        if Problem.GOAL_TEST(S):
            print(Problem.GOAL_MESSAGE_FUNCTION(S))
            path = backtrace(S)
            return path, Problem.PROBLEM_NAME
            # DO NOT CHANGE THIS SECTION: end

        COUNT += 1
        if (COUNT % 32) == 0:
            #        if True:
            # print(".",end="")
            #            if (COUNT % 128*128)==0:
            if True:
                print("COUNT = " + str(COUNT))
                #print("len(OPEN)=" + str(len(OPEN))) #PriorityQ OPEN doesn't have len()
                print("len(CLOSED)=" + str(len(CLOSED)))

        for op in Problem.OPERATORS:
            if op.precond(S):
                new_state = op.state_transf(S)
                if not occurs_in(new_state,
                                 CLOSED):  #ignore already evaluated neighbors

                    #find tentative score of neighbor
                    tentative_g_score = G_SCORE[S] + 1

                    if new_state not in G_SCORE:  #Default INFINITY
                        BACKLINKS[
                            new_state] = S  #First known path to new_state

                    elif tentative_g_score <= G_SCORE[new_state]:
                        BACKLINKS[
                            new_state] = S  # Found better path to new_State

                    else:
                        continue  #current path is not the best path to the neighbor

                    G_SCORE[new_state] = tentative_g_score
                    F_SCORE[new_state] = G_SCORE[new_state] + h_score_fn(
                        new_state)

                    # Delete previous F-score in PriorityQ if it exists
                    if OPEN.__contains__(new_state):
                        OPEN.remove(new_state)

                    #Update PriorityQ with new priority
                    OPEN.insert(new_state, F_SCORE[new_state])

                # print(Problem.DESCRIBE_STATE(new_state))
        #print(OPEN)

    #Failure, if goal_test has not succeeded until now
    print("COULD NOT FIND GOAL")
    return
예제 #4
0
def AStar(initial_state):
    # print("In RecDFS, with depth_limit="+str(depth_limit)+", current_state is ")
    # print(Problem.DESCRIBE_STATE(current_state))
    global COUNT, BACKLINKS

    #Tracks most efficient previous step
    BACKLINKS[initial_state] = None

    #already evaluated states
    CLOSED = []

    #currently discovered, not yet evaluated states
    OPEN = PriorityQ()

    #Calculate F, G, H scores
    initialize_scores(initial_state)

    #Only initial node is known as of now
    OPEN.insert(initial_state, F_SCORE[initial_state])

    while OPEN.isEmpty() != True:
        S = OPEN.deletemin()
        CLOSED.append(S)

        if Problem.GOAL_TEST(S):
            print(Problem.GOAL_MESSAGE_FUNCTION(S))
            backtrace(S)
            return  #FOUND GOAL

        COUNT += 1
        if (COUNT % 32) == 0:
            #        if True:
            # print(".",end="")
            #            if (COUNT % 128*128)==0:
            if True:
                print("COUNT = " + str(COUNT))
                #print("len(OPEN)=" + str(len(OPEN))) #PriorityQ OPEN doesn't have len()
                print("len(CLOSED)=" + str(len(CLOSED)))

        for op in Problem.OPERATORS:
            if op.precond(S):
                new_state = op.state_transf(S)
                if not occurs_in(new_state,
                                 CLOSED):  #ignore already evaluated neighbors

                    #find tentative score of neighbor
                    tentative_g_score = G_SCORE[S] + 1

                    if new_state not in G_SCORE:  #Default INFINITY
                        BACKLINKS[
                            new_state] = S  #First known path to new_state
                    elif tentative_g_score >= G_SCORE[new_state]:
                        continue  #current path is not the best path to the neighbor
                    else:
                        BACKLINKS[
                            new_state] = S  #Found better path to new_State

                    G_SCORE[new_state] = tentative_g_score
                    F_SCORE[new_state] = G_SCORE[new_state] + h_score_fn(
                        new_state)

                    # discovered a new State
                    if not OPEN.__contains__(new_state):
                        OPEN.insert(new_state, F_SCORE[new_state])

                    # print(Problem.DESCRIBE_STATE(new_state))
            #print(OPEN)

    #Failure, if goal_test has not succeeded until now
    print("COULD NOT FIND GOAL")
    return