« 続・東風ランキング | トップページ | Ver.0.8.4出しました »

2006/01/25

役読みアルゴリズム

立直牌の描画部を作成中。

同時に、脳内では、Version0.8.4を出した後の機能を検討中。
今のところ、次はパイの大きさの問題と、鳴き仕掛けへの防御についてを同時にやる予定。

鳴き仕掛けへの防御アルゴリズムの実現方法として、今アイデアとして考えているのが、ベイジアンフィルタを用いた役読みアルゴリズム。

GoogleとかMSがベイズ理論に注目してるって記事を読んだときから、気になって、WEBで調べていたけれど、スパムメールフィルタ(ベイジアンフィルタ)などはベイズ理論の典型的な応用例だそうだ。

ベイジアンフィルタは麻雀にかなり応用が出来そうな予感がしてる。
たとえば、鳴き仕掛けへの防御。
鳴き仕掛けへの防御は、門前と異なって、役や点数を読むことがある程度可能。それをコンピュータにやらせることを考えたときに、スパムメールか通常のメールかを判断するのと同じ要領で役を読む(例えば、混一かどうかなど)ことが出来るのではないかと思う。
また鳴きの仕掛けはかなり個人ごとにクセが出る傾向にあるので、これまたベイズ理論の応用例らしいグーグルパーソナライズド検索と同じ要領で個人のクセを読むアルゴリズムが作れるのかもしれない。(妄想です)
個人のクセを読むってのは今の段階では完全に妄想レベルだけれど、役読み(まずは染め手読み程度)はチャレンジする価値が十分にあると思ってる。

ただ、実現に関して現時点で問題点が3つほど思い当たる。

ひとつは条件付けの問題
英語メールのスパムフィルタの場合は単語がそのま条件付けとして使えたわけだけれど、麻雀の場合は自分で何が条件付けの因子となりえるかを考えなければいけない。例えば、塔子落としとか、捨てパイの偏りとか、鳴き方(例えばオタ風から先に鳴いたとか)、対子場なんかが条件付けの因子になるのかもしれない。
まずはどういう因子をリストアップするかを検討する必要がある。ここら辺は麻雀上級者の経験を頼りにするしかなさそう。麻雀本でも読み漁ってみるかな。(こういった条件を自動的に探せないんじゃあベイジアンフィルタとは呼べないんだろうな。)それと、因子と結果の因果関係がスパムメールよりはずっと弱い気がしてて果たして効力があるかどうかが分からない。英語SPAMメールならSEXYって書いてあれば90%はスパム確定っていえちゃうらしいけれど、そこまで強いファクターは麻雀には無いだろう。
次は、データ解析の問題、東風荘のログを解析するプログラムを作らなければいけない。これだけで結構大変な作業になりそう。もちろん、データも必要。いままではとつげき東北氏のページのデータを使わせてもらっていたけれど、あそこのデータはクイタンなしの第一東風荘のデータが殆どなのであまり鳴きについては役に立たなさそう。泉レイ氏のデータを使わせてもらってそれに自分が打った超ランデータを足した程度の数量で果たして足りるかどうか……

3つ目は私自身の知識の問題。私は後づけ野郎なんで、やりたいことが見つかってから慌てて勉強を開始するタイプ。ぶっちゃけベイズ理論なんて殆ど理解して無い。昨日今日でスパムメールフィルタの理屈がようやく理解できたところ。

とりあえず、だいぶ前にAmazonで買ったベイズ統計学入門の本があるんて、暇を見つけて読んでみるつもり。
でも入門書と言う割には結構難しい数式が多いな、この本……Orz
2006/2/2追記
ぱっと目、難しそうな記号を使った数式が多いけど、じっくり読んでみると、結構当たり前な式が多くて、それほど難しくも無い。式の後に文章で親切な解説があるし、具体例もあるので結構イメージしやすい。実はかなりの良書な気がしてきた。
追記終わり

ちなみに、ポールグラハム方式のスパムフィルタはパラメタの決め方を山勘(?)でやってる部分があるので、こんなのベイズ理論じゃないって言う人もいる。
(Amazonの「ハッカーと画家」の書評にもあるし、別の場所でも批判されているらしい)。
でも、これは、単純に普通のメールをスパムに間違えるのはスパムを普通のメールと判断するよりリスクが大きいから、安全な方向に倒しただけでしょう。
麻雀の場合、遊びなんで、そうったパラメタいじりは多分それほど必要なら無いんじゃないかと楽観的に考えてる。

参考資料:
タグ「ベイズ」を含む注目エントリー


|

« 続・東風ランキング | トップページ | Ver.0.8.4出しました »

コメント

素人の浅知恵ですが、
これでリーチかかった時の現物以外の牌の危険度を推量するのに使えませんか。
特定の牌二つの切り方によるあたり牌の条件付確率を、ドラ全種×1~9×全ての数牌分くらい取り、
リーチ者の河の中から二つの組み合わせを全部拾って計算とか。
一枚だけしか考えないと、ほとんど無関係っぽいし、
三枚以上だと数が爆発しそう。

投稿: デブオタ | 2006/01/26 16:57

すいませんが、デブオタさんが意図することが分かりません。

一般論としてベイズ理論信者が言うには「ベイズ理論には例外はない」そうでどんなことでも適用しようと思えば出来ると思います。

