FERRY's game blog

ドミニオンとか アグリコラとか

オセロ、チェス、将棋、そして、ドミニオン。最強AIへの飽くなき挑戦。

第二回将棋電王戦の結果は衝撃的でした。ついにコンピュータ上で走るプログラムが、現役のプロ棋士を負かす日が来たのか。と思って、感動した覚えがあります。古くは森田将棋なんかで遊んだ世代ですが、どのように手筋を読むのか?というアルゴリズムの構築に非常に興味を惹かれます。

かなり昔、谷川浩二さんの本を読んだときに、対戦中の優劣の判断に、将棋の盤面の駒の配置を数値化して、客観的に評価する。ということを書かれていました。

 

この話が、どうドミニオンにつながるか?なのですが、先日「ほぼドミニオン」を開発しておられる方のブログに以下のようなエントリがありました。

 MTG的カードゲームのAI(評価関数型)を考えるだけ考えてみた

   (ゲームをC#で作るブログ URL:http://nanamb.blog25.fc2.com/blog-entry-637.html

 

FERRYのプログラミングスキルはエクセルでマクロをいじれるレベルでしかありませんが、ドミニオンで強くなるためにブログを始めた身からすると、プログラムは組めなくても、最強のAIをどのように作ればよいかを考えるだけでも、ずいぶんと勉強になるだろうと予想されます。素人の背伸びは恥ずかしくもありますが、少し考えて見ます。

 

 

<開始前の大局的戦略>

将棋プログラムの場合は、網羅的に広い範囲の手を読み込んでいって、最善手を選んでいくそうです。ドミニオンの場合は王国カードが10種類ですので、その他、財宝、勝利点、呪いなどをあわせても、20種類前後のカードの組み合わせをおおよそ15~30ターン前後まで読むことになります。具体的な手法はおいておいて、その中から評価の高い購入パターンを抽出して、今度は有望なパターン間の有利不利を評価します。一方、ある程度強いカードの組み合わせ情報を”定石”として持っておいて、それに則って戦略を決めるやりかたもありますが、当てはまる戦略が無い時に弱いAIになってしまいそうです。

人間がプレイする場合、戦略のキーとなるカードの有無を確認して、複数の手筋間の優劣を検討し、ベースとなる戦略を決定する段階です。

<デッキ周回の展望>

コンボの場合、ステロの場合、特殊勝利点のある場合、それぞれ大まかな展開を展望します。デッキ一周目の購入二回の情報で、相手の戦略の情報が得られますから、複数の手筋間の影響を予測し、自身の戦略を調整します。ドミニオンプレーヤの方々のブログ等を拝見すると、ここまでの手順に関する記述が非常に多く、最も楽しい部分であるとともに、頭を使う部分であると推測されます。

また、鍛冶屋ステロだと○○ターンで属州○枚等の記述に代表される、戦略の速度感も、このデッキ周回展望の大きな一要因になります。試合数をこなすことで最も経験が積まれていくのも、この部分でしょう。実際、FERRY自身も庭園や公領公爵などの特殊勝利点の速さや終了のタイミングは体感してみないとわかりませんでした。

<そのデッキ周回の予測>

デッキのカウンティングや、残り山札枚数を考慮したプレイングなど、ここを意識したプレイングができるようになると中級者レベルである。との意見が大勢を占めるようです。また、対戦相手のデッキ周回についてもチェックをして、アタックカードが手札に入っている可能性を推測するなど、プレイングの木目細かさが強さに直結しているように感じるのも、この段階です。

<個別の局面での選択>

上記三段階のおのおのに評価関数を設け、そのターンにおけるアクションと購入の内容を決定する。というのがドミニオンアルゴリズムのベースになるかと思います。

FERRYは主に、Goko公式、ほぼドミ、Androminionの三種類でプレイしますが、各プログラムのAIに興味を惹かれます。共通して言えるのはコンボ構築が難しそうなことで、GokoのAdventureモードはコンボしてきますが、サプライが先に決まっているので、コンボAIを作りやすいものと思われます。

村鍛冶や拷問人ロックなど、比較的シンプルな(やることが決まっている)コンボもAIを組みやすそうですが、品評会で稼ぐデッキだったり、豊穣の角笛コンボなどは、デッキ構築の自由度が高く、サプライ次第でもあるので、非常に難しそうです。

 

最終的には、プログラムの勉強をして、自分で上記のAIを組めるようになるのが楽しそうですが、相当先のことになりそうです。プログラムはおいておいても、ドミニオンのプレイ時にポイントを意識することで、プレイング向上に努めたいと思います。

 

 

今回の記事をかくにあたり、ネット検索でいろんなページを拝見しました。特に参考にさせていただいたものを記し、感謝の意を捧げたいと思います。

 ゲームをC#で作るブログ

  (URL:http://nanamb.blog25.fc2.com/

 ねこここぶろぐ

  (URL:http://d.hatena.ne.jp/jinnekomata/20110109