3

状態とアクションのペアのユーティリティの内部表現を維持しながら、状態を取り込んでアクションを返すエージェントがあります。また、アクションを取り、状態/報酬のペアを返す環境もあります。

開始状態でエージェントをセットアップし、エージェント -(アクション) -> 環境 -(状態、報酬) -> エージェント -(アクション) -> ... から継続的に移動できるようにする必要がありますが、内部状態は(反復ごとに更新する必要があります) 非公開のままにする必要があります (つまり、エージェントまたは環境内で)。これは、state と action を引数として使用して、エージェント内の関数として environment を単純に呼び出すことができないことを意味します。

私はHaskell初心者なので、これが可能かどうかさえわかりません。

4

2 に答える 2

2

エージェントと環境のどちらが「最上位」にあるかを決定する必要があります。この回答の残りの部分では、エージェントを呼び出すのが最上位の環境であると仮定しましょう。これは一般的に最も理にかなっているためです。

モジュールシステムを使用して、エージェントのデータ表現をプライベートに保つことができます。内部を一切使用せずにデータ型名をエクスポートするだけです。

module Agent (AgentState, other_stuff) where

反対に

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

エージェントも環境の状態を渡す必要がある場合(環境がそれ自体を追跡できるため、これが必要になる理由はわかりませんが)、エージェント関数を多態的にして、任意の状態を渡すことができるようにします。 type-次に、環境は、その表現が公開されることなく、好きなものを渡すことができます。

また、状態モナドを使用して、状態に何が起こるかをより細かく制御できるようにする必要があります。たとえば、環境がエージェントから与えられた状態を複製したり、同じ状態でエージェントを繰り返し呼び出したりするのを防ぎます。 Haskellは、最初にモナドなしで少し経験を積むのがおそらく最善です。(モナドが特に怖いというわけではありませんが、詳細が隠されているため、何が起こっているのかを確認するのが難しくなります。)

于 2009-05-10T08:22:56.243 に答える
2

2 つの質問:

  • エージェントがアクションを計算するために状態を使用する必要がある場合、どのようにして状態の表現をエージェントから秘密に保つことが期待できますか?

  • 環境がアクションを与えられた状態 (および報酬) を生成することを期待している場合、状態の表現を環境から秘密に保つにはどうすればよいでしょうか?

これらはどちらも可能ですが、状態を照会したり、状態を作成したりするために、それぞれに何らかの抽象化が必要です。私はこのデザインについて良い感じがしません。

質問を明確にするのに役立ちます

  • 対象の関数に型シグネチャを提供する

  • 状態の表現を公開したくない関数を特定します

PS これらの問題は Haskell とはかなり切り離すことができ、実装言語の選択に関係なく問題になります (実装言語が何らかの形式のプライバシーをサポートしている場合)。

于 2009-05-10T20:16:32.700 に答える