Elevate: A tendência de condicionamento físico "Forma" deve ser baseada no "condicionamento físico" e na "fadiga" de ontem

Criado em 23 abr. 2018  ·  18Comentários  ·  Fonte: thomaschampagne/elevate

Descreva o seu ambiente

  • Versão do plug-in: 6.1.2 estável
  • Versão do Chrome / Opera / Chromium: Chrome
  • Versão do sistema operacional: Mac OS

Descreva o problema:

No momento, a Forma parece ser calculada como a diferença entre a condição física e a fadiga do mesmo dia. No entanto, pode ser melhor basear-se no condicionamento físico e fadiga de ontem. Isso é discutível, é claro. Só posso sugerir estes dois pontos:
a) me parece mais correto subjetivamente, pois o cansaço do treinamento é mais sentido no dia seguinte
b) TrainingPeaks está fazendo isso (veja aqui , seção "Formulário")

bug major

Comentários muito úteis

@aprokop Muito obrigado por esta análise profunda! É claro, inequívoco!

Todos 18 comentários

O formulário por definição é (TrainingPeaks):
O Equilíbrio do estresse do treinamento (TSB) ou forma representa o equilíbrio do estresse do treinamento.

Formulário (TSB) = Fitness de ontem (CTL) - Fadiga de ontem (ATL)

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

@aprokop Sim, deveria com o modelo matemático usado. As fórmulas estão no ajudante

@thomaschampagne Não tenho certeza se entendi seu comentário. Você está dizendo que já está dentro?

@aprokop Sim. Elevar modelo de aptidão = modelo de picos de treinamento

image

@thomaschampagne Acho que não. O modelo TrainingPeaks é

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

Também parece que as outras duas fórmulas não são exatamente corretas e deveriam ser

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

Eu olho para a minha curva de TrainingPeaks, e o maior esforço afeta significativamente a condição física e a fadiga no mesmo dia, e a forma no dia seguinte.

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

Sim, esse também é o meu ponto:

@thomaschampagne Acho que não. O modelo TrainingPeaks é

Forma (dia + 1) = Fitness (dia) - Fadiga (dia)

Fazer um RP é algo possível para você ou eu mesmo cuido disso?

Nunca trabalhei com essa linguagem de programação, mas poderia tentar se você achar que é fácil o suficiente. Acho que minha principal preocupação é o escopo do código afetado e se ele requer alguma reorganização.

@aprokop O escopo deve ser apenas este método https://github.com/thomaschampagne/elevate/blob/990b5d0fc11113b2c4d120e6aec9f0ba3dc0e844/plugin/app/src/app/fitness-trendice/shared/services/fitness-trendice.shared/services/fitness226

Mas não se preocupe, eu farei isso. Só preciso de sua ajuda para testar e validar mudanças.

@aprokop Você tem 100% de certeza sobre isso abaixo?

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

Corrigi o código com suas recomendações (via commit https://github.com/thomaschampagne/elevate/commit/ec73ee0c5a6d3c78662c41b94a4e090c70a1572b). Para simplificar a implementação no código existente, implementei suas fórmulas como esta:

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

  • Você também pode testar a compilação abaixo e compará-la com seus TrainingPeaks para ter certeza de que está tudo OK sem regressões? (A compilação inclui commit https://github.com/thomaschampagne/elevate/commit/ec73ee0c5a6d3c78662c41b94a4e090c70a1572b ofc)

Versão de teste:

Obrigado pela ajuda :)

@thomaschampagne

Tem 100% de certeza sobre isso abaixo?

Sim e não. Sim, tenho certeza de que está errado no sentido de que não corresponde a TrainingPeaks, pois o esforço no mesmo dia não afetaria o condicionamento físico / fadiga no mesmo dia. Certamente é necessário alterar StressScore (dia) para StressScore (dia + 1). No entanto, não tenho certeza se essa é a fórmula exata. Alguém poderia pensar que a fórmula como

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

também pode fazer sentido (seria necessário resolver para Aptidão (dia + 1)). Mas acho que está bom do jeito que está.

O commit implementa as fórmulas sugeridas corretamente. Você poderia mover atualizações de prevCtl e amigos de cláusulas de if (isPreStartDay) , mas isso é secundário.

Vou testá-lo à noite, quando chegar em casa.

Apenas experimentei e ele se comporta conforme o esperado. A forma caiu no dia
screenshot_20181017_202434

@aprokop Obrigado por seus testes e revisão! Portanto, temos 2 fórmulas:

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

Mas acho que temos um problema com o primeiro :) É estranho calcular Fitness(day+1) se Fitness(day+1) também fizer parte da expressão ... Isso é o que queremos encontrar.

