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, 14))
# 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(40))
evaluate(particle_tracker, children)Destination 1 Ana ( -97.1˚E, 49.9˚N) reached by particle 16: 15029 points
Destination 2 Babu ( 115.0˚E, -8.7˚N) missed by particle 24: -10541 points
Destination 3 Carla ( 73.5˚E, -4.6˚N) missed by particle 25: -14052 points
Destination 4 Diego ( -51.7˚E, 64.2˚N) missed by particle 20: -2330 points
Destination 5 Elif ( 121.0˚E, 14.6˚N) missed by particle 9: -13636 points
Destination 6 Felipe ( -70.7˚E, -53.2˚N) reached by particle 11: 21381 points
Destination 7 Gael ( 106.8˚E, 10.8˚N) missed by particle 22: -21348 points
Destination 8 Haruko ( 18.5˚E, -33.9˚N) missed by particle 25: -1601 points
Destination 9 Isla ( -74.1˚E, 4.7˚N) missed by particle 10: -28182 points
Destination 10 Jose ( -1.3˚E, 51.8˚N) missed by particle 18: -2856 points
Destination 11 Karim ( 139.7˚E, 35.7˚N) reached by particle 7: 3179 points
Destination 12 Lola (-157.8˚E, 21.3˚N) missed by particle 18: -9396 points
Destination 13 Maeve ( -96.7˚E, 17.1˚N) missed by particle 10: -3269 points
Destination 14 Noah ( 115.9˚E, -31.9˚N) missed by particle 19: -7750 points
Destination 15 Omar ( 166.7˚E, -77.8˚N) missed by particle 12: -17607 points
Destination 16 Priya ( 106.9˚E, 47.9˚N) missed by particle 22: -4348 points
Destination 17 Quirin ( 151.2˚E, -33.9˚N) reached by particle 24: 18156 points
Destination 18 Rasmus ( 15.6˚E, 78.2˚N) missed by particle 18: -2902 points
Destination 19 Saanvi (-169.9˚E, -21.2˚N) missed by particle 14: -25056 points
Destination 20 Tomas ( -61.5˚E, 10.5˚N) missed by particle 23: -20995 points
Destination 21 Uma ( 158.7˚E, 53.0˚N) reached by particle 9: 9269 points
Destination 22 Vera ( 15.3˚E, 4.4˚N) missed by particle 17: -21326 points
Destination 23 Walter ( -5.9˚E, -15.9˚N) missed by particle 13: -9142 points
Destination 24 Xia ( 85.3˚E, 27.7˚N) missed by particle 6: -2133 points
Destination 25 Yuki ( -47.9˚E, -15.8˚N) missed by particle 26: -2920 points
Destination 26 Zara ( -7.6˚E, 33.6˚N) missed by particle 20: -1040 points
Evaluation: 5/26 reached, -155416 pointsAnd 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_REACHED1positive 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_SURFACE2times 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 4: -66464 points
Destination 2 Babu ( 115.0˚E, -8.7˚N) missed by particle 2: -88492 points
Destination 3 Carla ( 73.5˚E, -4.6˚N) missed by particle 2: -43020 points
Destination 4 Diego ( -51.7˚E, 64.2˚N) missed by particle 2: -65075 points
Destination 5 Elif ( 121.0˚E, 14.6˚N) missed by particle 2: -90996 points
Evaluation: 0/5 reached, -354047 pointsThe 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.