jev-tune decision head

A 168 KB ONNX model that reads a closed-loop step response and returns one bounded PID gain step in 0.19 ms on a single CPU thread.

It is the runtime policy of jev-tune. It emits the three Jev-style primitives rather than text:

output shape meaning
choice 3 Γ— 7 multiplicative step for Kp, Ki, Kd (Γ—0.50 … Γ—2.00)
score 5 how good the current response is (used for early stopping)
noul 1 calibrated P(the step keeps the loop healthy)

Inputs

name shape description
feats (B, 20) hand-crafted response descriptors (overshoot, rise, settling, ess, log IAE/ITAE, oscillations, saturation, previous action and its effect, Ku/Kp, Tu/h …)
curves (B, 2, 64) resampled and normalised y(t) and u(t)

Usage

import numpy as np, onnxruntime as ort

sess = ort.InferenceSession("jev_head.onnx", providers=["CPUExecutionProvider"])
choice, score, noul = sess.run(None, {"feats": feats, "curves": curves})

The reference implementation, the feature extraction and the closed-loop driver are in the repository (v1.0.0). models/jev_head_weights.mat is the same network exported for MATLAB, so the tuner can run inside Simulink without Python. The source PyTorch checkpoint (jev_head.pt) is included for specialist fine-tuning (scripts/10_specialize.py); the runtime itself only needs the ONNX file.

Calibration and safety layer

calibration.json (schema 2) carries one fitted temperature per gain axis and split-conformal prediction sets fitted on two disjoint labelled samples (Ξ± = 0.10, k_max = 3). The shell ships two modes: monitor records would-hold evidence only, while hard_hold vetoes an axis before actuation (the default in the core shell and the C port; the PID evaluator keeps monitor β€” the measured trade-off is in docs/TRADEOFFS.md in the repository).

Use jev_head_weights.mat and calibration.json as the pair shipped with v1.0.0 of the code. Older copies of these two files still load β€” the MATLAB decoder falls back to defaults β€” but silently drop the temperature scaling, the abstention thresholds and the CP veto.

CP coverage is per-axis marginal teacher-label coverage on exchangeable states. It is not closed-loop stability, joint-action safety or a physical guarantee.

Measured behaviour

Historical measurements from the v0.2-era study; see the repository docs for the current numbers and their accounting.

value
decision latency (1 thread, batch 1) 0.19 ms p50 / 0.24 ms p99
calibration (ECE after temperature fit) 0.038 – 0.056 per axis (0.049 / 0.038 / 0.056); agreement with the expert step label, not outcome calibration
held-out plants, median final cost 0.468 (CMA-ES 1.813 at the same budget)
plants that ended worse than the start 0 / 200

Limits

Trained on a synthetic zoo (six plant families, including actuator saturation). It is not magic: dead bands, inverse response and open-loop unstable plants need a specialist fine-tune (scripts/10_specialize.py, ~2 min of CPU), and tracking/disturbance objectives need new metrics and a retrain. See docs/APPLICABILITY.md in the repository.

Licence

MIT Β© JIAWEI LI. Trained in this project on synthetic data; no third-party weights are involved.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support