示例#1
0
    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
示例#2
0
    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