あなたが言うように、ボード全体をコピーすると、処理がかなり遅くなる可能性があります。元に戻すリストを作成して、実行したすべての動きの逆を追加することをお勧めします。次に、元に戻すには、リストから移動を繰り返しポップし、リストが空になるまで適用します。このようにして、AI は maxdepth パラメーターを指定した単純な再帰関数を使用して、すべての可能性を探索できます。
Re: ボーのコメント
私は丁重に反対します。
低レベル言語で書かれたプログラムの場合、ボードのコピーは 1 つの memcpy になる可能性があり、その場合は非常に高速になる可能性があります。しかし、チェスの駒ごとに 1 つのオブジェクトとメタデータがあるオブジェクト指向の Python プログラムの場合、完全に独立したゲーム状態のコピーは、単一の新しい「元に戻す」オブジェクトを作成してリストに追加するよりも、ほぼ確実にはるかに遅くなります。
これは構造体のサイズとはほとんど関係がなく、その構造体をコピーするために必要な操作の数とは関係ありません。特に Python では、関数呼び出しによってかなりの量のオーバーヘッドが追加されます。この回答 (私自身) によると、CPython で 32 個のオブジェクトをインスタンス化することは、83 回の関数呼び出しに相当し、. 以外のサブクラスがないことを前提としていますobject
。次に、データの割り当てとコピーがその上に来ます。
ボードが 16x16 numpy 配列であった場合、ボード コピーの方が高速であることに同意します。