2017-02-19 8 views
2

私は、プレイヤーとAIが何らかのアクションを交互に行っているゲームをハスケルに書いています。これまで、AIはゲームに関するすべての情報、すなわちGameHistory -> GameState -> Actionという形式の関数を使用してアクションを生成していました。エージェントに内部状態を持たせること

このように、これらの関数は、呼び出されるたびに履歴から必要な情報を生成します。ターン(すなわち、対応する関数への呼び出し)の間に何らかの「内部状態」が存在する可能性がある場合、AIを書く方がはるかに簡単です。どのようにしてそのようなものを実装できますか? (ちなみに、私はまたのAIの異なる種類の内部状態は、さまざまな種類を持っている可能性があることを考慮に入れる必要があります。)

+1

私はこの質問が広すぎると感じています。「州のモナドを使用する」よりも具体的な回答は得られません。実際のコードを提供するためにあなたの質問を編集できるのであれば、おそらくもっと役に立つかもしれません。 –

+0

@aclow多少の関連性:http://stackoverflow.com/questions/40698396/how-can-i-handle-user-plugins-in-my-types/ – danidiaz

+0

@ダニディアスありがとう、それは私が探しているようです。私はそれを試してみる。 – aclow

答えて

2

をあなたが探していることのようなものかもしれません。「あなた、つまり

newtype AI = AI { runAI :: GameState -> (AI, Action) } 

アクションと一緒にあなたの俳優の新しい状態を返すでしょう。ここでStateモナドを使用することができます。また、オートマトンについて読むことに興味があるかもしれません。 AIをシリアル化する必要がある場合(データベースに格納する場合など)、別の処理を行う必要があります。

関連する問題