28Visual ReasoningAI Research

Snooker Prediction

#ModelScoreStepsIn tokOut tokAvg costAvg time
1GPT-6 Astra
0.6294
±0.004
1,637712.0M1.5M$1513.1512.4h
2Claude Sonnet 5.5
0.6055
±0.017
1,347593.5M2.3M$148.3818.6h
3Claude Opus 5.5
0.5858
±0.050
913380.5M944k$102.4113.0h
4Gemini 4 Argon
0.4867
±0.161
410156.7M776k$72.18*6.3h
5Claude Fable 5.1
0.4688
±0.055
425158.0M403k$88.766.5h
6GPT-5.6 Sol
0.4262
±0.081
364141.7M236k$151.764.5h
7Claude Opus 5
0.3450
±0.177
665279.1M876k$173.2618.0h
8Claude Haiku 5.5
0.2672
±0.106
363150.7M804k$9.757.3h
9Claude Fable 5
0.2544
±0.169
460203.4M629k$250.5416.8h
10Grok 4.6
0.2009
±0.142
591146.0M1.0M$176.629.6h
11Muse Spark 1.3
0.1527
±0.193
1,189518.9M861k$393.5719.7h
12GLM-5.3
0.0778
±0.077
539230.8M594k$73.2817.7h
13Gemini 3.8 Flash
0.0385
±0.054
373117.7M322k$12.441.4h
14Qwen3.8-Max
0.0176
±0.039
669222.7M1.7M$83.5319.3h
15Qwen3.8-Max-0902
0.0123
±0.017
30464.4M1.4M$32.3120.1h
16Inkling
0.0107
±0.015
872.6M41k$2.681.2h
17Grok 4.7
0.0017
±0.004
729170.4M730k$169.4510.6h
18DeepSeek V4 Flash Vision Exp
0.0000
±0.000
581242.0M587k$4.2512.0h
19Gemini 3.7 Flash
0.0000
±0.000
26254.3M348k$7.161.6h
20GLM-5.3 Flash
0.0000
±0.000
610262.3M599k$10.5916.4h
21Kimi K3
0.0000
±0.000
774331.1M926k$122.3119.8h
22Muse Spark 1.2
0.0000
±0.000
31478.4M444k$17.081.6h

*Gemini 4 Argon: Cache hit rate is much lower due to a non-production setting.

Background

Predicting where snooker balls end up from a short video clip chains together most of classical computer vision and physical reasoning: detecting and tracking balls through occlusions and collisions, recovering the table's coordinate frame from pixels, estimating velocities from a handful of frames, and then rolling the dynamics forward through ball-ball impacts, cushion bounces, and friction, seconds past the last observed frame, where small velocity errors compound quickly.

The clips are first-party and procedurally generated: tables, balls, and trajectories are rendered from a snooker-physics simulation, and ground-truth coordinates come from the same simulation rather than human annotation. No broadcast or scraped footage is involved, so the answers cannot be recalled from training data.

Task

Build a program that predicts the future position of every snooker ball for each clip and timestamp pair listed in /app/data/target_times.csv, writing the results to /app/predictions.csv. Each observation video covers 0.0–3.0 seconds; target timestamps range from 3.5 to 7.0 seconds, up to four seconds beyond the last observed frame.

  • Predictions use the schema clip_id,time,ball_id,color,x,y, with coordinates in meters in the semantic table frame (origin at the center of the playable surface, roughly ±1.70 m by ±0.80 m).
  • Non-red balls are matched by color; red-ball IDs need not be stable, since reds are matched by position.
  • Quality depends on positional accuracy and complete coverage of the requested balls and timestamps; omitted balls are penalized at the worst physically meaningful distance.
  • No external data or services; changes stay confined to /app.

What The Agent Gets

29 rendered MP4 observation clips under /app/data/videos/, each ending at 3.0 seconds. Nine clips come with provided future-position examples (example_annotations.csv and example_target_times.csv) for local development; the remaining 20 clips are the ones requiring predictions, with 160 clip/timestamp pairs in target_times.csv.

  • Starter code in /app/predict.py and a local diagnostic, python3 /app/evaluate_predictions.py, that checks predictions against the provided examples.
  • A data contract and coordinate-frame reference in /app/data/README.md.
  • Python 3.11 with NumPy, pandas, SciPy, OpenCV, Pillow, Matplotlib, tqdm, and FFmpeg preinstalled for frame extraction and analysis. The machine is effectively offline.

Verification

A root-only verifier scores /app/predictions.csv against private annotations taken from the same simulation that rendered the clips. For each clip/timestamp group, predictions are matched to truth within each color class (reds via minimum-cost Hungarian assignment), and per-ball distances are capped at the table diagonal, so submitting an uncertain ball is never worse than omitting it. Missing balls, extra balls, malformed rows, and rows at wrong timestamps all incur the maximum-distance penalty.

  • The score is max(0, 1 − RMS / 0.85 m) over all scored points. The 0.85 m threshold puts frozen data-free baselines at zero: a constant layout derived from the examples measures 0.91 m RMS and random in-bounds guessing 1.35 m.
  • A missing, symlinked, or unparseable predictions file zeroes the result; rows for the public example clips are ignored without penalty.

Environment

Base imagepython:3.11-slim-bookworm
Tools availableFFmpeg, Python 3
Compute8 CPUs · 32 GB RAM
Time limit20h

References

  • cp-algorithms Hungarian algorithm (CC BY-SA 4.0): The minimum-cost assignment routine in the hidden scorer is adapted from Andrey Lopatin's implementation published by cp-algorithms; the agent-visible diagnostic uses SciPy's implementation instead. Everything else is original to this task: the clips (procedurally generated from a first-party snooker-physics simulation), scorer, diagnostics, and coordinate contract.