{
  "season": "2026-27",
  "gw": 2,
  "arm": "agent",
  "armMeta": {
    "id": "agent",
    "name": "Multi-Objective Agent (EV + Rank Ceiling)",
    "shortLabel": "Agent (Multi-Obj)",
    "category": "Multi-Objective Agent",
    "description": "Double transfer with -4 hit: Eze + Rogers to Jota + Minteh, hunting high delta against the template.",
    "objectiveEP": 74.2,
    "realisedPoints": 91,
    "varianceScore": 22.4,
    "transfersCount": 2,
    "hits": 1,
    "captain": "Haaland",
    "viceCaptain": "Palmer",
    "chip": "none",
    "formation": "3-5-2",
    "decisionDeltaVsBaseline": 2.4,
    "realisedRankEffect": "Top 8% percentile",
    "solverRuntimeMs": 1950
  },
  "provenance": {
    "modelVersion": "v2.4.1-rc3",
    "frozenAt": "2026-08-24T08:00:00Z",
    "snapshotHash": "sha256:d41d8cd98f00b204e9800998ecf8427e324a18b76e1a90c0ef49a9987812bc8f",
    "datasetId": "fpl-ep-202627-gw2-freeze",
    "solverEngine": "Highs-MILP-v1.7.2",
    "executionTimestamp": "2026-08-24T08:03:45Z",
    "solverParameters": {
      "horizonWeeks": 5,
      "decayRate": 0.85,
      "hitPenalty": 4,
      "riskAversion": 0.15,
      "freeTransferConservationWeight": 0.8,
      "maxPlayersPerClub": 3,
      "teamBudgetCap": 100.5
    },
    "isDemoSample": true,
    "datasetKind": "illustrative-sample"
  },
  "formation": "3-5-2",
  "bankRemaining": 0.1,
  "hitCost": 4,
  "captainSelection": {
    "player": {
      "id": "p_haaland_mci",
      "webName": "Haaland",
      "fullName": "Erling Haaland",
      "team": "MCI",
      "position": "FWD",
      "cost": 15.1,
      "projectedMinutes": 89,
      "expectedPoints": 10.45,
      "realisedPoints": 17,
      "isCaptain": true,
      "multiplier": 2,
      "opponent": "IPS (H)",
      "isHome": true,
      "fixtureDifficulty": 1,
      "xGI": 1.32,
      "cleanSheetProbability": 0.58,
      "selectedByPercent": 59.8
    },
    "candidateComparison": [
      {
        "player": "Haaland",
        "team": "MCI",
        "opponent": "IPS (H)",
        "xP": 10.45,
        "ceiling90th": 15.4,
        "realised": 17,
        "selectionReason": "Dominant volume baseline, highest penalty equity in league (xGI > 0.90)."
      },
      {
        "player": "Palmer",
        "team": "CHE",
        "opponent": "WOL (A)",
        "xP": 7.42,
        "ceiling90th": 14.1,
        "realised": 17,
        "selectionReason": "Direct set-piece and penalty monopolist with high open-play assist conversion."
      },
      {
        "player": "Saka",
        "team": "ARS",
        "opponent": "AVL (A)",
        "xP": 6.15,
        "ceiling90th": 13.8,
        "realised": 6,
        "selectionReason": "Elite home game metrics, corner duties, high conversion against low blocks."
      },
      {
        "player": "Salah",
        "team": "LIV",
        "opponent": "BRE (H)",
        "xP": 8.35,
        "ceiling90th": 14.8,
        "realised": 10,
        "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.12,
      "realisedPoints": 8,
      "opponent": "AVL (A)",
      "isHome": false,
      "fixtureDifficulty": 3,
      "cleanSheetProbability": 0.38,
      "selectedByPercent": 26.1
    },
    {
      "id": "p_saliba_ars",
      "webName": "Saliba",
      "fullName": "William Saliba",
      "team": "ARS",
      "position": "DEF",
      "cost": 6,
      "projectedMinutes": 90,
      "expectedPoints": 4.05,
      "realisedPoints": 6,
      "opponent": "AVL (A)",
      "isHome": false,
      "fixtureDifficulty": 3,
      "cleanSheetProbability": 0.38,
      "selectedByPercent": 39.5
    },
    {
      "id": "p_gvardiol_mci",
      "webName": "Gvardiol",
      "fullName": "Joško Gvardiol",
      "team": "MCI",
      "position": "DEF",
      "cost": 6,
      "projectedMinutes": 88,
      "expectedPoints": 5.82,
      "realisedPoints": 6,
      "opponent": "IPS (H)",
      "isHome": true,
      "fixtureDifficulty": 1,
      "cleanSheetProbability": 0.58,
      "selectedByPercent": 34.2
    },
    {
      "id": "p_munoz_cry",
      "webName": "Muñoz",
      "fullName": "Daniel Muñoz",
      "team": "CRY",
      "position": "DEF",
      "cost": 5,
      "projectedMinutes": 90,
      "expectedPoints": 4.25,
      "realisedPoints": 2,
      "opponent": "WHU (H)",
      "isHome": true,
      "fixtureDifficulty": 2,
      "cleanSheetProbability": 0.34,
      "selectedByPercent": 13.1
    },
    {
      "id": "p_saka_ars",
      "webName": "Saka",
      "fullName": "Bukayo Saka",
      "team": "ARS",
      "position": "MID",
      "cost": 10,
      "projectedMinutes": 89,
      "expectedPoints": 6.15,
      "realisedPoints": 6,
      "opponent": "AVL (A)",
      "isHome": false,
      "fixtureDifficulty": 3,
      "xGI": 0.65,
      "cleanSheetProbability": 0.38,
      "selectedByPercent": 35.4
    },
    {
      "id": "p_palmer_che",
      "webName": "Palmer",
      "fullName": "Cole Palmer",
      "team": "CHE",
      "position": "MID",
      "cost": 10.5,
      "projectedMinutes": 88,
      "expectedPoints": 7.42,
      "realisedPoints": 17,
      "isViceCaptain": true,
      "opponent": "WOL (A)",
      "isHome": false,
      "fixtureDifficulty": 2,
      "xGI": 0.88,
      "cleanSheetProbability": 0.22,
      "selectedByPercent": 41.3
    },
    {
      "id": "p_son_tot",
      "webName": "Son",
      "fullName": "Heung-min Son",
      "team": "TOT",
      "position": "MID",
      "cost": 10,
      "projectedMinutes": 87,
      "expectedPoints": 7.21,
      "realisedPoints": 16,
      "opponent": "EVE (H)",
      "isHome": true,
      "fixtureDifficulty": 2,
      "xGI": 0.82,
      "cleanSheetProbability": 0.42,
      "selectedByPercent": 14.7
    },
    {
      "id": "p_jota_liv",
      "webName": "Jota",
      "fullName": "Diogo Jota",
      "team": "LIV",
      "position": "MID",
      "cost": 7.5,
      "projectedMinutes": 78,
      "expectedPoints": 6.44,
      "realisedPoints": 5,
      "opponent": "BRE (H)",
      "isHome": true,
      "fixtureDifficulty": 2,
      "xGI": 0.77,
      "cleanSheetProbability": 0.44,
      "selectedByPercent": 21
    },
    {
      "id": "p_rogers_avl",
      "webName": "Rogers",
      "fullName": "Morgan Rogers",
      "team": "AVL",
      "position": "MID",
      "cost": 5,
      "projectedMinutes": 85,
      "expectedPoints": 3.75,
      "realisedPoints": 2,
      "opponent": "ARS (H)",
      "isHome": true,
      "fixtureDifficulty": 4,
      "xGI": 0.36,
      "cleanSheetProbability": 0.16,
      "selectedByPercent": 17.2
    },
    {
      "id": "p_haaland_mci",
      "webName": "Haaland",
      "fullName": "Erling Haaland",
      "team": "MCI",
      "position": "FWD",
      "cost": 15.1,
      "projectedMinutes": 89,
      "expectedPoints": 10.45,
      "realisedPoints": 17,
      "isCaptain": true,
      "multiplier": 2,
      "opponent": "IPS (H)",
      "isHome": true,
      "fixtureDifficulty": 1,
      "xGI": 1.32,
      "cleanSheetProbability": 0.58,
      "selectedByPercent": 59.8
    },
    {
      "id": "p_isak_new",
      "webName": "Isak",
      "fullName": "Alexander Isak",
      "team": "NEW",
      "position": "FWD",
      "cost": 8.5,
      "projectedMinutes": 85,
      "expectedPoints": 5.92,
      "realisedPoints": 2,
      "opponent": "BOU (A)",
      "isHome": false,
      "fixtureDifficulty": 2,
      "xGI": 0.68,
      "cleanSheetProbability": 0.33,
      "selectedByPercent": 58.4
    }
  ],
  "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": "LIV (A)",
      "isHome": false,
      "fixtureDifficulty": 5
    },
    {
      "id": "p_joao_pedro_bha",
      "webName": "Joao Pedro",
      "fullName": "Joao Pedro",
      "team": "BHA",
      "position": "FWD",
      "cost": 5.5,
      "projectedMinutes": 80,
      "expectedPoints": 4.51,
      "realisedPoints": 7,
      "benchOrder": 2,
      "opponent": "MUN (H)",
      "isHome": true,
      "fixtureDifficulty": 3
    },
    {
      "id": "p_faes_lei",
      "webName": "Faes",
      "fullName": "Wout Faes",
      "team": "LEI",
      "position": "DEF",
      "cost": 4,
      "projectedMinutes": 90,
      "expectedPoints": 3.1,
      "realisedPoints": 8,
      "benchOrder": 3,
      "opponent": "FUL (A)",
      "isHome": false,
      "fixtureDifficulty": 3
    },
    {
      "id": "p_barco_bha",
      "webName": "Barco",
      "fullName": "Valentín Barco",
      "team": "BHA",
      "position": "DEF",
      "cost": 4,
      "projectedMinutes": 0,
      "expectedPoints": 0,
      "realisedPoints": 0,
      "benchOrder": 4,
      "opponent": "MUN (H)",
      "isHome": true,
      "fixtureDifficulty": 3
    }
  ],
  "transfers": [
    {
      "playerIn": {
        "id": "p_jota_liv",
        "webName": "Jota",
        "team": "LIV",
        "position": "MID",
        "cost": 7.5,
        "expectedPoints": 6.44
      },
      "playerOut": {
        "id": "p_eze_cry",
        "webName": "Eze",
        "team": "CRY",
        "position": "MID",
        "sellPrice": 7,
        "expectedPoints": 4.88
      },
      "netCostDelta": 0.5,
      "netXPDelta3GW": 3.2,
      "rationale": "Direct route into Liverpool's Brentford home fixture. Jota out-expected Eze by +1.56 xP in single-week horizon and +3.2 xP over the 3-GW rolling window."
    }
  ],
  "solverConstraints": [
    {
      "name": "Total Squad Budget",
      "expression": "Σ (c_i * x_i) ≤ B",
      "value": "£99.9m / £100.0m",
      "slack": "£0.1m",
      "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: 1",
      "slack": "0",
      "binding": true
    },
    {
      "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
    }
  ]
}