FC2ブログ

*All archives* |  *Admin*

<<09  2018/10  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31  11>>
麻雀AI開発その67・染め手率と機械学習
今回からは染め手について考えてみようと思います。

従前の局収支シミュレーションだと、ある一定の条件(6巡以内の捨て牌に染め色がない、など7条件)に当てはまる仕掛けを入れている他家を「染め模様者」として、別のパラメータを使っていました。

ただ、この方式だと「染め模様」の定義に当てはまるかそうじゃないかの、0か1かしかないのがネックです。
捨て牌が1枚だけ違って「染め模様」の定義に入るか、入らないかで大きく挙動が異なるのは、実際の牌を使ったシミュレーション(逆に言うと従前の局収支シミュレーションでは、全部確率処理で、具体的に牌を使ってるわけではない。)ではちょっとよろしくないです。

できれば、この捨て牌・晒し牌から見て、実際に染め手である確率○%である、というのを(短時間で)計算できる評価関数を作ることができればベストです。

例えば初期状態(シミュレーション開始時点)で染め手である確率40%という予測値が分かれば、10000回シミュレーションのうち40%を染め手に向かっているものとして、そういう挙動(例えば非染め色を多く切る傾向にある、とか非染め色の仕掛けは入れないとか、上がった時の打点が染め手で高いとか)をさせ、残りの60%は染め色でない通常の仕掛けとして、それ相応の挙動をさせる、というような使い分けをさせることが可能になると思われます。

というわけで、課題は2つあります。
・染め手率を求める評価関数を作る。
・染め手に向かった者の挙動の元になる各種パラメータを取って、実際にシミュレーションに組み込む。

とりあえずは1個目の染め手率から考えてみることにします。
まず一つ問題になるのは、どのようなときに「実際に染め手に向かった」と判断するかです。
これは簡単そうに見えて実はそんなに単純な問題ではないです。

「上がった時に実際に一色手の和了である」という定義では、上がりまでたどりつかなかったケースがすべて非染め手と判断されてしまいます。
次に「局終了時に手牌が一色になっている」という定義も考えられますが、これも例えば途中でリーチが入って降りに回った場合が染め手でないと判断されてしまいます。
「手牌中の非染め色の枚数が単調非増加(つまりイコールか減少)」でも、途中で降りた場合が該当しないのでダメ。

今のところ自分の中で有力と考えているのは、「局終了までに非染め色の枚数が1枚以下である状態が1巡でもあった」という定義です。
1枚以下ならば非染め色で塔子や対子を構成できない(もちろん面子やポン・チー・カンも排除できる)ので、確実に染め手に向かっているだろうと判断できるだろうと思います。
これでも、非染め色を落としきる前に早いリーチがかかって染め手を諦めた場合が集計から漏れますが、まぁそういうケースは大して重要でないと思うのでいいことにしましょう。

これで、学習データで実際に一色手に向かったかそうでないかの判別がつけられる(と思う)ので、
今度は入力値としてどのようなものを入力すればいいか、という点を考えてみようかと思います。

○基本情報
・巡目
・副露数
・染め色はどの色か
・ドラ色か
・リーチ者有無(あるいは先制リーチ巡目)

○副露関連
・役牌のポン・カンがあるか
・タンヤオの可能性があるか

○捨て牌関連
・k巡目の牌区分(役牌・オタ風・染め色19・28・3~7・非染め色19・28・3~7)

特に処理が大変そうなのが、捨て牌関連ですかね。
9巡目あたりまでに絞ったとしても、9×8で72次元用意しないといけないので、ぷにゃー、となりそう。
OutofMemoryの影もちらついてきそうです。

まずはこれで学習データを準備するところから始めてみましょうか。
スポンサーサイト

コメントの投稿

Secret
(非公開コメント受付中)

コメント

プロフィール

nisi5028

Author:nisi5028
FC2ブログへようこそ!

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

この人とブロともになる

QRコード
QRコード