{
  "format": "slop3969-experiment",
  "version": 2,
  "run": {
    "format": "slop3969-lab-run",
    "version": 2,
    "input": {
      "version": 2,
      "week": 6,
      "caseId": "canonical-six",
      "target": "#07",
      "drone": "L",
      "method": "swaps",
      "diagnostic": false,
      "arrangement": "both",
      "sequence": [],
      "requestedDepartures": {},
      "routeCandidates": {},
      "strategies": {
        "h": {
          "mode": "preset",
          "preset": "zero",
          "factor": 1,
          "secondary": 1,
          "code": ""
        },
        "dominates": {
          "mode": "preset",
          "preset": "pareto",
          "factor": 1,
          "secondary": 1,
          "code": ""
        },
        "withinBudget": {
          "mode": "preset",
          "preset": "reserve",
          "factor": 1,
          "secondary": 1,
          "code": ""
        },
        "orderKey": {
          "mode": "preset",
          "preset": "edf",
          "factor": 1,
          "secondary": 1,
          "code": ""
        },
        "objective": {
          "mode": "preset",
          "preset": "course",
          "factor": 1,
          "secondary": 1,
          "code": ""
        },
        "assignCost": {
          "mode": "preset",
          "preset": "completion",
          "factor": 1,
          "secondary": 1,
          "code": ""
        },
        "priority": {
          "mode": "preset",
          "preset": "drone",
          "factor": 1,
          "secondary": 1,
          "code": ""
        }
      },
      "scenario": {
        "pads": 2,
        "drones": [
          {
            "id": "A",
            "type": "L"
          },
          {
            "id": "B",
            "type": "L"
          },
          {
            "id": "C",
            "type": "L"
          },
          {
            "id": "D",
            "type": "H"
          },
          {
            "id": "E",
            "type": "H"
          }
        ],
        "addedOrders": [],
        "closures": []
      },
      "jobs": [
        {
          "id": "A",
          "ready": 5,
          "promised": 9,
          "d": 3,
          "p": 6
        },
        {
          "id": "B",
          "ready": 6,
          "promised": 13,
          "d": 1,
          "p": 2
        },
        {
          "id": "C",
          "ready": 3,
          "promised": 12,
          "d": 6,
          "p": 12
        },
        {
          "id": "D",
          "ready": 4,
          "promised": 28,
          "d": 6,
          "p": 12
        },
        {
          "id": "E",
          "ready": 1,
          "promised": 25,
          "d": 5,
          "p": 10
        },
        {
          "id": "F",
          "ready": 6,
          "promised": 22,
          "d": 4,
          "p": 8
        }
      ],
      "graph": [
        {
          "from": "S",
          "to": "A",
          "cost": 3
        },
        {
          "from": "S",
          "to": "B",
          "cost": 1
        },
        {
          "from": "B",
          "to": "A",
          "cost": 1
        },
        {
          "from": "A",
          "to": "G",
          "cost": 2
        }
      ],
      "heuristic": {
        "S": 0,
        "A": 0,
        "B": 3,
        "G": 0
      },
      "maxCandidates": 120,
      "maxExpansions": 10000,
      "includeWaits": false
    },
    "inputHash": "fnv1a32:775f3dab",
    "modelHash": "fnv1a32:10f0b070",
    "engine": "lab-1.0",
    "created": "2026-09-21T02:05:50.217Z",
    "elapsed": 2.6,
    "status": "verified",
    "summary": "Sequence #01 → #02 → #03 → #04 → #05 → #06. Course objective (lateness, final return, energy): 0, 2558, 263271.  Every pair swap was checked; this proves only a local optimum.",
    "assumptions": [
      "One drone; complete trips",
      "No shared charging in this model",
      "Corridor reservations not active"
    ],
    "metrics": [
      {
        "key": "Total lateness",
        "label": "Total lateness",
        "value": 0
      },
      {
        "key": "Final return",
        "label": "Final return",
        "value": 2558
      },
      {
        "key": "Swaps checked",
        "label": "Swaps checked",
        "value": 30
      },
      {
        "key": "Exact sequences",
        "label": "Exact sequences",
        "value": "Not run"
      }
    ],
    "tables": [
      {
        "id": "schedule",
        "title": "The recurrence, order by order",
        "headers": [
          "Order",
          "Ready",
          "Load start",
          "Depart",
          "Deliver",
          "Return",
          "Lateness"
        ],
        "rows": [
          {
            "id": "#01",
            "values": [
              "#01",
              82,
              82,
              142,
              358,
              529,
              0
            ],
            "selection": {
              "kind": "task",
              "id": "#01"
            },
            "tone": "good",
            "detail": "Available for the next order at 589. Energy 52958 J."
          },
          {
            "id": "#02",
            "values": [
              "#02",
              576,
              589,
              649,
              859,
              1024,
              0
            ],
            "selection": {
              "kind": "task",
              "id": "#02"
            },
            "tone": "good",
            "detail": "Available for the next order at 1084. Energy 56083 J."
          },
          {
            "id": "#03",
            "values": [
              "#03",
              937,
              1084,
              1144,
              1219,
              1249,
              0
            ],
            "selection": {
              "kind": "task",
              "id": "#03"
            },
            "tone": "good",
            "detail": "Available for the next order at 1309. Energy 12529 J."
          },
          {
            "id": "#04",
            "values": [
              "#04",
              1264,
              1309,
              1369,
              1645,
              1876,
              0
            ],
            "selection": {
              "kind": "task",
              "id": "#04"
            },
            "tone": "good",
            "detail": "Available for the next order at 1936. Energy 76764 J."
          },
          {
            "id": "#05",
            "values": [
              "#05",
              1681,
              1936,
              1996,
              2102,
              2163,
              0
            ],
            "selection": {
              "kind": "task",
              "id": "#05"
            },
            "tone": "good",
            "detail": "Available for the next order at 2223. Energy 21712 J."
          },
          {
            "id": "#06",
            "values": [
              "#06",
              2193,
              2223,
              2283,
              2443,
              2558,
              0
            ],
            "selection": {
              "kind": "task",
              "id": "#06"
            },
            "tone": "good",
            "detail": "Available for the next order at 2618. Energy 43225 J."
          }
        ],
        "primary": true
      },
      {
        "id": "swaps",
        "title": "Every swap candidate and acceptance decision",
        "headers": [
          "Iteration",
          "Swap positions",
          "Sequence",
          "Objective",
          "Decision"
        ],
        "rows": [
          {
            "id": "swap0",
            "values": [
              1,
              "1 ↔ 2",
              "#02 #01 #04 #03 #05 #06",
              "0, 3052, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap1",
            "values": [
              1,
              "1 ↔ 3",
              "#04 #02 #01 #03 #05 #06",
              "447, 3740, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap2",
            "values": [
              1,
              "1 ↔ 4",
              "#03 #02 #04 #01 #05 #06",
              "345, 3413, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap3",
            "values": [
              1,
              "1 ↔ 5",
              "#05 #02 #04 #03 #01 #06",
              "1376, 4157, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap4",
            "values": [
              1,
              "1 ↔ 6",
              "#06 #02 #04 #03 #05 #01",
              "2830, 4669, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap5",
            "values": [
              1,
              "2 ↔ 3",
              "#01 #04 #02 #03 #05 #06",
              "0, 3233, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap6",
            "values": [
              1,
              "2 ↔ 4",
              "#01 #03 #04 #02 #05 #06",
              "0, 3008, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap7",
            "values": [
              1,
              "2 ↔ 5",
              "#01 #05 #04 #03 #02 #06",
              "391, 3650, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap8",
            "values": [
              1,
              "2 ↔ 6",
              "#01 #06 #04 #03 #05 #02",
              "1298, 4162, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap9",
            "values": [
              1,
              "3 ↔ 4",
              "#01 #02 #03 #04 #05 #06",
              "0, 2558, 263271",
              "accepted: best strict improvement"
            ],
            "tone": "good"
          },
          {
            "id": "swap10",
            "values": [
              1,
              "3 ↔ 5",
              "#01 #02 #05 #03 #04 #06",
              "0, 3155, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap11",
            "values": [
              1,
              "3 ↔ 6",
              "#01 #02 #06 #03 #05 #04",
              "181, 3667, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap12",
            "values": [
              1,
              "4 ↔ 5",
              "#01 #02 #04 #05 #03 #06",
              "0, 2738, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap13",
            "values": [
              1,
              "4 ↔ 6",
              "#01 #02 #04 #06 #05 #03",
              "0, 3040, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap14",
            "values": [
              1,
              "5 ↔ 6",
              "#01 #02 #04 #03 #06 #05",
              "0, 2815, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap15",
            "values": [
              2,
              "1 ↔ 2",
              "#02 #01 #03 #04 #05 #06",
              "0, 3052, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap16",
            "values": [
              2,
              "1 ↔ 3",
              "#03 #02 #01 #04 #05 #06",
              "0, 3413, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap17",
            "values": [
              2,
              "1 ↔ 4",
              "#04 #02 #03 #01 #05 #06",
              "672, 3740, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap18",
            "values": [
              2,
              "1 ↔ 5",
              "#05 #02 #03 #04 #01 #06",
              "1376, 4157, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap19",
            "values": [
              2,
              "1 ↔ 6",
              "#06 #02 #03 #04 #05 #01",
              "2843, 4669, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap20",
            "values": [
              2,
              "2 ↔ 3",
              "#01 #03 #02 #04 #05 #06",
              "0, 2906, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap21",
            "values": [
              2,
              "2 ↔ 4",
              "#01 #04 #03 #02 #05 #06",
              "0, 3233, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap22",
            "values": [
              2,
              "2 ↔ 5",
              "#01 #05 #03 #04 #02 #06",
              "391, 3650, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap23",
            "values": [
              2,
              "2 ↔ 6",
              "#01 #06 #03 #04 #05 #02",
              "1298, 4162, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap24",
            "values": [
              2,
              "3 ↔ 4",
              "#01 #02 #04 #03 #05 #06",
              "0, 2738, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap25",
            "values": [
              2,
              "3 ↔ 5",
              "#01 #02 #05 #04 #03 #06",
              "0, 3155, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap26",
            "values": [
              2,
              "3 ↔ 6",
              "#01 #02 #06 #04 #05 #03",
              "4, 3667, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap27",
            "values": [
              2,
              "4 ↔ 5",
              "#01 #02 #03 #05 #04 #06",
              "0, 2930, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap28",
            "values": [
              2,
              "4 ↔ 6",
              "#01 #02 #03 #06 #05 #04",
              "0, 3442, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          },
          {
            "id": "swap29",
            "values": [
              2,
              "5 ↔ 6",
              "#01 #02 #03 #04 #06 #05",
              "0, 2815, 263271",
              "rejected: no better than the chosen candidate/current sequence"
            ]
          }
        ],
        "primary": false
      }
    ],
    "trace": [
      {
        "id": "#01",
        "title": "#01: depart 142, deliver 358",
        "tick": 142,
        "detail": "start = max(ready 82, prior availability, requested departure − loading) = 82. Return 529; next available 589; lateness 0."
      },
      {
        "id": "#02",
        "title": "#02: depart 649, deliver 859",
        "tick": 649,
        "detail": "start = max(ready 576, prior availability, requested departure − loading) = 589. Return 1024; next available 1084; lateness 0."
      },
      {
        "id": "#03",
        "title": "#03: depart 1144, deliver 1219",
        "tick": 1144,
        "detail": "start = max(ready 937, prior availability, requested departure − loading) = 1084. Return 1249; next available 1309; lateness 0."
      },
      {
        "id": "#04",
        "title": "#04: depart 1369, deliver 1645",
        "tick": 1369,
        "detail": "start = max(ready 1264, prior availability, requested departure − loading) = 1309. Return 1876; next available 1936; lateness 0."
      },
      {
        "id": "#05",
        "title": "#05: depart 1996, deliver 2102",
        "tick": 1996,
        "detail": "start = max(ready 1681, prior availability, requested departure − loading) = 1936. Return 2163; next available 2223; lateness 0."
      },
      {
        "id": "#06",
        "title": "#06: depart 2283, deliver 2443",
        "tick": 2283,
        "detail": "start = max(ready 2193, prior availability, requested departure − loading) = 2223. Return 2558; next available 2618; lateness 0."
      }
    ],
    "timeline": [
      {
        "id": "#01",
        "lane": "One drone",
        "start": 82,
        "end": 529,
        "label": "#01",
        "kind": "task",
        "selection": {
          "kind": "task",
          "id": "#01"
        }
      },
      {
        "id": "#02",
        "lane": "One drone",
        "start": 589,
        "end": 1024,
        "label": "#02",
        "kind": "task",
        "selection": {
          "kind": "task",
          "id": "#02"
        }
      },
      {
        "id": "#03",
        "lane": "One drone",
        "start": 1084,
        "end": 1249,
        "label": "#03",
        "kind": "task",
        "selection": {
          "kind": "task",
          "id": "#03"
        }
      },
      {
        "id": "#04",
        "lane": "One drone",
        "start": 1309,
        "end": 1876,
        "label": "#04",
        "kind": "task",
        "selection": {
          "kind": "task",
          "id": "#04"
        }
      },
      {
        "id": "#05",
        "lane": "One drone",
        "start": 1936,
        "end": 2163,
        "label": "#05",
        "kind": "task",
        "selection": {
          "kind": "task",
          "id": "#05"
        }
      },
      {
        "id": "#06",
        "lane": "One drone",
        "start": 2223,
        "end": 2558,
        "label": "#06",
        "kind": "task",
        "selection": {
          "kind": "task",
          "id": "#06"
        }
      }
    ],
    "objective": {
      "lateness": 0,
      "allReturned": 2558,
      "energy": 263271,
      "lateCount": 0,
      "sumDelivery": 8626
    },
    "comparisons": [
      {
        "label": "Starting sequence",
        "value": "0, 2738, 263271",
        "sameModel": true
      },
      {
        "label": "Swap local optimum",
        "value": "0, 2558, 263271",
        "sameModel": true
      }
    ],
    "strategyHashes": {
      "h": "fnv1a32:6a0d8a02",
      "dominates": "fnv1a32:f4446203",
      "withinBudget": "fnv1a32:1e9e12c9",
      "orderKey": "fnv1a32:8f614065",
      "objective": "fnv1a32:c5bd8420",
      "assignCost": "fnv1a32:fdce2d2d",
      "priority": "fnv1a32:a6047409"
    },
    "strategySources": {
      "h": "return 0;",
      "dominates": "return a.time <= b.time && a.energy <= b.energy && (a.time < b.time || a.energy < b.energy);",
      "withinBudget": "return label.energy <= budget * 1;",
      "orderKey": "return order.promised;",
      "objective": "return [plan.lateness, plan.allReturned, plan.energy];",
      "assignCost": "return state.predicted;",
      "priority": "return tasks.map(t => t.drone).sort();"
    }
  }
}