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としては「自分のデッキ、相手の手札、相手のデッキ、相手の秘策」を「それらしいものと入れ替えてコピーをつくる」というのが正しいレギュレーションかとも思います。実装はしていますが、まだレギュレーションには組み込んでいません。