AI Training Story · Driving Around

From a first run to a repeatable experiment

A guide to this Space’s driving task, training controls, and results.

Use Quick start in the app for the short checklist; Help & tutorial opens this guide. Close this tab to return to your existing run and unsaved choices.

What you are optimizing

The task is to drive a vehicle around a track. Your controller maps its configured sensor observations—such as raycast distances and velocity—to controls such as steering, acceleration, and braking. The network file includes the vehicle type, sensors, and output order; changing those changes the policy’s interface.

Training uses evolutionary search: simulate a population, score candidates, select parents, then generate variations through mutation and optional crossover. The mutation rate controls the scale of parameter perturbations; it is not an SGD learning rate. Reward settings determine the selection objective without changing the physics. Game reference: Training Process.

Training runs headlessly. The map shows static walls and a suggested route; opening a native recording lets you play the measured car motion and inspect its black box. It does not stream the training population. Built-in tracks are reconstructed replicas, usable without installing the original game. The lab does not award official stars or change game progress.

Run one small baseline

  1. On Run & results, click No network? Create one above the device/bucket buttons. Set Starter car to Formula, then click Create starter network. This starts a new, untrained neural network; you do not need an existing file. To continue a saved driver instead, use From this device or Saved in bucket. Choose Replica A01 Beginner. This creates the small 6-input → 4-hidden-unit → 5-output controller in the page; training has not started.
  2. Open Training & recipes. Keep the current starter settings below. If you have edited the form, use Apply first-run settings to this form to restore them. You do not need to save a recipe first. New experiments always use 60 Hz decisions and physics. Historical 30/15 Hz recipes remain readable; use Make a 60 Hz copy to create a separate recipe before running one.
  3. Return to Run & results. Choose CPU — no GPU allowance to run without signing in, and Action → Train a population, then click Run training.
  4. When it finishes, click Download result. Read the laps, lap time, and contacts as explained below, and retain the downloaded .evolution as your checkpoint. To keep a different winner, use Download weights in that winner’s row.
Current starter settings
Controller interfaceSpeed and five raycast distances in; Steering, Acceleration, Handbrake, Brake, and Boost out
Population and generations32 candidates × 20 generations
Simulation horizon900 ticks = 15 simulated seconds per car per generation
Mutation and decayMutation 0.3; decay 0; crossover off; one parent; one preserved elite
Reward and eliminationDistance-only (+100 total score); collision and idle elimination off
Timing and execution60 Hz physics and decisions; one CPU worker

This baseline promises neither a completed lap nor a wall-clock runtime. Connected bucket autosave, if enabled, receives the result automatically. Restoring starter settings changes the form, not saved recipes.

Read the result before changing the setup

Match a measurement to its policy. The run’s overall best lap may belong to a different candidate from the downloaded final fitness leader.

Reported valueWhat it tells you
Selection fitnessThe configured reward score used to rank candidates within their evaluated generation. It is not lap time or a universal score for comparing runs.
Forward laps / best lapCompleted forward laps and the fastest completed lap for that policy. A missing lap time means no completed lap was reported.
Physical contactsRecorded contacts. A clean-lap winner needs zero contacts and the configured minimum forward-lap count.
Distance (simulation units)Actual distance traveled by the vehicle. This alone does not establish progress around the course.

Final fitness leader comes from the final generation. Fastest completed lap is selected across training. One controller can fill several winner roles, and a role can be unavailable.

Reward distinction: Distance measures progress along the track’s centerline; Actual Distance measures the vehicle’s traveled path, so extra movement can be inefficient. Best Lap Performance needs a completed lap before it can reward a lap time. Distance can provide a signal before the first lap. Game reference: Reward Functions.

Choose the next experiment

After receiving the result, choose a role under Winner to continue or evaluate:

Staging a winner does not start a run. Review the settings, then click Run training or Evaluate policy (weights frozen). Built-in track selection is retained; reselect a custom track file if needed. Previous measurements are not reused as new evidence.

To begin a fresh trial, use Create starter network on Run & results. Load a saved .evolution file to return to an earlier checkpoint.

Next-step hypotheses: evaluate the saved policy before changing it. If useful progress is cut short, try a longer training horizon within the work limit. Once it completes laps consistently, try smaller mutation perturbations or a revised reward mix. Start with one change and check the outcome; there is no guaranteed best schedule. Game reference: Training Strategies.

Make comparisons interpretable

For a controlled training comparison, vary one factor and hold the others constant: starting checkpoint, track, vehicle, horizon, controller frequency, elimination settings, and compute backend. Then evaluate the resulting policies under the same conditions.

Frozen comparison runs selected policies in fresh simulations with unchanged weights. The app marks incompatible conditions. Compare lap time, completed laps, contacts, and distance together. Compare fitness only when the reward and evaluation conditions match; these selection scores are relative to the evaluated generation. A short horizon may end before a lap or challenge deadline. Success on one track does not establish generalization to another.

Recipes save settings, not models

At the top of Training & recipes, keep up to ten named recipes in slots A–J. Each holds training settings, rewards, and optional selective freezing. Tracks, networks, and results are excluded.

  1. Adjust the form, choose a slot, and name the recipe. Save settings to A (or your chosen slot) stores the current settings in this browser.
  2. To reuse a saved recipe, select it and click Apply recipe. Choosing a slot alone does not apply it; applying does not start training.
  3. The status shows whether the form matches the saved recipe or has unsaved changes. Save again to update that recipe.

Run training uses the current form; batches use saved recipes. Save changes before using them in a batch. Track, starting network, and CPU or GPU remain separate choices on Run & results. Export/import the recipe library as JSON, or use optional private-bucket storage.

