Elevate: 健身趋势“表格”必须基于昨天的“健身”和“疲劳”

创建于 2018-04-23  ·  18评论  ·  资料来源: thomaschampagne/elevate

描述你的环境

  • 插件版本:6.1.2稳定
  • Chrome / Opera / Chromium版本:Chrome
  • 操作系统版本:Mac OS

描述问题:

目前,该表格似乎是根据当天的“适应性”和“疲劳”之差计算得出的。 但是,最好以昨天的“健身和疲劳”为基础。 当然,这值得商bat。 我只能提出以下两点:
a)从主观上来说,这对我来说更正确,因为第二天的训练疲劳更加严重
b)TrainingPeaks正在这样做(请参见此处的“表格”部分)

bug major

最有用的评论

@aprokop非常感谢您的深入分析! 清楚,明确!

所有18条评论

根据定义,表格为(TrainingPeaks):
训练压力平衡(TSB)或表格表示训练压力平衡。

表格(TSB)=昨天的体能(CTL)-昨天的疲劳(ATL)

https://help.trainingpeaks.com/hc/zh-CN/articles/204071764-Form-TSB-

@aprokop是的,应该使用所使用的数学模型。 公式在助手中

@thomaschampagne不确定我是否理解您的评论。 您是说已经进入了吗?

@aprokop是的。 提升健身模型=训练高峰模型

image

@thomaschampagne我不这么认为。 TrainingPeaks模型是

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

似乎其他两个公式也不完全正确,应该是

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

yupp这也是我的观点:

@thomaschampagne我不这么认为。 TrainingPeaks模型是

形式(天+1)=健身(天)-疲劳(天)

好吧,我不明白。 我重新开了票。 感谢您的挖掘。 仅供参考代码在这里: https :

做公关对您来说是可能的,还是我自己处理?

从未使用过这种编程语言,但如果您认为它很简单,我可以尝试。 我想我主要关心的是受影响代码的范围,以及是否需要任何重组。

@aprokop范围只能是该方法https://github.com/thomaschampagne/elevate/blob/990b5d0fc11113b2c4d120e6aec9f0ba3dc0e844/plugin/app/src/app/fitness-trend/shared/services/fitness.service.ts#L226

但请放心,我会这样做。 只需要您的帮助来测试和验证更改。

@aprokop您确定

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

我根据您的建议修复了代码(通过提交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(天数+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值,蓝色点是强度。

您是否确定健身和疲劳曲线在您努力的那一天会上升?

是。

好的,因此可以导出锻炼,但不能导出曲线值。 精细。 让我们测试一下。

让我们看一下最近的竞争(标记为-非重要数据)。 数据必须从图形中获取,并且使用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. (疲劳(第1天)+ TSS (1-k))/(2-k)=(54 + 395 (1-k))/(2-k)= 94,所以渐行渐远。 (k = exp(-1/7))。 我在这里固定了公式的计算,因为前面的评论中的公式是错误的。
  4. 适应度(day-1)+(TSS-适应度(day-1)x ... = 61 +(395-61)x(1-e **(-1/42)= 69),这是正确的。
  5. (健身(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 等级

相关问题

cmagnuson picture cmagnuson  ·  19评论

ashdriver picture ashdriver  ·  35评论

Djaouws picture Djaouws  ·  6评论

alexisrosuel picture alexisrosuel  ·  5评论

harnbak picture harnbak  ·  3评论