Elevate: Der Fitness-Trend "Form" muss auf dem gestrigen "Fitness" und "Fatigue" basieren.

Erstellt am 23. Apr. 2018  ·  18Kommentare  ·  Quelle: thomaschampagne/elevate

Beschreiben Sie Ihre Umgebung

  • Plugin Version: 6.1.2 stabil
  • Chrome / Opera / Chromium-Version: Chrome
  • Betriebssystemversion: Mac OS

Beschreibe das Problem:

Im Moment scheint die Form als Differenz der Fitness und Müdigkeit des gleichen Tages berechnet zu werden. Es kann jedoch besser sein, sich auf die gestrige Fitness und Müdigkeit zu stützen. Dies ist natürlich umstritten. Ich kann nur diese beiden Punkte vorschlagen:
a) Es fühlt sich für mich subjektiv korrekter an, da die Trainingsermüdung am nächsten Tag stärker zu spüren ist
b) TrainingPeaks macht das (siehe hier , Abschnitt "Formular")

bug major

Hilfreichster Kommentar

@aprokop Vielen Dank für diese

Alle 18 Kommentare

Form per Definition ist (TrainingPeaks):
Training Stress Balance (TSB) oder Form repräsentiert das Gleichgewicht von Trainingsstress.

Form (TSB) = Fitness von gestern (CTL) - Müdigkeit von gestern (ATL)

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

@aprokop Ja, es sollte mit dem verwendeten mathematischen Modell sein. Formeln sind im Helfer

@thomaschampagne Ich bin

@aprokop Ja. Fitnessmodell erhöhen = Modell der Trainingsspitzen

image

@ thomaschampagne Ich glaube nicht. Das TrainingPeaks-Modell ist

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

Es scheint auch, dass die beiden anderen Formeln nicht genau richtig sind und sein sollten

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

Ich schaue auf meine TrainingPeaks-Kurve und große Anstrengungen wirken sich sowohl auf Fitness als auch auf Müdigkeit am selben Tag und auf Form am nächsten Tag erheblich aus.

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

yupp das ist auch mein Punkt:

@ thomaschampagne Ich glaube nicht. Das TrainingPeaks-Modell ist

Form (Tag + 1) = Fitness (Tag) - Müdigkeit (Tag)

Ok, ich habe es nicht verstanden. Ich habe das Ticket wieder geöffnet. Danke fürs Graben. Der FYI-Code ist hier: https://github.com/thomaschampagne/elevate/blob/990b5d0fc11113b2c4d120e6aec9f0ba3dc0e844/plugin/app/src/app/fitness-trend/shared/services/fitness.service.ts#24

Eine PR zu machen ist dir möglich oder ich kümmere mich selbst darum?

Ich habe nie mit dieser Programmiersprache gearbeitet, aber ich könnte es versuchen, wenn Sie denken, dass es einfach genug ist. Ich denke, mein Hauptanliegen ist der Umfang des betroffenen Codes und ob er eine Reorganisation erfordert.

@aprokop Der Gültigkeitsbereich sollte nur diese Methode sein: https://github.com/thomaschampagne/elevate/blob/990b5d0fc11113b2c4d120e6aec9f0ba3dc0e844/plugin/app/src/app/fitness-trend/shared/services/fitness.service

Aber keine Sorge, ich werde es tun. Benötigen Sie nur Ihre Hilfe, um Änderungen zu testen und zu validieren.

@aprokop Sind Sie sich bei 100% sicher, dass dies unten der

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

Ich habe den Code mit Ihren Empfehlungen korrigiert (über Commit https://github.com/thomaschampagne/elevate/commit/ec73ee0c5a6d3c78662c41b94a4e090c70a1572b). Um die Implementierung in vorhandenen Code zu vereinfachen, habe ich Ihre Formeln wie folgt implementiert:

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

  • Können Sie auch den folgenden Build testen und mit Ihren TrainingPeaks vergleichen, um sicherzustellen, dass alles ohne Regressionen in Ordnung ist? (Der Build enthält Commit https://github.com/thomaschampagne/elevate/commit/ec73ee0c5a6d3c78662c41b94a4e090c70a1572b ofc)

Test Build: v6.6.0_stable_ec73ee0_2018-10-17-16-05.zip

Danke für Ihre Hilfe :)

@ thomaschampagne

Sind Sie sich zu 100% sicher?

Ja und nein. Ja, ich bin sicher, dass es in dem Sinne falsch ist, dass es nicht mit TrainingPeaks übereinstimmt, da die Anstrengung am selben Tag die Fitness / Müdigkeit am selben Tag nicht beeinträchtigen würde. Es ist sicherlich notwendig, StressScore (Tag) in StressScore (Tag + 1) zu ändern. Ich bin mir jedoch nicht sicher, ob das die genaue Formel ist. Man könnte diese Formel wie denken

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

könnte auch Sinn machen (man müsste dann für Fitness lösen (Tag + 1)). Aber ich denke es ist gut so wie es ist.

Das Commit implementiert die vorgeschlagenen Formeln korrekt. Sie könnten Aktualisierungen von prevCtl und Freunde von if (isPreStartDay) -Klauseln entfernen, aber das ist geringfügig.

Ich werde es am Abend testen, wenn ich nach Hause komme.

Ich habe es gerade ausprobiert und es verhält sich wie erwartet. Die Form fiel am nächsten Tag, während Fitness und Müdigkeit am selben Tag zunahmen. Also, ich denke es ist jetzt alles gut.
screenshot_20181017_202434

@aprokop Danke für deine Tests und Bewertung! Wir haben also 2 Formeln:

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

Aber ich denke, wir haben ein Problem mit dem ersten :) Es ist seltsam, Fitness(day+1) zu berechnen, wenn Fitness(day+1) auch Teil des Ausdrucks ist ... Dies ist, was wir finden wollen.

