Domanda

Ho un agente che prende in stati e restituisce azioni, mantenendo una rappresentazione interna dell'utilità di stato/azione coppie.Ho anche un ambiente che prende in azioni e restituisce stato/ricompensa coppie.

Ho bisogno di essere in grado di impostare l'agente con un avvio di stato e poi di continuo passare da agente -(azione)-> ambiente -(stato, ricompensa)-> agente -(azione)->...Tuttavia, gli stati interni (che devono essere aggiornati ogni iterazione) devono rimanere private (cioè entro l'agente o l'ambiente).Questo significa che, semplicemente, non posso chiamare l'ambiente come una funzione all'interno di un agente di stato e di azione come argomenti.

Sono un po ' di Haskell noobie, così io non sono nemmeno sicuro se questo è possibile.

È stato utile?

Soluzione

Due domande:

  • Se l'agente deve utilizzare uno stato, per calcolare un'azione, come pensi di tenere la rappresentazione di stati segreto dall'agente?

  • Se l'ambiente si aspetta di produrre uno stato (e un premio dato un'azione, come pensi di tenere la rappresentazione di stati segreto dall'ambiente?

Entrambi di questi sono possibili, ma ciascuno deve coinvolgere una sorta di astrazione per l'esecuzione di query stati o la creazione di stati.Non ho un buon feeling con questo disegno.

Sarebbe d'aiuto per chiarire la questione da

  • Fornire il tipo di firme per le funzioni di interesse

  • L'identificazione di quali funzioni si desidera che la rappresentazione di stati non per essere esposti.

P. S.Queste difficoltà sono abbastanza separabili da Haskell e vorresti essere al problema indipendentemente dalla scelta del linguaggio di implementazione (a condizione che il linguaggio di implementazione supporta alcuni forma di privacy).

Altri suggerimenti

Avrete bisogno di decidere quale agente e l'ambiente si trova "al di sopra" - supponiamo che per il resto di questa risposta, che è l'ambiente in cima chiamata all'agente dal momento che in genere rende più senso.

È possibile mantenere i dati dichiarazioni dell'Agente privato utilizzando il modulo di sistema, basta esportare il tipo di dati nome senza il suo funzionamento.

module Agent (AgentState, other_stuff) where

come opposd per

module Agent (AgentState(..), other_stuff) where

Se l'agente ha anche bisogno di essere passati per l'ambiente dello stato (anche se non vedo alcuna ragione per questo sarebbe necessaria in quanto l'ambiente può tenere traccia di per sé), quindi apportare le funzioni di agente polimorfici in modo che possano essere passato qualsiasi stato tipo - l'ambiente può passare qualunque cosa gli piace senza la sua rappresentazione di essere esposti.

Dovrebbe anche essere possibile utilizzare le monadi di ottenere un maggiore controllo su ciò che accade per lo stato, per esempio impedendo l'ambiente dalla duplicazione di un stato l'agente dà e chiamare l'agente più volte con il medesimo stato, ma se siete nuovi a Haskell è probabilmente la cosa migliore per ottenere un po ' di esperienza senza monadi prima.(Non che le monadi sono particolarmente spaventoso o nulla, ma che fanno a nascondere i dettagli da voi, quindi è più difficile da vedere che cosa succede.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top