スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

とつげき東北さんのMJ-0を実装しました


麻雀ゲームのAIも並行して作っていますが、それの一環でとつげき東北さんが開発したアルゴリズムであるMJ-0を実装しました。いつしかプログラムがダウンロードできなくなっていましたが、そんなに難しいアルゴリズムでもなかったので、自分で1日かけて実装できました。

 

興味を持った方はクリックお願いしますm(_ _)m
にほんブログ村 ゲームブログ ゲーム制作へ人気ブログランキングへ

 

とつげき東北さんは学生時代から知っていましたが、改めて『科学する麻雀 』を読んでみてこの分析をうまく活用すればかなり強いAIが作れるかも!と興味をもちました。やはり名著ですね。

 

MJ-0が行っていることは、専門用語ではモンテカルロ法と呼ばれる手法です。モンテカルロ法は基本的には期待値(平均値)を求めるためのテクニックです。ランダム性を伴なう事象に対して期待値を求めるには当然ながらそれが起こる確率を求める必要があります。じゃあ確率を求めるにはどうすればいいかといいますと、連続確率分布では自分が求めたい領域の面積(体積)になります。離散確率分布の場合は場合わけをして自分のもとめたい場合の数から全体の数を割れば出せます。

 

出せます。と言ってみたものの、実際にコンピュータにやらせようと思うとムリなんですわこれ。まず、コンピュータは積分を計算する事ができません。近似解を求める方法はたくさんありますが、あくまで近似です。

 

コンピュータにはさらにキツイ縛りがありまして計算対象は離散、かつ有限である必要があるということです。連続確率分布の場合、求めたい領域が有限である保証なんてどこにもありません。無限の領域を計算で求めようとすれば当然ですがコンピュータは無限ループに陥って止まりません。今のコンピュータではこれが限界なのです。

 

人間様が求める手法では不定積分を求めるという方法がポピュラーですが、コンピュータにとっては、そんなの知るかよ!!!って感じです。Mathematicaみたいなあたまのいいやつはたまに解いてくれたりもしますが。でも、不定積分が求まるやつなんてせいぜい初等関数(高校までに習う関数の総称)くらいのものです。ゆえにこの手法は意外と適用範囲が狭かったりします。

 

でも、本来われわれは面積を求めたかったのであって決して積分を計算したかったわけではありません。あくまで、面積を求めるために積分を使おうとしただけで、面積が求まるのなら別に積分を計算しなくったっていいのです!

 

幸い、麻雀ゲームは基本的に離散確率分布(そもそも牌が有限個しかない)ですから積分まではいらないですが、場合の数を求めるというのも大変です。場合の数ってあれですよ。nCm、コンビネーション??順列??階乗みたいな高校でさんざん悩まされたあれですよ。ぶっちゃけ私は苦手ですあんなの、よう計算する気になりません。それだけでなく、単純に計算すると桁や計算量がバカでかくなるというのもマジメくんが陥る罠の一つです。全部を生真面目に解こうとすれば日がくれても終わらないプログラムを走らせることになります。。

 

そこで現れた救世主がモンテカルロ法です。一言で説明するとランダムの世界をバーチャルで作ってしまえばいんじゃね?ということです。コンピュータはいくらでも仮想の世界を作ることが出来ます。その仮想の世界で自分の実現したいことを「ランダムに」実現してみて、実際に実現された回数を覚えておく。それを施行回数で割ってやれば確率にほど近い値を得ることが出来ます。以上。

 

古の数学者がみたら、なんやそれ!?って感じの手法ですよね。まさにコンピュータならではの解法です。数学者が一生懸命理論をこねくり回したものより遥かにカンタンで、しかも使い易いです。これさえ使えれば、大抵の確率はかなりの誤差範囲内で求めることができます。高校であんだけ苦労したのはなんだったんだろう。。。そんな気すらします。

 

 

だいぶ話がそれました。とにかくMJ-0はモンテカルロ法を使って特定の牌が山に残っている期待値を出しています。使ってみた感想としては、割と当たるかなといったところです。さすがに確率なんでビタリと予言できるワケではありません。単純過ぎるアルゴリズムなので若干、字牌の重みが過大かもと思えますが、それでも人間様に比べて優位性があるということを証明した、とつげき東北さんはえらいと思います。

 

 

なんか、数学の難しい話をしすぎて疲れました。もう寝ます。

スポンサーサイト

コメントの投稿

Secret

プロフィール

kackyt

Author:kackyt
かつては携帯ゲームで名を馳せたプログラマー。
現在は田舎の某メーカーで会社勤め。
趣味は投資、麻雀、マラソン、プログラミング。

ブログ名の由来はマラソン+プログラミング

RSS登録er
FC2カウンター
最新記事
最新コメント
最新トラックバック
カテゴリ
月別アーカイブ
アクセスランキング
[ジャンルランキング]
コンピュータ
4575位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
851位
アクセスランキングを見る>>
検索フォーム
人気ブログランキング
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。