METHODOLOGY

計算方法と検証

このページでは、入力した5体と生活スケジュールから週間Strengthを求める流れ、ランダムに抽選する要素、同じ結果を再現する方法、計算の正しさを確認する仕組みを説明します。

最初に区別する2つの「エナジー」

本サイトの呼び方意味計算での役割
Strength
つよさ/カビゴンのエナジー
きのみ、料理、スキルでカビゴンに蓄積する週間アウトプット。本シミュレーターが比較する主な結果です。
げんき(Genki)各ポケモンのスタミナ。睡眠やスキルで回復し、時間とともに減ります。おてつだい間隔などへ影響する内部状態です。

両者は意味も単位も異なります。本サイトではコード上でも別の型として扱い、取り違えを防いでいます。

1試行の流れ

  1. 入力を計算用データへ解決する。
    種、レベル、せいかく、食材構成、サブスキル、フィールド、料理、睡眠、回収予定を、計算中に文字列検索が不要な形へ変換します。
  2. 絶対時刻のイベントを進める。
    各個体のおてつだい、起床・就寝、回収、朝昼夜の料理、条件付きの編成入替を時刻順に処理します。
  3. 抽選を行う。
    おてつだいごとに、きのみか食材か、どの食材スロットか、メインスキルをストックするかを抽選します。料理では大成功の抽選も行います。
  4. Strengthと状態を更新する。
    きのみ・スキルは条件に応じてStrengthへ加算し、食材は在庫へ入れ、料理時にレシピへ変換します。げんき、所持数、スキルストックも更新します。
  5. 同じ条件を多数回繰り返す。
    各試行の総Strengthを集計し、平均だけでなく標準偏差、信頼区間、分位点を求めます。

何をランダムにするか

要素扱い理由
きのみ/食材試行ごとに抽選個体ごとの食材確率に従うためです。
食材スロット解放済み候補から抽選同じ食材型でも、持ってくる種類にばらつきがあるためです。
メインスキル発動率とストック上限に従って抽選回収までの間隔と所持上限が実際の発動回数へ影響するためです。
料理の大成功曜日等に応じて抽選週間結果の上振れ・下振れを作る主要因だからです。
基礎頻度、きのみ強度、レシピ値入力とデータから決定抽選ではなく、式とデータ表で決まる値だからです。

同じ結果を再現できる理由

シミュレーションはユーザーが指定したシードと試行番号から乱数列を作ります。同じバージョン、入力、シード、試行回数なら、実行環境や並列度に依存せず同じ結果を再現できます。比較ではシードと試行回数を揃えることで、編成以外の偶然差を小さくできます。

シードは「未来を当てる番号」ではありません。同じ仮想抽選を再実行し、設定変更前後を公平に比較するための再現用IDです。

4層の検証

式の単体テスト

おてつだい頻度、げんき帯、食材率、きのみ強度、所持数、スキル発動率などを、文書化した式と1対1で検証します。

高速版と参照版の比較

本番用の高速なイベント計算と、毎秒状態を進める独立した参照実装を同じシードで比較し、境界処理のずれを検出します。

外部期待値との比較

頻度・食材率・きのみ強度・スキル確率などの確定値を、一次ソースであるSleepAPI由来の期待値と比較します。

乱数列の不変性

解析やログなどの観測機能を追加しても、機能を使わないときの乱数消費と結果が変わらないことを検証します。

データの出典

一次ソースはApache-2.0で公開されているNeroli's Lab / SleepAPIです。データが収録されていない種や、古いスナップショットとの差がある項目は、RaenonX、Serebii、Game8などで補助確認します。ライセンスと帰属はクレジットに掲載しています。

限界と読み方

計算例と結果の読み方では、比較条件の揃え方と各指標の使い分けを具体的に説明しています。