Team: Xplore. Round: Main round (round one). Adaptation-round files will be added below, clearly labeled, before noon; the main-round files stay unchanged.

Inspiration

House Edge asks for the probability of each payout class (0x, 1x, 2x, 5x, 20x) on every test machine's next spin, scored against the simulator's true odds. Each machine's history is a short, noisy sequence, so we wanted a model that learns how payouts evolve over time and borrows strength from the other machines in the same episode.

What it does

For each of the 1,536 test queries it builds a sequence from the ticks before the cutoff (the machine's own payouts, an observed flag, machine type, signal, tick position, and a summary of the other machines at the same tick). Twelve small two-layer GRU models read that sequence, and their softmax outputs are averaged into the five probabilities.

How we built it

  • Training data: only the organizers' train and validation splits. The validation true probabilities were used as extra soft targets. No test data was used for training or selection.
  • Model selection without test data: a two-fold cross-fit (train plus half of validation, scored on the other half). Single recipes scored about 50 to 51 of 60; a blend of nine models about 53.7.
  • Training: PyTorch on a GPU, with every recipe and seed listed in training/final_recipes.txt.
  • Prediction: the trained weights are saved as float64 .npz files and run with a plain numpy forward pass (predict.py), with no PyTorch needed. It is deterministic, CPU only, and takes about 65 to 90 seconds.

Reproducibility

entry.zip holds the code, the 12 saved models, README.md, reproduce.json and requirements.txt (numpy==2.5.4). Unpacked in a clean folder, python predict.py --data /data --out /output/submission.csv rebuilds the submitted CSV to within 2e-16 per probability (limit 1e-8). We also checked it in a clean python:3.13-slim container with no network.

Challenges we ran into

  • Scores between recipes differ by a point or two, which is close to the noise of a two-fold estimate, so we preferred blends over chasing a single best recipe.
  • Making GPU-trained models reproduce exactly meant moving prediction to float64 numpy and checking it against the CSV in a clean container.

What we learned

In our cross-fit, a blend of several small models beat every single recipe (about 53.7 of 60 against 50 to 51), so we shipped an ensemble rather than one model.

Main-round files

  • submission.csv (1,536 queries, SHA-256 721ed2b7c649cbcfc35316111ea95246dc4004c2a93a3722dac3136f12308d5f)
  • entry.zip (code and weights)

Adaptation round (round two) files

The same code and the same 12 training recipes were retrained from scratch on the adaptation kit's train and validation data only (no main-round data or models used at prediction time). The organizer checker reports VALID FORMAT, 1,536 queries. Unpacked in a fresh folder, the adaptation entry.zip rebuilds its CSV to within 2e-16 per probability in about 80 seconds on CPU.

  • ADAPTATION_ROUND/submission.csv (SHA-256 a338c70acdc749a112787b867500b8c89649d0e3a61c5fc20d4048b8935d6cf6)
  • ADAPTATION_ROUND/entry/ (contents of the adaptation entry.zip)

Main-round files above are unchanged.

Built during TAMU Datathon 2026 with AI coding assistants (Claude).

Built With

Share this project:

Updates

Submission history