
宝石の煌めき(Splendor)AIの開発記録①
宝石の煌めきとは
宝石の煌めき(Splendor)は、ボードゲームアリーナ(BGA)でカタン・カルカソンヌを凌いで人気ランキング1位になるほどの人気ボードゲームである。
筆者も今年の正月に初めてプレイして、どハマりし、現在に至るまで対面・オンラインで対戦しまくっている。
以下、宝石の煌めきのルールを説明する。ご存知の方は、次節まで読み飛ばされたい。

2〜4人プレイのターン制ボードゲーム
各プレイヤーは、先手から順に
宝石トークンを取る。
1枚ずつ3色か、場に4枚以上ある色に限り同色2枚取りが可能。宝石カードを購入する。
購入後は各山札の1番上から場に補充される。宝石カードを予約する。
予約されたカードは、そのプレイヤーしか購入することができなくなり、どの色にも代用できる黄金トークンを1枚獲得できる。
の3つのいずれかの行動を繰り返す。
勝利条件は、購入したカードの左上に書かれた威信ポイントを合計で15ポイント以上にすることである※1, 2。
※1. 厳密には、15ポイント以上となったプレイヤーが現れた時点で最終ターンとなり、そのターン終了時点で最もポイントが高いプレイヤーの勝利となる。
※2. 同点のプレイヤーが複数人いる場合は、最も購入カードの枚数が少ないプレイヤーの勝利となる。
購入した宝石カードは右上に色が書かれており、次の購入に再利用することができる。トークンは、金を含めて合計10枚までしか同時に持つことができないため、高得点カードを購入するためには、必然的に1段目の安い宝石を買いながら、次の宝石カードの購入に繋げていく必要がある。

また、ポイントは宝石カード以外に、貴族カードでも獲得できる。
宝石カードは、指定色の宝石カードを指定枚数購入することができれば、先着で獲得でき、宝石カードの購入と同時に3点が付与される。

開発の経緯
このゲームを実際にやってみると、意外と奥が深いゲームであることがわかる。
一見すると、単なる効率の良さを競うだけのゲームのように思えるが、予約によって、相手の妨害をしたり、トークンを吐き出すタイミングなど、意外と考えなければいけないことが多い。
実際に、公式サイトにも”no silver bullet(銀の弾丸はない)”と書かれており、その複雑さが伺える。筆者はBGAでエキスパート(レート500)まで到達したことがあるそこそこの熟練者であるが、未だに最善手がわからない局面が多い。購入後に補充されるカードはランダムであるため、運要素はどうしても排除することはできないにしろ、あの時どうするのが最も良い選択だったかは気になることが多い。
囲碁・将棋の世界では、AIによって最善手が示され、後から指し手の振り返りを行うことができる。このようなAIによる解析を実現することができれば、宝石の煌めきにおいても敗着や悪手の評価ができ、新しい楽しみ方ができるのではと思ったのがきっかけである。
先行事例
AI解析を実現するためには、兎にも角にも人知を超えた強さの宝石AIを作らないといけない。人間より弱くては、解析結果が参考にならないからだ。
宝石AIの開発にあたって、まずは既に開発されていた事例を調査した。
splendor-ai: ニューラルネットで実装されたAI
lapidary-ai: 強化学習を使ったAI(webアプリのデモあり)
alpha-general: AlphaZeroを宝石の煌めきに適用したAI(webアプリのデモあり)
ざっとこれら3つのリポジトリが見つかった。1に関しては学習済みモデルが公開されておらず、2はデモで戦った感触がかなり弱かったため、本命は3のAlphaZeroベースの手法を使うことにした。
今回は、ここら辺にして、次回以降では、AlphaZero + MCTSを宝石の煌めきに適用する方法と、ゲーム環境の改造方法について書いていくつもり。
最後に
このブログでは、宝石の煌めきAIの開発を通して、攻略情報やゲームAI開発方法など、得られた知見について発信する予定です。
読者にBGAユーザがおられたら、フレンド申請大歓迎ですので、下記URLよりどうぞ。