Monday, February 3, 2014

adding an attenuation term to sprinting power: meh.

I've noted that the model persistently predicts, for me, higher sprint powers than I have recorded. Is this difference significant? Perhaps I simply tend to underperform relative to capacity for very short sprints. Or perhaps it is an anomaly associated with the powertap power measurement (these data were mostly taken on the yellow Cervo computer, by the way). But assuming it is significant, it would be preferable to try and model it.

The key assumption is that each component is able to deliver its full capacity all the way to zero time. This is an obvious assumption for any given component, but since the model simply adds components, the implicit assumption is that I am able to deliver my maximum contribution from all components simultaneously. So if I am able to deliver my maximum component-1 power, which I call anaerobic, I am simultaneously able to deliver my maximum component 2 power, which I'll call aerobic. Since aerobic power can be sustained for a long time (note the constant τ2 I got from fitting my data was over 2 hours), the conclusion would be that I could unleash my best sprint from when my aerobic system was at its maximum.

But this is clearly over-simplistic. Aerobic power doesn't turn on instantly: it takes some time. If I stomp on the pedals for one second, this barely dings my aerobic system. That's almost all raw strength (neuromuscular). And from experience, I know that my best sprint power have come from an only moderate level of exertion, for example, slowly build speed on a descent, and then stomp it coming into a gradual climb, holding speed (rather than accelerating) as the grade increases. This allows me to increase power at a relatively constant cadence.

In any case, it's clear that the assumption all components contribute full-blast at the same time. If I want to make a 1-second effort, I have a choice: I can do it mostly aerobically, mostly anaerobically, or following the discussion of Coggan and Allen "Training and Racing with a Power meter", mostly neuromuscular. The primarily-neuromuscular effort will deliver the highest power. This will contain contributions from all three energy systems, but the aerobic system won't be contributing to its peak capacity, and perhaps the anaerobic system won't either (I am differentiating here between the anaerobic components, calling one "neuromuscular", the Coggan & Allen zone 7, and the other "anaerobic", the Coggan and Allen zone 6. They're just labels. I don't care about the physiological details for the purposes of this discussion.)

So the end result is that when I tap into neuromuscular power to the maximum extent, I lose the ability to get 100% out my my aerobic power. If I want 100% of aerobic power, then I don't get as much neuromuscular power. There is some distribution of the two, or rather three adding in the "anaerobic" power, which yields the maximum power for a given duration. I assume at every given "quality" time point, that optimum has been attained.

To account for this, I need to add another fitting parameter, a low-duration adjustment to maximum power. This is the amount of power lost relative to the otherwise optimal combination of the modeled power components. The simplest way to deal with this may be to use an exponential component:

Δ P = -P3 exp( -t / &tau3 )

The key is that while there is no mathematical requirement that maximum power, experimentally, be monotonic (ie not increasing with duration), clearly there is such a constraint for the theoretical best power. It's hard to imagine that if a rider is able to produce a given power for a given duration he is unable to do so for any shorter duration. This restricts the slope of the model curve to be strictly nonpositive. There is thus a constraint on this term that, when added to the other terms, it fails to generate a positive slope at anywhere along the curve. Since the formula has a peak slope at time zero, and the other terms have peak slopes away from zero, it is reasonable to assume that if this function were to flip the sign it would do so at time zero.

The slope of this term is simple:

Δ ∂ P / ∂ t = -Δ P / τ3

So the constraint is that when this is added to the slopes from the other terms the result is non-positive.

One way to do this is to assume at time zero the slope is exactly zero. The net power model is:

P = P1 ( τ1 / t) ( 1 - exp[ -t / τ1 ] ) + P2 / ( 1 + t / τ2 )α2 - P3 exp[ -t / τ3 ]

Differentiating at time zero yields:

∂ P / ∂ t |t = 0 = P1 / 2 τ1 + P2 / τ2 - P3 / τ3

Setting this to zero and solving for τ3 yields:

τ3 = P3 / ( P1 / 2 τ1 + P2 / τ2 )

If τ2 is much larger than τ1, as is expected to be the case, then:

τ3 ≈ 2 τ1 P3 / P1

So there's the need only for one fitting parameter: pick P3, the amount by which the zero-time power is reduced, then set τ3 to a value calculated to set the zero-time derivative to zero. The hope was in practice that this won't result in negative slopes for any larger times. This hope, it turned out, was to be dashed like a ship against the rocks... (pause to reflect on this imagery).

With the omission of τ2 in the above, a negative slope component is omitted, so omitting it doesn't violate the exclusion of positive slopes, but it will result in a (typically small) negative residual slope at zero time. This is fine: it should be unnoticable, and the zero slope constraint was highly arbitrary, anyway.

The complication with any change in the formula is this changes the derivatives with respect to P1 and τ1, as well as adding an additional derivative for P3. If it were assumed this adjustment had no effect on the other components, it could be applied post-facto, but it's better to include it in the self-consistent solution. And for that, the derivatives need to be used to assure robust convergence.

So the additional derivative components are as follows:

P1 Δ ∂ P / ∂ P1 =
   -P1 P3 ∂ exp( -P1 t / 2 P3 τ1 ) / ∂ P1 =
     (P1 / 2) ( t / τ1 ) exp( -P1 t / 2 P3 τ1 )


τ1 Δ ∂ P / ∂ τ1 =
   -τ1 P3 ∂ exp( -P1 t / 2 P3 τ1 ) / ∂ τ1 =
     -(P1 / 2) ( t / τ1 ) exp( -P1 t / 2 P3 τ1 )

P3 Δ ∂ P / ∂ P3 =
   -P3 ∂ P3 exp( -P1 t / 2 P3 τ1 ) / ∂ P3 =
     -( P3 + [P1 / 2] [t / τ1] ) exp( -P1 t / 2 P3 τ1 )

I implemented this model. To get it to pay enough attention to sprint power, I had it boost the weighting factors for points from 1 to 5 seconds: I used 1000 rather than 1 if they were overestimated rather than 1, and for all points I used 10000 if the model underestimated them. This worked sometimes, giving P3 values on order 100. But other times I got P3 values on order 1000, with comparably inflated values of P1. To avoid this I them implemented a sequential solving scheme, solving for 4 parameters (assuming α2 = 0.5 and P3 = 10 W), then solving for 5 (adding α2 to the solution mix), then solving for all 6. This approach was to try and maximize the quality of initial guesses. It didn't help much: the trade-off for any avoidance of crazy parameter trade-offs was an increase in solution time and an apparent susceptibility for negative slopes in the fitted model.

So overall it wasn't a success. In the end, it's not so bad having the model fail in the neuromuscular region. There's not much need to model that: just look at the data. Where the model is more typically needed is in interpolating power between middle-range times. I've got a strong preference for models with fewer coefficients. P3 doesn't make the cut.

There is an approach which would guarantee to not result in any negative slopes. It's to use some sort of harmonic norm, for example:


P' = 1 / [ (1 / P)k + (1 / Pmax)k) ]1/k

This would take the highest powers and squish them down to a Pmax ceiling, with an abruptness determined by the constant k, which would probably be on order 5. For the derivatives, the chain rule comes to the rescue, I think. There's also an issue that the optimal value may be infinite. There's a fix for that, however, as well. But as I said, for now the 5-parameter model works for me.

No comments: