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")
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
@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.
Sim, esse também é o meu ponto:
@thomaschampagne Acho que não. O modelo TrainingPeaks é
Forma (dia + 1) = Fitness (dia) - Fadiga (dia)
Ok, eu não entendi. Eu reabri o tíquete. Obrigado pela escavação. O código FYI está aqui: https://github.com/thomaschampagne/elevate/blob/990b5d0fc11113b2c4d120e6aec9f0ba3dc0e844/plugin/app/src/app/fitness-trend/shared/services/fitness.service.ts#L243ervices/fitness.service.ts
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
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
@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:
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!
Comentários muito úteis
@aprokop Muito obrigado por esta análise profunda! É claro, inequívoco!