*All archives* |  *Admin*

<<09  2017/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開発その20・こまごまとした修正2
AI製作の続きです。
引き続き、1試合通しで計算させたログ(1打1打ごとの評価値)を見ながら、こまごまとした修正をかけていきます。

・バグ修正
まだまだ激重いバグが何個か見つかりました。
大半のバグの原因が、
自分のプレイヤー番号(0~3のいずれか)が従前の四麻計算機のコードだと0番固定になっていたのが、
今回は可変になった影響です。
今は変数名「turn」でプレイヤー番号を管理しているのですが、従前のコード内で直接「0」と書かれているところを見逃して修正できていなかったことでバグが発生しています。
コード本文で「0」という一文字だけで検索してもどえらい個数がヒットして修正の役には立たないのがたいへんです。(置換なんてもってのほか)

・2シャンテンと手替わり
従前だと2シャンテンは計算時間の都合で、手替わり0回計算にしていたのですが、
メンツ候補が足りてるけど愚形が残ってる時に、真ん中の浮き牌にくっつけて両面変化狙いで残すという超基本手筋がAIでは考慮できなくなってる(後の危険度で字牌を残したがる)ので、やっぱり手替わり1回を見たいところです。

ただ、そうすると正確性の代わりに計算速度が犠牲になります。考えるべき変化の数が手変わり0回や一向聴以下と比べて、かなり膨れ上がるので計算速度の低下は避けられません。
まず手替わり0回で再帰計算をした後、そのうち上位2つの打牌候補に限って手替わり1回再帰計算をした後シミュレーションにかける、という方法を取ってみても1打につき10~20秒くらい余計にかかってしまいます。実戦的にこれだと結構厳しいです。

AIとして実際にfloodgate for mahjongで打たせるのが目標ではしんどいですが、牌譜検討ソフトを目標にするならこれでもなんとかぎりぎり持ちそうです。
さいわい、第一段階(手変わり0回再帰計算)で打牌候補を二つに絞って仮の打牌候補と評価値は出せるので、計算速度が必要な場面では手替わり0回の計算のみ、正確に検討したいときには手替わり1回で正確に計算する、という使い分けも可能です。

ただ、この手法でもまだ不十分な点があります。
それは、第一段階の計算で選外となってしまった打牌はその後の計算はされないということです。
例えば、ヘッドレス状態で2m7s西の浮き牌選択するとき、手変わり0回計算だと本当は最善であるはずの打西が第一段階で選外になってしまう(横伸びが考慮されず、直接シャンテンの進む縦重なりしか考えていないため)ということが起こります。
これを防ぐには打西についても手替わり1回で計算させたいのですが、どういうケースだと3番手の打牌候補も計算させるか、というのをコンピュータに指示するかがよくわからないので現状はできてないです(一律で2番手の打牌候補までしか計算しない)。


ここまでが今日まででできたことです。

ここからは明日以降に実装する予定のもの。

・3シャンテンの計算
3シャンテンだと手替わり0回ですら計算時間がかかるので、単純な有効牌の枚数だけしかみてません。
さすがにこれでは不正確に過ぎるので、2シャンテン計算と同じく、上位2つの打牌候補に絞って手替わり0回再帰計算+シミュレーションを入れようかと考え中です。

・3シャンテン以上の浮き牌評価
七対子手のときに孤立字牌を優遇(例えば枚数+2枚評価とか)
面子手のときに隣に雀頭やメンツにくっついてる浮き牌を優遇(例えば枚数+2枚評価とか)
打牌候補がドラになるときの評価(枚数―2枚補正とか)
など。
スポンサーサイト

コメントの投稿

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

コメント

プロフィール

nisi5028

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

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

この人とブロともになる

QRコード
QRコード