Evaluation

To evaluate how many destionations you reached, delivering Christmas presents to the respective children after the simulation ran, do

evaluate(particle_tracker, children)

Within the whole setup this is

using TravellingSailorProblem, SpeedyWeather

nchildren = 26
spectral_grid = SpectralGrid(nparticles=nchildren, nlayers=8)
particle_advection = ParticleAdvection2D(spectral_grid, layer=8)
model = PrimitiveWetModel(spectral_grid; particle_advection)
simulation = initialize!(model, time=DateTime(2025, 11, 13))

# define children and add to the model as destinations
children = TravellingSailorProblem.children(nchildren)
add!(model, children)

# define particle tracker and add to the model
particle_tracker = ParticleTracker(spectral_grid)
add!(model, :particle_tracker => particle_tracker)

run!(simulation, period=Day(41))

evaluate(particle_tracker, children)
Destination  1    Ana ( -97.1˚E,  49.9˚N)  missed by particle  4:  -1058 points
Destination  2   Babu ( 115.0˚E,  -8.7˚N)  missed by particle 11: -19236 points
Destination  3  Carla (  73.5˚E,  -4.6˚N)  missed by particle 11: -18727 points
Destination  4  Diego ( -51.7˚E,  64.2˚N)  missed by particle  9:  -1582 points
Destination  5   Elif ( 121.0˚E,  14.6˚N)  missed by particle  4: -13430 points
Destination  6 Felipe ( -70.7˚E, -53.2˚N)  missed by particle 13:  -4906 points
Destination  7   Gael ( 106.8˚E,  10.8˚N)  missed by particle  4: -22005 points
Destination  8 Haruko (  18.5˚E, -33.9˚N)  missed by particle 23:  -1998 points
Destination  9   Isla ( -74.1˚E,   4.7˚N)  missed by particle 19: -14136 points
Destination 10   Jose (  -1.3˚E,  51.8˚N)  missed by particle  9:  -1006 points
Destination 11  Karim ( 139.7˚E,  35.7˚N)  missed by particle  4:  -2665 points
Destination 12   Lola (-157.8˚E,  21.3˚N)  missed by particle 20: -16496 points
Destination 13  Maeve ( -96.7˚E,  17.1˚N)  missed by particle 19:  -8157 points
Destination 14   Noah ( 115.9˚E, -31.9˚N)  missed by particle 11:  -4935 points
Destination 15   Omar ( 166.7˚E, -77.8˚N) reached by particle 10:  28738 points
Destination 16  Priya ( 106.9˚E,  47.9˚N)  missed by particle  4:  -5146 points
Destination 17 Quirin ( 151.2˚E, -33.9˚N)  missed by particle 11:  -7611 points
Destination 18 Rasmus (  15.6˚E,  78.2˚N) reached by particle 22:  15568 points
Destination 19 Saanvi (-169.9˚E, -21.2˚N)  missed by particle 26: -11153 points
Destination 20  Tomas ( -61.5˚E,  10.5˚N)  missed by particle 19: -26208 points
Destination 21    Uma ( 158.7˚E,  53.0˚N)  missed by particle 21:  -1364 points
Destination 22   Vera (  15.3˚E,   4.4˚N)  missed by particle 12:  -7884 points
Destination 23 Walter (  -5.9˚E, -15.9˚N)  missed by particle 15:  -9463 points
Destination 24    Xia (  85.3˚E,  27.7˚N)  missed by particle  4: -17365 points
Destination 25   Yuki ( -47.9˚E, -15.8˚N)  missed by particle  7:  -9252 points
Destination 26   Zara (  -7.6˚E,  33.6˚N)  missed by particle 12: -10346 points

Evaluation: 2/26 reached, -191823 points

And the last line will print you a list of all children and whether they have been reached or not, the respective points you got from each child (positive for reached, negative for missed) and a summary of points. The aim of the TravellingSailorProblem is to maximize the amount of points by reaching as many children as possible with particles flying as far as possible before reaching a child.

Point system

We give

TravellingSailorProblem.POINTS_PER_KM_REACHED
1

positive point(s) for each km a particle flew before reaching its destination. A child would get more excited the further their Christmas present flew? Imagine you get a Christmas present that flew through both the Arctic as well as Antarctica!

Additionally, we use

TravellingSailorProblem.POINT_FACTOR_AT_SURFACE
2

times higher points for particles that flew on the lowermost vertical layer compared to the uppermost. This calculation is done in Sigma-coordinates so when choosing layer=1 (top) one gets 1.0625 points per km flown, but on layer=8 (surface) one gets 1.9375 points per km flown. The reason is that the wind is more turbulent at the surface but more laminar higher up. To incentivise low-flying presents we therefore introduced this point-multiplier.

However, if a child doesn't get a Christmas present we give

TravellingSailorProblem.POINTS_PER_KM_MISSED
-10

(note: NEGATIVE!) points for every km the closest particle ever was to a child. If you live on Hawai'i and no particle doesn't even get near you, you would also be pretty disappointed no? This incetivises you to get as close as possible to a child and you get less penalised if you barely miss it compared to not even trying to fly a present near it! Note the point mutiplier does not apply for missed children, negative points are the same on every vertical layer.

Evaluate submission script

In Submit to the TravellingSailorProblem we illustrate a submission by using a script filename.jl which contains

nchildren = 5   # number of children and particles
layer = 8       # vertical layer
departures = [
    (  5, 0),   # (lon, lat) in degrees, particle 1
    ( -5, 0),   # particle 2
    (-15, 0),   # etc
    (-25, 0),
    (-35, 0),
]
5-element Vector{Tuple{Int64, Int64}}:
 (5, 0)
 (-5, 0)
 (-15, 0)
 (-25, 0)
 (-35, 0)

You can shortcut the evaluation following the procedure in the TravellingSailorProblem leaderboard by doing after having defined nchildren, layer and departures

particle_tracker, children = run_submission(nchildren=nchildren, layer=layer, departures=departures)
evaluate(particle_tracker, children)
Destination  1    Ana ( -97.1˚E,  49.9˚N)  missed by particle  2: -55686 points
Destination  2   Babu ( 115.0˚E,  -8.7˚N)  missed by particle  1: -103203 points
Destination  3  Carla (  73.5˚E,  -4.6˚N)  missed by particle  1: -57180 points
Destination  4  Diego ( -51.7˚E,  64.2˚N)  missed by particle  2: -63930 points
Destination  5   Elif ( 121.0˚E,  14.6˚N)  missed by particle  1: -108672 points

Evaluation: 0/5 reached, -388671 points

The first line will use nchildren, layer and departures to run a simulation with the default setup and return Particle tracker and children (the Destinations). The second line will then evaluate those and return points as described in Evaluation. And based on particle_tracker and children you can then also Visualising trajectories.