Chapter 11 of The Nature of Code, Neuroevolution, evolves neural network weights with a genetic algorithm instead of training them by gradient descent. Here the environment is today’s Open-Meteo wind forecast on a 3×3 grid over the US Northeast, drawn as a lon/lat map (west start, east goal, north up).

I put the neuroevolution agents on today’s Open-Meteo Northeast wind grid, so the genomes have to cross a measured forecast on a fuel budget rather than a made-up obstacle course.

Each rider carries a feedforward controller \(\mathbf{o} = \tanh\!\left(W_2\,\tanh(W_1\mathbf{x}+\mathbf{b}_1)+\mathbf{b}_2\right)\) with architecture \(4 \to 4 \to 2\). The input is \(\mathbf{x} = (u, v, \sin\beta, f)\): local wind (east, north), the sine of the heading error toward the goal, and remaining fuel; the output \(\mathbf{o}\) is thrust and turn. The genome is the flattened weight vector (30 numbers). A genetic algorithm keeps the elites, crosses parents, and adds Gaussian mutation. Fitness rewards reaching the goal, closing distance, and leftover fuel.

Fuel is a hard budget: it drains every frame, faster when thrust is high, and at zero powered thrust cuts out (heading can still change) so the rider only drifts on the interpolated wind. That is what forces the population to discover thrifty paths through the actual forecast instead of burning straight lines.

Data source: Open-Meteo Forecast API
Endpoint: https://api.open-meteo.com/v1/forecast?latitude=...&longitude=...&hourly=wind_speed_10m,wind_direction_10m
Access: Public, no key. Loaded from an hourly server-side refresh when possible, with a bundled snapshot fallback, and a live browser fetch only when the API allows CORS. Data window: Aug 6, 2026 (pulled Aug 6, 2026 UTC)

Latest data pull 9 rows
Aug 6, 2026 (pulled Aug 6, 2026 UTC)
Latitude
Longitude
Wind speed (km/h)
Wind direction (°)
40.7
-76.01
3.4
198
42.7
-76.01
7.6
185
44.71
-75.99
0.4
180
40.7
-73
13.5
214
42.72
-73.01
4.7
266
44.69
-73
7.1
114
40.69
-70.01
19.1
202
42.69
-70.01
13.5
214
44.69
-70.02
1.8
217

All 9 grid points are listed below.