LivesplitのComparisonまとめ

現在のペースが速いのか遅いのかを把握するためには比較する対象が必要です。
 Livesplit ではそのような比較対象タイムのことを Comparison と言い、Personal Best や Best Segment などが標準で備わっています。

もくじ

基礎知識・説明の前提条件

Split Time と Segment Time

区間のタイムを考える時に Split Time と Segment Time の違いを知らないと混乱しやすいと思うので、各 Comparison より先に説明します。

Split Time

Split Time はタイマー開始からその区間を通過する瞬間までのタイムです。

Segment Time

Segment Time はその区間に入った瞬間からその区間を通過する瞬間までの時間です。つまりは区間タイムです。

2 種類の Comparison

タイムそのものを保存しているタイプ

1つ目はタイムそのものを保存しているタイプで、例えば Personal Best の場合は自己ベストを出した時の Segment Time が保存されていて、その Segment Time そのものが比較対象になります。
 Splits Editor で編集できる Comparison もこのタイプで、World Record や自分より早いプレイヤーのタイムをインポートしたり、自分で任意のタイムを入力します。
 特に自分でタイムを入力する場合は、Split Time を入力することに注意しましょう。

タイムを生成するタイプ

2つ目は履歴データを使って何らかの計算を行いタイムを生成するタイプで、標準で用意されている Comparison では Personal Best 以外は全てこのタイプです。
 このタイプは内部的には基本的に Segment Time を使って計算を行い、最終的な計算結果は Split Time になっています。

説明用のグラフの説明

説明のために私自身の実際の記録データを使ってグラフを作りました。
 全体のグラフと区間だけを抜き出したグラフの2種類があります。

タイム履歴の全区間グラフ


縦軸がタイムで、7つの区間に分かれています。
 横軸が履歴IDで、ID 98 が自己ベストタイム、ID 125 が履歴に保存されている最新のデータ、完走していないデータは省略しています。

区間3だけを抜き出したグラフ


縦横軸は全体のグラフと同じです。
 Comparison を生成するタイプでは基本的に Segment Time を使って計算しており、ここでは例として区間3のグラフを使用しますが、実際には全ての区間で同様の計算などを行っています。

各 Comparison の説明

Personal Best

自己ベストタイムをそのまま比較対象とします。

Personal Best はタイムそのものを保存しているタイプの Comparison で、Splits Editor を開けば Split Time と Segment Time の両方を確認・編集することもできます。
 内部的には Split Time として扱われています。

Best Segments

保存されている Best Segment を区間ごとに取得して生成した Split Time です。

Best Segments のゴールタイムが Sub of Best Segment です。
 内部的には、履歴データとしては Segment Time が保存されていて、Comparison としての Best Segments は Split Time として扱われています。

計算方法

詳しい計算方法を知りたい方はソースコードをご確認ください。

Worst Segments

履歴データに記録されている、最も遅いタイムを区間ごとに取得して生成した Split Time です。

計算方法

詳しい計算方法を知りたい方はソースコードをご確認ください。

Best Split Times

履歴データに記録されている、その区間を通過した最速の Split Time を区間ごとに取得して生成したタイムです。

計算方法

詳しい計算方法を知りたい方はソースコードをご確認ください。

Latest Run

履歴データに記録されている、最新の試行タイムを取得して生成した Split Timeです。

計算方法

詳しい計算方法を知りたい方はソースコードをご確認ください。

Average Segments

計算範囲は履歴データ全体で、新しい試行タイムほど重みが大きい加重平均値を区間ごとに計算して生成した Split Time です。

計算方法

最新の試行タイムから順に 0.750, 0.751, 0.752, …… の値を重み付けしており、履歴データの件数がn件あったとしたら、
(タイム[n]*0.750 + タイム[n-1]*0.751 + タイム[n-2]*0.752 + …… + タイム[1]*0.75n-1) / (0.750 + 0.751 + 0.752 + …… + 0.75n-1)
が加重平均値のタイムです。
 区間ごとに加重平均値を計算して、最後に Split Time を生成します。

詳しい計算方法を知りたい方はソースコードをご確認ください。

普通の平均タイムを使いたい

加重平均ではなく普通の平均タイムを利用したい場合はこちらのコンポーネントをお試しください。

Median Segments

計算範囲は履歴データ全体で、新しい試行タイムほど重みが大きい加重中央値を区間ごとに計算して生成した Split Time です。

計算方法

最新の試行タイムから順に 0.750, 0.751, 0.752, …… の値を重み付けしており、履歴データの件数がn件あったとしたら、(タイム, 重み) というデータの組み合わせが次のようにn個できます。
(タイム[n], 0.750), (タイム[n-1], 0.751), (タイム[n-2], 0.752), …… , (タイム[1], 0.75n-1)
これをタイムが速い順に並び替えて先頭から順に重みを足していき、重みの和が
(0.750 + 0.751 + 0.752 + …… + 0.75n-1) / 2
を超えたときのタイムが加重中央値のタイムです。
 区間ごとに加重中央値を計算して、最後に Split Time を生成します。

詳しい計算方法を知りたい方はソースコードをご確認ください。

Balanced PB

Balanced PB は Personal Best と同じゴールタイムを持ち、履歴データを使って区間ごとに平均化したタイムを計算して生成した Split Time です。

例えば自己ベストタイムを出した時のペースに偏りがあって、序盤はミスが多く遅れ気味で、終盤は好調で一気にタイムを巻いていたような場合、そのような自己ベストタイムを比較対象にすると終盤の Segment Delta が+ばかりになってしまい精神的な悪影響をもたらす懸念があります。
 そういった悪影響を解消するために、この Balanced PB が作られたとのことです。

計算方法

Balanced PB の計算は、他の Comparison と比べて複雑です。

区間ごとに仮のバランス区間タイムを計算


途中までは加重中央値と似た計算を行っていて、重みの係数は 0.9375 です。
 履歴データに重みを割り振った後、重みの値が 0 - 1 の範囲になるように重みの再計算をします。
 範囲の下限が 0 で上限が 1 の時の中央値のタイムと、中央値よりひとつ速いタイムを使って仮のバランス区間タイムを計算します。

仮のバランスタイムを PB と比較


全ての区間で同様の計算を行い、仮のバランスタイムでのゴールタイムと Personal Best のゴールタイムを比較して、両方のタイムが等しくなるまで繰り返し計算します。
 仮のバランスタイムのゴールタイムの方が遅ければ、中央の位置を新しい上限にして再度計算し、仮のバランスタイムのゴールタイムの方が速ければ、中央の位置を新しい下限にして再度計算します。

PB と バランスタイムとが釣り合うまで繰り返し計算


この例では仮のバランスタイムのゴールタイムの方が遅かったので、中央の位置 0.5 を新しい上限にして、新しい中央 0.25 の状態で仮のバランスタイムを計算します。


先ほどと同様にゴールタイムの大小を比較します。


範囲の上限あるいは下限の位置を変えて範囲を狭くしながら、ゴールタイムが等しくなるまで繰り返します。

バランスタイムの決定


ゴールタイムが等しくなったら繰り返し計算は終了です。
 この時の各区間の Segment Time がバランスされた区間タイムで、最後に Split Time を生成します。

詳細

詳しい計算方法を知りたい方はソースコードをご確認ください。

1 件のコメント:

  1. 文章構造、タグ構造を見直し
    ソースコードへのリンクを修正

    返信削除