問題タブ [tree-search]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
130 参照

java - MCTS Gomoku プレーヤーでの Java ヒープ領域の問題

プログラムを実行すると、次のエラーが表示されます。

同じ MCTS コードを 3x3 ボード サイズに使用しましたが、これはクラッシュせず、競争力のある動きをすばやく返します。しかし、15x15 のボード サイズで使用しようとすると、1235 回の反復後にゲームがクラッシュし、上記のエラーが表示されます。

1235回の反復後にノードの拡張を許可しないことで、問題の症状に対処したと思います。これは最終的に競争力のある動きを返しますが、これが起こるまでには長い時間がかかります.

私にとって根本的な原因は、作成しようとしているツリーのサイズです。これは、同じコードが 3x3 ボードでは機能しましたが、15x15 ボードでは機能しなかったためです。すべてのノード オブジェクトを含むツリーのサイズが大きすぎます。したがって、これは私のコーディングではなく、このアプローチの問題です。

x回の繰り返しの後、ノードにy回アクセスしたが勝利スコアがz未満の場合、そのノードを削除します。私の考えでは、x回の反復の後、y回訪問されてもまだ勝利スコアが低い場合、このノードはツリー内の不要なスペースを占有している可能性が高いため、削除する余裕があります.

私の質問は:

拡張の数を減らすだけでなく、上記のチェックを実装する必要もなく、プログラムがクラッシュするのではなく移動を返すためのより良い方法はありますか? (最善の手の計算に時間がかかる場合でも)。

これが私の未編集のコードの一部です:

編集済み** MCTS 拡張機能:

MCTSPlayer 関数:

以下に新たに含まれる**

最初のノード関数を選択します (移動リストのサイズが == から 0 になるまで続行します):

"+initialNode.childrenList()); //System.out.println("残りの移動可能なノード: "+initialNode.getPossibleMovesSize()); } return initialNode; }

機能を選択:

childrenLeft 関数: