環境
Python で決定論的な 2 プレーヤー ゲームの AI を作成しています。パラメータの 1 つとしてタイムアウト値を取り、タイムアウトの直後に移動を返す関数を書きたいと考えています。この関数は、タイムアウトになるまで検索 (ネガマックスまたは同様のもの) を実行し、見つけた最良の動きを返します。
仕様
- 関数は、どのように、またはいつ返されるかに関係なく、有効な動きを返す必要があります。
- ユーザーが気付かない限り (~100 ミリ秒)、関数はタイムアウトの少し後に戻る場合があります。
- カスタム AI_INTERRUPT イベントが pygame イベント キューに配置された場合、関数は返されます。(これは、せっかちなユーザーがコンピュータを強制的にプレイできるようにするためです)。
提案された実装
私はこれを実装する方法についての考えを持っていると思いますが、オンラインで多くの相反するアドバイスを見つけました (そして、主にこれとまったく同じではない問題について)。私はまた、物事を過剰に設計していることも懸念しています。したがって、この実装の提案が賢明なものであるかどうか、または何か他のものを推奨するかどうかを尋ねています.
AI アルゴリズムをジェネレーターとして記述して、より良い動きを連続して生成することを検討しています。利回り間の時間遅延は長くなる可能性がありますが、最初の利回りはほぼ即時になります。
次に、サブプロセスでこのジェネレーターを呼び出し、yield 値をパイプにフィードします。
次に、メイン プロセスは次のループで実行されます。
- パイプをポーリングします。新しい値が生成された場合は、それが格納されます。
- 時間を確認してください。タイムアウトを超えた場合は、最新の値を返します。
- AI_INTERRUPT イベントをチェックし、見つかった場合は最新の値を返します。
- 必要に応じて他の pygame イベントを処理する
私はpygameでPython 3を使用しています。