{
  "season": "2025-26",
  "gw": 34,
  "title": "Gameweek 34 reconstructive replay",
  "deadline": "2026-04-24T17:30:00Z",
  "status": "completed",
  "datasetKind": "historical-replay",
  "provenance": {
    "modelVersion": "live_faithful_option_value",
    "frozenAt": "2026-04-24T17:30:00Z",
    "snapshotHash": "sha256:b457f602f2f3b8410deb623c451c0ad8205d7f3b71ddc65f04885e2f09950659",
    "datasetId": "fpl-lab-2025-26-gw34-replay",
    "solverEngine": "FPL lab reconstructive replay",
    "executionTimestamp": "2026-04-24T17:30: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-4-3",
    "bank": 3.8,
    "hitCost": 8,
    "freeTransfersAvailable": 1,
    "chipUsed": "none",
    "captain": {
      "id": "player:2025-26:449",
      "webName": "B.Fernandes",
      "fullName": "Bruno Borges Fernandes",
      "team": "MUN",
      "position": "MID",
      "cost": 10.4,
      "projectedMinutes": 84.1,
      "expectedPoints": 6.43,
      "realisedPoints": 5,
      "opponent": "BRE (H)",
      "isHome": true,
      "fixtureDifficulty": 3,
      "selectedByPercent": 48,
      "isCaptain": true,
      "multiplier": 2
    },
    "viceCaptain": {
      "id": "player:2025-26:5",
      "webName": "Gabriel",
      "fullName": "Gabriel dos Santos Magalhães",
      "team": "ARS",
      "position": "DEF",
      "cost": 7.3,
      "projectedMinutes": 79,
      "expectedPoints": 5.83,
      "realisedPoints": 8,
      "opponent": "NEW (H)",
      "isHome": true,
      "fixtureDifficulty": 3,
      "selectedByPercent": 45.4,
      "isViceCaptain": true
    },
    "startingXI": [
      {
        "id": "player:2025-26:670",
        "webName": "Roefs",
        "fullName": "Robin Roefs",
        "team": "SUN",
        "position": "GKP",
        "cost": 4.8,
        "projectedMinutes": 69.6,
        "expectedPoints": 3.1,
        "realisedPoints": 0,
        "opponent": "NFO (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 8
      },
      {
        "id": "player:2025-26:5",
        "webName": "Gabriel",
        "fullName": "Gabriel dos Santos Magalhães",
        "team": "ARS",
        "position": "DEF",
        "cost": 7.3,
        "projectedMinutes": 79,
        "expectedPoints": 5.83,
        "realisedPoints": 8,
        "opponent": "NEW (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 45.4,
        "isViceCaptain": true
      },
      {
        "id": "player:2025-26:373",
        "webName": "Virgil",
        "fullName": "Virgil van Dijk",
        "team": "LIV",
        "position": "DEF",
        "cost": 6.1,
        "projectedMinutes": 89.3,
        "expectedPoints": 4.75,
        "realisedPoints": 4,
        "opponent": "CRY (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 31.5
      },
      {
        "id": "player:2025-26:8",
        "webName": "J.Timber",
        "fullName": "Jurriën Timber",
        "team": "ARS",
        "position": "DEF",
        "cost": 6,
        "projectedMinutes": 43,
        "expectedPoints": 2.7,
        "realisedPoints": 0,
        "opponent": "NEW (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 15.2
      },
      {
        "id": "player:2025-26:449",
        "webName": "B.Fernandes",
        "fullName": "Bruno Borges Fernandes",
        "team": "MUN",
        "position": "MID",
        "cost": 10.4,
        "projectedMinutes": 84.1,
        "expectedPoints": 6.43,
        "realisedPoints": 5,
        "opponent": "BRE (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 48,
        "isCaptain": true,
        "multiplier": 2
      },
      {
        "id": "player:2025-26:21",
        "webName": "Rice",
        "fullName": "Declan Rice",
        "team": "ARS",
        "position": "MID",
        "cost": 7.2,
        "projectedMinutes": 83.8,
        "expectedPoints": 5.34,
        "realisedPoints": 2,
        "opponent": "NEW (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 23.3
      },
      {
        "id": "player:2025-26:47",
        "webName": "Rogers",
        "fullName": "Morgan Rogers",
        "team": "AVL",
        "position": "MID",
        "cost": 7.3,
        "projectedMinutes": 81.7,
        "expectedPoints": 4.33,
        "realisedPoints": 2,
        "opponent": "FUL (A)",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 20.2
      },
      {
        "id": "player:2025-26:783",
        "webName": "Groß",
        "fullName": "Pascal Groß",
        "team": "BHA",
        "position": "MID",
        "cost": 5.6,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": 0,
        "opponent": "—",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 3
      },
      {
        "id": "player:2025-26:624",
        "webName": "Bowen",
        "fullName": "Jarrod Bowen",
        "team": "WHU",
        "position": "FWD",
        "cost": 7.8,
        "projectedMinutes": 84.1,
        "expectedPoints": 4.68,
        "realisedPoints": 10,
        "opponent": "EVE (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 17.5
      },
      {
        "id": "player:2025-26:249",
        "webName": "João Pedro",
        "fullName": "João Pedro Junqueira de Jesus",
        "team": "CHE",
        "position": "FWD",
        "cost": 7.4,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": 0,
        "opponent": "—",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 34.8
      },
      {
        "id": "player:2025-26:252",
        "webName": "Marc Guiu",
        "fullName": "Marc Guiu Paz",
        "team": "CHE",
        "position": "FWD",
        "cost": 4,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": 0,
        "opponent": "—",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 5.2
      }
    ],
    "bench": [
      {
        "id": "player:2025-26:470",
        "webName": "Dúbravka",
        "fullName": "Martin Dúbravka",
        "team": "BUR",
        "position": "GKP",
        "cost": 4,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": 0,
        "opponent": "—",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 25.7,
        "benchOrder": 1
      },
      {
        "id": "player:2025-26:260",
        "webName": "Guéhi",
        "fullName": "Marc Guéhi",
        "team": "MCI",
        "position": "DEF",
        "cost": 5.1,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": 0,
        "opponent": "—",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 32.6,
        "benchOrder": 2
      },
      {
        "id": "player:2025-26:348",
        "webName": "Rodon",
        "fullName": "Joe Rodon",
        "team": "LEE",
        "position": "DEF",
        "cost": 3.9,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": 0,
        "opponent": "—",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 3,
        "benchOrder": 3
      },
      {
        "id": "player:2025-26:82",
        "webName": "Semenyo",
        "fullName": "Antoine Semenyo",
        "team": "MCI",
        "position": "MID",
        "cost": 8,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": 0,
        "opponent": "—",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 46.2,
        "benchOrder": 4
      }
    ],
    "transfersIn": [
      {
        "id": "player:2025-26:21",
        "webName": "Rice",
        "fullName": "Declan Rice",
        "team": "ARS",
        "position": "MID",
        "cost": 7.2,
        "projectedMinutes": 83.8,
        "expectedPoints": 5.34,
        "realisedPoints": 2,
        "opponent": "NEW (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 23.3
      },
      {
        "id": "player:2025-26:373",
        "webName": "Virgil",
        "fullName": "Virgil van Dijk",
        "team": "LIV",
        "position": "DEF",
        "cost": 6.1,
        "projectedMinutes": 89.3,
        "expectedPoints": 4.75,
        "realisedPoints": 4,
        "opponent": "CRY (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 31.5
      },
      {
        "id": "player:2025-26:624",
        "webName": "Bowen",
        "fullName": "Jarrod Bowen",
        "team": "WHU",
        "position": "FWD",
        "cost": 7.8,
        "projectedMinutes": 84.1,
        "expectedPoints": 4.68,
        "realisedPoints": 10,
        "opponent": "EVE (H)",
        "isHome": true,
        "fixtureDifficulty": 3,
        "selectedByPercent": 17.5
      }
    ],
    "transfersOut": [
      {
        "id": "player:2025-26:173",
        "webName": "Wieffer",
        "fullName": "Mats Wieffer",
        "team": "BHA",
        "position": "MID",
        "cost": 4.8,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": null,
        "opponent": "—",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 0.3
      },
      {
        "id": "player:2025-26:226",
        "webName": "Chalobah",
        "fullName": "Trevoh Chalobah",
        "team": "CHE",
        "position": "DEF",
        "cost": 5.4,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": null,
        "opponent": "—",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 8.8
      },
      {
        "id": "player:2025-26:430",
        "webName": "Haaland",
        "fullName": "Erling Haaland",
        "team": "MCI",
        "position": "FWD",
        "cost": 14.7,
        "projectedMinutes": 0,
        "expectedPoints": 0,
        "realisedPoints": null,
        "opponent": "—",
        "isHome": false,
        "fixtureDifficulty": 3,
        "selectedByPercent": 62.5
      }
    ],
    "transferActions": [
      {
        "playerIn": {
          "id": "player:2025-26:21",
          "webName": "Rice",
          "team": "ARS",
          "position": "MID",
          "cost": 7.2,
          "expectedPoints": 5.34
        },
        "playerOut": {
          "id": "player:2025-26:173",
          "webName": "Wieffer",
          "team": "BHA",
          "position": "MID",
          "sellPrice": 4.9,
          "expectedPoints": 0
        },
        "netCostDelta": 2.3,
        "netXPDelta3GW": 5.34,
        "rationale": "Selected by this approach at the reconstructed cutoff."
      },
      {
        "playerIn": {
          "id": "player:2025-26:373",
          "webName": "Virgil",
          "team": "LIV",
          "position": "DEF",
          "cost": 6.3,
          "expectedPoints": 4.75
        },
        "playerOut": {
          "id": "player:2025-26:226",
          "webName": "Chalobah",
          "team": "CHE",
          "position": "DEF",
          "sellPrice": 5.3,
          "expectedPoints": 0
        },
        "netCostDelta": 1,
        "netXPDelta3GW": 4.75,
        "rationale": "Selected by this approach at the reconstructed cutoff."
      },
      {
        "playerIn": {
          "id": "player:2025-26:624",
          "webName": "Bowen",
          "team": "WHU",
          "position": "FWD",
          "cost": 7.6,
          "expectedPoints": 4.68
        },
        "playerOut": {
          "id": "player:2025-26:430",
          "webName": "Haaland",
          "team": "MCI",
          "position": "FWD",
          "sellPrice": 14.4,
          "expectedPoints": 0
        },
        "netCostDelta": -6.8,
        "netXPDelta3GW": 4.68,
        "rationale": "Selected by this approach at the reconstructed cutoff."
      }
    ],
    "projectedSquadTotalXP": 35.6,
    "realisedSquadTotalPoints": 28
  },
  "arms": [
    {
      "id": "baseline",
      "name": "Template (roll transfers)",
      "shortLabel": "Template",
      "category": "Heuristic",
      "description": "No transfers",
      "objectiveEP": 42.8,
      "realisedPoints": 33,
      "varianceScore": 0,
      "transfersCount": 0,
      "hits": 0,
      "captain": "B.Fernandes",
      "viceCaptain": "M.Salah",
      "chip": "none",
      "formation": "3-4-3",
      "decisionDeltaVsBaseline": 0,
      "realisedRankEffect": "33 pts net",
      "solverRuntimeMs": 0
    },
    {
      "id": "optimiser",
      "name": "Optimiser (forecast)",
      "shortLabel": "Optimiser",
      "category": "Mixed-Integer Linear (ILP)",
      "description": "Wieffer → Rice, Chalobah → Virgil, Haaland → Bowen (−8 hit)",
      "objectiveEP": 35.6,
      "realisedPoints": 28,
      "varianceScore": 0,
      "transfersCount": 3,
      "hits": 2,
      "captain": "B.Fernandes",
      "viceCaptain": "Gabriel",
      "chip": "none",
      "formation": "3-4-3",
      "decisionDeltaVsBaseline": -5,
      "realisedRankEffect": "28 pts net",
      "solverRuntimeMs": 0
    },
    {
      "id": "agent",
      "name": "Evidence-informed",
      "shortLabel": "Evidence",
      "category": "Multi-Objective Agent",
      "description": "Wieffer → Rice, Chalobah → Virgil, Haaland → Bowen (−8 hit)",
      "objectiveEP": 35.6,
      "realisedPoints": 28,
      "varianceScore": 0,
      "transfersCount": 3,
      "hits": 2,
      "captain": "B.Fernandes",
      "viceCaptain": "Gabriel",
      "chip": "none",
      "formation": "3-4-3",
      "decisionDeltaVsBaseline": -5,
      "realisedRankEffect": "28 pts net",
      "solverRuntimeMs": 0
    }
  ],
  "summaryAnalysis": {
    "executiveSummary": "Reconstructive replay for 2025/26 Gameweek 34. The optimiser captained B.Fernandes (vice Gabriel), formation 3-4-3, and made 3 transfers taking a 8-point hit (Wieffer out, Rice in; Chalobah out, Virgil in; Haaland out, Bowen in). It scored 28 net points after hits. Pre-cutoff objective was 35.6 expected points.",
    "keyTradeoffs": [
      "Transfers: Wieffer to Rice; Chalobah to Virgil; Haaland to Bowen.",
      "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."
  }
}