2013年3月25日月曜日

最終順位予測を用いた押し引き判断

現在開発している麻雀AIには、最終順位予測を用いた押し引き判断ルーチンを実装する予定である。麻雀は基本的に順位を目指すものであるから、押し引きも局単位の収入期待値ではなく最終順位によって評価されるべきだ、という発想である。
このルーチンを実現できれば、より正確な押し引きを行う打ち手になると思われる。また、各順位に重み付けを行うことで、トップ重視、平均順位重視、ラス回避重視など豊富な種類の打ち手を簡単に作れることが期待できる。さらに、このルーチンを高速化し打牌選択ルーチンに適用すれば、ラス目の時は高い手を作る、トップ目のときは速い手で流す、といった最終順位を考慮した手作りを行う打ち手を作ることができる…かもしれない。

このルーチンを実現するためには、「今の手からどの点数をどのくらいの確率であがれるか」という情報が必要なので、今はそれを木構造で表現するアルゴリズムを実装中である。

222567m2256p56s西北 から構築される木



詳しい中身については、もう少し考えをまとめてから。

2013年3月21日木曜日

麻雀AI完成まであと少し

現在、麻雀AIは

・ 局収入期待値に基づく打牌(立直判断)
・ 局収入期待値に基づく鳴き判断
・ 安全牌探索ルーチン

までできている。処理を高速化し、探索範囲を広くできたおかげで、向聴戻しや浮き牌残しを行ってできる限り良形に持っていく打ち方をしてくれるようになった。また、特に意図したわけではないが積極的に後付けを行うという特徴もある。

あとは押し引き判断ルーチンさえ作ればゲーム公開の目処が立つ。
(今のAIは、敵のリーチに対してテンパイなら全押し、それ以外全オリ)


2013年3月16日土曜日

ツモ切り表示実装

ツモ切り表示を実装してみた。
ツモ切られた牌は紫の枠で囲まれる。

あとやることは

・ 途中流局の実装(四槓流れ、四風連打、九種九牌)
・ 槍槓の実装
・ 複数の槓のパターン選択
・ 鳴き対象牌のハイライト表示

メモリの使用量も調査したところ、ゲーム本体とAI4体あわせて200MB位だった。
メモリリークもなさそうだったし、多分大丈夫だろう…

2013年3月14日木曜日

麻雀ゲーム画面

開発中の麻雀ゲームについて。
現在のゲーム画面はこんな感じである。























牌画は雀のお宿様の素材を使用させて頂いてます。

なんだかファミコンみたいで味気ない気もするが、当分はこれでいこうと思っている。ルールも実装済みで、クイタンあり赤ナシの東風と半荘が遊べる。途中流局は未実装。AI部分は独立した実行ファイルであり、親プロセスと標準入出力を用いて通信し、動かしている。将来は通信規約を公開して、外部の開発者がAIを自由に追加できるようにするつもりである。

今後やること

・ ツモ切りの表示
・ 鳴き対象牌のハイライト表示
・ 途中流局実装

公開は、リソース関係のバグが無いか念入りにテストしてから行いたい。


2013年3月13日水曜日

麻雀AIの方針

開発中の麻雀AIの方針についてメモしておく。
既に7割方出来ているのだが、基本的には以下のような方針で開発する。


データと計算に基づく論理的な打牌
「流れ」などの俗に言うオカルト的な考えを排除し、計算による論理的な打牌を行うAIを目指す。厳密な計算が不可能な部分は、モンテカルロ・シミュレーションで補う。


出来る限り非ルールベース
もし○○の状況ならこうする、といったルールを並べてAIをつくる方法をルールベースというのだが、出来るだけこの方法は採用しない。作り手の実力以上の強さになりにくいし、新しい発見もなさそうだからだ。第一かっこよくない。
可能な限り単一の評価値に従って動くAIにしたい。


データは自己対局で取る
押し引きの判断などに、他家の平均和了素点などのデータを使用することを考えている。そのデータの源としてオンライン麻雀の天鳳が有力だがお金がかかるし解析にあまり時間を取られたくないというのが実情である。なので、AI同士の対局でデータを収集することにする。強い人の打ち方とAIの探索による打ち方にそこまで差がなさそうなので、データもそんなに変わらないだろうというのが理由である。


ゲーム本体のGUIについても後でメモしておこう。

2013年3月12日火曜日

ブログの目的

ただブログを開設しただけでは、3日坊主になること必至である。
従って更新意欲を出来る限り持続させるために、ブログを書く目的をここに書くことにする。

・ 自分の考えをメモすることで整理する
・ 閲覧者にフィードバックをもらって参考にする
・ 文章を書くことに慣れる
・ 暇をつぶす

書く内容は主に開発中の麻雀ゲームのことです。
それ以外にも、プログラミング関係のことや、日常的なものについても書いていくつもりです。