{
  "season": "2025-26",
  "gw": 14,
  "title": "Gameweek 14 reconstructive replay",
  "deadline": "2025-12-02T18:00:00Z",
  "status": "completed",
  "datasetKind": "historical-replay",
  "provenance": {
    "modelVersion": "live_faithful_option_value",
    "frozenAt": "2025-12-02T18:00:00Z",
    "snapshotHash": "sha256:dbb7751995985cd10c3d55169019f6e8cc3d3f206af5df93fb03243da90109bc",
    "datasetId": "fpl-lab-2025-26-gw14-replay",
    "solverEngine": "FPL lab reconstructive replay",
    "executionTimestamp": "2025-12-02T18:00:00Z",
    "solverParameters": {
      "horizonWeeks": 5,
      "decayRate": 0.85,
      "hitPenalty": 4,
      "riskAversion": 0.15,
      "freeTransferConservationWeight": 0.8,
      "maxPlayersPerClub": 3,
      "teamBudgetCap": 100
    },
    "isDemoSample": false,
    "datasetKind": "historical-replay",
    "limitations": [
      "Fixtures come from the final season export, so mid-season revisions are not in this snapshot.",
      "The cutoff is reconstructed as first kickoff minus 90 minutes, not the live FPL deadline clock.",
      "No private manager state (exact bank, selling prices, chip timing) was archived at the time.",
      "Press and injury notes were not locked before the deadline.",
      "Prices are not exact pre-deadline quotes.",
      "Raw community xP tables were not used as the pre-deadline forecast."
    ]
  },
  "validatedPlan": {
    "armId": "optimiser",
    "armName": "Optimiser (forecast)",
    "formation": "3-5-2",
    "bank": 0.3,
    "hitCost": 0,
    "freeTransfersAvailable": 5,
    "chipUsed": "none",
    "captain": {
      "id": "player:2025-26:430",
      "webName": "Haaland",
      "fullName": "Erling Haaland",
      "team": "MCI",
      "position": "FWD",
      "cost": 14.7,
      "projectedMinutes": 88.2,
      "expectedPoints": 7.44,
      "realisedPoints": 14,
      "opponent": "FUL (A)",
      "isHome": false,
      "fixtureDifficulty": 3,
      "selectedByPercent": 62.5,
      "isCaptain": true,
      "multiplier": 2
    },
    "viceCaptain": {
      "id": "player:2025-26:119",
      "webName": "Mbeumo",
      "fullName": "Bryan Mbeumo",
      "team": "MUN",
      "position": "MID",
      "cost": 8.3,
      "projectedMinutes": 88.7,
      "expectedPoints": 6,
      "realisedPoints": 2,
      "opponent": "WHU (H)",
      "isHome": true,
      "fixtureDifficulty": 2,
      "selectedByPercent": 15,
      "isViceCaptain": true
    },
    "startingXI": [
      {
        "id": "player:2025-26:220",
        "webName": "Sánchez",
        "fullName": "Robert Lynch Sánchez",
        "team": "CHE",
        "position": "GKP",
        "cost": 4.8,
        "projectedMinutes": 88.3,
        "expectedPoints": 4.05,
        "realisedPoints": 1,
        "opponent": "LEE (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 10.3
      },
      {
        "id": "player:2025-26:8",
        "webName": "J.Timber",
        "fullName": "Jurriën Timber",
        "team": "ARS",
        "position": "DEF",
        "cost": 6,
        "projectedMinutes": 84,
        "expectedPoints": 5.34,
        "realisedPoints": 1,
        "opponent": "BRE (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 15.2
      },
      {
        "id": "player:2025-26:256",
        "webName": "Muñoz",
        "fullName": "Daniel Muñoz Mejía",
        "team": "CRY",
        "position": "DEF",
        "cost": 5.9,
        "projectedMinutes": 87.9,
        "expectedPoints": 4.96,
        "realisedPoints": 14,
        "opponent": "BUR (A)",
        "isHome": false,
        "fixtureDifficulty": 2,
        "selectedByPercent": 9.2
      },
      {
        "id": "player:2025-26:5",
        "webName": "Gabriel",
        "fullName": "Gabriel dos Santos Magalhães",
        "team": "ARS",
        "position": "DEF",
        "cost": 7.3,
        "projectedMinutes": 50.8,
        "expectedPoints": 3.56,
        "realisedPoints": 0,
        "opponent": "BRE (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 45.4
      },
      {
        "id": "player:2025-26:119",
        "webName": "Mbeumo",
        "fullName": "Bryan Mbeumo",
        "team": "MUN",
        "position": "MID",
        "cost": 8.3,
        "projectedMinutes": 88.7,
        "expectedPoints": 6,
        "realisedPoints": 2,
        "opponent": "WHU (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "selectedByPercent": 15,
        "isViceCaptain": true
      },
      {
        "id": "player:2025-26:21",
        "webName": "Rice",
        "fullName": "Declan Rice",
        "team": "ARS",
        "position": "MID",
        "cost": 7.2,
        "projectedMinutes": 82.9,
        "expectedPoints": 5.31,
        "realisedPoints": 3,
        "opponent": "BRE (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 23.3
      },
      {
        "id": "player:2025-26:384",
        "webName": "Gakpo",
        "fullName": "Cody Gakpo",
        "team": "LIV",
        "position": "MID",
        "cost": 7.3,
        "projectedMinutes": 70.1,
        "expectedPoints": 4.8,
        "realisedPoints": 1,
        "opponent": "SUN (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "selectedByPercent": 5.6
      },
      {
        "id": "player:2025-26:387",
        "webName": "Szoboszlai",
        "fullName": "Dominik Szoboszlai",
        "team": "LIV",
        "position": "MID",
        "cost": 7.1,
        "projectedMinutes": 83.3,
        "expectedPoints": 4.53,
        "realisedPoints": 2,
        "opponent": "SUN (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "selectedByPercent": 15.1
      },
      {
        "id": "player:2025-26:82",
        "webName": "Semenyo",
        "fullName": "Antoine Semenyo",
        "team": "BOU",
        "position": "MID",
        "cost": 8,
        "projectedMinutes": 70.2,
        "expectedPoints": 4.47,
        "realisedPoints": 4,
        "opponent": "EVE (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 46.2
      },
      {
        "id": "player:2025-26:430",
        "webName": "Haaland",
        "fullName": "Erling Haaland",
        "team": "MCI",
        "position": "FWD",
        "cost": 14.7,
        "projectedMinutes": 88.2,
        "expectedPoints": 7.44,
        "realisedPoints": 14,
        "opponent": "FUL (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 62.5,
        "isCaptain": true,
        "multiplier": 2
      },
      {
        "id": "player:2025-26:714",
        "webName": "Woltemade",
        "fullName": "Nick Woltemade",
        "team": "NEW",
        "position": "FWD",
        "cost": 6.7,
        "projectedMinutes": 79.8,
        "expectedPoints": 5.22,
        "realisedPoints": 5,
        "opponent": "TOT (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 6.5
      }
    ],
    "bench": [
      {
        "id": "player:2025-26:470",
        "webName": "Dúbravka",
        "fullName": "Martin Dúbravka",
        "team": "BUR",
        "position": "GKP",
        "cost": 4,
        "projectedMinutes": 85.9,
        "expectedPoints": 3.01,
        "realisedPoints": 2,
        "opponent": "CRY (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 25.7,
        "benchOrder": 1
      },
      {
        "id": "player:2025-26:72",
        "webName": "Senesi",
        "fullName": "Marcos Senesi Barón",
        "team": "BOU",
        "position": "DEF",
        "cost": 5.2,
        "projectedMinutes": 82.9,
        "expectedPoints": 3.55,
        "realisedPoints": 0,
        "opponent": "EVE (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 22,
        "benchOrder": 2
      },
      {
        "id": "player:2025-26:348",
        "webName": "Rodon",
        "fullName": "Joe Rodon",
        "team": "LEE",
        "position": "DEF",
        "cost": 3.9,
        "projectedMinutes": 84.1,
        "expectedPoints": 2.72,
        "realisedPoints": 2,
        "opponent": "CHE (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 3,
        "benchOrder": 3
      },
      {
        "id": "player:2025-26:252",
        "webName": "Marc Guiu",
        "fullName": "Marc Guiu Paz",
        "team": "CHE",
        "position": "FWD",
        "cost": 4,
        "projectedMinutes": 11.6,
        "expectedPoints": 0.73,
        "realisedPoints": 1,
        "opponent": "LEE (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 5.2,
        "benchOrder": 4
      }
    ],
    "transfersIn": [
      {
        "id": "player:2025-26:430",
        "webName": "Haaland",
        "fullName": "Erling Haaland",
        "team": "MCI",
        "position": "FWD",
        "cost": 14.7,
        "projectedMinutes": 88.2,
        "expectedPoints": 7.44,
        "realisedPoints": 14,
        "opponent": "FUL (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 62.5
      },
      {
        "id": "player:2025-26:21",
        "webName": "Rice",
        "fullName": "Declan Rice",
        "team": "ARS",
        "position": "MID",
        "cost": 7.2,
        "projectedMinutes": 82.9,
        "expectedPoints": 5.31,
        "realisedPoints": 3,
        "opponent": "BRE (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 23.3
      }
    ],
    "transfersOut": [
      {
        "id": "player:2025-26:249",
        "webName": "João Pedro",
        "fullName": "João Pedro Junqueira de Jesus",
        "team": "CHE",
        "position": "FWD",
        "cost": 7.4,
        "projectedMinutes": 73.5,
        "expectedPoints": 4.88,
        "realisedPoints": null,
        "opponent": "LEE (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 34.8
      },
      {
        "id": "player:2025-26:381",
        "webName": "M.Salah",
        "fullName": "Mohamed Salah",
        "team": "LIV",
        "position": "MID",
        "cost": 14,
        "projectedMinutes": 71.1,
        "expectedPoints": 6.05,
        "realisedPoints": null,
        "opponent": "SUN (H)",
        "isHome": true,
        "fixtureDifficulty": 2,
        "selectedByPercent": 15.2
      }
    ],
    "transferActions": [
      {
        "playerIn": {
          "id": "player:2025-26:430",
          "webName": "Haaland",
          "team": "MCI",
          "position": "FWD",
          "cost": 14.9,
          "expectedPoints": 7.44
        },
        "playerOut": {
          "id": "player:2025-26:249",
          "webName": "João Pedro",
          "team": "CHE",
          "position": "FWD",
          "sellPrice": 7.5,
          "expectedPoints": 4.88
        },
        "netCostDelta": 7.4,
        "netXPDelta3GW": 2.56,
        "rationale": "Selected by this approach at the reconstructed cutoff."
      },
      {
        "playerIn": {
          "id": "player:2025-26:21",
          "webName": "Rice",
          "team": "ARS",
          "position": "MID",
          "cost": 7,
          "expectedPoints": 5.31
        },
        "playerOut": {
          "id": "player:2025-26:381",
          "webName": "M.Salah",
          "team": "LIV",
          "position": "MID",
          "sellPrice": 14.2,
          "expectedPoints": 6.05
        },
        "netCostDelta": -7.2,
        "netXPDelta3GW": -0.74,
        "rationale": "Selected by this approach at the reconstructed cutoff."
      }
    ],
    "projectedSquadTotalXP": 68.5,
    "realisedSquadTotalPoints": 63
  },
  "arms": [
    {
      "id": "baseline",
      "name": "Template (roll transfers)",
      "shortLabel": "Template",
      "category": "Heuristic",
      "description": "No transfers",
      "objectiveEP": 55.2,
      "realisedPoints": 45,
      "varianceScore": 0,
      "transfersCount": 0,
      "hits": 0,
      "captain": "M.Salah",
      "viceCaptain": "B.Fernandes",
      "chip": "none",
      "formation": "5-3-2",
      "decisionDeltaVsBaseline": 0,
      "realisedRankEffect": "45 pts net",
      "solverRuntimeMs": 0
    },
    {
      "id": "optimiser",
      "name": "Optimiser (forecast)",
      "shortLabel": "Optimiser",
      "category": "Mixed-Integer Linear (ILP)",
      "description": "João Pedro → Haaland, M.Salah → Rice",
      "objectiveEP": 68.5,
      "realisedPoints": 63,
      "varianceScore": 0,
      "transfersCount": 2,
      "hits": 0,
      "captain": "Haaland",
      "viceCaptain": "Mbeumo",
      "chip": "none",
      "formation": "3-5-2",
      "decisionDeltaVsBaseline": 18,
      "realisedRankEffect": "63 pts net",
      "solverRuntimeMs": 0
    },
    {
      "id": "agent",
      "name": "Evidence-informed",
      "shortLabel": "Evidence",
      "category": "Multi-Objective Agent",
      "description": "João Pedro → Haaland, M.Salah → Rice",
      "objectiveEP": 68.5,
      "realisedPoints": 63,
      "varianceScore": 0,
      "transfersCount": 2,
      "hits": 0,
      "captain": "Haaland",
      "viceCaptain": "Mbeumo",
      "chip": "none",
      "formation": "3-5-2",
      "decisionDeltaVsBaseline": 18,
      "realisedRankEffect": "63 pts net",
      "solverRuntimeMs": 0
    }
  ],
  "summaryAnalysis": {
    "executiveSummary": "Reconstructive replay for 2025/26 Gameweek 14. The optimiser captained Haaland (vice Mbeumo), formation 3-5-2, and made 2 transfers (João Pedro out, Haaland in; M.Salah out, Rice in). It scored 63 net points after hits. Pre-cutoff objective was 68.5 expected points.",
    "keyTradeoffs": [
      "Transfers: João Pedro to Haaland; M.Salah to Rice.",
      "Evidence-informed finished +0 points versus the optimiser this week.",
      "Fixtures come from the final season export, so mid-season revisions are not in this snapshot.",
      "The cutoff is reconstructed as first kickoff minus 90 minutes, not the live FPL deadline clock.",
      "No private manager state (exact bank, selling prices, chip timing) was archived at the time."
    ],
    "shadowPrices": {
      "budgetPerMillionXP": 0,
      "transferMarginalValueXP": 0,
      "benchPointsExpectancy": 0
    },
    "divergenceNotes": "This is a reconstructive historical replay, not a live two-hour freeze. Inputs were rebuilt after the season; see Methods and the limitations on this page."
  }
}