2017-12-19 5 views
1

私はminimaxアルゴリズムを実装しようとしています。プレイヤーの各ターンのための最高の動きが何であるかを算出し、2相手のための再帰関数(それぞれが独自のターンを持っている元チェスなどに行く)、:Java - 再帰関数のクラス変数への変更は後で削除されますか?

(慣れていない人のために。第二は、常に初の成果を最小化しようとしながら、最初のプレイヤーは常に、彼の成果を最大化しようとするため、再帰的にプレーヤーAおよびその逆のために選択された動きの結果を計算する。

によってそれはどちらも[ミニマックスと呼ばれています彼の最大化を意味する])

この関数を呼び出すプレーヤーのクラスには、ボード(別のクラス)があります。 プレイヤーはボードにピースを置いて演奏し、スコア/ヒューリスティックスコアを計算する別の機能があります。

私の質問は次のとおりです。各プレイヤーの結果を計算するには、実際にそのボードをボードに置き、すべての計算を実行する必要があります。再帰的なツリーを再度上ったら、私の変更は削除されますか?

私はそれはJavaが値渡しでも、Playerのテーブルを変更するので、私はそれを感じません。毎回私の現在の掲示板を複製して、実質的に遊び/議論としてボードを渡すべきかどうかと思っています...

+0

原則として、そうではありません。変更は変更であり、Javaでは「ロールバック」という概念はありません。なぜなら、「以前の」値の概念がないからです。しかし、問題をより明確にするために、いくつかのコード例を示してください。 –

+0

私は意図的にコードを書いていませんでした。そしてあなたはそれを非常にはっきりと指摘しました。私は一般的に私の質問を解決する方法を理解しようとします。単純に - クラスの属性と変数に基づいて結果を計算しようとするときに、毎回新しい「クラス」を作成するのではなく、この「ロールバック」動作を作成する一般的な方法はありますか? –

+0

"新しいクラス"ではなく、 "新しいインスタンス"を意味する必要があります。ここで話している変更が何であるかについてはまだ明確ではありません。場合によっては、これが再帰関数なので、ロールバックは単純に逆の操作であり、余分なオブジェクトは必要なく、余分なCPUが必要です。それ以外の場合は、各呼び出しで何らかの種類の操作ログ、専用オブジェクトのスタック、または操作クラスの新しいインスタンスが必要です。 –

答えて

0

それはJavaが価値を通り抜けるので、私はまだPlayerのテーブルを変更します。毎回現在の掲示板を複製して、実質的に遊び/議論として/ボードを渡すべきかどうかと思います...

これはひとつのオプションです。別の解決策(計算効率がより高いことが多い)は、ボード上の移動の効果を逆転させる関数を実装して使用することです。

関連する問題