Comportamento OneShot no SPADE

Esse tutorial é de uma versão antiga do SPADE (Python 2.7)

O comportamento do tipo oneshot é um comportamento que realiza o processamento uma vez apenas e termina o comportamento.

O código a seguir ilustra 3 comportamentos, sendo o primeiro um comportamento cíclico e os dois são os comportamentos do tipo oneshot. O comportamento cíclico imprime a cada dois segundos (a espera é devido ao sleep adicionado na linha 8), uma frase.

O primeiro comportamento oneshot, nomeado Teste1 possui 3 métodos:

  • onStart: executa apenas uma vez logo que o comportamento é adicionado.
  • onEnd: executa apenas uma vez logo que o comportamento é finalizado.
  • _process: é o código principal do comportamento e também executa apenas uma vez. No código eu coloquei outro sleep para indicar um processamento mais demorado.

Dos métodos apresentados apenas o _process é obrigatório e é o único método implementado no comportamento Teste2. Observe uma diferença entre o processo dos comportamentos Teste1 e Teste2: no Teste2 o processo espera pelo recebimento de uma mensagem para o agente (linha 25) para somente depois dar continuidade ao processo e finalizar o comportamento. Como é um comportamento oneshot, isso significa que esse comportamento somente irá processar uma mensagem. Qualquer mensagens subsequentes enviadas ao agente não serão recebidas.

import spade
import time

class Teste(spade.Agent.Agent):
    class M1(spade.Behaviour.Behaviour):   
        def _process(self):
            print "Executou comportamento ciclico"
            time.sleep(2)
           
    class Teste1(spade.Behaviour.OneShotBehaviour):
        def onStart(self):
             print "Inicializando o comportamento..."

        def _process(self):
            print "Processo sendo feito..."
            time.sleep(7)
            print "Processo finalizado!"
            
        def onEnd(self):
            print "Tick off"

    class Teste2(spade.Behaviour.OneShotBehaviour):     
        def _process(self):
            print "Espera mensagem..."
            msg = self._receive(True)
            print "Mensagem recebida!"

    def _setup(self):
        print "Agente criado"
        self.addBehaviour(self.M1())
        self.addBehaviour(self.Teste1())
        self.addBehaviour(self.Teste2())
            
teste = Teste("teste@127.0.0.1", "secret") 
teste.start()
time.sleep(10)
teste.stop()

Aproveito para ilustrar outra situação com os métodos implementados. Apenas modifiquei o momento em que os comportamentos são adicionados. Veja que no código anterior eu adicionei todos os comportamentos no setup e dessa vez o comportamento Teste1 dentro do comportamento Teste2. Com essa modificação, somente quando uma mensagem for recebida pelo agente é que o comportamento Teste2 irá adicionar o comportamento Teste1 e ele será executado. O comportamento M1 continua executando de forma independente.

import spade
import time

class Teste(spade.Agent.Agent):
    class M1(spade.Behaviour.Behaviour):   
        def _process(self):
            print "Executou comportamento ciclico"
            time.sleep(2)
           
    class Teste1(spade.Behaviour.OneShotBehaviour):
        def onStart(self):
             print "Inicializando o comportamento..."

        def _process(self):
            print "Processo sendo feito..."
            time.sleep(7)
            print "Processo finalizado!"
            
        def onEnd(self):
            print "Tick off"

    class Teste2(spade.Behaviour.OneShotBehaviour):     
        def _process(self):
            print "Espera mensagem..."
            msg = self._receive(True)
            print "Mensagem recebida!"
            self.addBehaviour(self.Teste1())

    def _setup(self):
        print "Agente criado"
        self.addBehaviour(self.M1())
        self.addBehaviour(self.Teste2())
            
teste = Teste("teste@127.0.0.1", "secret") 
teste.start()
time.sleep(10)
teste.stop()
Share

Uma opinião sobre “Comportamento OneShot no SPADE

  1. Pingback: Consulta ao AMS no SPADE – Professor Benjamin

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.