R値の平均値からわかること
R枠の合計値、R値の平均値について考えてみよう。
当然ながら、式にして表すと||R||/10である。
すると、R枠の中にあるプレイデータに関して、下記の二つ
・プレイレートが全て||R||/10より小さい
・プレイレートが全て||R||/10より大きい
は絶対に成り立たないことが導ける。
要は、R枠の中には、「少なくとも1個は||R||/10以下のプレイデータが存在し、また、少なくとも1個は||R||/10以上のプレイデータが存在する」ということが言える。
言えるのだが、これを上手く応用する術はまだ考えていない。
表示レートが変化しなかった場合の考察
表示レートの変化がなかった時のことを考える。
1つのプレイデータにおいて高々3パターンに過ぎないが、それが複数となると厄介だ。場合の数が3^nと指数的に増加してしまう。
とは言えそれに囚われウンウン唸ってても何も進まないので、とりあえずわかるところだけでも詰めてみる。
考えるパターンは3つ
- 適用条件1を満たしたとき
- 適用条件2を満たしたとき
- 適用条件3を満たしたとき
適用条件1を満たしたとき
適用条件1を満たしたとき、即ち、最新プレイデータのプレイレート下回るものの中で、RC枠最古のプレイデータが削除対象となり、他にも、最新プレイデータがR枠にランクインすることになる。
色々と値を評価してみよう。いつもどおり、始めにいくつか定義をおこう。
プレイ前後の表示レート: d
プレイ前のB枠: B1
プレイ後のB枠: B2
プレイ前のR枠: R1
プレイ後のR枠: R2
外されたプレイデータ: p1
最新プレイデータ: p2
プレイ前の表示レートの関係式: [d]≤(||B1||+||R1||)/40<[d]+0.01
プレイ後の表示レートの関係式: [d]≤(||B2||+||R2||)/40<[d]+0.01
差を取って -0.4<||B2||-||B1||+||R2||-||R1||<0.4
||R2||=||R2||-||p2||+||p2||
||R1||=||R1||-||p1||+||p1|| と置くと、
||R2||-||p2||=||R1||-||p1|| が成り立つので、
-0.4<||B2||-||B1||+||p2||-||p1||<0.4
もし、B2=B1なら、-0.4<||p2||-||p1||<0.4
ここから、||p2||-0.4<||p1||<||p2||+0.4
p1は元々R枠に入っていた訳だから、R枠内にはプレイレートが||p2||-0.4より大きいプレイデータが存在することが保証される訳だ。(そのようなプレイデータがR枠内に何個あるかまではわからないけどね)
適用条件2を満たしたとき
適用条件2を満たしたとき、即ち、最新プレイデータが削除対象となる。
要は何も変わらない。
以上。
…というのはあまりにも味気ない。もう少し頭捻ってみよう。
これはプレイしている最中に結構見受けられる状態だと思う。
例えばだけど、表示レートをモリモリあつしにした状態で、低難易度で鳥を取り続けていたら表示レートは維持され続けると思う。これは、適用条件2を満たしているから、何も変わっていないから。
鳥を取った時にこの挙動を取るのはもはや自明なんだけど、適用条件2にはもう一つ別の条件があって、「R枠最小スコア以上である」というのもあるんだよね。
ということは、鳥を取れなかったけど、R枠最小スコア以上のスコアを取れてたら現状維持となる訳だ。
これを利用すれば、最新プレイデータをpとすると、||r||≥||p||∧score(r)≤score(p) となるようなプレイデータrがR枠に存在することがわかる。
適用条件3を満たしたとき
適用条件3を満たしたとき、即ち、RC枠最古のプレイデータが削除対象となったとき。
捨てゲーした時は大体ここに来る。プレイレートがR枠最小プレイレートよりも低く、鳥も取れず、スコアもR枠最小スコア未満である。
ネガティブなイメージしかない。というよりもはやネガティブ。
止めだ止め!終わり!閉廷!…以上!皆解散!!
…冗談はここまでにしとこう。とはいっても、これ以上は何も考えていないのでここで切り上げよう。
以上、3つのパターンについて考察を進めたが、そもそもの話表示レートが変動しなかったらこれのどれが該当するかが分からないというのが現状。この問題をどうにか上手く解決出来ないか?というのが今後の課題になってくる。
表示レートが増加する際に、もうちょい具体的なケースを仮定した時の話
プレイしたら表示レートが増加した。
この時、もし次のことが成り立っていたとしよう。
- B枠は変動しなかった
- 削除対象がR枠内のプレイデータではない
表示レートが増加したのは、最新プレイデータがR枠にランクインしたからで、それと同時に何かしらのプレイデータがR枠から外されるはず。
削除対象がR枠内のプレイデータでなければ、R枠から外されたプレイデータというのは、R枠の中で最小プレイレートとなるプレイデータになる。
ということは、R枠にはそのプレイレート以上のプレイデータしか入っていない、っていうのが保証されるわけだ。
まだ具体的な応用例が思いついてないし、そもそも「削除対象がR枠内のプレイデータではない」ってどうやって判別するんだよって状態なので、もう少し考えを練る必要がありそう。
表示レートの変動値を元にプレイ履歴から候補を探す
表示レートが変動する時、至極当然のことだが考えうる変化は次の2通りのみ
- 増加する
- 減少する
変動した表示レートを元に、RC枠やR枠にどのような特徴を持つプレイデータが存在するのかを考察する。
その考察を元に候補を絞ることを目的とする。
1.表示レートが増加する時
表示レートが増加した場合、さらにR枠が変動していることが保証されている時、最新プレイデータはRC枠に追加され、R枠にランクインしたことがわかる。
この時の削除対象の候補を挙げるのはちょっと難しいのだけれど、R枠から外されたプレイデータの候補を挙げることは容易。
どんなプレイデータが候補となるのかを考えるため、いくつか定義をおこう。
[d1]:プレイ前の表示レート
[d2]プレイ後の表示レート
Δ[d]:=[d2]-[d1]
B1:プレイ前のB枠
B2:プレイ後のB枠
Δ||B||:=||B2||-||B1||
R1:プレイ前のR枠
R2:プレイ後のR枠
Δ||R||:=||R2||-||R1||
プレイ前の切り捨て前表示レートの関係: [d1]≦(||B1||+||R1||)/40<[d1]+0.01
プレイ後の切り捨て前表示レートの関係: [d2]≦(||B2||+||R2||)/40<[d2]+0.01
プレイ前後の切り捨て前表示レートの関係: -0.4<Δ||B||+Δ||R||-40*Δ[d]<0.4 … ①
最新のプレイデータがR枠入り、その際なにかしらのプレイデータがR枠から外されたわけだから、前者をq2、後者をq1としよう。さらに、
||R1||=||R1||-||q1||+||q1||
||R2||=||R2||-||q2||+||q1||
としよう。何故か?||R1||-||q1||=||R2||-||q2||が成り立つから。
そんな難しい理論は使ってない。プレイ前のR枠(R1)からq1を抜いた9曲と、プレイ後のR枠(R2)からq2を抜いた9曲が共通であることは少し考えればわかる。
これを利用すると、
Δ||R||=||R2||-||R1||
=(||R2||-||q2||+||q2||)-(||R1||-||q1||+||q1||)
=||q2||-||q1||
が導出できる。
これを①に代入すると、-0.4<Δ||B||+||q2||-||q1||-40*Δ[d]<0.4 を得る。
Δ||B||、||q2||、Δ[d]の値は測定値ないしは算出できる値なので、ここから||q1||をより具体的に評価することができる。
導いた不等式をもとに、R枠から外されたq1の候補をプレイ履歴から洗い出すことが出来る。
2.表示レートが減少する時
表示レートが減少した場合、最新プレイデータがRC枠に追加され、RC枠最古のプレイデータが削除対象となる。
この時削除対象となったプレイデータはR枠に含まれていたことがわかる。(それが削除されたことによって表示レートが下がったわけだからね)
さっきの結果を利用しよう。R枠から外されたプレイデータをt1、R枠に新しく入ったプレイデータをt2とおくと、-0.4<Δ||B||+||t2||-||t1||-40*Δ[d]<0.4 が得られる。
t1はRC枠最古のプレイデータであることから、t1は30曲前以前のプレイデータということがわかる。さらに、t2はt1よりも新しいプレイデータであることがわかる。ここから(t1,t2)という組み合わせの候補がいくつか挙げられるはず。
これを書いているときに、ぼんやり「あれ?それってこういことか?」と思ったが、それに関してはまた別の機会に。
舐めるべきプレイ履歴を狭めようぜっていう話
データが多ければ多いほどいいのはわかるけど、多すぎるとどっから取っ掛かりつければいいのかがわからなくなる。
今回はRC枠に含まれるであろうプレイデータのおおよその範囲を見積もるための案を一つ出す。
表示レートの減少を30回観測できたとする。RC枠内のプレイデータは全て、観測した期間内に含まれている
表現の仕方が悪ければ伝わらないだろうが、少し考えればわかることである。
イメージとして、RC枠のデータ構造はキュー構造である。新しいものが入り古いものから削除される。
そしてこのキューの容量は30曲分。30曲分のデータを入れたら満杯になる。
だから、30回表示レートの減少を観測できた場合、最悪RC枠はその観測した30曲分で満杯になっている。1回目に観測したプレイデータより古いプレイデータがRC枠に入る余地はない。
よって、改めてまとめると、表示レートの減少を30回観測できた場合、その時点におけるRC枠は1回目の表示レートの減少を観測した以降のプレイデータから構成されることが言える。
ただこれ、「RC枠のデータ構造はキュー構造である」とした時の話。
何が言いたいかというと、表示レートが減少するときにしか適用できない。(表示レートが増加した場合はこれに限らないから)
色々な制約を組み合わせることで何か掴めるかもしれないけれど、今はそこまで進展してないからそれはまた先の話。
最新のプレイデータが確実にRC枠に入るパターンについて
ゲーム上の挙動でどのような時に、最新のプレイデータが確実にRC枠に入るかを考察する。
勿論、レーティング考察日和の推測が正しいものとして考察する。(以降はこれを前提とする)
結論
今わかっているのは次の3パターン
- 表示レートが減少するとき
- 表示レートが増加し、B枠に変化がない時
- 表示レート、B枠が共に増加し、B枠の変動が、表示レートの変動に40を乗じた値の0.4近傍でないとき
以下、それらの解説
ゲーム上の変化として目に見えるのは次の2パターン
1. 表示レートが減少する
2. 表示レートが増加する
この2パターンについてそれぞれ考察を進める。
1. 表示レートが減少する場合
表示レートが減少する場合、これが起こりうるのは適用条件3を満たした時のみである。
その場合、RC枠最古のプレイデータが削除され、最新のプレイデータがRC枠に追加される。
よって、最新のプレイデータは確実にRC枠に入ることがわかる。
2.表示レートが増加する場合
この場合は場合分けが必要。それは次の2パターン。
a. B枠に変化がない時
b. B枠に変化がある時
それぞれのパターンについて考えてみる。
a. B枠に変化がない時
この場合、表示レートが変動した要因はR枠が変動したことである。
上昇したのは新規プレイデータのプレイレートがR枠最小レートより大きく、R枠にランクインしたから。
R枠に存在する→RC枠に存在することになるので、このパターンにおいて最新のプレイデータは確実にRC枠に入ることがわかる。
b. B枠に変化がある時
この場合、表示レートが変動した要因はB枠だけかもしれないし、R枠も伴っているかもしれない。
一見しただけでは判別できないため、プレイ前後の表示レートやB枠のトータルハイスコアレートを評価して、「こういう時であれば確実にR枠に変動が起きている」という状況を割り出そう。
今後の話を円滑に進めたいので、色々と定義しておく。
- プレイデータpはベクトルである。(何番目にプレイされたかとか、楽曲ID、楽曲名。譜面定数やスコア、プレイレート等の情報を持つ)
- プレイデータから任意の情報を抽出する際は、それに対応する関数を通すことで抽出できる。
e.g.)
・譜面定数(base_rating)を抽出する場合 : base_rating(p)
・スコア(score)を抽出する場合 : score(p) - プレイデータのノルム||p||をプレイレートとして定義する。
- B,R,RCはそれぞれプレイデータの集合である。
- プレイデータの集合のノルム||B||、||R||、||RC||を各要素のノルムの総和とする。
- [x](xは0以上の実数)は小数第3位以下を切り捨てた値を表す。(ガウス記号に近いのでこの記号を用いるが、混合しないよう注意)
ある程度準備できたので先に進もう。方針は下記
- プレイする前、プレイした後それぞれの切り捨てなし表示レートを不等式で評価する
- R枠が固定であると仮定して、上記で求めた不等式を整理する
- R枠が固定である→整理した不等式が成り立つ ならば、対偶を取って 整理した不等式が成り立たない→R枠は固定でない=R枠は変動している ということが導ける
この「整理した不等式」が求めたいものである。(正確にはそれを否定したもの)
これが成り立たない時、すなわちR枠が変動している時、最新のプレイデータは確実にRC枠に入ることがわかる。
ただし、注意してほしいのは、「整理した不等式が成り立つ→R枠が変動していない」ではないということ。(論理学的に少し考えればわかること)
1.プレイする前、プレイした後それぞれの切り捨てなし表示レートを不等式で評価する。
プレイする前のB枠、R枠、表示レートをそれぞれ、B1、R1、[d1]とし、同様にプレイした後に関してもB2、R2、[d2]とする。
[d1]、[d2]はそれぞれd1、d2に対して小数第3位以下を切り捨てた値であるから、[d1]≦d1<[d1]+0.01、[d2]≦d2<[d2]+0.01が成り立つ
切り捨てなし表示レートは、(||B||+||R||)/40で表せるので、d1、d2をそれぞれ
d1=(||B1||+||R1||)/40、d2=(||B2||+||R2||)/40と置き換え、先ほどの不等式に代入すると、
[d1]≦(||B1||+||R1||)/40<[d1]+0.01、[d2]≦(||B2||+||R2||)/40<[d2]+0.01となる。
2.R枠が固定であると仮定して、上記で求めた不等式を整理する
R1=R2であると仮定する。わかりやすくどちらもRと表すことにしよう。
- プレイ前: [d1]≦(||B1||+||R||)/40<[d1]+0.01
- プレイ後: [d2]≦(||B2||+||R||)/40<[d2]+0.01
プレイ後からプレイ前を引くと、
[d2]-[d1]-0.01<(||B2||-||B1||)/40<[d2]-[d1]+0.01
→40([d2]-[d1])-0.4<||B2||-||B1||<40([d2]-[d1])+0.4 (各辺に40を掛ける)
→-0.4<||B2||-||B1||-40([d2]-[d1])<0.4(各辺から40([d2]-[d1])を引く)
結論として -0.4<||B2||-||B1||-40([d2]-[d1])<0.4 という不等式が得られた。
3.R枠が固定である→整理した不等式が成り立つ ならば、対偶を取って 整理した不等式が成り立たない→R枠は固定でない=R枠は変動している ということが導ける
1. 2. より
R1=R2 → -0.4<||B2||-||B1||-40([d2]-[d1])<0.4
これの対偶を取ることにより、
¬(-0.4<||B2||-||B1||-40([d2]-[d1])<0.4) → R1≠R2
¬(否定記号)を用いるとややこしいので、-0.4<||B2||-||B1||-40([d2]-[d1])<0.4 を否定した表現に置き換える。そのために絶対値記号を使ってこれを
|(||B2||-||B1||)-40([d2]-[d1])|<0.4と表し、これを否定して|(||B2||-||B1||)-40([d2]-[d1])|≧0.4が得られる。
これを用いると、
|(||B2||-||B1||)-40([d2]-[d1])|≧0.4 → R1≠R2
と表せる。言葉で表現すると、「B枠の変動が、表示レートの変動に40を乗じた値の0.4近傍でなければプレイ前後のR枠は一致しない」ということである。
ここまでをまとめると、表示レートが変動し、同時にB枠も変動した場合、B枠の変動が表示レートの変動に40を乗じた値の0.4近傍でなければR枠は変動していると言える。
R枠が変動するということは、RC枠も共に変動している。RC枠が変動するのは、新規プレイデータがRC枠に追加され、それ以外のプレイデータがRC枠から削除されたからである。
したがって、この時最新のプレイデータが確実にRC枠に入ると言える。
最後のパターンとして、「表示レートとB枠が共に変動し、B枠の変動が表示レートの変動に40を乗じた値の0.4近傍である時」が残っているわけだが、全然煮詰めてないし文字数も多くなってきたので今はここまでにしよう。
TOP
何このブログ?
ここはRecent枠を解析するための技術的な備忘録を残していくつもりの場所です。
演繹的に導出するのは個人的に大分ケリがついたので、今度は帰納的に解析していこうという算段。
「演繹的に導出するって何よ?」って?
プレイした時に表示レートが変わるのはやってる人ならわかるね?
それって内部でBest枠やらRecent枠やらが変動してるからって言うのも知っている体で話を進めよう。
Best枠の内訳決定の仕方はもう確実。単曲レート値上位30曲が該当する。
一方でRecent枠はどうだろう。「直近30曲のうちの上位10曲」と広く認識されているようだが…まぁ自身のプレイ履歴を舐めてみて本当に成り立っているか確かめてほしい。
成り立つ人もいれば、成り立たない人もいるはずだ。
その理由は単純。Recent枠内訳の決定の仕方が「直近30曲のうちの上位10曲」ではないということだ。
言い換えると、Recent枠内訳決定には、別のルールが存在するということであるが、「ルールに従ってRecent枠の内訳を決定する」ということを個人的に「演繹的に導出する」と表現している。
「・・・・?いやそのルールわかってないんじゃん」
バカにしてもらっちゃ困る。こちとら数百数千に登るプレイログを舐めてきたんだ。自分がバカなのを自覚しているにしても、ある程度の法則はわかってきている。
それをまとめてるのが次のブログ
CHUNITHM レーティング考察日和 TOP - CHUNITHM レーティング考察日和
ただまぁ…ネックなことがあってね。
これがわかったところで、このルールを当てはめる時のRecent枠(とRecent候補枠)がどうなってるかがわからないと全くと言っていいほど役に立たないんだ。
任意のタイミングでルールを当てはめ始め、以降のプレイデータ全てにルールを当てはめたとて、Recent枠が淘汰されるとは限らない。(勿論プレイの仕方によって合致するようになることはある)
だから、初期状態となるRecent枠およびRecent候補枠の内訳を決定するには、どうしても表示レートの変動を頼りに「帰納的に導出する」ことが必要になる。
これがまぁ大変だ。
「これとこれがRecent候補枠に入っている可能性もあるし、そうではなくこれとこれかもしれない…」という状態はざらにある。組み合わせ総数というのはすぐに爆発する。これを手動で解こうなんてそれこそ脳なしの考え。
だからこそ解析用のソフトを実装しようという考えに至った訳だ。
とは言っても「さぁ実装しよう!」なんて気楽に出来るものではなく、やっぱり頭を抱えることが多い。
そうやって頭を抱え込んだ末、いくつかの案が生まれたりする。「あれってこういうことだから、すなわちこれが言えるんじゃない?」「こういう制約があるのだから、候補はこの範囲のものに絞られるんじゃないか?」とかってね。
だが鳥頭、思いついては実行に移さず放棄する。そして暫く経ってまた同じことを「思いつく」。
さすがに無駄が過ぎるなということで、ブログに吐き出すようにしようと思った次第。そして今に至る。
よってここは掃き溜めのようなところ。
言葉遣いも気にしないし場合によっては人が読むということを気にもしない。(本当に自分に向けたメモのようなもの)
でもまぁ手元に抱え込むよりかは、公開しといたほうが興味持ってくれた人が何か助言してくれるやもしれない。
まぁなんだかんだ書き殴ったけど、そんなかたくならないで、カジュアルに眺めてくれると有難い。
あ、最後に
Best枠やらRecent枠やらRecent候補枠やら書くの面倒くさいから、
それぞれB枠、R枠、RC枠と書くよ。
以上