Elevate: フィットネストレンド「フォーム」は、昨日の「フィットネス」と「倦怠感」に基づいている必要があります

作成日 2018年04月23日  ·  18コメント  ·  ソース: thomaschampagne/elevate

環境について説明してください

  • プラグインバージョン:6.1.2安定
  • Chrome / Opera / Chromiumバージョン:Chrome
  • OSバージョン:Mac OS

問題を説明してください:

現在、フォームは同じ日のフィットネスと疲労の差として計算されているようです。 ただし、昨日のフィットネスと倦怠感に基づいた方がよい場合があります。 もちろん、これは議論の余地があります。 私はこれらの2つのポイントを提案することしかできません:
a)トレーニングの疲労が翌日より感じられるので、主観的にはより正しいと感じます
b)TrainingPeaksはそれを行っています(ここの「フォーム」セクションを参照)

bug major

最も参考になるコメント

@aprokopこの深い分析に感謝します! それは明確で、明白です!

全てのコメント18件

定義によるフォームは(TrainingPeaks)です:
トレーニングストレスバランス(TSB)またはフォームは、トレーニングストレスのバランスを表します。

フォーム(TSB)=昨日のフィットネス(CTL)-昨日の倦怠感(ATL)

https://help.trainingpeaks.com/hc/en-us/articles/204071764-Form-TSB-

@aprokopはい、使用する数学モデルを使用する必要があります。 数式はヘルパーにあります

@thomaschampagneあなたのコメントがわかりません。 あなたはそれがすでに入っていると言っていますか?

@aprokopはい。 フィットネスモデルの昇格=トレーニングピークモデル

image

@thomaschampagneそうは思いません。 TrainingPeaksモデルは

Form(day+1) = Fitness(day) - Fatigue(day)

また、他の2つの式は正確に正しくないようであり、

Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day)) x ...
Fatigue(day+1) = Fatigue(day) + (StressScore(day+1)-Fatigue(day)) x ...

TrainingPeaks曲線を見ると、大きな努力が同じ日のフィットネスと疲労感、そして翌日のフォームに大きく影響します。

screen shot 2018-10-16 at 9 33 13 am

それも私のポイントです:

@thomaschampagneそうは思いません。 TrainingPeaksモデルは

フォーム(日+ 1)=フィットネス(日)-倦怠感(日)

わかりませんでした。 チケットを再開しました。 掘ってくれてありがとう。 FYIコードはここにあります: https

PRをすることはあなたにとって可能なことですか、それとも私はそれを自分で処理しますか?

このプログラミング言語で作業したことはありませんが、十分に簡単だと思われる場合は試してみることができます。 私の主な関心事は、影響を受けるコードの範囲と、再編成が必要かどうかだと思います。

@aprokopスコープはそのメソッドのみにする必要がありますhttps://github.com/thomaschampagne/elevate/blob/990b5d0fc11113b2c4d120e6aec9f0ba3dc0e844/plugin/app/src/app/fitness-trend/shared/services/fitness.service.ts#L226

しかし、心配しないでください。 変更をテストして検証するには、あなたの助けが必要です。

@aprokop以下でこれについて100%確信していますか?

Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day)) x ...
Fatigue(day+1) = Fatigue(day) + (StressScore(day+1)-Fatigue(day)) x ...

私はあなたの推奨事項でコードを修正しました(commit https://github.com/thomaschampagne/elevate/commit/ec73ee0c5a6d3c78662c41b94a4e090c70a1572b経由)。 既存のコードでの実装を簡素化するために、次のような式を実装しました。

Fitness(day) = Fitness(day-1) + (StressScore(day)-Fitness(day-1)) x ...
Fatigue(day) = Fatigue(day-1) + (StressScore(day)-Fatigue(day-1)) x ...
Form(day) = Fitness(day-1) - Fatigue(day-1)

@aprokop @ jayti74

  • また、以下のビルドをテストし、TrainingPeaksと比較して、リグレッションなしですべてが正常であることを確認できますか? (ビルドにはコミットhttps://github.com/thomaschampagne/elevate/commit/ec73ee0c5a6d3c78662c41b94a4e090c70a1572b ofcが含まれています)

テストビルド: v6.6.0_stable_ec73ee0_2018-10-17-16-05.zip

ご協力いただきありがとうございます :)

@thomaschampagne

以下でこれについて100%確信していますか?

はいといいえ。 はい、同じ日の努力が同じ日のフィットネス/疲労に影響を与えないので、TrainingPeaksと一致しないという意味で間違っていると確信しています。 確かにStressScore(day)をStressScore(day + 1)に変更する必要があります。 しかし、それが正確な公式かどうかはわかりません。 その式は次のように考えることができます

Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day+1)) x ...

また、意味があります(Fitness(day + 1)を解く必要があります)。 でもそれなりにいいと思います。

