Journey 08 — Adaptive search and evidence
Adaptive search (--strategy adaptive) when jump is untrusted: budgeted full SolvSRK integrations plus evidence artifacts you can audit with solvjump evidence.
Prerequisites: Journey 07 — ranked mission study completed (or equivalent session). Scenario: Variant: battery | 128-point drone envelope, 25% SRK budget
Key APIs
solvjump run study.yaml --strategy adaptivesolvjump evidenceMFBO / adaptive pathEvidenceStore
Concepts to internalize
- adaptive strategy — no jump calibration; ~
budget_fracof grid at full SolvSRK; finalists are SRK truth. - Evidence store — per-study calibration and gate receipts;
solvjump evidencelists them (noevidence listsubcommand). - When to choose adaptive — large grids, refused operators, or certification requires SRK ground truth on every finalist.
- Variant tours — Brusselator or satellite narratives available in the guided script.
Important code
The guided tour script wraps this pattern. Copy the production shape into your pipeline:
solvjump run examples/battery_mission_study_adaptive.yaml --strategy adaptive
solvjump evidenceAct-by-act walkthrough
Act 1 — Why adaptive exists
Jump is fast only when holdout + rollout pass. Adaptive skips calibration: it integrates ~budget_frac of the grid at full SolvSRK. Finalists are SRK-native — no separate rank-verify pass. CLI: --strategy adaptive.
Act 2 — YAML knobs
sweep.strategy, budget_frac, top_k, acquisition, history_mode. CLI --strategy overrides YAML.
Act 3 — Run
Study: battery_mission_study_adaptive.yaml
Study definition
| Field | Value | Notes |
|---|---|---|
model | <product-root>\python\examples\battery_mission_model.py:make_rhs | |
dynamics_params | payload_kg in [0, 0.8], temp_C in [-10, 40], headwind_mps in [0, 12], pack_cycles in [0, 400] | |
y0 | [1.0, 0.0, 0.0, 0.0, 0.35] | |
t_span | [0.0, 2700.0] | |
mode | auto | |
calibration_seeds | 20 |
Operator routing, calibration & sweep (3 steps)
| Field | Value | Notes |
|---|---|---|
grid_points | 128 | |
budget_frac | 0.25 | |
top_k | 10 | |
acquisition | auto | |
history_mode | auto |
Multi-fidelity BO search
| Field | Value | Notes |
|---|---|---|
acquisition | lcb | |
integrated | 20/81 (25% budget) | |
rounds | 5 | |
history | mode=auto supplied=0 trust=None | |
best_scalar | -0.5905953484532385 | Authoritative deliverable: finalists_ground_truth_top25.csv (SRK ground truth from adaptive search — use this for HPC handoff) |
- Adaptive finalists are SRK-intrinsic (each is a full-SolvSRK solve) - no separate rank verification needed
Act 4 — Evidence store
There is no solvjump evidence list subcommand. Bare solvjump evidence lists families. Pass a YAML to count one family. History warm-starts the next adaptive run.
-
Stored families (1):
-
8a384ff3f2c515e2: 19 observation(s)
| Field | Value | Notes |
|---|---|---|
this_family | 8a384ff3f2c515e2 | |
observations | 19 |
Act 5 — What to tell the customer
Every row in finalists_ground_truth_topN.csv is a real full-SolvSRK integration.
Why run SolvJump here?
-
Get a ranked shortlist when jump calibration is unavailable or untrusted.
-
Every finalist is a real full-SolvSRK integration — no separate verify pass needed.
-
Search 81 scenarios by integrating a budgeted sample, not the full grid blindly.
-
Full SolvSRK on ~25% of the grid instead of every point — ranking stays integration-native.
Guided tour output
Verified console capture from 08_adaptive_and_evidence.py:
Variant: battery | 128-point drone envelope, 25% SRK budget
-- Act 1 - Why adaptive exists --
-> Jump is fast only when holdout + rollout pass. Adaptive skips calibration: it integrates ~budget_frac of the grid at full SolvSRK. Finalists are SRK-native — no separate rank-verify pass. CLI: --strategy adaptive.
-- Act 2 - YAML knobs --
-> sweep.strategy, budget_frac, top_k, acquisition, history_mode. CLI --strategy overrides YAML.
-- Act 3 - Run --
-> Study: battery_mission_study_adaptive.yaml
_section: Study definition
model: <product-root>\python\examples\battery_mission_model.py:make_rhs
dynamics_params: payload_kg in [0, 0.8], temp_C in [-10, 40], headwind_mps in [0, 12], pack_cycles in [0, 400]
y0: [1.0, 0.0, 0.0, 0.0, 0.35]
t_span: [0.0, 2700.0]
mode: auto
calibration_seeds: 20
_section: Operator routing, calibration & sweep (3 steps)
grid_points: 128
budget_frac: 0.25
top_k: 10
acquisition: auto
history_mode: auto
_section: Multi-fidelity BO search
acquisition: lcb
integrated: 20/81 (25% budget)
rounds: 5
history: mode=auto supplied=0 trust=None
best_scalar: -0.5905953484532385
-> Authoritative deliverable: finalists_ground_truth_top25.csv (SRK ground truth from adaptive search — use this for HPC handoff)
log: Adaptive finalists are SRK-intrinsic (each is a full-SolvSRK solve) - no separate rank verification needed
-- Act 4 - Evidence store --
-> There is no `solvjump evidence list` subcommand. Bare `solvjump evidence` lists families. Pass a YAML to count one family. History warm-starts the next adaptive run.
log: Stored families (1):
log: 8a384ff3f2c515e2: 19 observation(s)
this_family: 8a384ff3f2c515e2
observations: 19
-- Act 5 - What to tell the customer --
-> Every row in finalists_ground_truth_topN.csv is a real full-SolvSRK integration.
_section: Why run SolvJump here?
log: Get a ranked shortlist when jump calibration is unavailable or untrusted.
log: Every finalist is a real full-SolvSRK integration — no separate verify pass needed.
log: Search 81 scenarios by integrating a budgeted sample, not the full grid blindly.
log: Full SolvSRK on ~25% of the grid instead of every point — ranking stays integration-native.
-- Run complete --
session_id: <session_id>
results_folder: <session-dir>
points_completed: 19 ok, 0 skipped (of 19)
search_method: smart search (sampled full SolvSRK points)
this_run: 11080.4 ms
vs_full_SolvSRK_on_every_study_point: ~44876 ms for all 81 points in this study (extrapolated from 20 sampled points — not a larger search)
receipt_sweep: <session-dir>\sweep_receipt.json
receipt_finalists: <session-dir>\finalists_ground_truth_top25.csv
mission_criteria: SOC >= 20%, V >= 18 V, thermal limits after 45 min delivery profile
pass_count: 19/19 Monte Carlo samples
fail_count: 0
-- What happened --
-- Act 4 - Evidence store --
this_family: 8a384ff3f2c515e2
observations: 19
-- Act 5 - What to tell the customer --
-- Why run SolvJump here? --
-- Run complete --
session_id: <session_id>
results_folder: <session-dir>
points_completed: 19 ok, 0 skipped (of 19)
search_method: smart search (sampled full SolvSRK points)
this_run: 11080.4 ms
vs_full_SolvSRK_on_every_study_point: ~44876 ms for all 81 points in this study (extrapolated from 20 sampled points — not a larger search)
receipt_sweep: <session-dir>\sweep_receipt.json
receipt_finalists: <session-dir>\finalists_ground_truth_top25.csvRun it
cd python
# Guided tour — narrated scenario walkthrough (recommended first run):
python examples/journeys/08_adaptive_and_evidence.py
# Production one-liner — same API call you ship:
solvjump run examples/battery_mission_study_adaptive.yaml --strategy adaptiveWhat comes next
Journey 09 threads SolvTune objectives into the run CLI.
Navigation
← Journey 07 — Ranked mission envelope · Journey 09 — SolvTune objective →