Come progettare le interazioni tra questi comportamenti degli agenti?

2

Problema

Voglio progettare l'architettura di classe per un agente che interagisce con un ambiente ripetendo tre passaggi fino alla fine di un episodio: in primo luogo, l'ambiente fornisce un'osservazione all'agente. Secondo, l'agente sceglie un'azione in risposta. In terzo luogo, l'ambiente ricompensa l'azione con una ricompensa. L'agente è composto da comportamenti parziali, ad esempio:

  • Agire casualmente con una determinata probabilità e delegare al comportamento successivo altrimenti.
  • Semplifica le osservazioni e mantieni sempre il comportamento immediatamente successivo.
  • Normalizza i premi in un determinato intervallo ma lascia tutto il resto al comportamento successivo.
  • Inoltra ogni altra osservazione al comportamento successivo e ignora gli altri. Ripeti le azioni del comportamento successivo durante le osservazioni ignorate.
  • Scegli un'azione basata sull'osservazione corrente e una strategia appresa dal passato.

Comportamenti

Generalmente, i comportamenti ricevono osservazioni e restituiscono un'azione o inoltrano un'osservazione modificata al comportamento successivo. Alla fine torneranno un'azione che possono modificare e passare al comportamento precedente. Tuttavia, possono anche creare e inviare prima una nuova osservazione al comportamento successivo. Ogni comportamento deve ricevere la sua ricompensa ad un certo punto dopo aver restituito un'azione e prima di ricevere la successiva osservazione.

Esempio

In sintesi, osservazioni, azioni e ricompense possono fluire tra i comportamenti prima di produrre l'azione per l'ambiente. Ecco un esempio di interazione di due comportamenti con un ambiente (le osservazioni sono blu, le azioni sono rosse, i premi sono gialli):

Domanda

I comportamenti non dovrebbero conoscersi l'un l'altro, in modo da poter aggiungere comportamenti aggiuntivi tra quelli esistenti o interrompere la simulazione in qualsiasi momento. Come posso progettare questo? Ci sono dei modelli per semplificare l'interazione dinamica tra i miei comportamenti?

    
posta danijar 11.08.2016 - 22:07
fonte

1 risposta

1

La tua formulazione si presta agli attori. Basta sostituire "agente" con "attore" e le tue frecce con "messaggi" e ci sei.

Potresti dare un'occhiata alle librerie di attori come Akka o lingue basate su attori come Erlang . L'idea generale dei modelli degli attori è anche ben descritta su wikipedia .

In sostanza, un modello di attore soddisfa in modo appropriato le tue esigenze:

  • Delega di comportamento: basta inviare il messaggio a un altro attore
  • Gerarchia: gli attori sono in genere già organizzati in una gerarchia. Di solito, questo è per la tolleranza ai guasti, in quanto gli attori superiori sono i supervisori, ma potrebbe soddisfare il tuo bisogno di lasciare che "il prossimo comportamento superiore gestisca" i messaggi.
  • Inoltra ogni altra osservazione: puoi aggiungere un attore in particolare con questo comportamento di inoltro in atto, indipendentemente dagli altri comportamenti / attori.
  • Scegli un'azione: elementi di base degli attori, poiché devono sempre scegliere cosa fare quando arriva un messaggio in arrivo.
  • Vincoli temporali: l'invio di messaggi per attori supporta direttamente concetti come: attendere una risposta, prima di elaborare ulteriori messaggi.

Inoltre, anche le biblioteche come Akka supportano il comportamento esplicito degli attori e il loro cambiamento. Consideralo come una sostituzione del metodo che gestisce i messaggi in arrivo con un metodo completamente diverso che fa cose diverse per gli stessi messaggi. Spetta a te scoprire se i tuoi casi d'uso traggono profitto dall'avere attori diversi per comportamento o se è più appropriato modellare gli attori con comportamenti mutevoli.

Modifica: per rispondere alle tue preoccupazioni:

Sì, gli attori sono intrinsecamente paralleli, tuttavia, l'effettiva sequenza di comunicazione può essere sequenziata. Se lasci bloccare i tuoi attori e aspetti una risposta, in pratica ottieni un processo sincrono (anche se sono d'accordo che potrebbe non essere più una corrispondenza naturale).

L'ordine potrebbe essere determinato dall'attore dell'ambiente. Inviate l'osservazione, aspettate l'azione risultante e inviate la ricompensa. Oppure gli attori che cambiano il comportamento potrebbero essere usati per progettare questa sequenza (ad esempio, dopo aver inviato l'osservazione, l'attore cambia il suo comportamento in uno nuovo in cui può solo accettare azioni).

In termini di dover rispondere in un certo modo, il concetto di canali potrebbe essere interessante per te. In Akka (non sono sicuro di Erlang lì) è possibile definire canali digitati, che fondamentalmente ti dà una comunicazione sicura per tipo in cui solo i messaggi di determinati tipi possono essere scambiati tramite il canale. Quindi, puoi essere certo che cose come la risposta debbano essere questo o quello.

    
risposta data 12.08.2016 - 08:19
fonte

Leggi altre domande sui tag