{
  "season": "2026-27",
  "gw": 1,
  "title": "Gameweek 1 Initial Squad Allocation & Captaincy Solver",
  "deadline": "2026-08-14T17:30:00Z",
  "status": "completed",
  "provenance": {
    "modelVersion": "v2.4.1-rc3",
    "frozenAt": "2026-08-14T15:30:00Z",
    "snapshotHash": "sha256:8f4c2e9a1b0d745e99812458c067e2a9b311fc90d813476fa33c79e652a9ef01",
    "datasetId": "fpl-ep-202627-gw1-freeze",
    "solverEngine": "Highs-MILP-v1.7.2",
    "executionTimestamp": "2026-08-14T15:32:11Z",
    "solverParameters": {
      "horizonWeeks": 5,
      "decayRate": 0.85,
      "hitPenalty": 4,
      "riskAversion": 0.15,
      "freeTransferConservationWeight": 0.8,
      "maxPlayersPerClub": 3,
      "teamBudgetCap": 100
    },
    "isDemoSample": true,
    "datasetKind": "illustrative-sample"
  },
  "validatedPlan": {
    "armId": "optimiser",
    "armName": "Mixed-Integer Linear Solver (ILP)",
    "formation": "3-5-2",
    "bank": 0.5,
    "hitCost": 0,
    "freeTransfersAvailable": 0,
    "chipUsed": "none",
    "captain": {
      "id": "p_haaland_mci",
      "webName": "Haaland",
      "fullName": "Erling Haaland",
      "team": "MCI",
      "position": "FWD",
      "cost": 15,
      "projectedMinutes": 88,
      "expectedPoints": 8.72,
      "realisedPoints": 13,
      "isCaptain": true,
      "multiplier": 2,
      "opponent": "CHE (A)",
      "isHome": false,
      "fixtureDifficulty": 3,
      "xGI": 0.94,
      "cleanSheetProbability": 0.32,
      "selectedByPercent": 54.2
    },
    "viceCaptain": {
      "id": "p_saka_ars",
      "webName": "Saka",
      "fullName": "Bukayo Saka",
      "team": "ARS",
      "position": "MID",
      "cost": 10,
      "projectedMinutes": 89,
      "expectedPoints": 7.15,
      "realisedPoints": 12,
      "isViceCaptain": true,
      "opponent": "WOL (H)",
      "isHome": true,
      "fixtureDifficulty": 2,
      "xGI": 0.81,
      "cleanSheetProbability": 0.48,
      "selectedByPercent": 33.1
    },
    "startingXI": [
      {
        "id": "p_raya_ars",
        "webName": "Raya",
        "fullName": "David Raya",
        "team": "ARS",
        "position": "GKP",
        "cost": 5.5,
        "projectedMinutes": 90,
        "expectedPoints": 4.58,
        "realisedPoints": 6,
        "opponent": "WOL (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "cleanSheetProbability": 0.51,
        "selectedByPercent": 24.5
      },
      {
        "id": "p_saliba_ars",
        "webName": "Saliba",
        "fullName": "William Saliba",
        "team": "ARS",
        "position": "DEF",
        "cost": 6,
        "projectedMinutes": 90,
        "expectedPoints": 4.82,
        "realisedPoints": 6,
        "opponent": "WOL (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "cleanSheetProbability": 0.51,
        "selectedByPercent": 38.2
      },
      {
        "id": "p_gvardiol_mci",
        "webName": "Gvardiol",
        "fullName": "Joško Gvardiol",
        "team": "MCI",
        "position": "DEF",
        "cost": 6,
        "projectedMinutes": 85,
        "expectedPoints": 4.41,
        "realisedPoints": 6,
        "opponent": "CHE (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "cleanSheetProbability": 0.35,
        "selectedByPercent": 31.7
      },
      {
        "id": "p_munoz_cry",
        "webName": "Muñoz",
        "fullName": "Daniel Muñoz",
        "team": "CRY",
        "position": "DEF",
        "cost": 5,
        "projectedMinutes": 90,
        "expectedPoints": 4.15,
        "realisedPoints": 2,
        "opponent": "BRE (A)",
        "isHome": false,
        "fixtureDifficulty": 2,
        "cleanSheetProbability": 0.28,
        "selectedByPercent": 12.4
      },
      {
        "id": "p_saka_ars",
        "webName": "Saka",
        "fullName": "Bukayo Saka",
        "team": "ARS",
        "position": "MID",
        "cost": 10,
        "projectedMinutes": 89,
        "expectedPoints": 7.15,
        "realisedPoints": 12,
        "isViceCaptain": true,
        "opponent": "WOL (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "xGI": 0.81,
        "cleanSheetProbability": 0.48,
        "selectedByPercent": 33.1
      },
      {
        "id": "p_palmer_che",
        "webName": "Palmer",
        "fullName": "Cole Palmer",
        "team": "CHE",
        "position": "MID",
        "cost": 10.5,
        "projectedMinutes": 87,
        "expectedPoints": 6.84,
        "realisedPoints": 3,
        "opponent": "MCI (H)",
        "isHome": true,
        "fixtureDifficulty": 4,
        "xGI": 0.72,
        "cleanSheetProbability": 0.18,
        "selectedByPercent": 42.6
      },
      {
        "id": "p_son_tot",
        "webName": "Son",
        "fullName": "Heung-min Son",
        "team": "TOT",
        "position": "MID",
        "cost": 10,
        "projectedMinutes": 86,
        "expectedPoints": 6.32,
        "realisedPoints": 2,
        "opponent": "LEI (A)",
        "isHome": false,
        "fixtureDifficulty": 2,
        "xGI": 0.69,
        "cleanSheetProbability": 0.31,
        "selectedByPercent": 15.3
      },
      {
        "id": "p_eze_cry",
        "webName": "Eze",
        "fullName": "Eberechi Eze",
        "team": "CRY",
        "position": "MID",
        "cost": 7,
        "projectedMinutes": 88,
        "expectedPoints": 5.42,
        "realisedPoints": 2,
        "opponent": "BRE (A)",
        "isHome": false,
        "fixtureDifficulty": 2,
        "xGI": 0.58,
        "cleanSheetProbability": 0.28,
        "selectedByPercent": 34
      },
      {
        "id": "p_rogers_avl",
        "webName": "Rogers",
        "fullName": "Morgan Rogers",
        "team": "AVL",
        "position": "MID",
        "cost": 5,
        "projectedMinutes": 82,
        "expectedPoints": 4.12,
        "realisedPoints": 2,
        "opponent": "WHU (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "xGI": 0.41,
        "cleanSheetProbability": 0.25,
        "selectedByPercent": 14.8
      },
      {
        "id": "p_haaland_mci",
        "webName": "Haaland",
        "fullName": "Erling Haaland",
        "team": "MCI",
        "position": "FWD",
        "cost": 15,
        "projectedMinutes": 88,
        "expectedPoints": 8.72,
        "realisedPoints": 13,
        "isCaptain": true,
        "multiplier": 2,
        "opponent": "CHE (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "xGI": 0.94,
        "cleanSheetProbability": 0.32,
        "selectedByPercent": 54.2
      },
      {
        "id": "p_isen_new",
        "webName": "Isak",
        "fullName": "Alexander Isak",
        "team": "NEW",
        "position": "FWD",
        "cost": 8.5,
        "projectedMinutes": 86,
        "expectedPoints": 6.24,
        "realisedPoints": 5,
        "opponent": "SOU (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "xGI": 0.74,
        "cleanSheetProbability": 0.41,
        "selectedByPercent": 57.1
      }
    ],
    "bench": [
      {
        "id": "p_valdimarsson_bre",
        "webName": "Valdimarsson",
        "fullName": "Hákon Valdimarsson",
        "team": "BRE",
        "position": "GKP",
        "cost": 4,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": 0,
        "benchOrder": 1,
        "opponent": "CRY (H)",
        "isHome": true,
        "fixtureDifficulty": 3
      },
      {
        "id": "p_joao_pedro_bha",
        "webName": "Joao Pedro",
        "fullName": "Joao Pedro",
        "team": "BHA",
        "position": "FWD",
        "cost": 5.5,
        "projectedMinutes": 75,
        "expectedPoints": 4.22,
        "realisedPoints": 5,
        "benchOrder": 2,
        "opponent": "EVE (A)",
        "isHome": false,
        "fixtureDifficulty": 2
      },
      {
        "id": "p_barco_bha",
        "webName": "Barco",
        "fullName": "Valentín Barco",
        "team": "BHA",
        "position": "DEF",
        "cost": 4,
        "projectedMinutes": 20,
        "expectedPoints": 1.45,
        "realisedPoints": 0,
        "benchOrder": 3,
        "opponent": "EVE (A)",
        "isHome": false,
        "fixtureDifficulty": 2
      },
      {
        "id": "p_faes_lei",
        "webName": "Faes",
        "fullName": "Wout Faes",
        "team": "LEI",
        "position": "DEF",
        "cost": 4,
        "projectedMinutes": 90,
        "expectedPoints": 2.1,
        "realisedPoints": 1,
        "benchOrder": 4,
        "opponent": "TOT (H)",
        "isHome": true,
        "fixtureDifficulty": 4
      }
    ],
    "transfersIn": [],
    "transfersOut": [],
    "transferActions": [],
    "projectedSquadTotalXP": 65.8,
    "realisedSquadTotalPoints": 74
  },
  "arms": [
    {
      "id": "baseline",
      "name": "Template Baseline (Rolling Horizon Heuristic)",
      "shortLabel": "Baseline Heuristic",
      "category": "Heuristic",
      "description": "Greedy point-expectation squad following top 10k consensus ownership and 3-gameweek unweighted rolling EV.",
      "objectiveEP": 62.4,
      "realisedPoints": 68,
      "varianceScore": 14.2,
      "transfersCount": 0,
      "hits": 0,
      "captain": "Haaland",
      "viceCaptain": "Saka",
      "chip": "none",
      "formation": "3-4-3",
      "decisionDeltaVsBaseline": 0,
      "realisedRankEffect": "Top 18% percentile",
      "solverRuntimeMs": 18
    },
    {
      "id": "optimiser",
      "name": "Mixed-Integer Linear Solver (ILP)",
      "shortLabel": "Optimiser (MILP)",
      "category": "Mixed-Integer Linear (ILP)",
      "description": "5-gameweek rolling horizon formulation with exponential decay factor 0.85, shadow price budget allocation, and transfer buffer preservation.",
      "objectiveEP": 65.8,
      "realisedPoints": 74,
      "varianceScore": 12.8,
      "transfersCount": 0,
      "hits": 0,
      "captain": "Haaland",
      "viceCaptain": "Saka",
      "chip": "none",
      "formation": "3-5-2",
      "decisionDeltaVsBaseline": 3.4,
      "realisedRankEffect": "Top 6% percentile",
      "solverRuntimeMs": 412
    },
    {
      "id": "agent",
      "name": "Multi-Objective Agent (EV + Rank Ceiling)",
      "shortLabel": "Agent (Multi-Obj)",
      "category": "Multi-Objective Agent",
      "description": "Monte Carlo simulated policy arm penalising ownership correlation in 50/50 splits to maximise upper quartile rank distribution.",
      "objectiveEP": 66.2,
      "realisedPoints": 71,
      "varianceScore": 19.5,
      "transfersCount": 0,
      "hits": 0,
      "captain": "Saka",
      "viceCaptain": "Haaland",
      "chip": "none",
      "formation": "3-5-2",
      "decisionDeltaVsBaseline": 3.8,
      "realisedRankEffect": "Top 11% percentile",
      "solverRuntimeMs": 1840
    }
  ],
  "summaryAnalysis": {
    "executiveSummary": "GW1 solver converged on a Haaland + Saka premium spine with 3-5-2 structure. The MILP optimiser unlocked +3.4 xP over the template baseline primarily through five-man midfield flexibility (investing in Rogers at £5.0m to finance Palmer & Son) and £0.5m bank preservation.",
    "keyTradeoffs": [
      "Haaland vs Salah captaincy: Haaland edged Salah by +0.81 xP due to Chelsea transition concession rates versus Ipswich away variance.",
      "Three premiums vs balanced squad: Dual-premium (Haaland + Palmer) with Saka outperformed triple-premium structures by +2.1 xP due to shallow £4.5m forward bench drag.",
      "Bank liquidity: Holding £0.5m in the bank preserved 94% of feasible single-transfer paths for GW2/GW3 price rise spikes."
    ],
    "shadowPrices": {
      "budgetPerMillionXP": 0.42,
      "transferMarginalValueXP": 1.85,
      "benchPointsExpectancy": 1.62
    },
    "divergenceNotes": "Agent arm diverged on captaincy (selecting Saka over Haaland based on Wolves home defensive metrics), delivering higher ceiling variance but yielding 2 points lower in realised return."
  },
  "datasetKind": "illustrative-sample"
}