Product documentation — installation, licensing, and integration guides.
SolvJump Configurator
Examples
09 SolvTune objective

Journey 09 — SolvTune objective

Pass SolvTune objectives (balanced, precision, survival, efficiency) into solvjump run --objective so SRK verification arms match your program goal.

Prerequisites: Journey 03 — YAML study path; SolvSRK licensed for verification arms. Scenario: balanced | precision | survival | efficiency — same ODE, different SRK config

Key APIs

  • solvjump run study.yaml --objective precision
  • study YAML objective field
  • SolvTune objective routing

Concepts to internalize

  • Objective-aware verification — SRK arms selected for precision vs survival vs efficiency.
  • Requires SolvSRK seat — no SOLVSRK_LICENSE_OK bypass; use a real solvsrk.lic.
  • Accmode — continuation backends may warn if wheel lacks accmode capability.
  • Same study, different goal — objective changes which SRK config verifies finalists.

Important code

The guided tour script wraps this pattern. Copy the production shape into your pipeline:

solvjump run examples/brusselator_study.yaml --objective precision
# YAML equivalent: examples/brusselator_study_objective.yaml

Act-by-act walkthrough

Act 1 — Why objective matters

SolvTune's flat corpus is keyed by objective × noise. Calibration and golden runs use the matching SolvSRK backend. CLI --objective overrides YAML solvtune_objective.

Act 2 — Noise and horizon hints

YAML: noise_type (gaussian|fixed_path), deployment_noise_sigma, horizon_multiplier_hint. Same fields exist on Session.from_model.

Act 3 — Accmode

SolvTune may recommend continuation_backend=acmode. That needs an accmode-capable SolvSRK wheel. Without it, Jump warns and continues with the mapped fields the installed wheel supports — it does not silently invent a backend.

Act 4 — Run precision

Equivalent YAML: brusselator_study_objective.yaml

Study definition

FieldValueNotes
model<product-root>\python\examples\brusselator_model.py:make_rhs
dynamics_paramsa in [0.8, 1.2], b in [2.5, 3.5]
y0[1.0, 3.0]
t_span[0.0, 10.0]
modeauto
calibration_seeds12
jump_lags[0.1, 0.5, 1.0]
safety_margin1.5

Operator routing, calibration & sweep (3 steps)

FieldValueNotes
model<product-root>\python\examples\brusselator_model.py:make_rhs
dim2
stiffness_nomS1
horizon[0.0, 10.0]
problem_set_operators256kepler
  • Jump recommendation: confidence=exact, cache_ref=<operator_id>, mode=auto
FieldValueNotes
seeds12
reasonno exact cache match for this modelCollecting trajectory training pairs: jump lag=0.25s, SolvTune arm=solvsrk, objective=precision, target chain=20
  • SRK collection done - 60 train pairs from 3 trajectories (0 failed, need >=8 train)

  • Fitted nominal+guard kernels - train median SCD=2.79, holdout median SCD=1.68 (n=8/8)

  • Rollout validation - SCD by chain depth [1:1.68, 10:0.77, 20:0.56], max_valid_chain=1 (single_step_only)

  • Accuracy gate passed (operator <operator_id>)

FieldValueNotes
methodgrid
grid_points9
steps20
dt0.25
compare_brute_srkTrue
finalists0Sweep finished - example params {'a': 1.0, 'b': 3.0}, final state ~ [0.7101, 3.3821]
  • SRK timing sample: 3 point(s) integrated for comparison

  • Horizon aligned: 20 jumps x 0.25 s = 5.0 s (jump_lag matches dt)

FieldValueNotes
! Degeneracy guard tripped on 1 grid point(s) - sweep modejump_anchored
srk_sample_n9
full_grid_truthTrue
min_spearman0.85Full-grid SRK truth: 9/9 rankable in 0.4 s

SRK ground truth (authoritative top-N)

FieldValueNotes
grid_points9
srk_ranked9
exportfinalists_ground_truth_top9.csv
srk_best_jump_rank4SRK top-10 in jump top-500: 9/9 (100% recall)
  • SRK top-50 in jump top-500: 9/9 (100% recall)

  • SRK top-100 in jump top-500: 9/9 (100% recall)

Rank verification (jump vs full SRK)

