押し引きアルゴリズムの改善(2) で1シャンテンまでの押し引きを改善したので、今回はテンパイ時の押し引きを改善する。
の3つが改善候補。
現在は牌姿にかかわらずポンテン・チーテンを取っているが、評価値により判断を変えるよう修正する。具体的には1シャンテン時に超好形とした1200点以上になるのであれば(以降は全押しにできるので)シャンテン数に関わらず副露(大明槓含む)するようにした。これにより愚形テンパイとなるケースが減ることになる。
let max = this.eval_shoupai(this._shoupai, paishu, '');
// 副露前の手牌の評価値を基準とする
/* …… */
for (let m of mianzi) { // 全ての可能な副露について以下を繰り返す
let shoupai = this._shoupai.clone().fulou(m); // 副露してみる
/* …… */
let ev = this.eval_shoupai(shoupai, paishu);
// 副露後の評価値を計算する
/* …… */
if (bei_lizhi && ev < 1200) continue;
// リーチを受けた後は
// 評価値1200未満は候補としない
if (ev > max) { // 評価値が基準値以上であれば
max = ev; // 基準値を更新し、
fulou = m; // その副露を候補とする
}
}
return fulou; // 評価値最大の副露をする
デュプリケート方式 で1000戦の対局を行った結果は以下の通り(改善(3-1))。
結果 | 改善前 | 改善(1) | 改善(2) | 改善(3-1) | ||||
---|---|---|---|---|---|---|---|---|
割合 | 局収支 | 割合 | 局収支 | 割合 | 局収支 | 割合 | 局収支 | |
和了 | 10.2% | +6441 | 11.6% | +6468 | 11.3% | +6721 | 10.7% | +6939 |
放銃 | 10.5% | -6209 | 13.0% | -6200 | 12.0% | -6279 | 11.5% | -6243 |
被ツモ | 32.6% | -2690 | 31.5% | -2703 | 31.9% | -2706 | 32.2% | -2708 |
横移動 | 26.3% | -57 | 25.6% | -68 | 26.0% | -63 | 26.3% | -64 |
流局 | 20.4% | -827 | 18.2% | -615 | 18.9% | -667 | 19.3% | -681 |
平均 | -1057 | -1036 | -999 | -991 |
愚形テンパイとなる副露をしなくなったためか、若干局収支が向上した。
現在はテンパイ後は評価値、牌の危険度に関わりなくすべて押しとなっているが、それではあまりに押しすぎと思うので、1シャンテン時の基準に合わせ評価値400未満の場合*1はベタオリするようにしてみた(改善(3-2))。
結果 | 改善前 | 改善(1) | 改善(2) | 改善(3-1) | 改善(3-2) | |||||
---|---|---|---|---|---|---|---|---|---|---|
割合 | 局収支 | 割合 | 局収支 | 割合 | 局収支 | 割合 | 局収支 | 割合 | 局収支 | |
和了 | 10.2% | +6441 | 11.6% | +6468 | 11.3% | +6721 | 10.7% | +6939 | 10.4% | +7044 |
放銃 | 10.5% | -6209 | 13.0% | -6200 | 12.0% | -6279 | 11.5% | -6243 | 11.2% | -6214 |
被ツモ | 32.6% | -2690 | 31.5% | -2703 | 31.9% | -2706 | 32.2% | -2708 | 32.4% | -2700 |
横移動 | 26.3% | -57 | 25.6% | -68 | 26.0% | -63 | 26.3% | -64 | 26.5% | -61 |
流局 | 20.4% | -827 | 18.2% | -615 | 18.9% | -667 | 19.3% | -681 | 19.5% | -752 |
平均 | -1057 | -1036 | -999 | -991 | -1001 |
結果は上の通り。局収支は -1001 で改善にならなかった。さらに閾値を評価値 0 (つまり役なしテンパイ)にして試してみたが、局収支は -997 で改善されなかった。どうやらテンパイしたら役なしでもベタオリはしない方がよいようである。
テンパイ後にベタオリする必要はないとしても無スジを押してはいけない閾値はあるだろうということで、1シャンテン時の基準を参考に評価値1200未満*2の場合は無スジは押さない(スジは押す)ように修正してみた。無スジをツモったときは押さないのでこの場合リーチはかけない(改善(3-3))。
結果 | 改善前 | 改善(1) | 改善(2) | 改善(3-1) | 改善(3-3) | |||||
---|---|---|---|---|---|---|---|---|---|---|
割合 | 局収支 | 割合 | 局収支 | 割合 | 局収支 | 割合 | 局収支 | 割合 | 局収支 | |
和了 | 10.2% | +6441 | 11.6% | +6468 | 11.3% | +6721 | 10.7% | +6939 | 9.1% | +7540 |
放銃 | 10.5% | -6209 | 13.0% | -6200 | 12.0% | -6279 | 11.5% | -6243 | 10.6% | -6234 |
被ツモ | 32.6% | -2690 | 31.5% | -2703 | 31.9% | -2706 | 32.2% | -2708 | 32.9% | -2692 |
横移動 | 26.3% | -57 | 25.6% | -68 | 26.0% | -63 | 26.3% | -64 | 27.0% | -49 |
流局 | 20.4% | -827 | 18.2% | -615 | 18.9% | -667 | 19.3% | -681 | 20.4% | -836 |
平均 | -1057 | -1036 | -999 | -991 | -1044 |
結果は上記の通りで局収支が -1044 と大幅に悪化してしまった。さらに閾値を 800、400、0 と変更して順に試してみたが、局収支は -1019、-996、-997 と改善には至らなかった。結論として改善(3-1)のアルゴリズムを改善(3)として採用することにした。
先制リーチを受けた局面以外も含めた全体の成績は以下の通り。
改善前 | 改善(1) | 改善(2) | 改善(3) | 改善前 | 改善(1) | 改善(2) | 改善(3) | ||
---|---|---|---|---|---|---|---|---|---|
対戦数 | 1,000 | 1,000 | 1,000 | 1,000 | 総局数 | 10,505 | 10,465 | 10,464 | 10,480 |
1位率 | .241 | .249 | .255 | .258 | 和了率 | .209 | .218 | .215 | .213 |
2位率 | .251 | .244 | .248 | .247 | 放銃率 | .128 | .141 | .137 | .134 |
3位率 | .254 | .255 | .248 | .243 | 立直率 | .221 | .237 | .232 | .233 |
4位率 | .254 | .252 | .249 | .252 | 副露率 | .346 | .349 | .349 | .345 |
平均順位 | 2.52 | 2.51 | 2.49 | 2.49 | 平均打点 | 5,492 | 5,499 | 5,580 | 5,648 |
このアルゴリズムを次回リリースの ver.1.5.0 に採用する。