« 2011年8月 | トップページ | 2011年10月 »

2011/09/29

副露に対する押し引き

相手が副落で仕掛けているときの押し引き判断処理部分を作成していますが、こいつがなかなか面倒です。

例えば、他家が鳴いて仕掛けているときに、自分がある牌を捨てた時の危険度を期待値として計算するならば、式としては「その牌がロンになる確率×その牌を捨ててロンになったときの平均点数」となりますが、「その牌を捨ててロンになったときの平均点数」を算出するだけでもかなり大変です。

天鳳や東風荘などで、牌譜を集めて、そこから平均点数を集計すればいいじゃないかと思えるのですが、そんなに単純な方法では余り精度がよくならないようです。

天鳳の鳳凰卓や東風荘のデータを提供してくれるような上級者は、振ったとしても和了点数が低くなるように考慮して打牌することが多く、牌譜から副落して和了したときの点数を単純に集計して計算すると、危険度を本来の値よりもかなり低い値に算出してしまいます。

なので、和了できなかったケースや低目を和了したケースなど、結果に現れていない和了点まで考慮にいれて集計をしないといけないのですが、100万以上ある牌譜で、実際に結果に現れていないケースまで含めてすべての場合の点数計算をするのはむちゃくちゃ処理時間がかかります。

また、2副落のとき、客風ポン->役牌ポンと鳴いたときと役牌ポン->客牌ポンと鳴いたときとでは平均和了点数がかなり違いますので、分けて考える必要があります。ドラの種類、残りドラの枚数、場に見えてない役牌や、成立しうる可能性のある役などによる条件分けも考慮に入れた方がよいでしょう。

そして、それらの複数の要因が多すぎると100万のデータがあっても全然足りません。ならばと評価関数を作るにしても、麻雀の場合、各要因に重み付けした線形的な関数ではよい評価関数にならないのが難しいところです。


どこかで妥協せざるを得ないと思うのですが悩みどころです。

| | コメント (0) | トラックバック (0)

2011/09/21

やっぱもうちょっと頑張る

先日データ量が多すぎてメモリを食いすぎるためボツにすると書いた仕掛けている相手の点数読みの件、もう少し工夫すれば何とかなりそうな感じがしてきました。というか、データの99%までがレアケースでほとんど意味をなさないと判りました。そういったデータは前もって記憶しておくのではなくて、その場で生成するようにロジックを変えて、データ量を100分の1以下に抑えるようにしてみることにします。

| | コメント (0) | トラックバック (0)

2011/09/19

ボツ

この週末、仕掛けている相手の点数の統計データを条件別に分けて集計し、思考アルゴリズムに組み込もうとしていろいろ作業を進めてきた。けれど、パターン数が膨大になりすぎて、メモリを食い過ぎてしまうことが判明。32bitOSで利用できる最大までメモリを積んでるマシンなら問題なく動作するけれど、さすがにそれはやりすぎだろう。残念ながらボツにするしかなさそう。仕方ないのでもう少し簡易的な分類にすることにする。

| | コメント (0) | トラックバック (0)

2011/09/17

天鳳の牌譜の面子表記

天鳳の牌譜はxml風味のフォーマットのファイルをgzipで圧縮したものとなっていて、その気になって解析すれば解析できる代物になっています。

ただ、副露面子の構成の部分は16bitの領域に無理やり面子情報を詰め込むために、ちょっと可読性の悪いバイナリの形式になっています。
解析するためにはhttp://p.tenhou.net/img/tehai.jsのJavaScriptを読めばよいのですが、私自身が理解するためにドキュメントを作ってたので公開しておきます。

ここからダウンロードできます。(PDF)

ドキュメント読むよりプログラム読んだ方が速いような気もしますが、誰かの何かの役に立てれば幸いです。

| | コメント (2) | トラックバック (0)

2011/09/14

windows 8 64bitで動かしてみた

Windows 8のDeveloper Previewが公開されたので、Virtual Boxにインストールしてまったり麻雀Ver0.9が動くか試してみた。
全機能動作させてみたわけではないけれど、どうやら問題なく動く模様。
Photo


| | コメント (6) | トラックバック (0)

« 2011年8月 | トップページ | 2011年10月 »