LivesplitのComparisonまとめ

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

Comparison には大きく2つの種類があります

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

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


もくじ


Split Time と Segment Time

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


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

Segment Time はその区間に入った瞬間からその区間を通過する瞬間までの時間です

説明画像には Split Time と Segment Time と関連した各タイムの説明も含まれているので、よろしければご利用ください


説明用のグラフの説明

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

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

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

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

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


Personal Best

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


Personal Best は 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

Comparison の一種です
履歴データに記録されている、最も遅いタイムを区間ごとに取得して生成した 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 の時の中央値のタイムと、中央値よりひとつ速いタイムを使って仮のバランスタイムを計算します


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


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


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


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


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

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

0 件のコメント:

コメントを投稿