Estimating Individual Fuel Contribution with OPR
The official field only reports an alliance's combined fuel total — never how much each individual robot scored. Here's exactly how we split that total into a per-team estimate, shared openly so other teams can understand, critique, or reuse the method.
The Core Formula
Each team gets a slice of the alliance's actual fuel, sized by its share of the alliance's combined OPR. Computed separately for auto and teleop, then rounded to whole fuel.
The Problem
During a match, the official FRC scoring system (and The Blue Alliance) tells us how much fuel an alliance scored — all three robots combined. It does not tell us how much each individual robot contributed. We want a per-team estimate, so we split the alliance's total fuel between its three teams using OPR as a weighting factor.
What is OPR?
OPR (Offensive Power Rating) is a single number per team that estimates that team's average expected contribution. We don't calculate it ourselves — we pull it directly from The Blue Alliance's Component OPR (COPR) endpoint for the event, using three components:
| Component | What it estimates |
|---|---|
| Hub Auto Fuel Count | Average fuel scored in auto |
| Hub Teleop Fuel Count | Average fuel scored in teleop |
| Hub Total Fuel Count | Average total fuel scored |
How TBA derives OPR (the short version)
TBA looks at every match at the event. For each match it knows the total an alliance scored and which three teams were on it. It then solves a large system of equations (a least-squares best fit) to find the single number per team that best explains all of those alliance totals across the whole event. That number is the team's OPR — roughly, "on average, how much does this team add to its alliance's score?"
OPR is a statistical best-fit estimate, not a direct measurement. It works best after teams have played several matches.
Step by Step
- 1
Pull each team's OPR
From TBA's COPR data we get auto, teleop, and total OPR for every team at the event.
- 2
Get the alliance's actual fuel for the match
From the official score breakdown we read the real fuel the alliance scored (auto, teleop, and total). This is a measured value, not an estimate.
- 3
Add up the alliance's OPR
Sum the OPRs of the three teams on the alliance (done separately for auto and teleop): Alliance OPR = Team1 + Team2 + Team3.
- 4
Take this team's slice of the pie
Team Fraction = Team OPR / Alliance OPR, then Team Fuel = round(Alliance Actual Fuel × Team Fraction).
Worked Example
Suppose the Red alliance actually scored 30 teleop fuel, with teleop OPRs of 12, 6, and 2 — an alliance OPR of 20.
| Team | OPR | Fraction (OPR / 20) | Estimated Fuel (× 30) |
|---|---|---|---|
| Team A | 12 | 0.60 | 18 |
| Team B | 6 | 0.30 | 9 |
| Team C | 2 | 0.10 | 3 |
| Total | 20 | 1.00 | 30 |
The three estimates add back up to 30 — the real alliance total. OPR only decides how to divide the pie, not how big the pie is.
Try It Yourself
Drag the sliders to set each team's OPR and the alliance's actual fuel for the match. Watch how every team's estimated contribution shifts in real time — the slices always sum back to the real total.
Estimated Split
Alliance OPR = 400
360 fuel
240 / 400 = 60.0%
180 fuel
120 / 400 = 30.0%
60 fuel
40 / 400 = 10.0%
Estimates sum to 600 — exactly the alliance's actual fuel.
Why It Works This Way
- OPR ratios, not raw OPR. What matters is a team's OPR relative to its alliance-mates. Stronger teammates mean a smaller slice of the same pie.
- We anchor to reality. We scale OPR fractions by the actual fuel scored that match. OPR is the "how to split"; the real count is the "how much."
- Auto and teleop split independently, each using its own OPR component, then combined into a total.
- It's an estimate, not a measurement. An unusually good or bad match, or missing/early OPR data, can throw the split off.
- Safe fallback. If alliance OPR is 0 or a required value is missing, the system returns a blank value instead of guessing.
Analogy for Students
Three friends split a restaurant bill — but not evenly. They split it in proportion to how much each person usually eats (their OPR). The bill total (the actual fuel scored) is fixed and real; OPR only decides each person's percentage of it.
Limitations & Honest Caveats
- OPR assumes contributions are additive and consistent across matches. Real robots vary match to match (defense played against them, breakdowns, strategy changes).
- Early in an event, OPR is unreliable because few matches have been played.
- A team that plays defense (helping without scoring fuel) will have its fuel contribution underestimated — defense doesn't show up in fuel OPR.
- This is a shared-credit model: it distributes the alliance total, so it can never say a robot scored more than the alliance actually did.
Summary
We take the alliance's real fuel total and divide it among the three teams in proportion to their OPR. OPR (from The Blue Alliance) tells us each team's typical share; the actual match total keeps the estimate grounded in reality.
ScoutingHQ · Built for FIRST Robotics Competition teams