À l'heure actuelle, le formulaire semble être calculé comme la différence entre la forme physique et la fatigue du même jour. Cependant, il peut être préférable de le baser sur la condition physique et la fatigue d'hier. Ceci est discutable, bien sûr. Je ne peux que suggérer ces deux points:
a) cela me semble plus correct subjectivement, car la fatigue d'entraînement se fait davantage sentir le lendemain
b) TrainingPeaks fait cela (voir ici , section "Formulaire")
La forme par définition est (TrainingPeaks):
Training Stress Balance (TSB) ou Form représente l'équilibre du stress d'entraînement.
Forme (TSB) = Fitness d'hier (CTL) - Fatigue d'hier (ATL)
https://help.trainingpeaks.com/hc/en-us/articles/204071764-Form-TSB-
@aprokop Oui, il devrait avec le modèle mathématique utilisé. Les formules sont dans l'aide
@thomaschampagne Je ne suis pas sûr de comprendre votre commentaire. Êtes-vous en train de dire que c'est déjà fait
@aprokop Oui. Modèle de fitness élevé = modèle de pics d'entraînement
@thomaschampagne Je ne pense pas. Le modèle TrainingPeaks est
Form(day+1) = Fitness(day) - Fatigue(day)
Il semble également que les deux autres formules ne soient pas tout à fait exactes et devraient être
Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day)) x ...
Fatigue(day+1) = Fatigue(day) + (StressScore(day+1)-Fatigue(day)) x ...
Je regarde ma courbe TrainingPeaks, et un effort majeur affecte de manière significative à la fois la forme physique et la fatigue le même jour, et la forme le lendemain.
yupp c'est aussi mon point:
@thomaschampagne Je ne pense pas. Le modèle TrainingPeaks est
Forme (jour + 1) = Fitness (jour) - Fatigue (jour)
Ok je n'ai pas compris. J'ai rouvert le ticket. Merci pour le creusement. Le code FYI est ici: https://github.com/thomaschampagne/elevate/blob/990b5d0fc11113b2c4d120e6aec9f0ba3dc0e844/plugin/app/src/app/fitness-trend/shared/services/fitness.service.ts#
Faire un PR est quelque chose de possible pour vous ou je le gère moi-même?
Je n'ai jamais travaillé avec ce langage de programmation, mais je pourrais essayer si vous pensez que c'est assez facile. Je suppose que ma principale préoccupation est la portée du code affecté et s'il nécessite une réorganisation.
@aprokop La portée ne devrait être que cette méthode https://github.com/thomaschampagne/elevate/blob/990b5d0fc11113b2c4d120e6aec9f0ba3dc0e844/plugin/app/src/app/fitness-trend/shared/services/fitness.shared/services.fitness.
Mais ne t'inquiète pas, je vais le faire. Vous avez juste besoin de votre aide pour tester et valider les modifications.
@aprokop Êtes-vous sûr à 100% de cela ci-dessous?
Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day)) x ...
Fatigue(day+1) = Fatigue(day) + (StressScore(day+1)-Fatigue(day)) x ...
J'ai corrigé le code avec vos recommandations (via commit https://github.com/thomaschampagne/elevate/commit/ec73ee0c5a6d3c78662c41b94a4e090c70a1572b). Pour simplifier l'implémentation dans le code existant, j'ai implémenté vos formules comme ceci:
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
Version du test:
Merci pour ton aide :)
@thomaschampagne
Êtes-vous sûr à 100% de cela ci-dessous?
Oui et non. Oui, je suis sûr que c'est faux dans le sens où cela ne correspond pas à TrainingPeaks car l'effort du même jour n'affecterait pas la forme physique / la fatigue le même jour. Il est certainement nécessaire de changer StressScore (jour) en StressScore (jour + 1). Cependant, je ne suis pas sûr que ce soit la formule exacte. On pourrait penser que cette formule comme
Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day+1)) x ...
pourrait également avoir un sens (il faudrait alors résoudre pour Fitness (jour + 1)). Mais je pense que c'est bien comme ça.
Le commit implémente correctement les formules suggérées. Vous pouvez supprimer les mises à jour de prevCtl
et les amis des clauses if (isPreStartDay)
, mais c'est mineur.
Je vais le tester le soir en rentrant chez moi.
Je viens de l'essayer, et il se comporte comme prévu. La forme a chuté le lendemain, tandis que la condition physique et la fatigue ont augmenté le même jour. Donc, je pense que tout va bien maintenant.
@aprokop Merci pour vos tests et avis! Nous avons donc 2 formules:
Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day+1)) x ...
-- or --
Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day)) x ...
Mais je pense que nous avons un problème avec le premier :) C'est étrange de calculer Fitness(day+1)
si Fitness(day+1)
fait également partie de l'expression ... C'est ce que nous voulons trouver.
Et si nous résolvons l'expression, nous avons:
Fitness(day+1) = (Fitness(day) - k * StressScore(day+1)) /(1 - k) where k = exp(-1/42)
... Cela a-t-il du sens?!
Existe-t-il un moyen d'exporter les données csv de TrainingPeaks au jour le jour? Ou obtenir plus d'informations à partir de votre capture d'écran graphique TrainingPeaks?
Sur la capture d'écran de votre graphique TrainingPeaks, les points rouges sont des jours d'effort (s)? Confirmez-vous que la courbe de forme et de fatigue augmente le jour de votre effort?
Merci pour ton aide :)
@thomaschampagne Je suis d'accord avec vous que Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day+1)) x ...
est étrange. Je ne l'ai mentionné que parce que je ne suis pas sûr à 100%.
Existe-t-il un moyen d'exporter les données csv de TrainingPeaks au jour le jour? Ou obtenir plus d'informations à partir de votre capture d'écran graphique TrainingPeaks?
C'est une très bonne idée. Je pense que c'est possible, et je l'ai fait dans le passé. Laissez-moi essayer d'obtenir les données récentes.
Sur la capture d'écran de votre graphique TrainingPeaks, les points rouges sont des jours d'effort (s)? Confirmez-vous que la courbe de forme et de fatigue augmente le jour de votre effort?
Oui, les points rouges sont les valeurs de TSS pour chaque jour et les bleus sont l'intensité.
Confirmez-vous que la courbe de forme et de fatigue augmente le jour de votre effort?
Oui.
OK, donc on peut exporter les entraînements mais pas les valeurs de la courbe. Bien. Testons-le.
Regardons la course difficile récente (marquant comme -
données non importantes). Les données devaient être extraites d'un graphique et arrondies à l'entier le plus proche par TrainingPeaks.
| | jour avant la course | jour de course | après le jour de la course |
| - | - | - | - |
| TSS | - | 395 | - |
| Fatigue | 54 | 102 | - |
| Fitness | 61 | 69 | - |
| Formulaire | - | 8 | -33 |
Donc:
En résumé, cela semble la meilleure option:
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 Je ne comprends toujours pas pourquoi en 2. nous n'obtenons que 99 et non 102.
J'ai jeté un coup d'œil à 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);
Il y a aussi ceci .
Donc, je pense que nous sommes bons.
@aprokop Merci beaucoup pour cette analyse approfondie! C'est clair, sans ambiguïté!
Commentaire le plus utile
@aprokop Merci beaucoup pour cette analyse approfondie! C'est clair, sans ambiguïté!