Control Freak

Alpha Loading course…
Layers
Map © OpenStreetMap contributors · OOM

Pace, hills and ground

You give your pace on the flat. The hills are added for you: each metre of climb counts as 10 m of running, so a 1 km leg with 20 m of climb counts as 1.2 km and takes 20% longer at the same pace.

With a GPX it works the other way round. Your elapsed time divided by that adjusted distance gives your grade-adjusted pace: the flat pace your run was worth. Distances follow the best line between controls, not your exact GPS line, so wandering or waiting at controls makes it slower.

Rules

Event details

How the score card works

Your run is split into a few grades, so one slow leg doesn't hide why. It's all worked out on your device, from your GPX and the map model: no AI, nothing uploaded.

Distances are grade-adjusted metres. Times use your running pace with the errors taken out: your elapsed time over the distance you really ran.

Grades

A+ is near perfect; E is a lot of time lost. Strategy compares points; Order compares distance with the best order of your controls; Navigation counts the metres your mistakes cost.

Limits

GPS is good to about 5–10 m (worse under trees and at night), so small wobbles are ignored. Route choice between controls isn't graded: on the ground you often know better than the map (gates, crossings, crowds), so the card only flags what your own line shows went wrong.

How Control Freak works it out

Meet Kit, the bot orienteer

Kit is the solver with a face. Kit doesn't guess or "learn" routes: for every course it reads the map into a cost grid, works out the cheapest way along every leg, then searches all the possible loops and proves the shortest one. That's the line you race in Play, and the blue route in Your run and Explore.

Kit only knows what the map shows. A locked gate, a busy road or a path that's not on the map can make your way better than Kit's, and the score card allows for that. The steps below are exactly how Kit works it out.

Read the map · Build the legs · Find the best order · Proof · Timed events

  1. Read the map

    The map photo is turned into a grid where every spot has a running cost. Streets and paths are cheap, open fields a bit slower, and railways, private land and out-of-bounds areas impossible. Each brown 5 m contour line you cross adds a cost for the climb. The map was checked and corrected by hand, from GPS tracks and local knowledge (tunnels, cut-throughs, overgrown fields).

    1× 1.3× ✕ +climb
  2. Build the legs

    For every pair of controls, the computer finds the cheapest route between them through that grid: 378 legs for 27 controls plus the start. From then on the map doesn't matter, only a table of leg lengths. To see them all, turn on Every leg Kit weighs up in the map's Layers.

    Lengths are grade-adjusted: 1 m of climb counts as 10 m of flat, so a hilly leg "costs" more than its distance on the ground.

    1.24 km
  3. Find the best order

    Trying every order is impossible: 27 controls can be visited in about 2 × 10²⁶ different loops. Instead the solver (Google's OR-Tools CP-SAT) tracks two numbers:

    • Best loop found so far. It keeps finding shorter loops, so this comes down.
    • Lower bound: a distance no loop can beat. Every control has to be run into once and out of once, so each costs at least its two cheapest legs (the picture). Add that up across all the controls and halve it (each leg is shared by two controls) and you get a guaranteed floor.

    The solver then splits the problem into cases ("use the 3→4 leg" or "don't") and throws away any case whose floor is already longer than the best loop found, along with millions of orders at once.

    2 cheapest legs
  4. Proof

    The floor creeps up while the best loop comes down. When the two numbers meet, no shorter loop can exist. For all 27 controls this takes seconds at most. Kit, our bot orienteer, works it out this way. Try to match it in Play.

    best loop found lower bound meet = proof
  5. The 60-minute event

    The same table is used with controls made optional: the solver maximises points minus late penalties within the time limit. Because that depends on how fast you are, the best route is pre-computed for every pace from 3:30 to 17:00 per km (12:00 on the slider, plus up to 40% for night), and each one is proven optimal. Between two equal proven scores the paces are filled in exactly, by re-scoring.

    fasterslower pace pts you
  6. Your run

    Your GPX is read in your browser (it is never uploaded). The page spots which controls you visited (within 35 m) and works out your grade-adjusted pace: your elapsed time divided by the grade-adjusted distance of your controls. It then shows the best route at your pace, so you're compared like for like.

    GAP = time ÷ grade-adjusted km

Good to know

  • It's only as good as the map reading. A path it doesn't know about, or a fence it doesn't, changes the answer.
  • Climb comes from contour crossings, so it's approximate: about 170 m against 212 m on one runner's GPS.
  • Navigation, punching and traffic aren't modelled. They just show up as a slower pace.
  • "Best" means best for this map model: the solver proves it, but only as well as the map is read. It's a great guide, not the last word.
  • Comparing at your own pace measures control choice and order. Your pace already includes your navigation errors, stops and time at controls, so those don't show as a gap.
  • Your GPX is read in your browser and never uploaded. Map data © OpenStreetMap contributors (ODbL); map by OpenOrienteeringMap. Club use only.