コミットは、提案された式を正しく実装します。 prevCtlとその友人の更新をif (isPreStartDay)句から移動することもできますが、それはマイナーです。

家に帰った夕方にテストします。

試してみたところ、期待どおりに動作しました。 フィットネスと疲労が同じ日に上がった一方で、フォームは、次の日に下落しました。 だから、今はすべて良いと思います。
screenshot_20181017_202434

@aprokopテストとレビューをありがとう! したがって、2つの式があります。

Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day+1)) x ...
-- or --
Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day)) x ...

しかし、最初のものに問題があると思います:) Fitness(day+1)も式の一部である場合、 Fitness(day+1)を計算するのは奇妙です...これが私たちが見つけたいものです。

そして、式を解くと、次のようになります。

Fitness(day+1) = (Fitness(day) - k * StressScore(day+1)) /(1 - k)  where k = exp(-1/42)

... それは理にかなっていますか?!

TrainingPeaksからcsvデータを毎日エクスポートする方法はありますか? または、TrainingPeaksグラフのスクリーンショットから詳細情報を取得しますか?

TrainingPeaksグラフのスクリーンショットで、赤い点は努力の日ですか? あなたはフィットネスと倦怠感の曲線があなたの努力の日に上がることを確認しますか?

ご協力いただきありがとうございます :)

@thomaschampagne Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day+1)) x ...は奇妙なものだということに同意します。 私は100%確信が持てないのでそれだけを述べました。

TrainingPeaksからcsvデータを毎日エクスポートする方法はありますか? または、TrainingPeaksグラフのスクリーンショットから詳細情報を取得しますか?

これは本当に良い考えです。 私はそれが可能であると信じています、そして私は過去にそれをしました。 最近のデータを取得してみましょう。

TrainingPeaksグラフのスクリーンショットで、赤い点は努力の日ですか? あなたはフィットネスと倦怠感の曲線があなたの努力の日に上がることを確認しますか?

はい、赤い点は毎日のTSSの値であり、青い点は強度です。

あなたはフィットネスと倦怠感の曲線があなたの努力の日に上がることを確認しますか?

はい。

OK、ワークアウトはエクスポートできますが、カーブ値はエクスポートできません。 結構です。 それをテストしましょう。

最近の激しい競争を見てみましょう( -重要でないデータとしてマーク)。 データはグラフから取得する必要があり、TrainingPeaksによって最も近い整数に丸められました。

| | レース前日| レース当日| レース当日後|
|-|-|-|-|
| TSS | -| 395 | -|
| 倦怠感| 54 | 102 | -|
| フィットネス| 61 | 69 | -|
| フォーム| -| 8 | -33 |

そう:

  1. 倦怠感(日)-フィットネス(日)= 69-102 = 33 =フォーム(日+ 1)なので、フォームの正しい式があります。
  2. 倦怠感(日-1)+(TSS-倦怠感(日-1))x ... = 54 +(395-54)x(1-e **(-1/7))= 99、つまり約102?
  3. (Fatigue(day-1)+ TSS (1-k))/(2-k)=(54 + 395 (1-k))/(2-k)= 94なので、かなり離れています。 (k = exp(-1/7))。 前のコメントの計算が間違っているので、ここで式の計算を修正しました。
  4. Fitness(day-1)+(TSS-Fitness(day-1)x ... = 61 +(395-61)x(1-e **(-1/42)= 69なので、正解です。
  5. (Fitness(day-1)+ TSS (1-K))/(2-K)=(61 + 395 (1-K))/(2-K)= 69なので、これもほぼ正しいです(ここでは、K = exp(-1 / 42))。

要約すると、これらは最良のオプションのようです。

Form(day) = Fitness(day-1) - Fatigue(day-1)
Fitness(day) = Fitness(day-1) + (StressScore(day)-Fitness(day-1)) x (1-exp(-1/42))
Fatigue(day) = Fatigue(day-1) + (StressScore(day)-Fatigue(day-1)) x (1-exp(-1/7))

PS私はまだ2で理由がよくわかりません。私たちは99しか得られず、102は得られません。

GoldenCheetahを見てみました:

double lte = (double)exp(-1.0/ltsDays_);
double ste = (double)exp(-1.0/stsDays_);
 ...
// LTS
if (day) lastLTS = lts_[day-1];
lts_[day] = (stress_[day] * (1.0 - lte)) + (lastLTS * lte);

// STS
if (day) lastSTS = sts_[day-1];
sts_[day] = (stress_[day] * (1.0 - ste)) + (lastSTS * ste);

これもあります

だから、私たちは良いと思います。

@aprokopこの深い分析に感謝します! それは明確で、明白です!

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

luisgutz picture luisgutz  ·  21コメント

rex4539 picture rex4539  ·  4コメント

charleswolf picture charleswolf  ·  7コメント

MollyMooTM picture MollyMooTM  ·  16コメント

wolfpackt99 picture wolfpackt99  ·  3コメント