def getChild(self, node, action, heuristic='off'):
        IJ0 = self.findZero(node.state)
        I0 = IJ0[0]
        J0 = IJ0[1]
        s = node.state
        newState = [[0 for i in range(3)] for j in range(3)]
        for i in range(3):
            for j in range(3):
                newState[i][j] = s[i][j]

        if action == 'r':
            newState[I0][J0] = newState[I0][J0 + 1]
            newState[I0][J0 + 1] = 0
        elif action == 'l':
            newState[I0][J0] = newState[I0][J0 - 1]
            newState[I0][J0 - 1] = 0
        elif action == 'u':
            newState[I0][J0] = newState[I0 - 1][J0]
            newState[I0 - 1][J0] = 0
        elif action == 'd':
            newState[I0][J0] = newState[I0 + 1][J0]
            newState[I0 + 1][J0] = 0
        if heuristic == 'off':
            child = Node.Node(newState, node.pathCost + 1, node, action)
        elif heuristic == 'on':
            child = Node.AStarNode(newState, node.pathCost + 1, node, action)
        return child
Beispiel #2
0
    def run(self, problem):
        node = Node.AStarNode(problem.initialState, 0, 0, '')
        self.numOfCreatedNodes += 1
        heapq.heappush(self.frontier, node)
        self.explored = []

        while True:
            if len(self.frontier) == 0:
                return False
            self.maxNodesInMemory = max(
                len(self.frontier) + len(self.explored), self.maxNodesInMemory)
            node = heapq.heappop(self.frontier)
            if problem.goalTest(node.state):
                return self.solution(node)
            self.explored.append(node)

            actions = problem.actions(node.state)

            for action in actions:
                child = problem.getChild(node, action)
                self.numOfCreatedNodes += 1
                if self.isNotVisited(child):
                    heapq.heappush(self.frontier, child)