発火候補点の概念を用いて積みを評価する手法について,解説する.
1.発火候補点の概要
発火候補点とは
以下の条件を満たしている箇所を,発火候補点と呼ぶことにします.
- k個以上連結している
- 上右左のいずれかが空白である (積みの到達可能位置である)
k=3の場合の発火候補点↓
そして積みを置いた状態で発火候補点に含まれる玉が消えたときに,連鎖が発生するかどうかを評価します.
kの値はアルゴリズムによって異なりますが,2または3を使います.
評価 (発火候補ごと)
◎◎ が,評価関数を求めようとしている積みだとする.発火候補点は,青×2と緑の計3箇所あるので,それぞれが消えた状態をシミュレートする. (A〜Cとする)
消去前
消去後(A)
消去後(B)
消去後(C)
このそれぞれの結果からさらに,発生連鎖数を求めると,
となります.Aが3連鎖というのは,見ての通り.赤,青,緑の3連鎖です.
評価 (合計)
下表のように,2 ^ (発生連鎖数) の総和を取ります.ただし発生連鎖数=0の場合は,0とします. (2 ^ 0 = 1だが,1にはしない)
発火候補点 | 発火連鎖数 | 2 ^ (発生連鎖数) |
A | 3 | 9 |
B | 0 | 0 |
C | 0 | 0 |
合計 | | 9 |
これにより,
場合にルールとして高い評価になるはずです.
※ なお,ここでいう「多面的」はあまり使われない言葉だと思うが,「リバーシブル」なんかがこれに含まれると思う.
この評価のルールは,アルゴリズムによって異なる.
2.カスタマイズの考察
kの値
kの値 | 特徴 |
2 | 連鎖の可能性を幅広く探るので効率の良い形ができやすい.ただし4連結にならずに発火できない危険性がある. |
3 | 隙が少ない(発火できない状態に陥りにくい)積みができるが,ゴミが出やすい |
現在のRensaInfoでは,2手読みと組み合わせて,NEXTツモの評価時はk=2,NEXT2ツモの評価時はk=3という複合型が主流.
RensaYomi4系で採用しているが,今のところ最強.
評価 (合計)
評価 (合計)として使用する評価関数の考察.
評価関数 | 特徴 |
2 ^ (発生連鎖数) の総和 | 多面性+連鎖数 |
最大連鎖数 | 多面性を無視して,連鎖数を追求する |
現在のところ,最大連鎖数を使用する方法が優勢.
3.その他の話題
巻き込み現象の考慮
これまでの発火候補点の考え方は,発火候補点に含まれる玉が消滅するとどうなるか?をシミュレートするというものだった.
しかし実際にツモによって発火するときには,発火候補点だけでなく,置かれるであろうツモの発火色も消滅するので,厳密には状況に違いがある.
例えば下図において,左側にある3連結の青を発火候補点として考えたとき,
[評価対象のフィールド]
これまでの考え方では,5連鎖が発動すると判断されてしまう.
[誤評価]
しかし実際には,発火したときに中央部の青が巻き込まれて消えるため,3連鎖にしかならないはずである.
[正しい評価]
この正しい評価を実現しないと,巻き込みで仕掛けが壊れてしまうという明らかに間抜けな積み込みが,多発することになる.
これに対応するために,以下のロジックを組み込んだ.(2005.04.29)
- 発火候補のk連結の3近傍(4近傍から真下を除いた位置)に空白があり,その空白の4近傍にk連結と同色がある場合,その同色も巻き込まれて一緒に消えると仮定する
さらに細かいことを言うと,
- k連結の構成点を,lp[n]とする.
- lp[n]の3近傍に空白があり,かつその空白の4近傍にk連結と同色が存在しない場合,lp[n]は巻き込みなしと呼ぶ
- k連結を構成するlp[n]のうち1箇所以上が巻き込みなしであれば,そのk連結では巻き込みを考慮しない(巻き込みを起こさずに消せる余地があるため).そうでない場合は,評価時に発火候補点としてk連結を消去する際に,巻き込みも同時に消去する
このロジックにより,上述した正しい評価を実現することができた.