ただし、それが今私がすでにやっている方式と比較してどれほど有効かということが問題です。門前立直に対応と言う意味では、現状の「まったり麻雀」が採用しているベタオリアルゴリズムでも相当に優秀な結果を残しているので、今そこを改善しようとは思いません。

それと、これは理屈というよりギャンブラーのカンですが、まず門前手で相手の手牌読みは無理だとおもいます。実際問題、門前立直の役など超ラン雀士は殆ど読みません。


条件付確率を考えるときに大切なのは、その条件分けがどれほど意味を持っているかだと思います。たいして意味が無いのに条件を分けても仕方ないですよね。

スパムメールフィルタの場合、単語自体が意味を持っている情報だから上手くいくのです。もしコレを単語ではなくて「アルファベット1文字ごと」、または、「アルファベット2文字だけ抽出したもの」をベースに条件分けしたら絶対に上手くいかないでしょう。

麻雀でも同様です。牌そのものには単なるアルファベットで意味が無いですから、まずはパイの並びの中で意味を持つ単語として扱うえるものを探すところから始める必要があるでしょう。

そういう意味で、最初に有効そうな条件分けの考える段階で超上級雀士のカンや経験ってのはやっぱ必要になると思います。

投稿: kmo2 | 2006/01/26 21:32

なるほど。有効ではないとお考えですか。

俺も一応東風の超ランで打ってますが(時任定跡とかいうヘタレです)、
リーチや副露に対して、鳴いて安手や愚形でテンパってるときの対応、アンパイの少ないイーシャンの対応がとても難しいと思います。
そこでは順目も考えてギリギリ押せるとこまで押してあとは(結果オリ打つ可能性があっても)降りる、のような判断をします。
しかし難解な局面になると、あとからじっくり考えてもよかったのか悪かったのかわかりません。

今一番悩んでいるところがこれで、なんとかソフトでもって解決できないかと思いました。
ベタオリのためではなく、進退の判断としてです。
ちなみに面前リーチの役は読めませんが副露の待ち読みは超ランの人はやっている人が多いのではないでしょうか。
面前リーチの待ちも体感的に切り方によって同じスジでも安全度が全然違うように感じられます。
せっかくつくるのだから鳴きの役や点数だけでは勿体無いかなと思いました。
(俺が全然結果出してないので、戯言ですが)


>パイの並びの中で意味を持つ単語として扱えうるもの
もうkmo2さんの中では答えが出てしまっているようですね。
「5p手出し→2p手出し」などは単語といえるように思えます。
では一つ複雑に「5p手出し→2p手出し→3p手出し」
これはどう考えたらよいのでしょうか。
さらに10順目のリーチに対しては?
「5p手出し→2p手出し」かつ「5p手出し→3p手出し」かつ「2p手だし→3p手出し」
のように二つの事象ごとに分解&結合できるなら十分にデータが取れうるだろうし、
データから牌の危険度を計算できるんじゃないかなと思いました。
10枚でてれば最高45枚のフィルタを通せて、ある程度濃淡がわかるかも…
実験も何もせずにカンでものを言ってごめんなさい。

投稿: デブオタ | 2006/01/26 23:52

×取れうる
    ↓
○取りうる

失礼しました。

投稿: デブオタ | 2006/01/26 23:56

コメントどうもありがとうございます。
かなり参考になりました。

>なるほど。有効ではないとお考えですか。

今はまだ、ソフトの弱点であり、かつ、比較的、適用しやすいところ)フーローの役読み)から実験してみようってレベルです。そこでいい結果がもし出たら適用範囲を門前などに広げることも考えると思います。

>俺も一応東風の超ランで打ってますが(時任定跡とかいうヘタレです)、
そうでしたか。デブオタさんがどういった人なのかはちょっと知りたかったんで素性を明かしてもらって助かります。

>のように二つの事象ごとに分解&結合できるなら十分にデータが取れうるだろうし、データから牌の危険度を計算できるんじゃないかなと思いました。

なるほど。そうかもしれませんね。すぐに出来るかどうか分かりませんが、これはやってみたいですねえ。

>実験も何もせずにカンでものを言ってごめんなさい。
いえ。今後もどんどんコメントしてください。よろしくお願いします。

投稿: kmo2 | 2006/01/27 00:31

こんにちは。
最近(凸掲示板に投稿されたときから)興味深く読ませてもらってます。
第二超ランのデータが不足しているなら、千数百戦程度ですが
牌譜を提供できますよ~

投稿: まほ公 | 2006/01/28 01:08

>牌譜を提供できますよ~

おお!ありがとうございます。
おねがいします。
LHAかZIP形式で圧縮してkmo2@yahoo.co.jpにメールしていただけないでしょうか。

投稿: kmo2 | 2006/01/28 17:07

メールでは不都合でしたら、別の手段でもいいです。

投稿: kmo2 | 2006/01/28 18:26

送りましたよんξ´∀‘)ノ.zip
最新(といっても数ヶ月前ですが)数試合は、たしか第二超以外で打ってます(消し忘れたξノ∀`)ペチッ)。
なので、でかすぎか手動で消して誤使用くださいな。

投稿: まほ公 | 2006/01/28 19:38

>送りましたよんξ´∀‘)ノ.zip

ありがとうございます。確かに受け取りました。

>なので、でかすぎか手動で消して誤使用くださいな。
了解です。

投稿: kmo2 | 2006/01/28 21:27

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/61182/8336947

この記事へのトラックバック一覧です: 役読みアルゴリズム:

« 続・東風ランキング | トップページ | Ver.0.8.4出しました »