Week 8: Weather#
Commit before the path is known
The question#
How do we commit to a wet-weather switch when the forecast contains several possible rain paths but only one will occur?
Last week priced one lap against one possible interruption. This week we compare one irreversible rule across four supplied weather futures.
Output: a feasible commitment lap, its position-first score, its downside and the caveat on its synthetic inputs.
A forecast is not the weather#
- a forecast path is one possible sequence of future weather states
- a forecast ensemble is several paths available before the realised weather is known
- a weight is the supplied scenario probability assigned to one path
Exactly one path will occur in our fixture. The forecast does not tell us which one. It gives the call several possible futures to survive.
The real boundary#
ECMWF describes ensemble forecasting as multiple forecast realisations that represent flow-dependent uncertainty. Those realisations can carry useful information beyond one best-guess forecast.
ECMWF did not supply this race fixture.
Every path, weight, finishing position, adjusted finish time and tyre effect in this week is synthetic. The weights are not observations, ensemble-member frequencies or calibrated probabilities.
The rule we commit#
A wet-weather set is one physical set of tyres supplied for the conditions this fixture labels wet. A commitment rule names the lap after which the strategy switches to that set.
It is irreversible inside this bounded exercise. We freeze it so that the realised weather cannot edit what the forecast justified beforehand. This is not an FIA rule, and it does not claim that a real team cannot revise strategy.
The rule names both a lap and a physical set.
Downside is a report, not the objective#
The selected rule’s downside is its worst finishing position across the supplied paths, together with every path that produces it.
We also say whether those paths bring rain earlier, later or not within the supplied horizon.
We do not choose the smallest downside. The objective remains weighted mean finishing position, with adjusted finish used only for a position tie.
Information moves in one direction#
forecast table available
↓
validate weights, laps and physical set
↓
score every feasible rule across every path
↓
save one rule and its reason
↓
realised path unlocks
↓
evaluate the saved call — never rewrite itThe save boundary separates a forecast-conditioned call from hindsight.
Failure before arithmetic: weights#
Weights must be finite, non-negative and sum to one.
E: 0.20 M: 0.35 L: 0.30 D: 0.20
sum = 1.05 → rejectassert rejects(weights=[0.20, 0.35, 0.30, 0.20])
assert score_calls == {}Renormalising would silently replace the supplied forecast. Fail the fixture.
Failure before arithmetic: the set#
Legal candidate laps are supplied. Each candidate also requires wet-weather
set W1 from the physical-set ledger.
ledger: W1 returned
lap 34 → requires W1 → infeasible
lap 36 → requires W1 → infeasible
lap 38 → requires W1 → infeasibleassert feasible_candidates(returned={"W1"}) == []
assert score_calls == {}A returned set makes every dependent commitment unavailable, not merely slow.
Tie-break micro-fixture#
All values are synthetic.
| Rule | early · 0.50 | late · 0.50 | Mean P | Mean time |
|---|---|---|---|---|
| now | P2 · 602.0 s | P6 · 608.0 s | 4.00 | 605.0 s |
| later | P5 · 604.0 s | P3 · 605.0 s | 4.00 | 604.5 s |
First establish the position tie. Only then does adjusted finish decide.
Work the tie in order#
now position = 0.50(2) + 0.50(6) = 4.00
later position = 0.50(5) + 0.50(3) = 4.00
now time = 0.50(602.0) + 0.50(608.0) = 605.0 s
later time = 0.50(604.0) + 0.50(605.0) = 604.5 sThe position scores tie, so the adjusted-time tie-break selects later.
assert select(now, later).rule == "later" # after position tieOne assertion protects the objective#
faster_but_worse = summary(mean_position=4.10, mean_time=600.0)
slower_but_better = summary(mean_position=4.00, mean_time=610.0)
assert select(faster_but_worse, slower_but_better) \
== slower_but_betterA ten-second advantage cannot rescue a worse position score. Adjusted time is not a second objective waiting to take over.
Lap 32: the supplied forecast#
At the end of lap 32, W1 is available and not returned. Legal rules commit
after lap 34, 36 or 38. Actionable rain is the fixture’s label for weather
that calls for W1; it is not a real tyre crossover claim.
| Path | Synthetic future | Weight |
|---|---|---|
| E | actionable rain from lap 34 | 0.20 |
| M | actionable rain from lap 36 | 0.35 |
| L | actionable rain from lap 38 | 0.30 |
| D | no actionable rain before lap 41 | 0.15 |
0.20 + 0.35 + 0.30 + 0.15 = 1.00 — valid.
Your precommitment pause#
The supplied model gives every candidate’s finishing position on every path. Complete the last column before advancing.
| Commit | E | M | L | D | Weighted mean P |
|---|---|---|---|---|---|
| lap 34 | P2 | P3 | P5 | P7 | ? |
| lap 36 | P5 | P2 | P3 | P5 | ? |
| lap 38 | P7 | P5 | P2 | P3 | ? |
Commit the winning rule in position-first terms. Then name the path or paths that produce that rule’s worst finish.
The realised path is still locked. These supplied outcomes describe the forecast possibilities; none says which path will occur.
Score every rule across every path#
| Commit | E | M | L | D | Weighted mean P |
|---|---|---|---|---|---|
| lap 34 | P2 | P3 | P5 | P7 | 4.00 |
| lap 36 | P5 | P2 | P3 | P5 | 3.35 |
| lap 38 | P7 | P5 | P2 | P3 | 4.20 |
lap 34 = .20(2) + .35(3) + .30(5) + .15(7) = 4.00
lap 36 = .20(5) + .35(2) + .30(3) + .15(5) = 3.35
lap 38 = .20(7) + .35(5) + .30(2) + .15(3) = 4.20The saved rule#
Choose lap 36. It has the lowest weighted mean finishing position: 3.35.
No position tie reaches adjusted finish.
Its downside is P5 on two paths:
E: actionable rain arrives earlier, so lap 36 switches lateD: actionable rain does not arrive within the supplied horizon, so the switch is unnecessarily early
Lap 34 and lap 38 each reach P7, but minimising the worst case was not our rule.
One reveal does not replace the forecast#
Suppose path L unlocks. Lap 38 would finish P2 there; the saved lap-36 rule
finishes P3.
That does not make lap 38 the better ex-ante call:
| Rule | Forecast score | Realised L |
|---|---|---|
| saved lap 36 | 3.35 | P3 |
| lap 38 | 4.20 | P2 |
The reveal evaluates the call. It cannot move information backwards through the save boundary.
The complete decision report#
commit_after_lap: 36
physical_set: W1
weighted_mean_position: 3.35
adjusted_time_tie_break: not used
worst_position: P5
worst_paths: E — rain earlier; D — no rain in horizon
weight_sum: 1.00
saved_before_reveal: true
reason: lowest weighted mean finishing position
caveat: synthetic scenario probabilities; not calibratedThe report carries the call, the evidence available when it was made and the downside it accepted.
What leaves this week#
Your lab: validate the forecast and ledger, reproduce the finite weighted scores, preserve position first, save the rule before reveal and report its downside.
The boundary: no random draw, no weather generator, no tyre crossover claim and no calibration claim.
Week 9 will turn supplied uncertainty into repeated draws and full finishing- position distributions. It owns sampling. Stop here.