FieldValueNotes
verified_rows9/9 jump-ranked rows
spearman_rho0.817 (gate >= 0.85)
srk_verify_time0.4 s
best_srk_jump_rank#4 (regret 3)
verdictFAIL — do not cite ranking to clientstop-10 overlap: skipped (sample size 9 < top_n 10)
  • top-50 overlap: skipped (sample size 9 < top_n 50)

  • top-100 overlap: skipped (sample size 9 < top_n 100)

  • steady_ok agreement (jump vs SRK): 78%

  • Report: <session-dir>\rank_verification_report.json

  • SRK shortlist (verified ranking for HPC handoff): <session-dir>\srk_shortlist.csv

  • SRK ground truth (authoritative): <session-dir>\finalists_ground_truth_top9.csv

  • Authoritative deliverable: finalists_ground_truth_top9.csv (SRK ground truth — use this for HPC handoff)

Act 5 — Takeaway

Pick the objective that matches the question (precision vs survival vs cost). Do not mix objectives when comparing two studies.

Why run SolvJump here?

  • Run your first parameter study from YAML — no custom integration loop to write.

  • Explore all Brusselator (a, b) pairs in one command and get a ranked shortlist.

  • Save a calibrated operator and session for live what-if in Journey 05.

Guided tour output

Verified console capture from 09_solvtune_objective.py:

balanced | precision | survival | efficiency — same ODE, different SRK config

-- Act 1 - Why objective matters --
  -> SolvTune's flat corpus is keyed by objective × noise. Calibration and golden runs use the matching SolvSRK backend. CLI --objective overrides YAML solvtune_objective.

-- Act 2 - Noise and horizon hints --
  -> YAML: noise_type (gaussian|fixed_path), deployment_noise_sigma, horizon_multiplier_hint. Same fields exist on Session.from_model.

-- Act 3 - Accmode --
  -> SolvTune may recommend continuation_backend=acmode. That needs an accmode-capable SolvSRK wheel. Without it, Jump warns and continues with the mapped fields the installed wheel supports — it does not silently invent a backend.

-- Act 4 - Run precision --
  -> Equivalent YAML: brusselator_study_objective.yaml
  _section: Study definition
  model: <product-root>\python\examples\brusselator_model.py:make_rhs
  dynamics_params: a in [0.8, 1.2], b in [2.5, 3.5]
  y0: [1.0, 3.0]
  t_span: [0.0, 10.0]
  mode: auto
  calibration_seeds: 12
  jump_lags: [0.1, 0.5, 1.0]
  safety_margin: 1.5
  _section: Operator routing, calibration & sweep (3 steps)
  model: <product-root>\python\examples\brusselator_model.py:make_rhs
  dim: 2
  stiffness_nom: S1
  horizon: [0.0, 10.0]
  problem_set_operators: 256
  -> kepler | dim=2 | stiffness=S0 | dynamics=conservative
  log: Jump recommendation: confidence=exact, cache_ref=<operator_id>, mode=auto
  seeds: 12
  reason: no exact cache match for this model
  -> Collecting trajectory training pairs: jump lag=0.25s, SolvTune arm=solvsrk, objective=precision, target chain=20
  log: SRK collection done - 60 train pairs from 3 trajectories (0 failed, need >=8 train)
  log: Fitted nominal+guard kernels - train median SCD=2.79, holdout median SCD=1.68 (n=8/8)
  log: Rollout validation - SCD by chain depth [1:1.68, 10:0.77, 20:0.56], max_valid_chain=1 (single_step_only)
  log: Accuracy gate passed (operator <operator_id>)
  method: grid
  grid_points: 9
  steps: 20
  dt: 0.25
  compare_brute_srk: True
  finalists: 0
  -> Sweep finished - example params {'a': 1.0, 'b': 3.0}, final state ~ [0.7101, 3.3821]
  log: SRK timing sample: 3 point(s) integrated for comparison
  log: Horizon aligned: 20 jumps x 0.25 s = 5.0 s (jump_lag matches dt)
  ! Degeneracy guard tripped on 1 grid point(s) - sweep mode: jump_anchored
  srk_sample_n: 9
  full_grid_truth: True
  min_spearman: 0.85
  -> Full-grid SRK truth: 9/9 rankable in 0.4 s
  _section: SRK ground truth (authoritative top-N)
  grid_points: 9
  srk_ranked: 9
  export: finalists_ground_truth_top9.csv
  srk_best_jump_rank: 4
  -> SRK top-10 in jump top-500: 9/9 (100% recall)
  log: SRK top-50 in jump top-500: 9/9 (100% recall)
  log: SRK top-100 in jump top-500: 9/9 (100% recall)
  _section: Rank verification (jump vs full SRK)
  verified_rows: 9/9 jump-ranked rows
  spearman_rho: 0.817 (gate >= 0.85)
  srk_verify_time: 0.4 s
  best_srk_jump_rank: #4 (regret 3)
  verdict: FAIL — do not cite ranking to clients
  -> top-10 overlap: skipped (sample size 9 < top_n 10)
  log: top-50 overlap: skipped (sample size 9 < top_n 50)
  log: top-100 overlap: skipped (sample size 9 < top_n 100)
  log: steady_ok agreement (jump vs SRK): 78%
  log: Report: <session-dir>\rank_verification_report.json
  log: SRK shortlist (verified ranking for HPC handoff): <session-dir>\srk_shortlist.csv
  log: SRK ground truth (authoritative): <session-dir>\finalists_ground_truth_top9.csv
  log: Authoritative deliverable: finalists_ground_truth_top9.csv (SRK ground truth — use this for HPC handoff)

