Esempio n. 1
0
class ControloDeliberativo:
    def __init__(self, mec_rac):
        self.modelo = ModeloMundo()
        self.plano = None
        
        self.planeador = mec_rac        

    def processar(self, per):
        estado = self.assimilar(per)
        objectivos = self.gerar_objectivos()
##         if self.plano is None:
        self.plano = self.planear(estado, objectivos)
        return self.executar_plano(self.plano)		

    def executar_plano(self, plano):
        #como executar_plano é chamada à vez fazemos pop do plano e movemos o actuador com esse valor
        if plano:
            #print 'Plano: [%s]' % ', '.join(map(str, plano))
            ang = plano.pop(0)
            #print 'Angulo: {}'.format(ang)
            accao = psa.actuador.MOVER(ang)
            return accao
            
    #o assimilar gera os estados com eles os elementos e no fim actualiza os elementos
    def assimilar(self, per):
        elementos = per.imagem
        self.modelo.actualizar(elementos) # criar os estados
        agente_pos = per.posicao
        return agente_pos

    def gerar_objectivos(self):
        objectivos = []
        estados = self.modelo.obter_estados()
        if estados:
            for s in estados:
                elemento = self.modelo.obter_elemento(s)
                if elemento is ALVO:
                    objectivos.append(s)
                    
        return objectivos

    def planear(self, estado, objectivos):
        return self.planeador.planear(self.modelo, estado, objectivos)