name: schedopt_granularity
investigation: schedopt-v1
intent: "\\begin{intent}[A matched control: does the burst shape buy speed, or was it granularity?]\n\\\
  label{schedopt-granularity-intent}\n\\begin{llm}[claude-opus-4-8]\nA follow-up control for the \\@[schedule-opt]{schedule-opt-conclusion}\
  \ campaign. In calibration the \\@{burst-schedule} incumbent reached the band faster than any smooth\
  \ probe, but it ran at a different \\@[segment]{segment} granularity and horizon, 48 segments over 900\
  \ \\@[steps]{step} against the smooth arms' 16 over 400, so its edge confounded shape with those. This\
  \ experiment removes the confound: the burst shape and the campaign's best smooth schedule are run at\
  \ the same 16-\\@[segment]{segment} granularity, the same 400-step horizon, and the same seeds, with\
  \ a 48-segment burst added to check whether the teeth need fine granularity, and a fixed-\\@[\u03B1\
  ]{alpha} arm as an anchor. All are scored on the frozen objective, the probability of crossing 92.5\
  \ \\@{unseen-mismatch} within 400 steps.\n\\end{llm}\n\\end{intent}\n"
hypothesis: '\begin{hypothesis}[Matched, the burst edge should mostly vanish]

  \label{schedopt-granularity-hypothesis}

  \begin{llm}[claude-opus-4-8]

  At matched granularity, horizon, and seeds the coarse burst and the smooth descent should cross at similar
  rates, meaning the calibration onset gap was largely the confound rather than the discrete structure.
  If the burst retains an edge it should appear only at fine granularity, the 48-segment arm beating the
  16-segment one, which would say the teeth matter but need resolution to act.

  \end{llm}

  \end{hypothesis}

  '
seed: 3000
base_args:
- curriculum
- --with-replacement
- --dataset-sentence-count
- '48000'
- --eval-ref-alphas
- '1.4'
- --num-pairs
- '1000'
- --n-iterations
- '25'
- --no-dataset-cache
- --no-waypoint-checkpoints
- --no-plot
runs:
- label: smooth_16
  args:
  - --schedule
  - 3.2007:25,3.1661:25,3.1038:25,3.016:25,2.904:25,2.7689:25,2.6113:25,2.4318:25,2.2309:25,2.009:25,1.7666:25,1.5038:25,1.221:25,0.9185:25,0.5965:25,0.2551:25
  - --waypoints
  - '25'
  - '50'
  - '75'
  - '100'
  - '125'
  - '150'
  - '175'
  - '200'
  - '225'
  - '250'
  - '275'
  - '300'
  - '325'
  - '350'
  - '375'
  - '400'
- label: burst_16
  args:
  - --schedule-shape
  - envelope
  - --n-stages
  - '16'
  - --total-iters
  - '400'
  - --env-start
  - '5.0'
  - --env-end
  - '1.2857'
  - --env-valley
  - '0.7'
  - --env-teeth
  - '3'
  - --env-duty
  - '0.5'
  - --waypoints
  - '25'
  - '50'
  - '75'
  - '100'
  - '125'
  - '150'
  - '175'
  - '200'
  - '225'
  - '250'
  - '275'
  - '300'
  - '325'
  - '350'
  - '375'
  - '400'
- label: burst_48
  args:
  - --schedule-shape
  - envelope
  - --n-stages
  - '48'
  - --total-iters
  - '400'
  - --env-start
  - '5.0'
  - --env-end
  - '1.2857'
  - --env-valley
  - '0.7'
  - --env-teeth
  - '3'
  - --env-duty
  - '0.5'
  - --waypoints
  - '25'
  - '50'
  - '75'
  - '100'
  - '125'
  - '150'
  - '175'
  - '200'
  - '225'
  - '250'
  - '275'
  - '300'
  - '325'
  - '350'
  - '375'
  - '400'
- label: fixed_16
  args:
  - --schedule
  - 1.6:25,1.6:25,1.6:25,1.6:25,1.6:25,1.6:25,1.6:25,1.6:25,1.6:25,1.6:25,1.6:25,1.6:25,1.6:25,1.6:25,1.6:25,1.6:25
  - --waypoints
  - '25'
  - '50'
  - '75'
  - '100'
  - '125'
  - '150'
  - '175'
  - '200'
  - '225'
  - '250'
  - '275'
  - '300'
  - '325'
  - '350'
  - '375'
  - '400'
compare:
  metric: unseen_mismatch
objective:
  kind: crossing
  metric: unseen_mismatch
  m_star: 92.5
  k: 400
  w_smooth: 1
  w_dwell: 2
  source: experiments/schedopt/config.json
