Пример #1
0
    def busca(self):
        ''' Monta uma nova sequencia de acoes para resolver o problema atual.
        
            Ao final, self.seq deve conter uma lista de acoes.
        '''
        if self.estado.estadoAtual == None:
            for e in self.estado.todosEstadosPossiveis:
                if e.getCodigo() == 'B1':
                    self.estado.estadoAtual = e
                    e.heuristica.g = 0
                    break

        borda = FilaDePrioridades()
        borda.inserir(no_de_busca.construir_no_raiz(self.estado.estadoAtual), 0)
        #borda = [ no_de_busca.construir_no_raiz(self.estado.estadoAtual) ]
        visitados = set()
        custoTotal = 1
        while borda:
            folha = borda.pop()
            if folha.estado.isObjetivo:
                lista_transicoes = folha.criarListaDeAcoes()
                self.seq = lista_transicoes
                return 
            else:
                visitados.add(folha.estado)

                for estadoAdjacente in folha.estado.estadosAdjacentes:

                    expandido = no_de_busca.construir_no_filho(folha, estadoAdjacente)
                    
                    if expandido.estado not in visitados:
                        #borda.append(expandido)
                        expandido.estado.heuristica.g = custoTotal
                        borda.inserir(expandido, (expandido.estado.heuristica.h) + (expandido.estado.heuristica.g) )
                custoTotal += 1
Пример #2
0
 def busca(self):
     ''' Monta uma nova sequencia de acoes para resolver o problema atual.
     
         Ao final, self.seq deve conter uma lista de acoes.
     '''
     if self.estado.estadoAtual == None:
         for e in self.estado.todosEstadosPossiveis:
             if e.getCodigo() == 'B1':
                 self.estado.estadoAtual = e
                 break
             
     borda = [ no_de_busca.construir_no_raiz(self.estado.estadoAtual) ]
     visitados = set()
     limite = 0
     while borda:
         folha = borda.pop()
         if folha.estado.isObjetivo:
             lista_transicoes = folha.criarListaDeAcoes()
             self.seq = lista_transicoes
             return 
         
         else:
             limite += 1
             visitados.add(folha.estado)
             for estadoAdjacente in folha.estado.estadosAdjacentes:
                 expandido = no_de_busca.construir_no_filho(folha, estadoAdjacente)
                 if expandido.estado not in visitados and expandido.calcularAltura() <= limite:
                     borda.insert(0,expandido)
                 elif expandido.calcularAltura() > limite:
                     borda.append(expandido)
Пример #3
0
def _busca_cega_generica(inicial, enfileirar):

    borda = [no_de_busca.construir_no_raiz(inicial)]
    visitados = set()
    while borda:

        folha = borda.pop()
        if folha.estado.isObjetivo():
            return folha

        visitados.add(folha.estado)
        for acao in folha.estado.acoesPossiveis():
            expandido = no_de_busca.construir_no_filho(folha, acao)
            if expandido.estado not in visitados:
                enfileirar(borda, expandido)

    raise None