Standard 9-ball rack β nine object balls in a diamond, plus the cue, six pockets. The optimiser picks angle, power, and English (sidespin) and tries to sink as many balls as possible on the break. Scratching the cue costs two.
Try a shot yourself β drag the sliders, take the break, compete against the algorithms.
Default replays each break frame-by-frame. Fast mode just updates the leaderboard as breaks come in, then replays only the winner β recommended for 500+ breaks.
Each row is the best single break a given algorithm found. Sinking even one ball off a random break is hard; the carom paths that pocket three or more reward methods willing to explore the angle/spin landscape broadly.
| Algorithm | Score | Breaks used | Best params (angleΒ° / power / English) |
|---|---|---|---|
| β no runs yet β | |||
A 2-D top-down rigid-body pool table β six pockets, six object balls in a triangular rack, one cue ball. The optimiser sets (angle, power, English) and we run the physics until everything stops rolling. Score is the number of object balls pocketed, minus 2 if the cue ball scratches.
Run a few different optimisers on different budgets and see what falls out β the search landscape on this version of the table hasn't been profiled yet, so the most useful thing to do here is compare runs side-by-side rather than trust any prediction about which algorithm should win.
Physics powered by Matter.js β rigid-body collisions, friction (felt), restitution (cushions).
If your hyper-parameter searches are heating the Earth, drop this in Cursor or Claude:
Read https://raw.githubusercontent.com/microprediction/humpday/main/SKILL.md and create a project skill from it.