mjai-occam0.51(mjaiクライアント。天鳳R1700)

戻る

1.概要
mjaiプロトコルに対応したmjaiクライアント「mjai-occam」

天鳳上卓左4でこっそり打たせた結果R1700位、R表示無し4段という、上卓平均レベルだった。


2.バイナリ

ver 0.51

mjai-occam_0.51.zip


mjai-occamがバイナリ。他は作業用のファイルのためバイナリと同じ階層において下さい。


./mjai-occam mjsonp://localhost:11600/default > /dev/null 2>&1

とかでTCP接続。
起動時に20MB位メモリにファイルを読み込むので起動遅いかも

mjaiのデフォルトルールにのみ対応。
対戦終了しても即終了しないのは数回リトライしてるため。ターミネイトして問題ありません。


windowsはシラナイ。


3.天鳳成績



牌譜サンプル 1 2 3 4 5
R1800も無さそうなので中止。 ※解析結果と天鳳の成績が食い違ってますが、 解析結果は打ち方を固定してからのデータで、 残り試合は一般卓とかバグ修正とか調整とかでゴニョゴニョしてた分。 アップロードされているmjai-occamは解析結果のデータのものです。 ちなみになるうらとさんのしぐま0v1.11と対戦3人 vs mjai-occam1人と @mahjong_serverさんのtransmauを使わせていただき対戦した ・結果 863試合 平均順位 2.499615 どうとも言えない結果になった。 牌譜サンプル 1 2 3 mjaiサーバで対戦させると1試合5分位かかってこれだけで2、3日かかってしまう。 ちゃんとした実力評価方法が本当に必要だなあ。

4.プログラムの内容

プログラムの構成はmjai-manueとほぼ同じ。ただし高速化のため全てC++に書き換えた。


・放銃率、放銃点計算

manueは統計データから決定木を作って計算している
が、これでは卓の情報からわかること(残り枚数とか一色手とか)を考慮できない

なのでモンテカルロ法で相手の手牌をランダムに300回作って
出現率を放銃率とみなす。

ただこれだとドラとかスジとかわからない。
結局、統計データを初期値として
それに出現率を加味するというハイブリッド方式にした。


・テンパイ率計算

爆打ニキのHPにあがっていたソースからテンパイ率計算部分を拝借させていただきますた。
現在verはどうかしらないけど天鳳位の牌譜を教師に、入力ベクトルは人力で、これをロジスティクス回帰で学習したやつ。
ゆくゆくはこれも自作したい。


・和了率計算


基本manueと同じだが

1.モンテカルロ回数を1000回じゃ全然少ないっぽいので10000回にした。マルチスレッドで高速化(C++11のstd::threadは神)。最大2秒で打ち切る
2.ロンあがり考慮(相手が自分にベタオリしたと仮定してツモに重みをつける。上記の放銃率計算ルーチン使用)
3.チートイ、国士、フリテン、出和了り可能か、テンパイ率考慮
4.点数計算は拙作のmjscore.h使用


が違う。はず。(他にもなんかあるかも忘れた)


・最終期待順位計算

manueと同じだけど、ファイルから読み込むのではなく回帰式にして高速化している。詳細


・他色々ヒューリスティック

はい手抜き


・自動打ちプログラム

windowsでTCPサーバー作成(C#)。
windowsで天鳳のパケットをキャプチャしてmjaiプロトコルに変換。
macとかで走っているmjai-occamとサーバー間で、mjaiプロトコルで通信。
出力はマウスエミュレート。

こんな感じ↓



5.感想

・上卓民(というか人間)クソ強い
・ヒューリスティックを結構使ってるという事は手抜きしているという事なのでまだまだ改善の余地有り
・特に横移動をプログラムで表現したいし結構重要なんだけど、いい手が思いつかない・・・
・ベタオリモードや一色モードや七対子モード的なものは無い
・形テンをもっととるようにしたい。あと鳴き下手すぎ
・何だかんだ言って麻雀でいちばん重要な技術は牌効率だと思う
・観戦してる感じ、局収支期待値ベースのAIはとても弱い
・麻雀プログラムマジ面倒
・特にカンと赤ドラは死すべし
・麻雀AIが発展しない理由?面倒だからだよ
・面倒すぎて開発環境の充実加減が強さを分けるファクターになってるレベル
・爆打はR2100とか達成してたけど、これは頭おかしいレベルに凄い
・割りとがんばったけどビミョーな結果に
・順位意識した打ち方が全然ダメ
・今後はやる気が出ればまたやりたい。特上までは行きたいなあ
・天鳳位とかどうやって到達できるんだろ


6.麻雀AIを作っている人へ


7.他

mjaiのwikiがスパムで消えてたのでミラー



メモ1:天鳳東風戦1試合にだいたい15分かかるから、打ちっぱでも1000試合なら10日かかる。長っ。
メモ2:TODO、今度やるときはXCTestとか使って問題集を作って打ち方検証しよう。

inserted by FC2 system