Field Intelligence · FTC Alliance Selection
Team IK19859 · Built for actual competition · scoutselect.org

Scout
Select.

FTC alliance selection gives you three minutes and imperfect data. Raw scores lie. We built the math to separate signal from noise.
0
Monte Carlo sims
β
Bayesian shrinkage
OPR
via Gaussian elim.
Live
at scoutselect.org

Why raw
scores lie.

Ax = b
Match matrix system
μ̂ = (μ₀/σ₀² + x̄n/σ²) / (1/σ₀² + n/σ²)
Bayesian posterior
z = √(−2 ln U₁) · cos(2π U₂)
Box-Muller transform

In FTC (FIRST Tech Challenge) competition, alliance selection is one of the highest-leverage decisions of the event. After qualification rounds, the top-ranked teams pick alliance partners — two additional robots to compete in elimination rounds. You have roughly three minutes to decide.

The naive approach is to sort by raw match score. But raw scores are deeply confounded: a robot that consistently scores 40 points alongside a partner who scores 60 looks identical in the rankings to a robot that scores 40 while carrying a partner who scores 20. These robots are fundamentally different — but the number is the same.

"A robot that carries a weak partner to 40 points is worth more than a robot that coasts to 40 behind a strong one. Raw scores can't tell you which you're looking at."

OPR (Offensive Power Rating) is the standard metric that separates team contribution from partner contribution using the full qualification dataset. The calculation is a system of linear equations — one per match — where each team's individual contribution is the unknown. Solved via Gaussian elimination.

But OPR has its own weakness: small sample sizes. With only 6–10 matches per team in a typical regional event, OPR estimates are noisy. A team that played strong opponents who scored 30 looks worse than a team that carried weak partners to the same number. The variance swamps the signal. ScoutSelect fixes both problems.

Chapter Two

The
Platform.

Six distinct systems working in concert. Each one exists because a specific failure mode in conventional scouting demanded a specific fix.

01 — Linear Algebra
OPR via Gaussian Elimination
Full match matrix decomposition · per-team contribution
Raw match scores are decomposed into per-team contributions by solving the full match matrix. Gaussian elimination on the resulting linear system separates your robot's scoring from your alliance partner's scoring — something sorting by total score can never do. Custom TypeScript implementation, no external library.
02 — Bayesian Inference
Bayesian Shrinkage for Small Samples
Posterior mean · shrinks toward population · sample-weighted
With 6–10 matches, OPR estimates are noisy. Bayesian shrinkage pulls extreme estimates toward the population mean, weighted by sample size. Teams with fewer matches get shrunk more aggressively. Result: stable rankings early in the event when data is scarce — exactly when the decision matters most.
03 — Stochastic Simulation
Monte Carlo Win Probability Engine
2,000 iterations · Box-Muller sampling · full PDF output
For every possible alliance combination, ScoutSelect runs 2,000 Monte Carlo simulations. Each simulation samples a match score from each robot's performance distribution modeled from historical variance. Outcome: a win probability distribution with confidence bounds — not a point estimate, but a full probability density.
04 — Geometry
Synergy & Fit Scoring
Performance fingerprint · Euclidean distance · phase-weighted
Each robot is profiled across three phases: autonomous, teleop, and endgame. A fingerprint vector is built for each robot. Euclidean distance between fingerprints measures complementarity — partners with different fingerprints fill gaps, while identical fingerprints indicate redundant strengths. ScoutSelect ranks picks by complementarity, not just raw contribution.
05 — Combinatorics
Snake Draft Simulation
Full draft order · availability-filtered · live updates
Alliance selection runs as a modified snake draft. ScoutSelect simulates the full draft order, filters out teams already selected, and surfaces the highest-impact available pick at your exact position in the sequence. Updated live as selections are made — so you always know who's still on the board.
06 — Classification
Alliance Role Detector
OPR thresholds · real-time classification · four tiers
OPR thresholds classify every team in real time: Captain / First Pick / Second Pick / Bubble. Gives alliance captains a clear view of the field before the board fills. Built on live FTC Event Partner API data — the classification updates after every new match result.
Technical Stack
Framework
Next.js 15
App Router, server components, edge runtime
UI Runtime
React 19
Concurrent features, transitions, Suspense
Language
TypeScript (strict)
Full type safety across all simulation code
Styling
Tailwind CSS v4
Utility-first, no runtime CSS overhead
Data Layer
GraphQL
Typed queries, batching, live subscriptions
Live Data
FTC Event Partner API
Live match data, team rosters, real-time scores
Sampling
Box-Muller Transform
Gaussian sampling for Monte Carlo engine
Linear Algebra
Custom Gauss. Elim.
Hand-implemented in TypeScript for OPR
Deployed & Live
scoutselect.org
Available to any FTC team — no sign-up required · Developed by Team IK19859
Open Platform
Interactive Demo

