トーラム野良ペット解体新書
野良ペット規則の結果
マイルームに毎時間、1時間おきに野良のペットがやってきます。それらは明らかにルールがありながら、意外と複雑なルールとなっております。
それらのルールが 95% 99.9%近く解明できたので、ここにその規則性を記載しておきます。
(2024/3/10 定数チューニングにより、定数の精度が上がったことから、95%を99.9%に変更しました。)
一般論としての規則
まずは結果から。
baseTime: 基準となる日時
a: 定数(小数)
b: 定数(小数)
とした場合に、
野良ペット番号 = 切り捨て(mod((a + (now - baseTime).Hour * b, 野良種類数))
解説します。野良ペット番号は野良ペットの種類を表す番号です。
現在時刻nowにおける野良ペット番号は3つの定数 baseTime, a, bにより一意に決定されます。
まず、現在時刻nowと基準となる日時baseTimeの差を取り、その時間をとります。これが(now - baseTime).Hourと表しています。
次にその差分時間にbを乗じ、aを加えます。差分時間をnと表せば、単純にa+bnと表せます。
次にa+bnを野良種類数で割った余りを取ります。これをmod(a+bn, 野良種類数)と表しています。
あとはその余りは小数なので、切り捨てれば野良ペット番号を表します。
具体例については、次節以降の具体的なペット数の場合に挙げることにします。
イベントペットがいない場合(野良13種類)
【野良13種類の場合の定数】
baseTime : 2017/3/16 18:00:00
a: 10
b: 3.495296186
イベントで野良ペットが増えていない場合は、野良ペットは合計で13種類です。その場合の定数とペット番号が上記になります。
この定数は試行錯誤を重ねてそれっぽい値を見つけたものになりますので、誤差を含みます。baseTimeの2022/2/2も試行錯誤の際の基準にした値であるだけであるため、特に意味のある数字ではありません。(2024/3/10 定数チューニングを実施したため、誤差は非常に小さくなっていると思われます。)
具体的に計算してみましょう。
2022/9/17 00:00:00の野良ペットが何になるかを考えます。
まず、baseTimeとの差異は48246時間(24×2010日 + 6時間)が経過しています。
a+bnを計算すると、a, bは定数、n=48246なので、
10 + 3.495296186 * 48246= 168,644.05978
となります。
これを野良種類数である13で割れば余りは8.05978。
切り捨てして8。
該当する野良ペット番号を見ると、8はゴブリン(剣)です。
よって、2022/9/17 00:00:00に来る野良ペットはゴブリン(剣)だと分かります。
イベントで1体野良が追加された場合(野良14種類)
【野良14種類の場合の定数】
baseTime : 2021/9/30 17:00:00
a: 10
b: 3.76416512338462
ゲルミが来た時の野良ペットの定数とペット番号ですね。
a, b, baseTimeは試行錯誤を重ねた値なのですが、aがキリよく整数になっています。
(2024/3/10 定数チューニングを実施。)
また、野良ペット番号は一番下にゲルミを加えただけで、それ以降の順番は変わっていません。
具体的な計算は13種類の場合と同じなので割愛します。
イベントで2体野良が追加された場合(野良15種類)
【野良15種類の場合の定数】
baseTime : 2019/4/25 17:00:00
a: 1
b: 4.03303406076923
こちらはリゼロコラボで、レムとラムが来た時の定数と野良ペット番号ですね。もちろんa, b, baseTimeは試行錯誤の末の値なので誤差を含みます。
(2024/3/10 定数チューニングを実施したため、誤差は非常に小さくなっていると思われます。)
野良14種類と同じように、baseTimeをリゼロコラボの開始時刻に合わせたら、もしかしたらaがもっと綺麗に(整数に)なるかもしれませんね。
(2024/3/10 定数チューニング実施済)
野良ペット番号も13種類の場合をベースに、一番下にレムとラムを追加したものとなります。14種類の場合と同じですね。
こちらも具体的な計算は割愛します。
ここまでの考察
実はここまでで一つの規則性が見えてきます。bの値に注目しましょう。
【野良種類数と定数bとの関係】
13種類 : 3.495296186
14種類 : 3.76416512338462
15種類 : 4.03303406076923
整理してみればわかりやすいでしょう。
そう、bの値と野良種類数とは等差数列的な関係にあるのです。
その関係性を吟味すればさらにa, bの精度を上げられそうですね。
(2024/3/10 定数チューニング実施済)
規則性への気づきの経緯
2022/9/17追記。ここからなぜ規則性に気付いたのかを記載していく駄文なので、読み飛ばし推奨です。
4, 11, 15, 26の呪縛
レムとラムが来る15種類の野良の場合は規則性は分かりやすかったです。
連続してペットが表れて、ときどき4つ周期が飛ばされて、を繰り返すだけでしたから。
しかし、その次のゲルミが難問。はっきり言って匙を投げました。
最後には、一緒にゲルミの出現規則を考察してくれていた方にお任せしました。
その、ゲルミに苦戦しているときに聞いたのが4, 11, 15, 26の呪縛。
すなわち、
これはラフィを長年追っている方も仰られていた、ある意味の絶対のルール。ゲルミにも当てはまり、レムラムにも当てはまっていました。
この規則性をもとにすることで、ゲルミの規則性はある程度サンプルがあれば、あとはそれを周回するだけなので、解明しやすいものとなりました。
それでもゲルミはなかなか大変でしたが。。。
イベントがない時の野良13種類の場合もゲルミほど大変ではありませんでしたが、この規則性といくつかのサンプルから予想ができました。
キホンのキともいうべきルールでした。
消えたラフィ ラフィ暗黒の時代突入
イベントが終わり、野良ペットの種類も13種類となりました。野良ラフィをずっと追っている方に情報提供をしていただき、いくつかのサンプルから13種類の場合の野良ペットスケジュールを作成することに成功しました。
ペットスケジュールをリリースしたのが、2021/12頃。
しかし、絶望はすぐそこまで来ていました。
2022/4/2 04:00:00。
ラフィをずっと追っている方から、「ラフィが来るはずだったのにラフィが消えた」と連絡を受けました。ゴブリン(剣)が来ていたらしいです。
そのラフィは上でお話しした「4, 11, 15, 26の呪縛」のうち、4時間後にくるはずのラフィでした。
その後、4時間後のラフィは顔を出さなくなりました。
4時間後のラフィがなくなれば、15時間後のラフィになってしまうため、マイルームにラフィが来る頻度が減ってしまうことを意味します。
ラフィ出現頻度の減少、、、ラフィ暗黒の時代突入です。
さて、調べると私が作った野良ペットスケジュールは、ゴブリン(剣)が4時間頻度が存在しませんでした。
ゴブリン(剣)の4時間が復活し、ラフィ4時間が消滅したのでした。
ただ、しばらくたってから朗報が来ました。
2022/7/30 19:00:00。
4時間のラフィが復活したとラフィを追っている方から連絡がありました。
ラフィ復活です。ギルドチャットは歓喜に包まれていました。
しかし、ここでひとつのアイデアが浮かびます。
4時間のラフィはなぜ消えたのか。そしてなぜ復活したのか?
これは小数切り捨ての原理なのではないだろうか?
すなわち、これまでは0.99999などとなっており、切り捨てしても0だったものが、時間経過で数値が増え、1.00000などとなり、切り捨てしたら1になったのではないか、というアイデア。
つまり、野良ペットスケジュールは、小数と切り捨てにより、規則性が決まっているのではないか、というアイデア。
2つの小数定数a, bを用いて、a+bnの整数部分で野良ペットが決まっているのではないか、というアイデア。
それでいけば、4時間のラフィが消え、代わりにゴブリン(剣)が来ていたということは、ラフィとゴブリンは野良ペット番号が1だけの差がある、ということになります。
野良ペット番号の表を求める必要性が出てきました。
野良ペット番号の特定 15を法とした世界
まずは簡単なレムラムが来ていた時の野良15種類について、野良ペット番号を特定することにしました。
これには難航しました。なぜなら、野良ペット番号をどう特定するのかのアイデアがなかったからです。頭に蜘蛛の巣が張っている状態でした。
そこで、ラフィとゴブリンだけに注目することにしました。
次の表はラムレムの考察の際に使用していた表です。色は意味はありません。表を見やすく色分けするために使っていました。
ラムとレムは規則性が分かりやすく、基本は上記と同じ順番にマイルームにペットが訪れ、ときどき4つの周期を飛ばされるという分かりやすい規則性でした。
さて、注目すべきはラフィとゴブリン(剣)です。
ラフィが6、ゴブリン(剣)が10です。
先ほどの仮説でいくと、ラフィとゴブリン(剣)のペット番号は1だけ差があるはずです。ここから立式すると、
【ラフィとゴブ(剣)のペット番号が1だという仮説】
4b ≡ 1(mod 15)
という式が得られます。説明します。ラフィが6、ゴブリン(剣)が10なので、その差は4です。4回bが加えられた結果、ペットが何巡かして、ペット番号が1ずれると考えられます。今は野良15種類で考えているため、15で割った余りが1になると考えられます。
上記の等号の代わりに使用している記号「≡」は合同式と呼ばれ、完全にイコールではないが、ある着眼で見ればイコールと解釈できる場合に使用する記号です。興味がある方は同値関係とかで調べてください。
末尾にある(mod 15)は15で割った余りで考えることを意味します。
x ≡ y (mod 15)はxとyは15で割った余りで考えると同じ、ということを意味します。別の表現をすれば、x - yが15の倍数、と表現することもできます。
長くなりました。4b≡1 mod 15の解は簡単に見つかり b = 4です。
4 * 4 = 16でこれは15で割れば余りが1ですから。
先ほどの野良15種類のNoを4倍し15で割った余りにしていったものが次の表となります。
いい感じにラフィとゴブリン(剣)が1違いの値になっていますね。
これが前節で述べた、野良15種類の場合の野良ペット番号です。
ちなみに、野良15種類はときどき4飛ばしになる規則もありましたが、誤差のようなもの(bの小数部分であり、ときどきしか発生しないため、十分小さいものと予想できるため)であるため、ここでは無視して考えています。
野良ペット番号さえ分かれば、あとは試行錯誤を重ねて、もっとも事前に分かっていたルールと合致するa, b, baseTimeを見つければいいだけですね。
もちろんこの作業も難しく、baseTimeは固定しておけばいいですが、a, bはいい感じの値を見つけなければならず、変数が2つあるので、調整が大変でした。
また、事前に分かっていたルール(サンプル)もすべてが正しいとは限らず、実際に野良が来ていた「事実」とその野良が来ると計算された「予想」の2つが混在しているため、一部は計算結果がルールと異なっていることも許容しなければいけませんでした。
そのなんだかんだ、苦労して計算した結果が前節で述べたa, b, baseTimeというわけです。
(蛇足)15を法とした世界と中国剰余定理
大学数学をたしなんだ人ならば知っているかもしれない定理、中国剰余定理。
【15を法とした世界での中国剰余定理】
Z/15Z ≅ Z/3Z ⊕ Z/5Z
(環としての同型)
が成立します。うろ覚えだから間違っているかも。
3は素数なのでZ/3Zは体。5は素数なのでZ/5Zは体。ゆえに右辺は体。
よって、Z/15Zも体。
体なのでZ/15Zの全ての0ではない要素(元)には逆元が存在しており、4b ≡ 1 mod 15となる元bは存在し、かつ、一意に定まる。その解がb ≡ 4 (mod 15)なわけですね。数学的な背景でした。ただの知識自慢ですね(;´Д`)
考察
さて、最後に結果からわかる考察を記載していきましょう。
4, 11, 15, 26の呪縛の謎に迫る
最初の節でお話しした計算式では、4, 11, 15, 26との直接的なつながりは説明されていません。
そこで今から少しだけ考察してみます。
まずは野良13種類の場合。
b = 3.4952807215332
でした。
野良13種類の場合は、同じペットが周期4, 11, 15で現れます。
毎時間ごとに定数bが加えられていくのが最初の節でお話しした規則性(a + bn)であったため、bが4回、11回、15回加えられた場合を考察すればよいわけです。
4b = 13.98112289
11b = 38.44808794
15b = 52.42921082
さて、一定周期後に同じペットが来るとはどういうことでしょうか?
今は野良ペットが13種類で考えています。同じペットというのは野良ペット番号が野良種類数である13で割った余りが同じになるということですね。
例えば4時間後に同じペットが来るというのは、4b加えた後も13で割れば余りが同じ、ということです。
4b = 13.98112289であるため、4bを加えた後に13で割って余りが同じであるためには、最初の小数部分が0.018…以下であればよいわけですね。
11b = 38.44808794であるので、11bを加えた後に13で割って余りが同じであるためには、最初の小数部分が0.551…以上であればいいわけですね。39が13の倍数ですから。
15b = 52.42921082であるので、15bを加えた後に15で割って余りが同じであるためには、最初の小数部分が0.551…未満であればいいわけですね。52が13の倍数ですから。
などと考えれば、4b, 11b, 15bがちょうど、13の倍数である13, 39, 52に近いことが、4, 11, 15, 26の呪縛を生み出したといえるでしょう。
ちなみに4b, 11bが13の倍数に近ければ、それを足した15bも13の倍数に近くなるのは自明です。
他の周期で13の倍数にならないのは明らかですね。例えば26の場合は25<nb <27となるようなnは7.15 < n < 7.73などとなり、整数nは存在しませんから。
これらのことから野良が13種類の場合に、同じ野良が来る周期は4, 11, 15のいずれかだと分かります。
野良14種類の場合は、
b = 3.764159968
4b = 15.05663987
11b = 41.40575965
15b = 56.46239953
26b = 97.86815918
野良14種類の場合は、4bは残念ながら14から離れてしまっています。しかし11b, 15b, 26bは14の倍数に近いですね。だから野良14種類の場合は、11, 15, 26周期のいずれかとなります。
野良15種類の場合は、
b = 4.033039215
4b = 16.13215686
11b = 44.36343137
15b = 60.49558823
26b = 104.8590196
野良15種類の場合も野良14種類の場合と同じですね。11, 15, 26周期のいずれかとなります。
さて、運よく、4b, 11b, 15b, 26bが野良種類数の倍数に近い値となりましたが、これらは偶然でしょうか?答えはいいえです。この記事の最初の節の「ここまでの考察」を解釈すれば、これらが偶然ではないとわかるでしょう。私もあまり考察していないので、詳細は伏せます。
4, 11, 15, 26はフィボナッチ数?
4, 11, 15, 26ってフィボナッチ数ですね。何か意味があるのでしょうか?
ちなみにフィボナッチ数は次の数列を満たす数列を意味します。
【フィボナッチ数の条件となる漸化式】
a(n+2) = a(n+1) + a(n)
a(n), a(n+1)が野良種類数の倍数に近ければ、a(n+2)もそうなります。が100%ではないですね。
ただの偶然ですかね。
フィボナッチ数と黄金比
4, 11, 15, 26はフィボナッチ数。フィボナッチ数の比a(n+1)/a(n)は黄金比に収束します。
何か関係があったりしますかね?うーん、今回の件で言えば、4, 11, 15, 26の極限を考えるには、野良ペットが無限に増えることを考える必要がありますが、そんなことはないので、極限を考えるメリットはなく、黄金比との関係もありませんね。
フィボナッチと絡めたり黄金比と絡めると深淵さが出てきますが、あんまり意味はなかったですね。
最後に
最後らへん、特に意味のない駄文になりましたが、お付き合いありがとうございました。
ペットスケジュールを作って早くも9カ月。今のところ、イベントで野良が追加されないので、少し寂しく思っています。
そろそろ新しく追加されないですかねぇ。
2024/3/10 定数チューニングを実施
やっと来た野良ペット追加のイベント
やっと野良ペットが追加されるイベント「アルケミアストーリー」コラボが2024/2/29に来ました。前回が2021/10頃だったので2年半ぶりくらいでしょうか。ただイベント期間が2週間だけなのがやや残念でしたが…。
追加されるペットは「ゲルミ」で、野良ペットが14種類になりました。
「ゲルミ」は本来は2024/2/29のメンテナンス後から追加されるはずでしたが、不具合があったらしく、翌週の2024/3/7のメンテナンス後から追加されました。
さすがに前回コラボ期間の2週間のデータでは、2.5年の歳月に耐えられる精度ではなかったようで、10%ほど来るペットが間違っていました。
そのため、定数チューニングを実施しました。
チューニング1. bの等差数列化
チューニングの内容はまず、13種類の場合のbを正確に求めました。
13種類は常設なので、もっともデータ量が多く、正確なデータが求められました。
ペットが野良で来るようになったのが2017/3/16、最新のラフィ暗黒の時代が2022/9/21~2023/2/6なので、6年弱のデータから算出した高い精度のbですね。
後は上記の予想から、野良の種類数とbは正比例の関係にあるようなので、13種類のbから、精度の高いそれ以外のbも取得できるようになりました。
チューニング2. baseTimeの調整
baseTimeをイベント開始時のメンテナンス終了時間に合わせました。
具体的に言うと13種類の場合は、
13種類: 野良ペットが追加されたメンテナンスの終了時間
2017/3/16 18:00:00
をベースにしました。
14種類の場合は、
14種類: ゲルミが初めて野良でくるようになったメンテナンスの終了時間
2021/9/30 17:00:00
をベースにしました。
15種類の場合は、
15種類: ラムレムが初めて野良で来るようになったメンテナンスの終了時間
2019/4/25 17:00:00
をベースにしました。
すると見事に初期値aがきれいな整数にできました。
13種類と14種類の初期値は10: キジムーなのに、15種類は1: ハウンドが初期値になっていることが違和感ですけどね…。
15種類はRe:ゼロコラボですが、実はApple承認に遅延が発生していて、メンテナンスが20時に終わったんですよね。
ただ、これらは承認待ちでしかなく、おそらくこれよりもずっと早くに本来のメンテナンス作業は終了していたはずです。
それを踏まえて数値が最も妥当になりそうな2019/4/25 17:00:00を15種類のbaseTimeにしています。
そのため、15種類だけはちょっと自信がないです…。
(それでも精度はかなり高いはずですが。)
チューニングについての所感
前回、この記事を書いていた2つの予想がぴたりとハマって、定数チューニングは満足いくものになりました。
ただ、頑張って作ったのに、ゲルミイベントが2週間しかないんですよね…。そこが少し残念です。もう少し頻度高くコラボしてほしいですね。
残っている謎について
野良ペットについてはほぼ解明できています。実用上は困らないくらいには解明されています。
しかし、唯一解明できていないことが、
bを誤差のない有理数で表すこと
です。
bと野良種類数は正比例の関係にあるため、13種類のbを13で割った値である
b/13 = 0.268868937
を誤差のない有理数で表すことができれば、野良ペットの規則は100%解明されたとしてよいでしょう。
しかしこれは、我々が観測できるのは「結果」だけであり、「計算式」を参照できるのは実際にプログラムを組んでいる内部の人間だけであるため、まず解明できない謎です。
なんとなくインスピレーションが湧けば、予想できたりもするかもしれませんがね。例えば、1/256などのプログラム的にきれいな数字だったり、1/24や1/365などの時間を象徴する定数から合理的に導きだせると信憑性のある予想となるのですが…。
もしくは誤差を含む小数から有理数に変換する数学的なアプローチとかないものでしょうかね…。(連分数展開などの有理数近似の手法にはあまり知見がなく…。)
この記事が気に入ったらサポートをしてみませんか?