Beispiel #1
0
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()
Beispiel #2
0
 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)