ISBN 9784798067889

対戦型麻雀ゲームAIのアルゴリズムと実装

対戦型麻雀ゲームAIのアルゴリズムと実装
著者
小林聡
出版社
秀和システム
刊行
2022-12

概要

麻雀AIを機械学習なしのロジックで段階的に実装する

想定読者

ゲームAI・ルールベースAIに興味のあるプログラマ。麻雀のルールを知っており、C++またはJavaScriptで中規模プロジェクトを読み書きできる中級エンジニア

こんな人には向いていない

  • 機械学習・深層強化学習で麻雀AIを作ることを期待する読者(本書はMLを一切使わない)
  • 麻雀ルール未経験者(シャンテン数や和了役の説明は実装寄りで、ルール解説は最小限)
  • プログラミング入門者(既存のオープンソース実装を読み解く構成のため、一定のコード読解力が前提)

読了後にできるようになること

  • 手牌を数値表現に変換し、シャンテン数を正確に計算するアルゴリズムを実装できる
  • 符計算・役判定・点数計算をロジックとして分解し、コードに落とす手順を理解できる
  • リーチ・ベタオリ・鳴き・押し引きといった麻雀の基本戦術をルールベースのAIに組み込む設計指針を得る
  • AI同士の対戦シミュレーションで戦術改善サイクルを回す手法を習得できる
  • 電脳麻将(オープンソース)のコードベースを起点に独自AIを差し替える方法を理解できる

本書のキー概念(章解説)

  • 第 1 章 東一局: イントロダクション(電脳麻将の概要・プログラム構成) — 電脳麻将全体の構造を把握するための地図。先にここを読むと後章の文脈が掴みやすい
  • 第 2 章 東二局: 手牌とシャンテン数 — シャンテン数計算は本書の技術的核心。著者独自の定式化は既存手法と比較してコードに落としやすい
  • 第 3 章 東三局: 和了点計算 — 状況役・懸賞役・符計算・和了役判定まで網羅。役判定ロジックの実装参考として単独でも価値がある
  • 第 4 章 東四局: ゲーム進行 — 牌山・河の実装を含むゲームループ全体の組み立て。対局エンジンを自作したい場合の設計参考に
  • 第 5 章 南一局: 麻雀AIのプログラム / リーチAI — AIロジック解説の出発点。まず最小構成のリーチAIで動かし、以降の章で段階的に強化する流れが明快
  • 第 6 章 南二局: オリと鳴き — ベタオリ・鳴きのAI。守備と攻撃のバランスを数値基準で記述する手法は他ゲームAIへの応用度が高い
  • 第 7 章 南三局: 手作り / 南四局: 押し引き — 手作りAIと押し引き判断の実装。これら2章まで読むことで対戦レベルのAI一式が完成する

ハイライト

  • 電脳麻将のAIは機械学習を採用していません。打牌選択・鳴きの基準・押し引きの基準はプログラムで具体的に指定しており、いわば『人間の考える戦術をシミュレートする装置』といえます。(本書のAI設計思想を最も端的に示す一節。機械学習依存ではなくロジック記述でAIを作る本書の独自性が明確に出ている)

外部からの言及

  • 著者の小林氏自身がQiitaで電脳麻将のnpmライブラリ(@kobalab/majiang-core)の解説記事を公開しており、本書はその実装を詳細に解説した書籍として紹介されている。シャンテン数計算アルゴリズムについては著者記事および第三者による補足記事が存在し、実装精度の議論が技術的コミュニティで行われている(qiita)

編集メモ

Qiita 関連記事3件のうち、著者自身の記事1件(likes 13)と著者・第三者の技術補足記事2件(likes 0)のみ。第三者による本書直接言及は確認できず、Rakutenランキング情報もなし。麻雀AIプログラミングというニッチ領域での専門書として位置づける

読む前に押さえておきたいこと

  • 麻雀のゲームルール(手牌・面子・役の基礎概念)。プログラミング経験があっても麻雀未経験では実装の文脈が掴みにくい
  • JavaScriptまたはC++の中級以上の読み書き。コードを読み解きながら進む構成のため、言語の基本構文への慣れが必要
  • データ構造の基礎(配列・ビット演算)。手牌の表現にビット列を使う箇所があり、ビット演算に不慣れだと詰まりやすい

学習のコツ

  • 東二局(シャンテン数)と東三局(和了点計算)は独立した参照単位として使える。麻雀アプリを作る際の実装辞書として手元に置くと便利
  • 南一局(リーチAI)から南四局(押し引きAI)は段階的に難易度が上がる構成のため、まずリーチのみで動く状態を作ってから次章に進むのが効率的
  • 電脳麻将はオープンソース公開済みのため、本書を読みながらGitHub上のコードを並走させると、抽象的な説明と具体実装の対応が掴みやすい
  • AI同士の対戦でセオリーを検証するパイプラインが章末で示される。自分のルールを追加して対戦させる実験を早めに試すと学習の解像度が上がる
出版社による内容紹介

対戦型麻雀ゲーム「電脳麻将」のソースコードを開発者自ら解説します。 まずは、シャンテン数計算、和了役判定と点数計算、各種ルールに従ったゲームの進行の実装を解説します。その後、まずはリーチのAIを実装し、ベタオリ、鳴きなど、具体的な戦術を追加して麻雀AIを強化する過程を順を追って説明していきます。 電脳麻将のAIは機械学習を採用していません。それゆえ、打牌選択の基準、鳴きの基準、押し引きの基準などは、プログラムで具体的に指定しています。いわば「人間の考える戦術をシミュレートする装置」といえます。さまざまな麻雀セオリーを実装し、それ以前のAIとの対戦を行って、その結果を確認しながらAIを進化させていきます。その過程を理解すれば、麻雀以外のAIの実装・強化にも役立つはずです。 「電脳麻将」はオープンソースで公開されているので、本書を参考にオリジナルの戦術を実装したAIを開発し、差し替えることができます。そして、AI同士で対戦させ、その戦術の正しいかをシミュレーションすることも可能です。 東一局 イントロダクション  0本場 電脳麻将とは  1本場 プログラム構成  2本場 本書について 東二局 手牌とシャンテン数  0本場 手牌の表現  1本場 手牌の操作  2本場 シャンテン数計算 東三局 和了点計算  0本場 和了点計算の流れ  1本場 状況役と懸賞役  2本場 和了形を求める  3本場 符を計算する  4本場 和了役を判定する  5本場 和了点を計算する  6本場 計算例 東四局 ゲーム進行  0本場 ゲーム進行の概要  1本場 ゲーム進行の実装  2本場 牌山と河の実装 南一局 麻雀AIのプログラム  0本場 麻雀AIのプログラム構造  1本場 リーチのAI 南二局 オリと鳴き  0本場 ベタオリのAI  1本場 鳴きのAI 南三局 手作り  0本場 手作りのAI 南四局 押し引き  0本場 押し引きのAI 西入 付録

この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。

質問に答えるだけで、
あなたに合う専門書が見つかる

IT・デザイン・士業・医療・経理・教育・研究 ほか、あらゆる分野の専門書と 「読む順序」(学習ロードマップ)を収録。何を選べばいいか分からなくても、 いくつかの質問に答えるだけでたどり着けます。