{
  "season": "2026-27",
  "gw": 3,
  "title": "Gameweek 3 North London Derby Prep & West Ham Away Decision",
  "deadline": "2026-08-31T10:00:00Z",
  "status": "live",
  "provenance": {
    "modelVersion": "v2.4.1-rc3",
    "frozenAt": "2026-08-31T08:00:00Z",
    "snapshotHash": "sha256:7c92b7a2d488e3fa0895c32b567b489ef0c239458e0a29367d5668b02ea6f381",
    "datasetId": "fpl-ep-202627-gw3-freeze",
    "solverEngine": "Highs-MILP-v1.7.2",
    "executionTimestamp": "2026-08-31T08:02:19Z",
    "solverParameters": {
      "horizonWeeks": 5,
      "decayRate": 0.85,
      "hitPenalty": 4,
      "riskAversion": 0.15,
      "freeTransferConservationWeight": 0.8,
      "maxPlayersPerClub": 3,
      "teamBudgetCap": 100.8
    },
    "isDemoSample": true,
    "datasetKind": "illustrative-sample"
  },
  "validatedPlan": {
    "armId": "optimiser",
    "armName": "Mixed-Integer Linear Solver (ILP)",
    "formation": "3-4-3",
    "bank": 0.2,
    "hitCost": 0,
    "freeTransfersAvailable": 1,
    "chipUsed": "none",
    "captain": {
      "id": "p_haaland_mci",
      "webName": "Haaland",
      "fullName": "Erling Haaland",
      "team": "MCI",
      "position": "FWD",
      "cost": 15.2,
      "projectedMinutes": 89,
      "expectedPoints": 8.85,
      "realisedPoints": null,
      "isCaptain": true,
      "multiplier": 2,
      "opponent": "WHU (A)",
      "isHome": false,
      "fixtureDifficulty": 3,
      "xGI": 0.98,
      "cleanSheetProbability": 0.36,
      "selectedByPercent": 63.4
    },
    "viceCaptain": {
      "id": "p_palmer_che",
      "webName": "Palmer",
      "fullName": "Cole Palmer",
      "team": "CHE",
      "position": "MID",
      "cost": 10.6,
      "projectedMinutes": 88,
      "expectedPoints": 7.82,
      "realisedPoints": null,
      "isViceCaptain": true,
      "opponent": "CRY (H)",
      "isHome": true,
      "fixtureDifficulty": 2,
      "xGI": 0.84,
      "cleanSheetProbability": 0.38,
      "selectedByPercent": 46.8
    },
    "startingXI": [
      {
        "id": "p_raya_ars",
        "webName": "Raya",
        "fullName": "David Raya",
        "team": "ARS",
        "position": "GKP",
        "cost": 5.5,
        "projectedMinutes": 90,
        "expectedPoints": 4.62,
        "realisedPoints": null,
        "opponent": "BHA (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "cleanSheetProbability": 0.49,
        "selectedByPercent": 27.8
      },
      {
        "id": "p_saliba_ars",
        "webName": "Saliba",
        "fullName": "William Saliba",
        "team": "ARS",
        "position": "DEF",
        "cost": 6,
        "projectedMinutes": 90,
        "expectedPoints": 4.55,
        "realisedPoints": null,
        "opponent": "BHA (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "cleanSheetProbability": 0.49,
        "selectedByPercent": 40.1
      },
      {
        "id": "p_gvardiol_mci",
        "webName": "Gvardiol",
        "fullName": "Joško Gvardiol",
        "team": "MCI",
        "position": "DEF",
        "cost": 6,
        "projectedMinutes": 87,
        "expectedPoints": 4.38,
        "realisedPoints": null,
        "opponent": "WHU (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "cleanSheetProbability": 0.36,
        "selectedByPercent": 35
      },
      {
        "id": "p_robinson_ful",
        "webName": "Robinson",
        "fullName": "Antonee Robinson",
        "team": "FUL",
        "position": "DEF",
        "cost": 4.6,
        "projectedMinutes": 90,
        "expectedPoints": 4.2,
        "realisedPoints": null,
        "opponent": "IPS (A)",
        "isHome": false,
        "fixtureDifficulty": 2,
        "cleanSheetProbability": 0.39,
        "selectedByPercent": 11.2
      },
      {
        "id": "p_saka_ars",
        "webName": "Saka",
        "fullName": "Bukayo Saka",
        "team": "ARS",
        "position": "MID",
        "cost": 10.1,
        "projectedMinutes": 89,
        "expectedPoints": 7.35,
        "realisedPoints": null,
        "opponent": "BHA (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "xGI": 0.82,
        "cleanSheetProbability": 0.49,
        "selectedByPercent": 36.8
      },
      {
        "id": "p_palmer_che",
        "webName": "Palmer",
        "fullName": "Cole Palmer",
        "team": "CHE",
        "position": "MID",
        "cost": 10.6,
        "projectedMinutes": 88,
        "expectedPoints": 7.82,
        "realisedPoints": null,
        "isViceCaptain": true,
        "opponent": "CRY (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "xGI": 0.84,
        "cleanSheetProbability": 0.38,
        "selectedByPercent": 46.8
      },
      {
        "id": "p_son_tot",
        "webName": "Son",
        "fullName": "Heung-min Son",
        "team": "TOT",
        "position": "MID",
        "cost": 10,
        "projectedMinutes": 86,
        "expectedPoints": 6.8,
        "realisedPoints": null,
        "opponent": "NEW (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "xGI": 0.73,
        "cleanSheetProbability": 0.26,
        "selectedByPercent": 16.5
      },
      {
        "id": "p_jota_liv",
        "webName": "Jota",
        "fullName": "Diogo Jota",
        "team": "LIV",
        "position": "MID",
        "cost": 7.6,
        "projectedMinutes": 76,
        "expectedPoints": 5.95,
        "realisedPoints": null,
        "opponent": "MUN (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "xGI": 0.68,
        "cleanSheetProbability": 0.29,
        "selectedByPercent": 23.4
      },
      {
        "id": "p_haaland_mci",
        "webName": "Haaland",
        "fullName": "Erling Haaland",
        "team": "MCI",
        "position": "FWD",
        "cost": 15.2,
        "projectedMinutes": 89,
        "expectedPoints": 8.85,
        "realisedPoints": null,
        "isCaptain": true,
        "multiplier": 2,
        "opponent": "WHU (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "xGI": 0.98,
        "cleanSheetProbability": 0.36,
        "selectedByPercent": 63.4
      },
      {
        "id": "p_isak_new",
        "webName": "Isak",
        "fullName": "Alexander Isak",
        "team": "NEW",
        "position": "FWD",
        "cost": 8.5,
        "projectedMinutes": 86,
        "expectedPoints": 6.42,
        "realisedPoints": null,
        "opponent": "TOT (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "xGI": 0.74,
        "cleanSheetProbability": 0.28,
        "selectedByPercent": 56.9
      },
      {
        "id": "p_joao_pedro_bha",
        "webName": "Joao Pedro",
        "fullName": "Joao Pedro",
        "team": "BHA",
        "position": "FWD",
        "cost": 5.6,
        "projectedMinutes": 82,
        "expectedPoints": 4.6,
        "realisedPoints": null,
        "opponent": "ARS (A)",
        "isHome": false,
        "fixtureDifficulty": 4,
        "xGI": 0.52,
        "cleanSheetProbability": 0.18,
        "selectedByPercent": 28.1
      }
    ],
    "bench": [
      {
        "id": "p_valdimarsson_bre",
        "webName": "Valdimarsson",
        "fullName": "Hákon Valdimarsson",
        "team": "BRE",
        "position": "GKP",
        "cost": 4,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": null,
        "benchOrder": 1,
        "opponent": "SOU (H)",
        "isHome": true,
        "fixtureDifficulty": 2
      },
      {
        "id": "p_rogers_avl",
        "webName": "Rogers",
        "fullName": "Morgan Rogers",
        "team": "AVL",
        "position": "MID",
        "cost": 5.1,
        "projectedMinutes": 85,
        "expectedPoints": 4.15,
        "realisedPoints": null,
        "benchOrder": 2,
        "opponent": "LEI (A)",
        "isHome": false,
        "fixtureDifficulty": 2
      },
      {
        "id": "p_munoz_cry",
        "webName": "Muñoz",
        "fullName": "Daniel Muñoz",
        "team": "CRY",
        "position": "DEF",
        "cost": 5,
        "projectedMinutes": 90,
        "expectedPoints": 3.45,
        "realisedPoints": null,
        "benchOrder": 3,
        "opponent": "CHE (A)",
        "isHome": false,
        "fixtureDifficulty": 4
      },
      {
        "id": "p_faes_lei",
        "webName": "Faes",
        "fullName": "Wout Faes",
        "team": "LEI",
        "position": "DEF",
        "cost": 4,
        "projectedMinutes": 90,
        "expectedPoints": 2.4,
        "realisedPoints": null,
        "benchOrder": 4,
        "opponent": "AVL (H)",
        "isHome": true,
        "fixtureDifficulty": 3
      }
    ],
    "transfersIn": [
      {
        "id": "p_robinson_ful",
        "webName": "Robinson",
        "fullName": "Antonee Robinson",
        "team": "FUL",
        "position": "DEF",
        "cost": 4.6,
        "projectedMinutes": 90,
        "expectedPoints": 4.2,
        "realisedPoints": null,
        "opponent": "IPS (A)",
        "isHome": false,
        "fixtureDifficulty": 2
      }
    ],
    "transfersOut": [
      {
        "id": "p_barco_bha",
        "webName": "Barco",
        "fullName": "Valentín Barco",
        "team": "BHA",
        "position": "DEF",
        "cost": 4,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": null,
        "opponent": "ARS (A)",
        "isHome": false,
        "fixtureDifficulty": 4
      }
    ],
    "transferActions": [
      {
        "playerIn": {
          "id": "p_robinson_ful",
          "webName": "Robinson",
          "team": "FUL",
          "position": "DEF",
          "cost": 4.6,
          "expectedPoints": 4.2
        },
        "playerOut": {
          "id": "p_barco_bha",
          "webName": "Barco",
          "team": "BHA",
          "position": "DEF",
          "sellPrice": 4,
          "expectedPoints": 0
        },
        "netCostDelta": 0.6,
        "netXPDelta3GW": 4.1,
        "rationale": "Loan departure / non-playing deadwood elimination. Barco confirmed out; Robinson enters Fulham's favorable Ipswich fixture with 0.39 CS expectancy."
      }
    ],
    "projectedSquadTotalXP": 67.8,
    "realisedSquadTotalPoints": null
  },
  "arms": [
    {
      "id": "baseline",
      "name": "Template Baseline (Rolling Horizon Heuristic)",
      "shortLabel": "Baseline Heuristic",
      "category": "Heuristic",
      "description": "Retains Barco on third bench spot to preserve 2 Free Transfers for post-international break wildcard/restructure.",
      "objectiveEP": 64.1,
      "realisedPoints": null,
      "varianceScore": 14.8,
      "transfersCount": 0,
      "hits": 0,
      "captain": "Haaland",
      "viceCaptain": "Palmer",
      "chip": "none",
      "formation": "3-5-2",
      "decisionDeltaVsBaseline": 0,
      "realisedRankEffect": null,
      "solverRuntimeMs": 20
    },
    {
      "id": "optimiser",
      "name": "Mixed-Integer Linear Solver (ILP)",
      "shortLabel": "Optimiser (MILP)",
      "category": "Mixed-Integer Linear (ILP)",
      "description": "Resolves zero-minute bench liability: Barco to Robinson (£4.6m), switches formation to 3-4-3 promoting João Pedro into starting XI over Rogers.",
      "objectiveEP": 67.8,
      "realisedPoints": null,
      "varianceScore": 13.2,
      "transfersCount": 1,
      "hits": 0,
      "captain": "Haaland",
      "viceCaptain": "Palmer",
      "chip": "none",
      "formation": "3-4-3",
      "decisionDeltaVsBaseline": 3.7,
      "realisedRankEffect": null,
      "solverRuntimeMs": 485
    },
    {
      "id": "agent",
      "name": "Multi-Objective Agent (EV + Rank Ceiling)",
      "shortLabel": "Agent (Multi-Obj)",
      "category": "Multi-Objective Agent",
      "description": "Differential captaincy arm targeting Palmer vs Crystal Palace home (xGI 0.84, pen duty) over Haaland away fixture.",
      "objectiveEP": 68.4,
      "realisedPoints": null,
      "varianceScore": 21,
      "transfersCount": 1,
      "hits": 0,
      "captain": "Palmer",
      "viceCaptain": "Haaland",
      "chip": "none",
      "formation": "3-4-3",
      "decisionDeltaVsBaseline": 4.3,
      "realisedRankEffect": null,
      "solverRuntimeMs": 1780
    }
  ],
  "summaryAnalysis": {
    "executiveSummary": "GW3 represents an in-flight decision round with live fixtures pending. The MILP solver opted to extinguish zero-minute risk by replacing departed Barco with Fulham's Robinson, while flexing into a 3-4-3 shape. Projected squad total is 67.8 xP with Haaland retained as consensus captain.",
    "keyTradeoffs": [
      "Barco deadwood vs rolling 2 FTs: Holding Barco sacrifices defensive auto-sub insurance against late warmup pulls. Robinson gives immediate +4.20 xP security against Ipswich.",
      "Captaincy split: Haaland (WHU away, 8.85 xP) vs Palmer (CRY home, 7.82 xP). Baseline and Optimiser stick to Haaland; Agent arm exploits Palmer's 90th percentile ceiling scenario.",
      "Bench order selection: Rogers vs Muñoz vs Faes. Rogers awarded first bench slot due to 85 projected minutes vs Muñoz's low clean sheet expectancy at Stamford Bridge."
    ],
    "shadowPrices": {
      "budgetPerMillionXP": 0.47,
      "transferMarginalValueXP": 1.92,
      "benchPointsExpectancy": 1.84
    },
    "divergenceNotes": "Realised points are pending fixture settlement. Snapshot hash was cryptographically verified and immutable as of 2026-08-31T08:00:00Z."
  },
  "datasetKind": "illustrative-sample"
}