みなさん、こんにちは。
ぷよぷよの本質について、知りたくありませんか?
、、、、、、
それでは、本質について、お話しします。
ぷよぷよ通の対戦において、有利不利の本質はぷよ量である、とよく言われます。とくにぷよぷよeスポーツにおいては、「時間有利」などと言う言い回しもよく聞きます。ということで、ぷよ量と時間の関係式を導出してみました。
この関係が分かれば、例えば「相手の本線中にセカンドを何連鎖組めるのか?」や「相手を先打ちさせて、+1か+2連鎖まで伸ばして詰ませるには、ぷよ量がいくらあればよいか?」などを測ることができるでしょう。(応用例として載せたかったのですが、長いのでまた今度書きたいです)
1. ぷよ量と時間の関係式
時間の単位はフレーム(1/60秒)、ぷよ量 = フィールドにあるぷよの個数 (≦78) とします。こちらの記事(ラッティー さん
https://puyo-camp.jp/posts/71019)によると、高さ h の土台 (0 ≦ h ≦ 11) の上にぷよを置くのにかかる時間は、平均 Δt = 53 - 2h です。
これを用いると、ぷよ量 R_0 から R になるまでツモるのにかかる時間 t がわかります。とりあえず式を書いておくと、
となります(式1とします)。R, R_0についてそれぞれ解くと、
となります。縦軸 R、横軸 t でグラフを描くと、ちょっと加速していることがわかります。
2. 導出、検証・誤差
(導出)
6列使って平らに組んでいることを仮定します。離散的に (n手引くと考えて)計算すると、多分平均して誤差ゼロになりますが、きれいな式が出ません。少し誤差が出るかなーと思って連続化します。一手引くのに Δt = 53 - 2h かかり、R は2増えるので、ΔR /Δt = 2 /(53 - 2h) です。あとは
として微分方程式を解きます。初期条件は (t,R) = (0,R_0) です。
(検証・誤差)
①離散的に計算したとき(たぶん平均誤差ゼロ)、②実際に置いたとき と比較してみました。
結論から言うと、①は3手当たり3フレーム早く、②は最大 (0手目から37手目までの累計)40フレームくらい早く評価していました。ふたつがだいたい整合していて一安心です。(式1)自体の精度もそんなに悪くないと思います。最大で1手強多く引けることになるくらいです。
(書き終わってから(式1)の1次の係数をちょっといじれば合うんじゃないかと思ったけど、また今度やります。)
① R_0 = 6*h_0 ( h_0: 初めの高さ)として、3n手引くときを考えます。R = R_0 + 6n であり、3手引いて1段高さが上がると考えると、普通に和の公式をつかって t = 54*3n - n*R_0 - 3*n^2 になります。一方、(式1) = 53*3n - n*R_0 - 3*n^2 であり、(式1)のほうが 3n フレームだけ早い評価になっていることがわかります。
② 下の動画で、R = 4n+ 6 (1≦n≦18) となった時間を記録しました。
R = 0 と合わせて計19地点の組み合わせで誤差を計算した結果、誤差は最大で40.6フレームで、引く手数が増えるほど大きくなる傾向にありました。目測の誤差もありそうでした(リプレイのコマ送り機能とかなかったっけ?)
説明するのが難しいので数値の表をとりあえず置いておきます。2,3,4枚目は実測値、理論値、誤差の順番です。
3.補正
これまでの結果は、非常に強い仮定の上で、連鎖を組むことを考えずに置いています。より速くなる要素や、遅くなる要素を考えてみましょう。
① 速くなる要素:高く(狭く)組む、半回転、キャンセル
② 遅くなる要素:ちぎり、回し、迷い、整地
① 速くなる要素に関しては、半回転(2フレ)、キャンセル(1~4フレ)は小さくて難しいので無視します。
狭く組む時、土台の幅をw (1≦w≦6) とすると、2.(導出)におけるh = R/6 を R/w に置き換えれば解決します。この状態で解くと、
になります。
② 遅くなる要素に関しては、決定論的なモデルはないでしょう。実力依存も大きすぎるのでちゃんと評価したくありません。時間 t を t -(タイムロス)で置き換えて、タイムロスを考えてみます。
例えば、1秒くらいのロスをする例は、3回ちぎる・ゆっくりめに回す・手を止めて凝視(もっとかかる?)・整地単発(これは2秒分) などでしょうか。このときは(タイムロス)= 60 くらいです。
もう少し一般的な式も出します。タイムロスが何に比例するかを考えて、後から比例定数を決めます。(大雑把にやります)
・たくさんツモるほどロスは大きい(数手に一回ちぎる場合を想定)
→ R - R_0 に比例
・高いところほど難しい(回し、ダブネクの必要性など)
→ 平均の高さに比例 → R + R_0 に比例
として、タイムロスは
と表わされるとします(αは正の定数)。
αの目安を決めます。対象にしたいのは16連鎖くらいまでで、なるべく速いものがいいので、100万TAの執筆時の世界記録を参考にします(ちゃるめらー さん
https://www.youtube.com/watch?v=3RCu5A8GZp0)。100万TAのランカー達は、12.5万点(16連鎖相当)×8で完走する超人たちなのでここを限界として合わせてみたいと思います。動画を見ると、ほんとうにちぎりと最速回し以外は理論値みたいに見えます。
6分33秒で16連鎖くらいを8回撃っている状況です。平均すると、1回 393*60/8フレームで、70個ツモって15.375*82フレームかけて消していることになります(平均15.375連鎖、*82はラッティーさんの記事参照)。
ツモるのにかかったのが 1687フレームで、(式1)によると R: 0→70 でかかる時間は 1447フレームです。t_loss = 240 であり、それを(70-0)^2で割れば、
となります。
(式1)の第二項と見比べてみると、係数の絶対値は大体半分くらいです。(式1)の第二項を、「高さによる加速分」と解釈してみると、その半分くらいが高さによる難しさによって打ち消される、と考えることができます。
4.まとめ
以上で(式1)について考えていたことはおわりです。いかがでしたか?
検算、アイデア(特にt_loss)待ってます!
応用編も書きたいと心で思っています!!!!!
最後に全部入ってる式です!!!!!!!!ありがとうございました!!
間違いの訂正です。
(検証・誤差)の②で、誤差の最大は40.7ではなく44.4でした。
3.補正②で、(70-0)^2 となっているところは、70^2-0^2 と書くのが適切です。
あと、(式1)は修正されました。これの一つ次の記事の(式1')のほうが誤差が少ないです。