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?