{
  "season": "2026-27",
  "gw": 3,
  "arm": "baseline",
  "armMeta": {
    "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
  },
  "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"
  },
  "formation": "3-4-3",
  "bankRemaining": 0.5,
  "hitCost": 0,
  "captainSelection": {
    "player": {
      "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
    },
    "candidateComparison": [
      {
        "player": "Haaland",
        "team": "MCI",
        "opponent": "WHU (A)",
        "xP": 8.85,
        "ceiling90th": 15.4,
        "realised": null,
        "selectionReason": "Dominant volume baseline, highest penalty equity in league (xGI > 0.90)."
      },
      {
        "player": "Palmer",
        "team": "CHE",
        "opponent": "CRY (H)",
        "xP": 7.82,
        "ceiling90th": 14.1,
        "realised": null,
        "selectionReason": "Direct set-piece and penalty monopolist with high open-play assist conversion."
      },
      {
        "player": "Saka",
        "team": "ARS",
        "opponent": "BHA (H)",
        "xP": 7.35,
        "ceiling90th": 13.8,
        "realised": null,
        "selectionReason": "Elite home game metrics, corner duties, high conversion against low blocks."
      },
      {
        "player": "Salah",
        "team": "LIV",
        "opponent": "MUN (A)",
        "xP": 8.1,
        "ceiling90th": 14.8,
        "realised": null,
        "selectionReason": "Alternative premium anchor; excluded from base squad due to £12.5m structural trade-offs."
      }
    ]
  },
  "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
    }
  ],
  "transfers": [
    {
      "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."
    }
  ],
  "solverConstraints": [
    {
      "name": "Total Squad Budget",
      "expression": "Σ (c_i * x_i) ≤ B",
      "value": "£99.5m / £100.0m",
      "slack": "£0.5m",
      "binding": false
    },
    {
      "name": "Squad Roster Cardinality",
      "expression": "Σ x_i = 15",
      "value": "15 players",
      "slack": "0",
      "binding": true
    },
    {
      "name": "Starting XI Formation Min Defenders",
      "expression": "Σ (pos_DEF * s_i) ≥ 3",
      "value": "3 defenders",
      "slack": "0",
      "binding": true
    },
    {
      "name": "Club Roster Limit",
      "expression": "Σ (club_k * x_i) ≤ 3 ∀ k",
      "value": "ARS: 3, MCI: 2, CHE: 1",
      "slack": "ARS binding (3/3)",
      "binding": true
    },
    {
      "name": "Transfer Hit Boundary",
      "expression": "Penalty = 4.0 * max(0, T - FT)",
      "value": "Hits: 0",
      "slack": "1 FT buffer",
      "binding": false
    },
    {
      "name": "Expected Minutes Filter",
      "expression": "E[min_i] ≥ 60 for Starting XI",
      "value": "Min starting: 75 min",
      "slack": "15 min margin",
      "binding": false
    }
  ],
  "sensitivityAnalysis": [
    {
      "scenario": "Haaland Minutes Reduction (Down to 65 min)",
      "condition": "E[min] drops from 89 to 65",
      "optimalArmShift": "Shifts captaincy to Palmer; reallocates £2.0m to upgrade bench",
      "expectedPointsDelta": -2.3
    },
    {
      "scenario": "Arsenal Clean Sheet Probability Drift (-15%)",
      "condition": "Raya + Saliba CS expectation reduced to 34%",
      "optimalArmShift": "Downgrade Saliba to Robinson; upgrade Rogers to Semenyo",
      "expectedPointsDelta": -1.1
    },
    {
      "scenario": "Zero Bank Policy (Deploy All £0.5m Bank)",
      "condition": "Hard budget equality constraint B_used = 100.0",
      "optimalArmShift": "Upgrade Muñoz (£5.0m) to Porro (£5.5m)",
      "expectedPointsDelta": 0.65
    }
  ]
}