deepcopyについて - aharalabMeiji/fireplaceAharaLab GitHub Wiki
ゲームの複製を作るとき
エージェントを作る際に「ゲームの複製」を作る必要があるでしょう。組み込み関数を使って
import copy
tmp_game = copy.deepcopy(game)
で実行することができますが、この方法だと非常にまれにdeepcopy内で無限ループを起こす可能性があります。(原因はほぼわかっていますが、旧fireplace内のクラスの構造に係るものなので、これは放置してあります。)これに代替するものとして、fireplace内の関数
from utils import *
tmp_game = fireplace_deepcopy(game)
を使ったほうが(たぶん)安定的に動きます。
大会モードのdeepcopyについて(第2回大会までは不使用)
現在の大会レギュレーションでは「自分のデッキ、相手の手札、相手のデッキを参照してはいけない」としており、性善説に基づいて行っております。(相手の秘策も見てはいけませんよ。)ですが、じつは完全なコピーを作ってシミュレーションしてみると、「自分のデッキ、相手の手札、相手のデッキ」がある程度わかってしまいます。
このことから、deepcopyとしては「自分のデッキ、相手の手札、相手のデッキ、相手の秘策」を「それらしいものと入れ替えてコピーをつくる」というのが正しいレギュレーションかとも思います。実装はしていますが、まだレギュレーションには組み込んでいません。