あつ森のカブ価変動のアルゴリズム(仕組み)が解析により明らかになったので、その仕組みと新たに判明したことを紹介します。
また仕組みが明らかになったことでカブ価を高い精度で予測できるようになりました。今回は新たに作った「カブ価予測ツール」も紹介します。
カブ価プログラム
Ninjiさんがあつ森を解析したプログラムのコードがGithubで公開されています。
ここに全てが詰まっているのでプログラムが読める人はこちらを読む方が分かりやすいと思います。
C++で書かれたコードを私と一緒に読んでいく、というのは少々退屈だと思うので今回は重要な部分だけ。できるだけ分かりやすく紹介していきます。
ざっくり解説「カブ価変動の仕組み」
まず改めておきたいことは「あつ森」のカブ価変動アルゴリズムは前作の「とび森」とは異なるが、大まかな仕組みは前作と変わらないということです。
既に周知されているようにカブ価の変動には4つのパターンがあります。これらは「あつ森」でも同じです。
結論はこの4パターンのグラフに集約されているので、これ以降の内容は理解できなくても問題ありません。大きく儲けるなら「跳ね大型」を狙うだけです。
(役に立つ知識もあるので付いてこれるところまで頑張ってくださいね)
変動パターンの概要
呼び方は自由ですが文字でも分かりやすいようにこれらの呼び方で説明します。
- 波型
- 減少型
- 跳ね小型
- 跳ね大型
波型:増加と減少が交互に現れます。見分けやすい型で売るタイミングを間違わなければ利益が出ます。
減少型:カブ価が毎回下がります。最後まで上がることはないので必ず損出が出ます。他の型との見分けが難しく、この型のおかげでギャンブル性が高まっています。基本的には出現しにくい型ですが「跳ね大型」の次の週は出やすいです。
跳ね小型:減少してから最大で2倍の跳ねが来ます。一度跳ねたあとは必ず減少するので150-200を超えた辺りで売ると利益が出ます。タイミングを逃すと少し損出が出ます。「跳ね大型」と似ているので欲張ると負けますね。
跳ね大型:最初に減少してから最大で6倍の跳ねが来ます。6倍の跳ねが来る前は2倍になっているので「跳ね小型」との見分けが難しいです。月曜AMは必ず減少するというのが特徴です。月曜AMに減少しなかった場合は「跳ね大型」の可能性は消えます。
先週の変動タイプの影響
1週間のカブ価は前週の「変動タイプ」の影響を受けます。
変動タイプの抽選率を表にするとこうなります。
先週/今週 | 波型 | 減少型 | 跳ね小型 | 跳ね大型 |
---|---|---|---|---|
波型 | 20% | 15% | 35% | 30% |
減少型 | 25% | 5% | 25% | 45% |
跳ね小型 | 45% | 15% | 15% | 25% |
跳ね大型 | 50% | 20% | 25% | 5% |
左1列目が先週の型で、他4列がそれぞれの変動タイプになる確率です。
- 例えば先週が減少型だった場合:
その週は波型が20%、減少型が5%、跳ね小型が25%、跳ね大型が45%の確率です。
「減少型」の次の週は大儲けできる可能性が高いということですね!
自分の島で初めてウリからカブを購入する場合
初購入は少し特殊で1つ前の変動タイプに依存せず、変動タイプは必ず「跳ね小型」になります。タイミングを見誤らなければ儲けが出ます。
ウリが初めて来たときに購入しなかった場合、変動タイプはランダムです。
初購入のフラグも消費されません。
自分の島の誰かがカブを購入した時点で初購入のフラグは消費されます。(他の島から遊びに来た人が購入してもフラグは消費されません。)
他人の島で買ったカブ
カブ価の変動は島に依存します。カブには依存しません。
また他の島でカブを購入してきても自分の島の変動タイプは変わりません。初購入の判定も処理されません。
以上が「カブ変動の仕組み」のざっくりとした解説です。もう少し詳しい解説は続きますが先にカブ価を予測できるツールを紹介しておきます。
カブ価予測ツール
機能としてはカブ価を入力していくことで以降のカブ価を絞り込んで表示します。
アルゴリズムが分かっているので入力された数値に誤りがなければ、予測通りの結果が出るはずです。
実際のゲームで動いているプログラムとは異なるので誤差が生じる可能性はあります。(皆さんに報告してもらった値をもとに可能な限り実機に近づけるようにプログラムを組むことで、かなり信頼できるものになっています。)
入力された値が多いほど精度が高まります。
もう少し詳しく解説「カブ価変動の仕組み」
もう少し詳しく解説していきます。分からなくても予測ツールで戦えます。
基礎価格「ウリ売値」
1週間のカブ価はウリが販売したカブ価(買値)をベースとして計算されます。
ウリが販売するカブの価格(買値)は90~110ベルで固定されています。
これ以外の価格が出た場合はプログラムが更新されたことが考えられます。しかし実際に修正される可能性は低いと思います。ここを修正するのであればそもそもカブを続投させていないと思います。
変動地点
地点 | 日曜 | 月曜 | 火曜 | 水曜 | 木曜 | 金曜 | 土曜 |
---|---|---|---|---|---|---|---|
AM | 0 | 2 | 4 | 6 | 8 | 10 | 12 |
PM | 1 | 3 | 5 | 7 | 9 | 11 | 13 |
カブ価が変動するのは毎日午前と午後の2回ですね。説明しやすいようにそれぞれの地点に数字を割り振りました。
0から始まり13で終わるので合計14回です。日曜はカブを売ることが出来ないので売値は確認できませんが、プログラムでは「0ベル」に設定されています。
波型の詳細
波型 | 増加 | 減少 | 増加 | 減少 | 増加 |
---|---|---|---|---|---|
長さ | 0 – 6 | 2, 3 | 1 ~ 7 | 2, 3 | 0 ~ 6 |
確率 | RND | 50, 50 | RND | 50, 50 | RND |
基礎倍率 | 0.9 ~ 1.4 | [0.6 ~ 0.8] | 0.9 ~ 1.4 | [0.6 ~ 0.8] | 0.9 ~ 1.4 |
倍率補正 | – | -0.1 ~ -0.04 | – | -0.1 ~ -0.04 | – |
プログラムを要約するとこうなります。波型は5つの区間に分かれてカブ価が変動していきます。必ず増加→減少→増加→減少→増加の順で処理が行われます。
長さは処理する地点数です。長さが1だと1地点、長さが2だと2地点です。
スタートが月曜AM=2で長さが4だとすると「2,3,4,5」の地点が該当します。
2は月曜AM、3は月曜PM、4は火PMですね。開始地点は加算されていきます。
2回の減少は長さが2または3でそれぞれ50%の確率です。表ではそれしか分かりませんが実際のプログラムでは2回目の減少の長さは[5 – 1回目減少の長さ]なので減少の合計は5地点で固定です。
増加で0.9倍があることを除けば7/12地点は利益が出る可能性が高いです。
あと基礎倍率を見ると分かるように増加区間でも0.9倍の補正が掛かることがあります。長さが0の場合もあるので、増加区間でも減少することがあります。
カブ価の計算はこうなっています。端数は全て切り上げです。
カブ価 = 基礎価格 * ( 基礎倍率 + 倍率補正 )
「倍率補正」は同区間の累積値、同区間の最初の地点は0として計算
「基礎倍率」「倍率補正」は同区間で毎回抽選
「[基礎倍率]」は同区間の最初に一度だけ抽選
倍率補正は値が累積されるのでどんどん小さく(大きく)なっていきます。
連続で減少する場合は1つ前の処理より補正が強くなるということですね。
カブ価は1つ前の価格ではなく「基礎価格」を元に計算しているのでこのような処理になっています。
基礎倍率は同区間(増加や減少)で毎回抽選するものと、同区間で共通の値を使うものがあります。同じ値を使うものは[ ]で囲んでいます。
減少型の詳細
減少型 | 減少 |
---|---|
長さ | 12 |
確率 | 100 |
基礎倍率 | [0.85 ~ 0.9] |
倍率補正 | -0.05 ~ -0.03 |
計算方法は波型と同じです。月曜AMから土曜PMの12地点で毎回価格が下がります。
前回の「倍率補正」の最大値が-0.03に固定されているのでカブ価は毎回3%以上の値下がり率になります。
跳ね小型の詳細
跳ね小型 | 減少 | 跳ね12 | 跳ね3 | 跳ね4 | 跳ね5 | 減少 |
---|---|---|---|---|---|---|
長さ | 0 ~ 7 | 2 | 1 | 1 | 1 | 0 ~ 7 |
確率 | RND | 100 | 100 | 100 | 100 | RND |
基礎倍率 | [0.4 ~ 0.9] | 0.9 ~ 1.4 | 1.4 ~ 2※ | 1.4 ~ 2 | 1.4 ~ 2※ | [0.4 ~ 0.9] |
倍率補正 | -0.05 ~ -0.03 | – | – | – | – | -0.05 ~ -0.03 |
最初に減少してから最大で2倍補正の「跳ね区間」が来ます。跳ね区間の前半の1、2地点に0.9倍の補正が掛かることもあるので見分け方がちょっと難しいですね。
跳ね区間の後半は最低で1.4倍の補正が掛かります。
「買値の1.4倍以上になった地点」がポイントです。その地点を含めて以降の3地点は勝ちです。
跳ね35の基礎倍率について
跳ね35の基礎倍率「1.4 ~ 2※」の最大値は「跳ね4」の基礎倍率を参照します。
つまり跳ね35の基礎倍率は「1.4 ~ 跳ね4の基礎倍率」の範囲でランダムとなります。
- 跳ね4の基礎倍率が2の場合:跳ね35の基礎倍率は1.4 ~ 2の範囲でランダム
- 跳ね4の基礎倍率が1.8の場合:跳ね35の基礎倍率は1.4 ~ 1.8の範囲でランダム
- 跳ね4の基礎倍率が1.4の場合:跳ね35の基礎倍率は1.4 ~ 1.4の範囲でランダム
基礎倍率だけを見れば「跳ね35」が「跳ね4」と同じ基礎倍率になることもあります。
つまり最終的なカブ価も同じ値になると、しかし実際には「跳ね35」が「跳ね4」と同じカブ価になることはありません。
それは「跳ね小型」の「跳ね35」区間のみ計算の最後に1ベル引く処理があるからです。
これにより「跳ね小型」の頂点は常に「跳ね4」の地点となります。
跳ね大型
跳ね大型 | 減少 | 跳ね1 | 跳ね2 | 跳ね3 | 跳ね4 | 跳ね5 | 減少 |
---|---|---|---|---|---|---|---|
長さ | 1 ~ 7 | 1 | 1 | 1 | 1 | 1 | 0-6 |
確率 | RND | 100 | 100 | 100 | 100 | 100 | RND |
基礎倍率 | [0.85 ~ 0.9] | 0.9 ~ 1.4 | 1.4 ~ 2 | 2 ~ 6 | 1.4 ~ 2 | 0.9 ~ 1.4 | 0.4 ~ 0.9 |
倍率補正 | -0.05 ~ -0.03 | – | – | – | – | – | – |
初日に必ず減少します。以降は減少する区間があり、一度上昇すると3地点目で補正6倍のチャンスが訪れます。2倍を超える補正があった地点が最高となるので必ず売りましょう。
これまでの知識から基礎価格の最大が110で補正の最大が6倍と分かったのでカブ価の最高額が導き出せますね。
カブ価の最高額(限界値)は110 * 6 = 660ベル です。
解説は以上です。プログラムを理解した今改めて「4つの変動パターン」を見ると、人力でデータを集めて調べた人たちは凄いですね。ほとんど合っています。
また面白い情報を見つけたら紹介しますね!
追記 2021-04-17
新しい情報はありませんが発売から1年経ち、アップデートも1.9.0bまで来ましたがアルゴリズムも変わらず「カブ価予測ツール」も現役であることを報告しておきます。私もまだ遊んでいるので引き続き確認とコメントの返信をしていきますね。
追記 2021-05-02
Ver2.0.0が来るかと思いきやまさかの1.10.0でした。予測ツールも変わりなくです。
追記 2022-04-21
Ver2.0.4でもアルゴリズムに変化はなく、予測ツールも現役バリバリです。ちょくちょく点検してますが上手く動かない場合にはコメントに書いておいてください。
更新 2023-04-04
引き続き正確に機能しています。
更新 2023-08-25
動作の軽量化&処理の高速化のための調整を行いました。
不具合が上がってこなければ年内にさらに調整を加えます。
更新 2023-10-22
動作の軽量化の調整を行いました。カブ価の入力途中での結果表示をやめ、入力欄からフォーカスを外すと結果を表示するように変更しました。
更新 2024-03-22
グラフを正しく表示できていないブラウザがあったので調整しました。
計算式、ソースと違くないです?
補正2の方も毎ループ減算されますよね