最適化する目標
目標ごとに一つの値があり、探索はその値をできるだけ大きくします。撃奏ライブとフリーライブでは選んだ曲・難易度の期待スコア、イベントPTでは 1 回あたりの期待イベントPT、総合力では編成の総合力です。
期待スコア:ライブごとに 5 人のスキル発動順はランダムに入れ替わります。5 人の 120 通りの順番を等確率とみなし、順番ごとにライブ全体(スキル、Snap 効果、撃奏ライブでは激走区間と順位ボーナスも)をシミュレートして平均します。スキルやミッションに抽選がある場合は、ゲームの確率で抽選結果の期待値をとります。
演奏条件:既定は理論上最良の演奏で、すべて Perfect、撃奏ライブでは Just 判定できるノーツはすべて Just です。「演奏条件」で Great 率や Just 率を変えると、その割合の Great と Just 以外の判定を譜面全体に均等に配置して計算し直します。これは宣言した演奏であり、実際のプレイの予測ではありません。
編成はリーダー、残り 4 人のメンバー、各メンバーと組む Snap からなります。4 人の並び順を入れ替えてもスコアは変わらないため、結果の並び順は表示用です。
候補の範囲
候補の範囲 D は、手持ちのカードで組めるすべての有効な編成です。ゲームの編成ルールと、「カード制限」で指定した必須・除外を満たすものに限ります。リーダー、メンバーの組み合わせ、Snap の組み方が違えば別の候補です。
計算には入力したカードの育成(レベル、特訓、ランク、スキルレベル)とプレイヤーボーナスを使います。足りない値は先に一覧で入力を求めます。結果が手持ちのすべてのカードを含まない場合は、その旨を表示します。
「最適と証明済み」の定義
「最適と証明済み」とは、有効な候補全体 D のうち、表示した結果が「目標値の降順 → 総合力の降順 → 正規 ID 順」で並べた先頭 min(K, |D|) 編成とちょうど一致することです。K はページが返す数(5)です。編成の選択、順位、同値のときの並びまですべて確定しています。
証明のためにすべての編成を計算する必要はありません。各候補は結果と正確に比較済みか、確かな上界によって除外済みです。つまり、その候補が到達できる最良値はすでに K 位の正確な値を下回っています。これはサンプリングでも近似でもありません。
D が空の場合、「証明済み」はこの条件で組める編成がないことを意味します。
これは宣言した計算モデルに対するアルゴリズム上の証明で、モデル、上界、プログラムが正しいことを前提にしています。入力していないカード、誤った育成値、実際の演奏でのミスは計算に含まれません。
- 目標値
- 選んだ目標の正確な値。たとえば 120 通りの順番の平均スコア。
- 上界
- 真の値を下回らないことが保証された見積もり。上界がすでに基準を下回る候補は、真の値もそれ以下なので除外できます。
- 正規 ID 順
- 目標値と総合力が同じとき、カード ID の決まった順で並べます。同じ入力からは常に同じ結果になります。
「未証明」と現時点の最良
「未証明」とは、厳密な探索がまだ最適性の証明を終えていないことです。現在の結果は最適かもしれませんし、そうでないかもしれません。
選んだ計算時間の上限に達したときや、手動で止めたときに表示されます。ページはこれまでに見つかった最良の編成を正確な値つきで示し、「現在の最良」と「最適値は … 以下」の二つの数も示します。どの編成も後者を超えないので、真の最適値はその間にあり、差が小さいほど最適に近い結果です。
証明が必要なら、計算時間を長くするか「無制限」を選んで計算し直してください。
探索の方針
編成の数はカードが増えるほど急激に増えるため、一つずつシミュレートするのは現実的ではありません。探索は分枝限定法です。候補を一段ずつ広げ(まずリーダー、次にメンバーと Snap)、未完成の部分編成ごとに到達可能な最良値の上界を見積もります。上界が現在の K 位の正確な値を下回れば、その枝の編成は結果に入り得ないので、枝ごと切り捨てます。
上界は二段階です。部分編成は事前に計算した表から見積もるので速く、過大評価にしかなりません。ライブ全体のシミュレーションは 5 人がそろった編成だけで行います。120 通りの順番と抽選もまず区間で挟み、区間で順位が決まらないときだけ正確な値まで詰めます。
基準が高いほど多く切り捨てられます。探索は早い段階で強い編成を見つけて正確に計算し、それを基準にします。より良い編成が見つかるたびに基準を引き上げます。
候補はリーダーごとに重ならないグループに分けて探索し、最後にまとめます。分け方は結果を変えません。同じ入力からは常に同じ編成と順位が得られます。
時間上限に達すると探索は止まり、現時点の最良の編成と、残りの候補全体の上界を報告します。これが「未証明」のときに表示される二つの数です。
結果の読み方
各結果には目標値、総合力、ゲームと同じ見た目の編成、そして位置ごとのメンバーカード、育成、組んだ Snap を表示します。
目標値が区間で表示されることがあります。正確な値はその区間内にあります。抽選のあるスキルをまだ詰めていない場合などです。
計算が終わると、各編成について 120 通りのうちスコアが最も低い順番、中央の順番、最も高い順番も示します。スキル順による振れ幅の目安になります。
ソースコード
計算モデル(crates/ournotes-sim)と探索アルゴリズム(crates/ournotes-search)は GitHub の empty-sekai/ournotes-deck リポジトリで公開しています。編成ページの上部から直接開けます。