Try the
Engine.

Live mock simulation — same algorithms, fake teams. Regenerates every 12 seconds. This is what runs on the competition floor.

LIVE
Initialising…
↺ 12s
Your Rank
#4
Team 19859
Pick Pool
available picks
Win Prob
vs rank #1
Score σ
pts std dev
Simulations
2,000
Monte Carlo
Alliance Role Detection Top 8 by Bayesian OPR
RankTeamOPRRole AutoTeleopEG
Smart Pick Optimizer For rank #4
Win Probability Engine 2,000 iterations
vs Rank #1 Alliance
Monte Carlo Score Distribution · 2,000 simulations Win ▶ | ◀ Loss
Snake Draft Board Alliance selection order · 4 alliances
Round 1 — Captain picks in rank order
Round 2 — Snake reverses
Initialising draft board…

Built
for real
matches.

ScoutSelect wasn't built as a demo. It was deployed at actual FTC competitions during the 2025–26 season.

Live Usage Stats
  • 3-minute selection window
  • 2,000 Monte Carlo sims per matchup
  • Live match data via API
  • Champion Alliance result

During the 3-minute alliance selection window at California Invitational 2025, ScoutSelect was running live on the competition floor. The platform identified pick order in real time and flagged two teams whose raw scores substantially understated their actual per-robot contribution — teams that a simple sort-by-score approach would have missed entirely.

Those picks became part of the Champion Alliance run that made Team IK19859 the first Chinese team to reach Champion Alliance at that event. The platform didn't just theoretically work — it influenced decisions in an actual elimination bracket.

"The math has to be right and it has to be fast. You can't explain Bayesian shrinkage to a teammate during a 3-minute clock. It just has to produce the right answer."

The platform is live at scoutselect.org and available for any FTC team to use. Developed in full by George Hu under Team IK19859.

01
California Invitational 2025
ScoutSelect deployed live · 3-minute selection window · flagged two undervalued teams
Champion Alliance
02
First Chinese Team at CI Champion Alliance
Historical milestone — selection informed by ScoutSelect OPR + Monte Carlo output
Historic Achievement
03
Live Deployment at scoutselect.org
Open to all FTC teams · 2025–26 season and beyond · FTC Event Partner API integration
Production
What This Proves

Signal
over noise.

Three things this platform demonstrates — for any interviewer asking whether this is rigorous engineering or weekend scripting.

01
Quantitative rigor under time pressure
Built a system that does real statistics — Bayesian inference, Monte Carlo simulation, linear algebra — on a 3-minute decision clock. The math has to be right and it has to be fast. There is no fallback and no tolerance for a wrong answer in an elimination bracket.
02
Problem-driven design
Every feature started from a specific deficiency in how teams typically approach alliance selection. OPR exists because raw scores lie. Bayesian shrinkage exists because OPR is noisy on small samples. Monte Carlo exists because point estimates hide variance. The platform grew from the problem out — not the technology in.
03
Production engineering
Not a one-off script. A full-stack web application with live API integration, deployed and actively used in actual competition conditions. Next.js 15, TypeScript strict mode, GraphQL data layer, real-time updates as match results come in. It had to work when it mattered — and it did.

Also Explore

Portfolio
Full Portfolio

Robotics · Research · Rowing · Debate · All work.

Explore →
Chapter 01 · Engineering
FTC Robotics

Control systems lead. World Championship qualifier. The full robotics story.

Explore →
Research · ML
JouleRoute-LM

Adaptive layer routing for energy-efficient local LLM inference.

Explore →
Ready to go back?
Return to Portfolio