スポンサーサイト

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

麻雀AIのタイプ

これから色々と結果や計画を書いていくうえで
前提となる話なので先に書いておく。

「AI」といっても色んなタイプがある。
広い定義では、ルンバみたいな家電製品も、i Phoneのsiriも、ドラえもんみたいな未来ロボットもAIが搭載されていると言えるが
自分で学習するものから事前にプログラムされたとおりの動きしか出来ないものもある。

麻雀のAIの場合でも、大きくいくつかのパターン、及びその組み合わせで分けられる。

 1 考え方や戦略を条件式で組み込んでおく
 2 評価関数をつくる
 3 シミュレーションを行う
 4 牌譜から機械学習を行う




<1 考え方や戦略を条件式で組み込んでおく>

 例えば、打牌選択において
 「シャンテン数が一番低くなる牌のうち、受入枚数が一番多い牌を切る」
 など。
 
 メリットとしては、プログラミングした分、人間の考えをいくらでも条件式として取り入れることが出来ること。
 例えば、現代麻雀技術論とか麻雀プロの本に書かれてる牌理や考え方もその通り条件式書くことが出来れば
 再現することができる。
 (例:1345sと1456sでは、前者の1sの方が価値がある等)

 デメリットとしては、全ての要素をプログラミングすることが非常に難しく、膨大な計算量になってしまうこと
 例えば、押し引き判断のバランスを適切に表現しようと思っても「両面3900以上はゼンツ」とかシンプルなものは作れるが、
 点棒状況や和了牌の山読みや、相手の打点を予想したりとかそういった諸々の要素を条件式で表現するのはかなり難しい。
 
 そしてもう一つのデメリットが
 「人間が考えていること以上のことを出来ないこと」
 あるプロ雀士が自分の考え方を全て組み込めれば、そのプロ雀士と同じ実力になることは出来るが
 それ以上のことは出来ない。
 (もちろんコンピュータはミスをしない分は、強いかもしれないけど)



<2 評価関数をつくる>
 
 これも1に似ていて、どう打つかを事前に決めておく。
 例えば
 「字牌・1,9は1点、2,8は2点、3,4,5,6,7は3点。ドラの場合は、+2点。・・・」
 といったいくつかの点数条件を作っておいて、一番点数が低い牌を切る。
 みたいな感じ。

 メリットとしては、パラメータ(点数)をうまく調整できれば製作者以上に強く出来るかもしれないこと。
 そして、その調整結果は、新たな麻雀理論を作り出せるかもしれない。
 デメリットは、パラメータの調整が難しすぎること。
 例えば、上の点数制の場合、それぞれ何点プラスするかといった適切な値を調べないといけない。
 真面目にやろうとしたらパラメータの数が多すぎて、恐ろしい調整量になってしまう。。。 




 <3 シミュレーションを行う>
 
 例えば、リーチかダマかの判断において
 その局面でリーチした場合、ダマの場合、それぞれ対戦相手を仮想的にコンピュータとして1000回くらいシミュレーションする。
 その結果、期待値が高い方を選択する。
 といったようなもの。

 メリットとしては、人間では計算出来ないような大量のシミュレーション結果を元にするため、
 人間には分からないような場面でも最適解を出せる可能性があるということ。
 
 デメリットとしては、シミュレーションの精度が高くないと、結果の精度も高くならないこと。
 仮想的なコンピュータが、本当の対戦相手と違う選択をすればとるほど、得られる結果も妥当性が低くなる。
 そして厳密なシミュレーションは難しい。

 またもう一つのデメリットとして、計算量が多く時間がかかってしまう可能性があること。
 通常の麻雀では数秒で判断しないといけないが、シミュレーションの仕方によってはその時間内におさまらなくなる。
 特に、正確なシミュレーションをすればしようとするほど、計算が複雑になり時間がかかってしまう。




<4 牌譜から機械学習を行う>

 
 過去の牌譜から「打ち手が何を選択したか」や「何が当たり牌だったか」などを学習していく。
 機械学習としては、SVM(サポートベクターマシン)やディープラーニングなどが有名な方法。
 例えば、ある天鳳位の牌譜を学習して、どういう時に何を切るべきかを仮に完璧に学習できれば
 その天鳳位と同じ思考のAIを作ることが出来る。

 メリットとしては、細かい要素を含めて自動で学習してくれるから、
 1や2の方法で製作者が組み込むのが難しい細かい要素も自動的に取り入れてくれること。
 また、一度学習してしまえば、シミュレーションと違い、計算時間が短いこと。
 
 デメリットとしては、完全な学習をすることが難しいこと。
 この機械学習というのは、画像認識や音声認識などで今もグーグルなどたくさんの企業・研究機関が研究開発しており
 ディープラーニングとかは非常に今ホットな技術であるが、過学習といった問題があり、完全な学習が難しい。

 またもう一つのデメリットとしては
 打牌の学習の場合、学習元の牌譜の打ち手を超えることが出来ないこと。
 1の方法と同じだが、仮にある天鳳位の完全コピーが出来たとしても、その天鳳位を超えることは出来ない。
 (もちろんミスが減る分は強くなる)




長くなってしまったがだいたいこんな感じ。

あとはこれらを組み合わせていったりする方法がある。
今話題の「爆打」とかは、製作者の論文を見る限り、3と4を組み合わせている。
序盤は機械学習の結果を元に、押し引きはシミュレーション結果を元に、相手の手のテンパイ予測は機械学習を元に、・・・
みたいな感じ。


それぞれの方法でメリット・デメリットがあるので
それを踏まえたうえで、どんなAIにしていくか決めていく必要がある。

あとはどんな目的でAIを作っていくかによっても違う。
新たな戦術や理論を発見したいのか、人間より強いAIを作りたいのか等。


個人的には、最終的には人間を超える最強のAIを作れたらなーとか思ってるので
いろんな方法を組み合わせながら試行錯誤していくつもり。
今は4の方法の中でもニューラルネットワークという方法を試している。
(ディープラーニングもニューラルネットワークの一種)

もし、鳳凰卓で打てるくらいのレベルのAI作ることだけが目的なら方法1と2で頑張れば一番早そうだけど
もっと強くなるためには、3と4の方法が必須という感じ。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

Author:pao
AIに興味を持った社会人天鳳民。
ID:ppaaoo 最高9段。だいたい8段くらい。

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

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