E se resolvermos a expressão, temos:

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

... Isso faz sentido?!

Existe uma maneira de exportar dados csv do TrainingPeaks dia a dia? Ou obter mais informações na captura de tela do gráfico TrainingPeaks?

Na captura de tela do gráfico TrainingPeaks, os pontos vermelhos são dias de esforço (s)? Você confirma que a curva de condicionamento físico e fadiga aumenta no dia do seu esforço?

Obrigado pela ajuda :)

@thomaschampagne Eu concordo com você que Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day+1)) x ... é estranho. Só mencionei isso porque não tenho 100% de certeza.

Existe uma maneira de exportar dados csv do TrainingPeaks dia a dia? Ou obter mais informações na captura de tela do gráfico TrainingPeaks?

Isto é mesmo uma ótima ideia. Acredito que seja possível, e já fiz isso no passado. Deixe-me tentar obter os dados recentes.

Na captura de tela do gráfico TrainingPeaks, os pontos vermelhos são dias de esforço (s)? Você confirma que a curva de condicionamento físico e fadiga aumenta no dia do seu esforço?

Sim, os pontos vermelhos são os valores do TSS para cada dia e os azuis são a intensidade.

Você confirma que a curva de condicionamento físico e fadiga aumenta no dia do seu esforço?

Sim.

OK, então pode-se exportar exercícios, mas não os valores da curva. Bem. Vamos testar.

Vejamos a recente corrida difícil (marcando como - dados não importantes). Os dados tiveram que ser retirados de um gráfico e foram arredondados para o número inteiro mais próximo pelo TrainingPeaks.

| | dia pré-corrida | dia da corrida | após o dia da corrida |
| - | - | - | - |
| TSS | - | 395 - |
| Fadiga | 54 102 - |
| Fitness | 61 69 - |
| Formulário | - | 8 -33 |

Assim:

  1. Fadiga (dia) - Aptidão (dia) = 69 - 102 = 33 = Forma (dia + 1), então temos a fórmula correta para Forma.
  2. Fadiga (dia 1) + (TSS - Fadiga (dia 1)) x ... = 54 + (395-54) x (1-e ** (- 1/7)) = 99, então aproximadamente 102?
  3. (Fadiga (dia-1) + TSS (1-k)) / (2-k) = (54 + 395 (1-k)) / (2-k) = 94, portanto, distante. (k = exp (-1/7)). Fixei os cálculos dos fórmulas aqui, pois o do comentário anterior está errado.
  4. Fitness (dia-1) + (TSS - Fitness (dia-1) x ... = 61 + (395-61) x (1-e ** (- 1/42) = 69, então está correto.
  5. (Fitness (dia-1) + TSS (1-K)) / (2-K) = (61 + 395 (1-K)) / (2-K) = 69, então também está certo (aqui, K = exp (-1/42)).

Em resumo, estas parecem ser a melhor opção:

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: Ainda não entendi direito por que em 2. temos apenas 99 e não 102.

De uma olhada no 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);

Também existe isso .

Então, acho que estamos bem.

@aprokop Muito obrigado por esta análise profunda! É claro, inequívoco!

Esta página foi útil?
0 / 5 - 0 avaliações