Und wenn wir den Ausdruck lösen, haben wir:

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

... Ist das sinnvoll?!

Gibt es eine Möglichkeit, CSV-Daten Tag für Tag aus TrainingPeaks zu exportieren? Oder erhalten Sie weitere Informationen aus Ihrem TrainingPeaks-Diagramm-Screenshot?

Auf Ihrem TrainingPeaks-Diagramm-Screenshot sind rote Punkte ein Tag der Anstrengung? Bestätigen Sie, dass die Fitness- und Müdigkeitskurve am Tag Ihrer Bemühungen steigt?

Danke für Ihre Hilfe :)

@thomaschampagne Ich stimme dir zu, dass Fitness(day+1) = Fitness(day) + (StressScore(day+1)-Fitness(day+1)) x ... eine seltsame ist. Ich habe es nur erwähnt, weil ich nicht 100% sicher bin.

Gibt es eine Möglichkeit, CSV-Daten Tag für Tag aus TrainingPeaks zu exportieren? Oder erhalten Sie weitere Informationen aus Ihrem TrainingPeaks-Diagramm-Screenshot?

Das ist eine wirklich gute Idee. Ich glaube, dass es möglich ist, und das habe ich in der Vergangenheit getan. Lassen Sie mich versuchen, die neuesten Daten zu erhalten.

Auf Ihrem TrainingPeaks-Diagramm-Screenshot sind rote Punkte ein Tag der Anstrengung? Bestätigen Sie, dass die Fitness- und Müdigkeitskurve am Tag Ihrer Bemühungen steigt?

Ja, rote Punkte sind die TSS-Werte für jeden Tag und blaue Punkte sind die Intensität.

Bestätigen Sie, dass die Fitness- und Müdigkeitskurve am Tag Ihrer Bemühungen steigt?

Ja.

OK, man kann also Workouts exportieren, aber nicht die Kurvenwerte. Fein. Lass es uns testen.

Schauen wir uns das letzte harte Rennen an (Markierung als - unwichtige Daten). Die Daten mussten einem Diagramm entnommen werden und wurden von TrainingPeaks auf die nächste Ganzzahl gerundet.

| | Tag vor dem Rennen | Renntag | nach dem Renntag |
| - | - | - | - |
| TSS | - | 395 | - |
| Müdigkeit | 54 | 102 | - |
| Fitness | 61 | 69 | - |
| Formular | - | 8 | -33 |

Damit:

  1. Müdigkeit (Tag) - Fitness (Tag) = 69 - 102 = 33 = Form (Tag + 1), also haben wir die richtige Formel für Form.
  2. Müdigkeit (Tag 1) + (TSS - Müdigkeit (Tag 1)) x ... = 54 + (395-54) x (1-e ** (- 1/7)) = 99, also ungefähr 102?
  3. (Ermüdung (Tag-1) + TSS (1-k)) / (2-k) = (54 + 395 (1-k)) / (2-k) = 94, also weit weg. (k = exp (-1/7)). Ich habe die Fomula-Berechnungen hier korrigiert, da die im vorherigen Kommentar falsch ist.
  4. Fitness (Tag 1) + (TSS - Fitness (Tag 1) x ... = 61 + (395-61) x (1-e ** (- 1/42) = 69, das ist also richtig.
  5. (Fitness (Tag 1) + TSS (1-K)) / (2-K) = (61 + 395 (1-K)) / (2-K) = 69, also ist es auch ungefähr richtig (hier K. = exp (-1/42)).

Zusammenfassend scheinen diese die beste Option zu sein:

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 Ich verstehe immer noch nicht ganz warum in 2. Wir bekommen nur 99 und nicht 102.

Wirf einen Blick auf

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);

Da ist auch das .

Ich denke wir sind gut.

@aprokop Vielen Dank für diese

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

MollyMooTM picture MollyMooTM  ·  16Kommentare

alexisrosuel picture alexisrosuel  ·  5Kommentare

TRIWOLF79 picture TRIWOLF79  ·  17Kommentare

charleswolf picture charleswolf  ·  7Kommentare

ashdriver picture ashdriver  ·  35Kommentare