アタポンイベントにおけるpt調整
目次
デレステでアタポン形式イベントのポイント数を調整したいと(2020年に)思ったので、調整ツールを作った。2020年なのでプロデュース方針や8倍消費など変わってる部分もあるが基本は同じ。サムネはほたるのボイス実装日が2019/01/01で01/01は茄子さんの誕生日でもあるので190101に合わせた画像。他にこの値に合わせた人はいなかったけど。
概要
イベントptをある設定した値に調整するにはどの曲を何回やればよいか検討する。ランダム要素があるため、営業、ぴにゃリクエスト、LIVE PARTY!!は考慮しないものとする。
立式
変数がとても多いので、まず楽曲プレイ回数の変数を下表に示す。ここで、\(n_{i\_j}\)はスタミナ\(i\)の通常楽曲を\(j\)倍消費でプレイする回数、\(e_{i\_j}\)はイベント楽曲を\(j\)倍消費でプレイする回数である。プロデュース方針で消費スタミナ軽減されている場合は調整が必要となる。
変数名 | 難易度 | 消費スタミナ | 取得pt | 取得アイテム数 |
---|---|---|---|---|
\(n_{10\_1}\) | DEB | 10 | 25 | 25 |
\(n_{11\_1}\) | DEB | 11 | 28 | 28 |
\(n_{12\_1}\) | REG | 12 | 31 | 31 |
\(n_{13\_1}\) | REG | 13 | 34 | 34 |
\(n_{14\_1}\) | REG | 14 | 37 | 37 |
\(n_{15\_1}\) | PRO | 15 | 40 | 40 |
\(n_{16\_1}\) | PRO | 16 | 44 | 44 |
\(n_{17\_1}\) | PRO | 17 | 47 | 47 |
\(n_{18\_1}\) | MAS | 18 | 50 | 50 |
\(n_{19\_1}\) | MAS | 19 | 53 | 53 |
\(n_{25\_1}\) | PNO | 25 | 70 | 70 |
\(n_{30\_1}\) | FOR | 30 | 84 | 84 |
\(n_{10\_2}\) | DEB | 20 | 25 | 50 |
\(n_{11\_2}\) | DEB | 22 | 28 | 56 |
\(n_{12\_2}\) | REG | 24 | 31 | 62 |
\(n_{13\_2}\) | REG | 26 | 34 | 68 |
\(n_{14\_2}\) | REG | 28 | 37 | 74 |
\(n_{15\_2}\) | PRO | 30 | 40 | 80 |
\(n_{16\_2}\) | PRO | 32 | 44 | 88 |
\(n_{17\_2}\) | PRO | 34 | 47 | 94 |
\(n_{18\_2}\) | MAS | 36 | 50 | 100 |
\(n_{19\_2}\) | MAS | 38 | 53 | 106 |
\(n_{25\_2}\) | PNO | 50 | 70 | 140 |
\(n_{30\_2}\) | FOR | 60 | 84 | 168 |
\(e_{75\_1}\) | DEB | 0 | 130 | -75 |
\(e_{90\_1}\) | REG | 0 | 170 | -90 |
\(e_{120\_1}\) | PRO | 0 | 240 | -120 |
\(e_{150\_1}\) | MAS | 0 | 320 | -150 |
\(e_{75\_2}\) | DEB | 0 | 260 | -150 |
\(e_{90\_2}\) | REG | 0 | 340 | -180 |
\(e_{120\_2}\) | PRO | 0 | 480 | -240 |
\(e_{150\_2}\) | MAS | 0 | 640 | -300 |
\(e_{75\_4}\) | DEB | 0 | 520 | -300 |
\(e_{90\_4}\) | REG | 0 | 680 | -360 |
\(e_{120\_4}\) | PRO | 0 | 960 | -480 |
\(e_{150\_4}\) | MAS | 0 | 1280 | -600 |
\(e_{75\_8}\) | DEB | 0 | 1040 | -600 |
\(e_{90\_8}\) | REG | 0 | 1360 | -720 |
\(e_{120\_8}\) | PRO | 0 | 1920 | -960 |
\(e_{150\_8}\) | MAS | 0 | 2560 | -1200 |
多いのでベクトル化する。
$$\boldsymbol{n}_j =\left(\begin{array}{c}n_{10\_j} \cr n_{11\_j} \cr n_{12\_j} \cr n_{13\_j} \cr n_{14\_j} \cr n_{15\_j} \cr n_{16\_j} \cr n_{17\_j} \cr n_{18\_j} \cr n_{19\_j} \cr n_{25\_j} \cr n_{30\_j}\end{array}\right),\boldsymbol{e}_j =\left(\begin{array}{c}e_{75\_j} \cr e_{90\_j} \cr e_{120\_j} \cr e_{150\_j}\end{array}\right)$$
それ以外の変数を下表に示す。
変数名 | 意味 |
---|---|
\(p_t\) | 目標pt |
\(p_c\) | 現在pt |
\(i_c\) | 現在所持アイテム数 |
\(S\) | 消費スタミナ |
\(N\) | 楽曲プレイ回数 |
ここから、求めるイベントptの関係は以下のようになる。取得イベントpt\(\times\)プレイ回数の合計と残り必要なイベントpt(\(=p_t - p_c\))を一致させる。通常楽曲を2倍消費でプレイしてもイベントptは2倍にならない点に注意。
$$\left(\begin{array}{cccccccccccc}25 & 28 & 31 & 34 & 37 & 40 & 44 & 47 & 50 & 53 & 70 & 84\end{array}\right)\left(\boldsymbol{n}_1 + \boldsymbol{n}_2\right) \\+\left(\begin{array}{cccc}130 & 170 & 240 & 320\end{array}\right)\left(\boldsymbol{e}_1 + 2\boldsymbol{e}_2 + 4\boldsymbol{e}_4 + 8\boldsymbol{e}_8\right) = p_t - p_c $$
イベントアイテムの個数がマイナスになることはないので以下の式も成立する。
$$ i_c +\left(\begin{array}{cccccccccccc}25 & 28 & 31 & 34 & 37 & 40 & 44 & 47 & 50 & 53 & 70 & 84\end{array}\right)\left(\boldsymbol{n}_1 + 2\boldsymbol{n}_2\right) \\+\left(\begin{array}{cccc}-75 & -90 & -120 & -150\end{array}\right)\left(\boldsymbol{e}_1 + 2\boldsymbol{e}_2 + 4\boldsymbol{e}_4 + 8\boldsymbol{e}_8\right) \geq 0 $$
合計消費スタミナと楽曲プレイ回数は以下のようになる。
$$ S =\left(\begin{array}{cccccccccccc}10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 & 19 & 25 & 30\end{array}\right)\left(\boldsymbol{n}_1 + 2\boldsymbol{n}_2\right) \\N =\left(\begin{array}{cccccccccccc}1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\end{array}\right)\left(\boldsymbol{n}_1 + \boldsymbol{n}_2\right) \\+\left(\begin{array}{cccc}1 & 1 & 1 & 1\end{array}\right)\left(\boldsymbol{e}_1 + \boldsymbol{e}_2 + \boldsymbol{e}_4 + \boldsymbol{e}_8\right)$$
満たすべき条件
イベントptの式とイベントアイテムの式を同時に満たし、合計消費スタミナ\(S\)または合計楽曲プレイ回数\(N\)が最小になる楽曲プレイ回数\(\boldsymbol{n}_j,\boldsymbol{e}_j\)を求める。プレイ回数は非負整数なので整数線形計画問題として解ける。
Pythonによる計算
当時はMIPCLを使っていたが、現在入手困難だし新しいソルバーもあるみたいなので書き換えたほうがいいかもしれない。今はPySCIPOpt?
実行
PandasとMIPCLをインストールした状態でコマンドラインから実行する。目標イベントptと現在イベントpt、所持イベントアイテム数を入力するとどの曲を何回すればいいか計算してくれる。検算もしてくれる。
調整結果
2回ぐらい調整してみてそれぞれ成功した。
— Ibemu (@Ibemu231) January 29, 2020
— Ibemu (@Ibemu231) December 29, 2020