-- Act 5 - Takeaway --
  -> Pick the objective that matches the question (precision vs survival vs cost). Do not mix objectives when comparing two studies.
  _section: Why run SolvJump here?
  log: Run your first parameter study from YAML — no custom integration loop to write.
  log: Explore all Brusselator (a, b) pairs in one command and get a ranked shortlist.
  log: Save a calibrated operator and session for live what-if in Journey 05.

-- Run complete --
  session_id: <session_id>
  results_folder: <session-dir>
  points_completed: 9 ok, 0 skipped (of 9)
  fast_sweep: 38.7 ms
  timing_sample: 114.6 ms (3 full-SolvSRK spot checks)
  vs_full_SolvSRK_on_every_study_point: ~344 ms for all 9 points in this study (from 3 spot checks — not a larger search)
  speedup: ~8.9× vs full SolvSRK on every grid point
  receipt_calibration: <session-dir>\calibration_receipt.json
  receipt_sweep: <session-dir>\sweep_receipt.json
  receipt_rank_verification: <session-dir>\rank_verification_report.json
  receipt_srk_shortlist: <session-dir>\srk_shortlist.csv
  receipt_finalists: <session-dir>\finalists_ground_truth_top9.csv
  -- Operator setup --
  accuracy_check: acceptable quality
  operator_id: <operator_id>
  fit_time: 1.1 s (one-time before the sweep)
  -- Sweep results --
  completed: 9 parameter sets
  skipped: 0
  -- How long did this take? --
  search_method: fast jump sweep
  grid_size: 9
  operator_fit: 1.1 s
  fast_sweep: 39 ms
  this_run_total: 1.1 s
  vs_full_SolvSRK_on_every_study_point: ~344 ms for all 9 points in this study (extrapolated from 3 spot checks — not a larger search)
  speedup_vs_full_grid: ~8.9× (jump sweep vs brute estimate)
  -- What happened --
  solvtune_objective: precision
  noise_type: gaussian
  -- Act 5 - Takeaway --
  -- Why run SolvJump here? --
  -- Run complete --
  session_id: <session_id>
  results_folder: <session-dir>
  points_completed: 9 ok, 0 skipped (of 9)
  fast_sweep: 38.7 ms
  timing_sample: 114.6 ms (3 full-SolvSRK spot checks)
  vs_full_SolvSRK_on_every_study_point: ~344 ms for all 9 points in this study (from 3 spot checks — not a larger search)
  speedup: ~8.9× vs full SolvSRK on every grid point
  receipt_calibration: <session-dir>\calibration_receipt.json
  receipt_sweep: <session-dir>\sweep_receipt.json
  receipt_rank_verification: <session-dir>\rank_verification_report.json
  receipt_srk_shortlist: <session-dir>\srk_shortlist.csv
  receipt_finalists: <session-dir>\finalists_ground_truth_top9.csv

Run it

cd python
# Guided tour — narrated scenario walkthrough (recommended first run):
python examples/journeys/09_solvtune_objective.py
 
# Production one-liner — same API call you ship:
solvjump run examples/brusselator_study.yaml --objective precision

What comes next

Journey 10 demonstrates kill-gate refusal and automatic adaptive fallback.

Navigation

← Journey 08 — Adaptive search and evidence · Journey 10 — When jump refuses →