Python コーディング クラスのプロジェクトを書いていますが、質問があります。私は、ゲームで数手先を見て、最適と思われる手を選択するリバーシエンジンを作成しています。Python がこれに理想的な言語ではないことは理解していますが (他の言語ほど高速ではないため)、少なくとも機能するコードを書くことは可能だと思いますが、それでも少し遅いかもしれません。
そうは言っても、ゲーム ボード (マトリックスと考えてください) と整数を保持するゲーム ツリーの 2 つのテーブルを作成しようとしています。エントリを追加、削除、および読み取るために、メモリ効率が高く高速なものを使用したいと考えています。
私が現在使用しているボードはあまり効率的ではありません。これと同等でメモリを軽くするものを作成するために、誰かが提案するモジュール (使用方法の説明付き) を尋ねたいと思いました (例: 配列、numpy。ただし、どちらの使用方法もわかりません)。これらは):
self.board = [[0, 0, 0, 0, 0, 0, 0, 0,],
[0, 0, 0, 0, 0, 0, 0, 0,],
[0, 0, 0, 0, 0, 0, 0, 0,],
[0, 0, 0, 1, 2, 0, 0, 0,],
[0, 0, 0, 2, 1, 0, 0, 0,],
[0, 0, 0, 0, 0, 0, 0, 0,]
[0, 0, 0, 0, 0, 0, 0, 0,],
[0, 0, 0, 0, 0, 0, 0, 0,]]
ゲーム ツリーについては、リストのリストをどれだけ軽量にするかによってアイデアがあります。私が取り組んでいる標準の python で書かれたアイデアは次のようになります。
tree_zero = %
tree_one = [%, %, %]
tree_two = [[%, %, %], [%, %, %], [%, %, %]]
tree_thre = [[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]]],
tree_four = [[[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]]],
[[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]]],
[[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]],
[[%, %, %], [%, %, %], [%, %, %]]]]
各 % は上記のボードの 1 つになります (理想的ではありません: すべてのターンに正確に 3 つのオプションがあるわけではありません)。しかし、これは遅くて重いオブジェクトであり、Python がメモリを効率的に使用するのは困難です (特に、4 プライより深くする場合)。
誰かが以前にこのようなプログラムを扱ったことがある場合、またはインポートする効率的なモジュールのアイデアを持っている場合は、私に知らせてください!
ゲーム ツリーの例として、ウィキペディアのページ、特にページの最初の画像を考えてみてください。
編集: 理想的には、4 手先より先を見たいと思います。これは、最初の 4 つのレベルがどのように見えるかの単なる例です。また、指定されたツリーの複数のコピーが使用のために浮かんでいます。このように指数関数的に成長するものには、スピードが重要です。