def aEstrela(self, inicio,fim): tic = time.perf_counter() print('Iniciando A*()') #Iniciando Lista listona = Blista() listona.insertHead(node(inicio)) if(self.debug == 1): print ("Folha add e filhos:", listona.readHead().id_puzzle) print('Next ----------------------------------------------') #Resultado buscado last_leaf = node(fim) #Enquanto o puzzle não esta na busca continuar buscando... while (listona.readNode(last_leaf) == None): folhas = listona.readLeaf() for x in range(len(folhas)): if(self.debug == 1): print("Tranalhando com a folha: ",folhas[x]) #abre todas as possibilidades do node atual opcoesFolhas = self.gerarOpcoes(folhas[x]) folhas[x].keys = opcoesFolhas #adiciona o valor da folha atual folhas[x].heuristica = self.gerarDistanciaManhattan(folhas[x],last_leaf) folhas[x].custo = len(listona.readNode(folhas[x])) #update da folha listona.updateNode(folhas[x]) opcoesCusto= [1000,1000,1000,1000] opcaomenorCusto = [] for opcoes in range(4): #busca o menor numero de heuristica if(opcoesFolhas[opcoes] != None): opcoesCusto[opcoes] = self.gerarDistanciaManhattan(opcoesFolhas[opcoes], last_leaf) + (folhas[x].custo + 1) if(opcoesCusto[opcoes] == min(opcoesCusto)): opcaomenorCusto.append(opcoesFolhas[opcoes]) if(self.debug == 1): print("Menor VALOR de custo!") if(self.debug == 1 and opcoesCusto[opcoes] >1000): print("Valor maior que 1000 encontrado!") if(opcoesFolhas[opcoes].id_puzzle == last_leaf.id_puzzle): if(self.debug == 1): print("VALOR ENCONTRADO!") if(self.debug == 1): print ("Folha add e filhos:", opcoesFolhas[opcoes].id_puzzle) #adiciona ele e reinicia o processo for nodeMenores in opcaomenorCusto: listona.insertTail(nodeMenores,self.debug) if(self.debug == 1): print('Next ----------------------------------------------') #Mostar Caminho. if(self.debug == 1): print ("Chegou no final!") #timer!!! aestrela_result={ 'TEMPO': time.perf_counter() - tic, 'N_NODE' : listona.total_nodes, 'E_MEMORIA':sys.getsizeof(listona)+sys.getsizeof(fim)+sys.getsizeof(folhas)+sys.getsizeof(inicio)+sys.getsizeof(last_leaf)+sys.getsizeof(nodeMenores)+sys.getsizeof(opcaomenorCusto)+sys.getsizeof(opcoes)+sys.getsizeof(opcoesCusto)+sys.getsizeof(opcoesFolhas)+sys.getsizeof(self)+sys.getsizeof(tic)+sys.getsizeof(x), 'MOVIMENTOS':list(reversed(listona.readNode(last_leaf))), 'N_MOVIMENTOS': 0, 'tipo':7 } aestrela_result['N_MOVIMENTOS'] = len(aestrela_result['MOVIMENTOS']) return aestrela_result
def amplitude(self,inicio,fim): tic = time.perf_counter() #vieww = View() print('Iniciando amplitude()') listona = Blista() listona.insertHead(node(inicio)) if(self.debug == 1): print ("Folha add e filhos:", listona.readHead().id_puzzle) print('Next ----------------------------------------------') last_leaf = node(fim) #return None = ruim node = good #Enquanto não tem na lista cintinua while (listona.readNode(last_leaf) == None): #vieww.progressBar('Número de Tentativas: ',vieww.addCount(),'Tempo:') #tem que add na arvore os novos caminhos #pega o conteudo das folhas e bota na lista folhas = listona.readLeaf() #Faz o insert de cada folha for x in range(len(folhas)): if(self.debug == 1): print("Tranalhando com a folha: ",x) opcoesFolhas = self.gerarOpcoes(folhas[x]) folhas[x].keys = opcoesFolhas #update da folha listona.updateNode(folhas[x]) ##inserir os filhos for opcoes in opcoesFolhas: if(opcoes != None): listona.insertTail(opcoes,self.debug) if(opcoes.id_puzzle == last_leaf.id_puzzle): if(self.debug == 1): print("VALOR ENCONTRADO!") if(self.debug == 1): print ("Folha add e filhos:", opcoes.id_puzzle) if(self.debug == 1): print('Next ----------------------------------------------') #Mostar Caminho. if(self.debug == 1): print ("Chegou no final!") #timer!!! amplitude_result={ 'TEMPO_AMPLITUDADE': time.perf_counter() - tic, 'N_NODE_AMPLITUDE' : listona.total_nodes, 'E_MEMORIA':sys.getsizeof(listona)+sys.getsizeof(fim)+sys.getsizeof(folhas)+sys.getsizeof(inicio)+sys.getsizeof(last_leaf)+sys.getsizeof(opcoes)+sys.getsizeof(opcoesFolhas)+sys.getsizeof(self)+sys.getsizeof(tic)+sys.getsizeof(x), 'MOVIMENTOS_AMPLITUDE':list(reversed(listona.readNode(last_leaf))), 'N_MOVIMENTOS': 0, 'tipo':0 } amplitude_result['N_MOVIMENTOS'] = len(amplitude_result['MOVIMENTOS_AMPLITUDE']) return amplitude_result