Esempio n. 1
0
def searchHD(p):
    unvisited = []
    heapq.heappush(unvisited,
                   (p.cost_so_far + heuristics.hamming_distance(p), p))
    visited = []

    while unvisited:
        current = heapq.heappop(unvisited)[1]
        # with open('puzzleA_starMDTrace.txt', 'a') as f:
        #         f.write("{} {} cost = {}\n".format(current.move, current.config, current.cost_so_far))
        if utilities.goal(current):
            return current
        if utilities.wasVisited(current, visited):
            continue
        else:
            children = utilities.generateChildren(current)
            #Remove visited children
            children = utilities.unvisitedChildren(children, visited)
            for c in children:
                heapq.heappush(
                    unvisited,
                    (c.cost_so_far + heuristics.hamming_distance(c), c))
            visited.append(current)
        #input("Press Enter to continue")
    return None
Esempio n. 2
0
def search(p):
    unvisited = [p]
    visited = []

    while unvisited:
        current = unvisited.pop()
        with open('puzzleDFSTrace.txt', 'a') as f:
            f.write("{} {} \n".format(current.move, current.config))
        if utilities.goal(current):
            return current
        if utilities.wasVisited(current, visited):
            continue
        else:
            children = utilities.generateChildren(current)
            #Remove visited children
            children = utilities.unvisitedChildren(children, visited)
            unvisited.extend(children)
            visited.append(current)
        #input("Press Enter to continue")
    return None
Esempio n. 3
0
def searchSPI(p):
    unvisited = []
    heapq.heappush(unvisited, (heuristics.sum_of_permutation_inversion(p), p))
    visited = []

    while unvisited:
        current = heapq.heappop(unvisited)[1]
       # with open('puzzleBFSSPITrace.txt', 'a') as f:
       #         f.write("{} {} cost = {}\n".format(current.move, current.config, current.cost_so_far))
        if utilities.goal(current):
            return current
        if utilities.wasVisited(current, visited):
            continue
        else: 
            children = utilities.generateChildren(current)
            #Remove visited children
            children = utilities.unvisitedChildren(children, visited)
            for c in children:
                heapq.heappush(unvisited, (heuristics.sum_of_permutation_inversion(c), c))
            visited.append(current)
        #input("Press Enter to continue")
    return None