Pergunta

Eu tenho um agente que leva em estados e retorna acções, mantendo uma representação interna do utilitário de pares estado / acção. Eu também tenho um ambiente que leva em ações e retornos estaduais pares / recompensa.

Eu preciso ser capaz de definir o agente com um estado inicial e, em seguida, continuamente ir de agente - (ação) -> ambiente - (Estado, recompensa) -> agente - (ação) -> ... No entanto, os estados internos (que precisam ser atualizados a cada iteração) necessidade de permanecer privado (isto é, dentro do agente ou do ambiente). Isso significa que eu não posso simplesmente chamar meio ambiente como uma função dentro do agente usando o estado e ação como argumentos.

Eu sou um pouco de um noobie Haskell, então eu nem tenho certeza se isso é possível.

Foi útil?

Solução

Duas perguntas:

  • Se o agente deve usar um estado para calcular uma ação, em seguida, como você espera para manter a representação de estados secretos do agente?

  • Se os espera de ambiente para produzir um estado (e uma recompensa) dada uma ação, como você espera para manter a representação de estados secretos do ambiente?

Ambos são possíveis, mas cada um deve envolver algum tipo de abstração para consultar estados ou a criação de estados. Eu não tenho um bom pressentimento sobre este projeto.

Isso ajudaria a esclarecer a questão por

  • O fornecimento assinaturas de tipo para as funções de interesse

  • A identificação de quais funções você quer a representação de estados não para ser exposto.

P.S. Estas dificuldades são bastante separável Haskell e estaria em questão, independentemente da escolha da linguagem de implementação (desde que os suportes de linguagem da implementação alguns forma de privacidade).

Outras dicas

Você precisa decidir qual o agente eo ambiente fica "em cima" - vamos supor que para o resto de esta resposta que é o ambiente em cima pôr em que o agente uma vez que, geralmente, faz mais sentido

Você pode manter representações de dados do Agente privada usando o sistema de módulos - apenas exportar o nome tipo de dados sem que nenhum dos seus internos.

module Agent (AgentState, other_stuff) where

como opposd para

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

Se o agente também precisa ser passado o estado do ambiente (embora eu não vejo qualquer razão isso seria necessário que o ambiente pode acompanhar isso por si), em seguida, fazer as funções de agente polimórficos, para que possam ser passou qualquer tipo de estado -., em seguida, o ambiente pode passar o que quer que gosta em sua representação, sem serem expostos

Também deve ser possível usar mônadas estado para conseguir mais controle sobre o que acontece com o estado, por exemplo, evitar que o ambiente de duplicação de um estado, o agente dá-lo e chamar o agente repetidamente com esse mesmo Estado, mas se você' é novo para Haskell é provavelmente melhor para obter um pouco de experiência sem monads primeiro. (Não que mônadas são particularmente assustador ou nada, mas eles fazem esconder detalhes de você, por isso é mais difícil de ver o que está acontecendo.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top