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
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)
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