def __init__(self, n=3, tabini=None,heuristica=cebola): self.heuristica = heuristica(n) self.lista_pesos = [] self.n = n self.hash_tab = {} self.hash_nodos = {} # Se usuário não forçou um tabuleiro inicial, cria um aleatório if not tabini: tabini = tabuleiro.random_tab(self.n) else: tabini = tabuleiro.Tabuleiro(tabini) # Calcula peso do primeiro tabuleiro peso = self.heuristica.calcula(tabini) # Adiciona o tabuleiro na lista de hashs self.hash_tab[hash(str(tabini.get_tab()))] = 0 # Cria um nodo nodoini = Nodo(tabini, None, peso, None, 0) # Adiciona nodo a lista de nodos self.adiciona_nodo(nodoini)
def cpu_time(): return resource.getrusage(resource.RUSAGE_SELF)[0] #return time.time() def usage(): print "Uso: heuristica (-f arquivo|-r tamanho movimentos)" def solver(heuri,tab): tam_tabuleiro = len(tab[0]) print 'Tabuleiro inicial' print Tabuleiro(tab) c1 = cpu_time() s = Solver(n=tam_tabuleiro,tabini=tab,heuristica=eval(heuri)) n_mov,sol = s.magic() cf = cpu_time() - c1 print "Num. de movimentos, tempo" print n_mov,cf if __name__ == "__main__": heuri = sys.argv[1] argtab = sys.argv[2] if argtab == '-h': usage() if argtab == "-f": tab = le_arquivo(sys.argv[3]) solver(heuri,tab) elif argtab == "-r": tab = random_tab(int(sys.argv[3]),int(sys.argv[4])).get_tab() solver(heuri,tab)