目的
本プロジェクトの目的は、従来より強力な判断機構をもった遊戯王オフィシャルカードゲーム(以降、単にOCG)をシミュレートするエージェント(または遊戯王AI)を開発することである。
また、そのエージェントを用いた遊戯王AI提供WEBサービス、環境シミュレーションWEBサービス、およびエージェントのAPIを提供することである。
これらのサービスにより、マッチング待機時間、複数のデッキを用いた一人回しといったタスクの時間コスト削減を目指す。
プロジェクト
全般
エージェント
概要
エージェントは深層学習を行い、アクションを要求される場面でアクションの良し悪しを評価し実行する。
評価値
エージェントから見て相手ターン終了時にお互いのプレーヤーの価値を計算する。
とし、この値に近づくようにNNを学習させる。
したがって、1ターン中の全てのアクションは同じ評価値となる。
デュエルは1アクションの報酬を最大化しても勝てるわけではないので、長期的なアクションの評価算出タイミングとして相手ターン終了時という指標を設けた。
また、「悪いアクションは必ず悪い結果を招く」を仮定しているので、1ターンに悪いアクションと良いアクションが混じっていても確率的に悪いアクションの方が評価が低くなることを期待している。
お互いのプレイヤーの価値は、フィールド上のカード枚数、手札枚数、デッキ枚数(デッキを多く掘っている方が基本的に有利)、ライフポイント等から定量的に算出する。
計算式は設計中である。
カードの埋め込みベクトル
一部が欠けたテキストからカード名を予測する3層構造のNNを学習させることによって、各カードを低次元のベクトル表現を抽出できる。
自然言語処理の分野で言う、単語の分散表現であり、そのアルゴリズムはCBoWを模している。
つまり、中心語がカード名であり、周辺語がそのテキストである。
実際、この方法で作成したベクトルでコサイン類似度を計算すると、《ブラックホール》と《激流葬》、《サンダーボルト》と《ハーピィの羽根帚》、《サイクロン》と《コズミック・サイクロン》などは大きい値を取る。
これは似たテキストを持つカードが空間上に上手く配置されていることを示唆している。
テキストの分散表現とカードステータス(種類、属性、ATK/DEF、etc)をどのように同時に扱うかは検討中である。
学習の工夫
環境で想定されるデッキに対していくつかエージェントを作成し、エージェント同士で対戦させる。
対戦の全てのアクションは棋譜のようにすべて記録しておく。
対戦終了後、エージェントは "棋譜" を参照して学習を行う。
また、学習済みとして有限個の "棋譜"を適当なディレクトリに保存しておき、定期的(数対戦後)にその中からランダムに選択した "棋譜" を参照して再び学習させる。
"棋譜" 保存数が上限を超えた場合、最も古いものから削除する。
削除されるタイミングは環境の変わり目であることが望ましい。
また、どの環境でも通用する基本的な戦術はどの環境の "棋譜" にも含まれると予想されるので、貴重なデータが失われることに過度に反応する必要はないと思われる。
ある程度学習したエージェントはさらにユーザーと対戦させることでNNを強化する。