class ProcuraMelhorPrimeiro(ProcuraEspacoEstados): def __init__(self): self.memoria = None self.problema = None def f(self, no): raise NotImplementedError("Classe abstracta!") def procurar(self, problema): self.memoria = MemoriaProcuraMelhorPrimeiro() self.problema = problema no_inicial = No(problema.estado_inicial()) self.memoria.inserir(no_inicial, self.f(no_inicial)) #inserir na fronteira while self.memoria.abertos(): no = self.memoria.remover() if problema.objectivo(no.estado): return no.percurso() else: self.expandir(no) def expandir(self, no): for (estado_sucessor, operador) in self.problema.transicoes(no.estado): #transicao = (estado, operador = ang) custo_trans = self.problema.custo(no.estado, estado_sucessor, operador) no_sucessor = No(estado_sucessor, operador, no, custo_trans) self.memoria.inserir(no_sucessor, self.f(no_sucessor)) ##qcsa ## psa.vismod.campo(self.memoria.explorados) ## psa.actvis()
def procurar(self, problema): self.memoria = MemoriaProcuraMelhorPrimeiro() self.problema = problema no_inicial = No(problema.estado_inicial()) self.memoria.inserir(no_inicial, self.f(no_inicial)) #inserir na fronteira while self.memoria.abertos(): no = self.memoria.remover() if problema.objectivo(no.estado): return no.percurso() else: self.expandir(no)