答えて
もう少し詳細があると思います。また、2つの全く別の問題を提起します。両方の制限を同時に適用したいのですか、それぞれを個別に行う方法をお探しですか?それはラフ用語で、言った:
制限時間:これは明確で開始する、
IO
を使用せずには不可能です。あなたのゲームツリーのトラバーサル機能が純粋であると仮定すると、おそらくコントロールフローを決定する一連のタイムトラッキングと絡み合わないほうがいいでしょう。ここで最も簡単なのは、トラバーサルに漸進的に良い結果をもたらすストリームを作成し、それぞれの「最良の結果」をMVar
などに置き、別のスレッドで実行することです。時間制限に達すると、スレッドを強制終了してMVar
から現在の値を取得します。深さ制限:これを行うための最も徹底的な方法は、幅優先検索を単純に行うことでしょうか?それが何らかの理由で実行可能でない場合、現在の深度を示すカウンタを保持し、最大に達したときには深く続かないという明らかな解決策よりも優れた解決策はないと私は考えています。これは、それぞれの再帰呼び出しが
local (subtract 1)
のようにラップされているReaderスタイルのモナドを使用して、コードが潜んでいる可能性があることに注意してください。
深度制限については、深度カウンタを保持する代わりに、補助プルーニング機能を使用しますか?例えば'take'はリストを指定された長さに枝刈りします。 – dave4420
@ dave4420:真実ですが、もちろんカウンターをどこか別の場所に移動しているだけです。構造体が遅延して生成される可能性がある場合、それは同じものになり、枝刈り関数はより良くなります。ここで言及したように、最初はそうするでしょうが、ここでの質問は限られたリソースによって動機づけられているので、まとめてツリー全体を一度にメモリに保存することを避けるために関数を組み合わせる必要があります。 –
基本パッケージのtimeout
機能を使用すると、一定期間後に計算を終了させることができます。最も最近の結果がMVar
に格納されるように、より深い結果のストリームにtimeout
をインターリーブすることは、ハスケルにおける検索問題の比較的一般的なトリックです。
ハ、私は、タイムアウトがすでに存在していることを知らずにこれを正確に行うことを提案しました。それはかなり明白なアプローチなので、おっと...は分かったはずです。 –
あなたのトラバーサルにレイジーライターモナドを使用して、改善の回答リストを生成することもできます。これで、いくつかの基準でリストから最初の「十分な」または「これまでの」結果を取得するだけで、問題をいくらか簡略化しました。その上に記載されているtimeout
トリック、またはあなたが適切と考える他のアプローチを使用することができます。
- 1. 巨大なビットマップ
- 2. 巨大なラグimagepng
- 3. 巨大なJson Parser
- 4. 巨大なmain.csファイル
- 5. Bitmap.Save、巨大なメモリリーク
- 6. 巨大なピクチャ(16000x16000)
- 7. 巨大なメモリピーク - CGContextDrawImage
- 8. gzipの巨大なファイル(〜30G)
- 9. 巨大なCPUインパクトLinkedBlockingQueue
- 10. 巨大なAS 3.0エクスプレッションフレーム
- 11. リストボックス(テーブル)の巨大なデータ
- 12. 巨大なテーブルのMySQLアップデート
- 13. 巨大なファイルから
- 14. 巨大なデータベースのキャッシング
- 15. OneDriveの巨大なストリーミングアップロード
- 16. スクロールイメージの巨大な遅延
- 17. mySqlの巨大なテキストファイル
- 18. UIPickerViewと巨大なコンタクトリスト?
- 19. コンストラクタの巨大なスイッチステートメント
- 20. 離散的なログの赤ちゃんステップ巨大ステップアルゴリズム:不正な巨大ステップ
- 21. 巨大なXMLファイルとPretty-Printを開く
- 22. 多くの "サブリポジトリ"を持つgit-svnと巨大なsvnリポジトリ
- 23. つぶやきの巨大な量を掻く方法
- 24. 巨大な文字列を正しく扱うには?
- 25. Java:ソースコードの巨大な巨獣をコンパイルする方法
- 26. 巨大なデータセットに最適なデータベースエンジン
- 27. 巨大なcsvファイルを扱う
- 28. 巨大なローカル変数を持つスタックオーバーフロー?
- 29. 巨大なビットマップを処理する
- 30. グリッドに巨大な列を表示
A *、min-max、alpha-beta、および最近のGOAPなどのアルゴリズムを検討してください。 –
ヒース、私は現在ミニマックスアルゴリズムを使用しています。しかし、大きな木では時間がかかります。 –