デレステ-スコアタ-ポテ解こんばんは、むぅんです。先月のデレステのアップデートにより、プロデュースptの上限が30から35に上がり、新たに特技発動率にもプロデュースptを割り振れるようになりました。記事を公開するのが遅すぎて先月どころの話ではなくなってしまいました。それに伴い、これまでのVoDaViそれぞれに10ずつ振る振り方が最適解でなくなってしまったため、どのように振り分ければよいのかが分かりづらくなってしまいました。そこで、ポテンシャル解放の最適解を求めるためにC++でプログラムを組んでみました。最初はPythonで書いていたのですが、シミュレートに日単位でかかることが判明したのでC++で1から書き直しています。今回はひとまずパッションプリンセスの強そうなユニットで、各アイドルのVoDaViで一番低いステータスと特技発動率に余った15ptのうちそれぞれ何ptずつ振り分ければよいかを総当たりで調べてみたいと思います。スパークルに関しては未実装なので次回改めて調べてみます。後から気付いたのですが、ステータスの振り方はセンター効果依存(基礎スコアは合計アピール値によって決定され、ポテンシャル解放によるステータスの上昇幅はどこに振っても同じなため)でプリンセスの場合どこに振ろうがスコアには影響を与えないんですよね。Voが一番高いのにVoにプロデュースptを振らないのは違和感がありますし、こう決めておくことで後々トリコロールのスコアを計算するときにも同じ方法が使えるため今回はこのまま進めていきたいと思います。技術的なお話ただ書きたかっただけなので読むのが面倒な方は適宜読み飛ばしてください。p);}}}}}今回はこんな感じに頭の悪い総当たりで調べていきます。p1からp5までのカウンタをvectorとして渡していますが、これが特技発動率のプロデュースptの組となります。p1=8のとき、1人目のアイドルの特技発動率に8pt振るのに対し、一番低いステータスに7pt振ることになります。このプロデュースptの組を元にステータスを計算し、指定した曲を何回かAPしたときのスコア(例えば最大値や平均値など)をプロデュースptとのpairとしてvectorに格納したあと、スコアを元にソートをかけてプロデュースptの組を取り出します。今回はこのプロデュースptの組をvectorで渡しましたが、整数で渡すことも可能です。計算することで1次元配列に変換できます。次元に拡張することを考えます。^{N-k}\end{eqnarray}とすれば1次元に変換できます。n\]と求めることができます。復元することも可能です。データを格納することになります。今回は要素数が一定だったのでこの変換を用いたソートも可能でしたが、もっと複雑なループを行うと途端にわけがわからなくなるので今回は素直にvectorで表現することにしました。y.second;});}地味に苦労したソートの部分です。前述したようにデータはpairで管理しており、ここではsecondの値をもとにソートしています。bonusTable[j][1];}}}}}}そして今回一番苦労した特技倍率をセットする関数です。いった具合です)、スキブの扱いが非常に難しく適当に組むとプログラムの実行にとてつもない時間がかかる始末でした。そこで特技がスキブのアイドルを4番目に配置している前提のもとスキブが発動しているかどうかを最優先で調べ、その結果に応じスコアアップ等の倍率を場合分けするという処理を1回のループ中で行うことにしました。スキブの確認とスコア倍率の計算という2つの異なる処理を同一関数の同ループ内で行うあまりに汚いプログラムを書くのは正直気が引けましたが、結果として17倍ほど高速化できたので個人的には大満足です。用いたユニットはこちらになります。50%(中央値)スコアをMatplotlibでプロットした結果を以下に示します。縦軸が特技に振ったプロデュースptの5人分の合計、横軸が順位です。ゲストは特技発動率に振っても意味はないためVoDaViに10ずつ振った状態で固定しています。平均値から見てみましょう。見事なまでに特技発動率に振ったほうが平均的に高スコアを叩き出せていることが分かります。相関係数は約-0.887、p値は0.001未満という綺麗な負の相関関係がある結果です。続いて1000回APした内の最大値、すなわち特技の引きが最も良かったときの結果です。1000回もAPしただけあり、必ずしも特技発動率に振ったほうが良いとは言えない結果です。発動率の低さを試行回数で稼ぐ形となり、ステータスを伸ばすような振り方をしていてもひたすら繋ぎ続ければやがて高スコアを叩き出すことができるようですね。Lv30の楽曲を1000回もAPできるかどうかを考えるとやはり特技発動率に振らないのは良い選択とは思えません。ちなみに、相関係数はおよそ0.034で殆ど相関は見られませんでした。50%スコアを見ていきます。これらのスコアはデレステ計算機さんに準じてみました。下位のスコアになるほどより強い負の相関があることが分かります。いずれも特技発動率に振ったほうがより高スコアを叩き出しやすいようです。最後に理論値を見てみましょう。理論値だけあって非常に綺麗なグラフになっています。全員の特技発動率に10振ったときに最もスコアが低く出ています。ここまでのまとめです。<0.001しかし、この結果だけではまだ特技発動率に振るべきとは言えません。ステータス重視の振り方をした場合、確かに理論値以外は大きく順位を落としていましたがそれだけではスコアがどれだけ落ちたか分からないためです。いうわけで、次はスコアの実数値を見ていきたいと思います。情報量が予想より遥かに多くなってしまったため次回に続きます。おまけプログラムの実行にかかった時間の変遷です。先程の検証と同じく生存本能ヴァルキュリアのMASTER+を1000回シミュレートした場合の実行時間ですが、プロデュースptの組はVoDaViに10ずつ振った場合で固定してあります。実際の検証では7776通りの計算を行ったので、おおよそこれらの実行時間を7776倍すれば実際にかかる時間となります。下記に示す時間はtimeコマンドのrealの値となります。0.056sというわけでPythonが如何に遅いかがよく分かる結果となりました。書きやすさは圧倒的にあちらの方が上だったんですけどね...。ちなみに、0.056秒という記録を叩き出した最後のプログラムで7776通りのシミュレートを行うと約7分12秒ほどかかりました。最初のプログラムで同じ回数だけ回すと1日以上かかる計算になるので頑張って書き直して良かったです。01:23結局ポテンシャル解放でプロデュースptはどう振り分けるのが正解なのか?(1)Tweet広告を非表示にする関連記事2018-10-17Pythonでデレステのガシャのスクショからアイドルの名前を読み取ろうと頑張ったこんばんは、むぅんです。僕はこれまで引いたガシャの記録を全...2018-05-29今月末の限定でよしのんが来るかもしれないというお話2周目の限定よしのんです。(4)はてなブログをはじめよう!shinemoon227さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。