🎳 Bowling Optimizer

Watch a derivative-free optimizer learn how to bowl. Each throw is a point in a 4-D parameter space (speed, angle, spin, release position); the score is the number of pins knocked down. Pick an algorithm and let it search.

Algorithm

Score0
Throws used0
Best so far—
Speed—
Angle—
Spin—
Release X—

Leaderboard (this session)

Each row records the best throw a given algorithm found in a single run. Run several algorithms to compare — there's no single best derivative-free method, but the ranking on this 4-D mostly-flat landscape with a sharp scoring peak is itself informative.

AlgorithmBest pinsThrows usedBest params (speed / angle / spin / release)
— no runs yet —

What's happening

The throw simulator runs a simplified rigid-body model: a ball moves down the lane, curves under the influence of its spin, hits pins, transfers momentum to them, bounces off walls. Each throw takes a few hundred simulated frames. There is no randomness in the simulation: the same four parameters always produce the same throw and the same number of fallen pins.

The 4 parameters are mapped from the unit cube [0, 1]4 — HumpDay's convention — to physical units:

The optimiser does not know what those parameters mean. It only sees a 4-D black-box function: the number of fallen pins, negated since HumpDay minimises, minus a small near-miss term, -fallenPins - 0.05 * nearMiss.

nearMiss adds, for each pin that nothing hit, 1 / (1 + d / 10), where d is the closest the ball's path came to that pin's starting position. It breaks ties between throws that knock down the same number of pins, and gives the search something to follow in the region where throws hit nothing at all. The objective is deterministic, but it is not smooth: the pin count moves in whole steps and has plateaus, and no gradient is available. That is the situation derivative-free methods are designed for.

🌱 Save the Planet

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.
View SKILL.md →