A drone operator flies swarms of small quadcopters that must agree on a common heading with no leader. Each drone only hears the neighbors inside its radio range, and every link drops packets. Each drone repeatedly nudges its heading toward its neighbors' headings, and the swarm either converges, oscillates out of control, or runs out of time. You have 20,000 simulated flight logs from the current fleet. The operator is about to certify a new fleet with bigger swarms and longer-range radios, and wants a go/no-go check that runs before takeoff. Your job is to find out why missions fail, prove it with the math of the graph Laplacian, and ship a model that still works on swarms bigger than anything in the logs.
Measure how often missions succeed and how the failures split.
Every row is one simulated mission. The drones start with different headings and run the consensus update
where xt holds every drone's heading, k is the gain, and Lt is the Laplacian of the radio links that delivered a packet at step t. A mission ends in one of four ways, recorded in failure_mode: success, diverged (the headings blew up), partitioned (the radio graph is split into groups that never hear each other), or too_slow (connected and stable, but it ran out of steps).
Implement explore_missions(train_df) returning a dict with:
Look at how the failure modes are spread before you model anything. Three different mechanisms are hiding behind one label, and each one has its own number from the Laplacian.
Evaluated server-side against a hidden test set.