現状の問題点と今後の作業
大きくなっていたメソッドの整理、変数名の変更、コメントの整理などの細かいソースの修正を実施。
また、とりあえず今作っているプログラムを動かして変な切り方をするところを探してみた。
ポンチーロン無しの一人麻雀で以下の2つの手牌から何を切るか?
上は、1ピンか3ピン。下は3ピンが正解だと思う。
しかし現状のアルゴリズムだと上の手牌で3萬か4萬を切ってしまうし、下の手牌で3萬を切ってしまう。
これは目先の受け入れ枚数しか評価していないから起きてしまう。
上は、3,4萬を切ると目先の有効牌は5種16枚で、1,3ピンを切ったときの5種14枚を上回っていると考えてしまっている。これは、比較的単純に解決出るとは思う。有効牌を引いたときの受け入れ枚数を再帰呼びだしを使って,掛け算してやれば評価値がソレっぽい数字になる。また、さらにもっと厳密に計算する方法があらのHPで紹介されている。まあ、実際の4人麻雀だと相手が先に上がることがあるので「得点×あがる確率」の期待値計算ではあがる確率の方にやや重みをおいたほうがいいと思うので、単純に掛け算をするだけのプログラムでもある程度通用するかもしれない。
下の方は有効牌数を向聴数を向上させるものしか考えていないために起きてしまう。これは両面ターツへ変化する牌の枚数を評価式に何らかの形で反映させるようにしなければいけない。そのためには、両面ターツへの変化の有効枚数を数え上げるメソッドを作る必要がある。そしてその枚数をどのように評価点に反映させるかを考えなければいけない。
今後は、再帰的に呼び出して期待値計算するアルゴリズムの作成。そしてリャン面ターツへの変化の枚数を数え上げるアルゴリズムの作成をしていきたい。
| 固定リンク
この記事へのコメントは終了しました。
コメント
最初に謝っておきますが、私マージャン弱いです。
↑の例ですが、下のほうは私なら三万を切っちゃいますが…牌効率的には間違いなんでしょうか?
さらに素朴な疑問・リャンメン二回のイーシャンテンとカンチャン一回の聴牌、どっちがあがりに近いんでしょう?
投稿: おぞん | 2004/11/29 02:12
ここでは面前で手を仕上げると言う前提です。
そのときは、3萬は残した方が期待値は高いですね。
向聴数を上げる有効枚数を4枚下げてることと、リャンメンターツが出来る受け入れ枚数が14枚下げることのトレードオフですが、このケースはリャンメンターツの受け入れを残した方が期待値はよいようです。ただかなり微妙ですね。
私も、下の例はあまり好い例じゃなかったなーと反省してます。言いたかったことは向聴数が上がらない手変わりを将来的に評価関数へ考慮したいってことです。
これがなかなか厄介でほとんどの麻雀アルゴリズムで出来ていないんで挑戦してみたいんです。かなり難しいんで後回しにするかもしれませんけれどね。
投稿: kmo2 | 2004/11/29 17:14