Batches run saved recipes in order

A batch runs up to 20 training steps on the track and backend selected on Run & results. Recipe slots and batch slots are separate.

  1. Save your recipes first. On Batches, choose a batch slot and name.
  2. Select a saved recipe and click Add step. Move steps up or down, duplicate, or remove them. Repeats are allowed. Advanced sequence edits the same list as comma-separated slots, such as A, B, A.
  3. Check Use each step’s result to train the next step to continue from the previous result. Unchecked, every step starts from the same original network.
  4. Click Save batch. Review the starting network, track, and CPU or GPU on Run & results, then return to Batches and click Run batch.

For example, save A as “Explore” and B as “Refine”, then run A, B, A. With continuation, the network trains through all three stages. Without it, each starts from the original. These names are illustrative; the app uses your saved recipes.

Saving and running are separate. Changing the name, sequence, or continuation option makes an unsaved draft and disables Run batch. Save your changes or use Load saved batch to restore the saved version.

A batch stores recipe references and the continuation choice, without networks, tracks, or results. Starting takes a snapshot of saved recipe settings; later recipe changes affect future launches.

Reference: challenge checks

Training measurements and fresh challenge checks are simulator results for reconstructed tracks. A supported challenge check replays the named current network with fixed weights; it does not accumulate stars across runs or evaluate original-game opponent races.

Challenge checks use the selected driving settings, including collision elimination, and the chosen run duration or the track’s longer challenge deadline, capped at 300 simulated seconds. This extra replay may add processing time. A condition that is not met within that replay is not proof that the network could never meet it in a longer run.

These checks are bounded predictions for replica conditions, not original-game awards or Steam leaderboard results.

Select the full reward set

Training & recipes supports all 14 distinct reward metrics at once. Use Add all 14 metrics to add missing metrics without replacing existing weights, aggregation choices or row order. New metrics start with the same default aggregation and +1 weight as Add reward; review the signs and weights before training. The counter shows the selected distinct metrics, and Add stops at the supported maximum. If a metric appears twice, correct or remove the duplicate first.

The five-row center preset is one example mix. You can extend it to the full set. Reward editing is disabled during a run or frozen evaluation.

Compare the recorded drive with a suggested route

On Run & results, use Calculate suggested route. Dashed yellow shows the mask-derived suggestion and green is the recorded car path. Road shape comes from the native part polygons. Dark shapes show static walls. Record or open a drive, then play, scrub or step through its measured car positions and black box.

The suggestion searches an 8-unit mask derived from native part polygons, preserves connected openings through split lanes, then checks every final segment for a 32 game-unit static wall margin. It does not model vehicle size, grip, braking or boost, so it is not a fastest-lap prediction or a guarantee that the car can follow it. Distance to the suggestion is a geometric measurement, not a driving score. Broken or infeasible routes report unavailable. This calculation runs in your browser and does not train or simulate a car.

Selective freezing

On Training & recipes, open Selective freezing to keep selected parameters at their values in the starting network. Freezing an input holds its outgoing weights; freezing a hidden layer holds its incoming weights and biases; freezing an output holds its incoming weights and bias. The available choices and names come from the selected network. Freeze selections are part of saved recipes and can be edited later. Frozen evaluation runs the selected policy unchanged.

Files, privacy, and storage

Your selected files stay in the browser until you start a run or explicitly save/export them. Processing copies and undelivered results are temporary; results expire within five minutes and are deleted after verified browser receipt by default. The app's cleanup does not establish provider-wide zero-data retention.

Run results stay in page memory after download until you discard them, replace them, or close the page. Download the network or a portable bundle if you want a local copy.

Recipes are settings-only and save in this browser by default. Local JSON export/import is also available. Optional private-bucket storage requires a separate explicit HF authorization; its write-repos permission is broader than one bucket. After connecting an existing private bucket, automatic run saving starts on by default and can be turned off. Recipe-library save/list/import are separate actions and transfer settings only; importing asks before replacing the local recipe library and never starts a run. The app does not create or delete buckets.

Read the full data policy before using private files or bucket storage.

Limits and compute

The worker supports Formula, Rally, Snowmobile, and Truck. Networks support at most 20 inputs, 12 total layers, and 16 neurons per hidden layer. Formula, Rally, and Truck support up to five outputs; Snowmobile supports up to four and cannot use Handbrake. Fresh controllers for every vehicle require Steering and Acceleration; Formula imports retain their supported ordered output subsets.

CPU runs: up to 4,000,000 requested vehicle-ticks in a 25-second native execution window. GPU runs: up to 8,000,000 requested vehicle-ticks in a 45-second native execution window. Both allow up to 1,024 cars, 2,000 generations, fourteen distinct reward metrics, and 32,768 car-generation analysis rows per run. Requested vehicle-ticks are an upper-bound work estimate, not a guarantee of runtime. Results and analysis have separate size limits. These are bounded vanilla-worker limits, not support for arbitrary modified-game networks or full original-game parity.

The public GPU app also provides CPU execution without GPU allowance. GPU runs use HF allowance; optional HF sign-in can associate a request with your account but does not guarantee quota. Sign-in can reload the page, so do it before choosing files if needed.

Further reading: the game wiki

The wiki describes the original game. Menus, defaults, and supported features can differ here; use this lab’s controls and limits for Space runs.

Feedback

Open an editable GitHub issue draft. It is not submitted automatically. Review the draft before posting and remove private names or data. Do not attach tokens, job keys, private networks, proprietary tracks, or unrelated logs.