Tasks/Chips & Compute Systems/Device Modelling

Commit terminal-current numbers for a diode lot beyond the safe test window

Extrapolate power-device I–V curves outside the safe window

device_iv_regime_extrapolation Chips & Compute Systems Device Modelling
instruction.mdthis is what the agent is given

You are an AI agent assisting the device engineer who must qualify a new power-diode lot at a semiconductor supplier. The probe station covers only a safe bias/temperature window — 290–325 K, reverse bias to −3.6 V — but the qualification sign-off due this quarter must commit leakage and conduction numbers at mission-profile extremes: 385–400 K and reverse bias to −26 V, where measurement is destructive and the burn-in rig is booked for months. Overstate the lot's capability and an automotive customer eats field returns; understate it and the socket goes to a competitor. You inherit a starting prediction method that extrapolates a fitted window trend; your job is to build the method the lab will run on every future lot — it is re-run, unchanged, on qualification devices whose extreme-regime behavior you never see.

Hard Constraints

  • Submit a method: methods/main/solver.py defining exactly predict(record) -> list of floats — the predicted log10 of the absolute terminal current in amperes at each point of record["extreme"], in order; a pure function of one device record.
  • record is a dict with the device's safe-window measurements (window: 56 {T, V, I} points) and the target grid (extreme: {T, V} points) — the same schema as the practice records, minus the truth field.
  • Each call runs in a fresh process under a 180-second wall-clock budget (measured outside your process). Anything that takes longer than 195 s (budget + 15 s grace) is scored as the worst case for that device, and the process is hard-killed at 210 s regardless; crashed or wrongly-shaped outputs are scored the same worst case. The grader records a timeout and the child's exit status separately from "produced no output", so both show up in the run log.
  • The whole grading stage is capped at 7200 s wall-clock, inside a container declared at 4 CPUs / 1024 MiB — the same shape as your own container, so a method that fits here fits there. Devices are graded serially, one subprocess at a time: with 16 qualification devices the stage budget is the binding constraint only if your average device takes more than ~7.5 minutes, which the 180 s per-device budget already forbids.
  • A note on shared memory: this container's /dev/shm is 64 MiB and cannot be enlarged. A multiprocessing.shared_memory / joblib memmap segment larger than that is created successfully and then faults (SIGBUS) on first write, killing your process with no output. Pass large arrays to workers by fork inheritance or through ordinary files in TMPDIR instead. The grader reports a SIGBUS kill as its own failure reason, distinct from "produced no output".
  • The graded lot is 16 devices against your 24 practice devices — about 0.67x the visible count, on the identical 12-point extreme grid. Grading is therefore cheaper than one full selfcheck.py pass; sizing your method against your own self-check wall-clock is safe here.
  • CPU only, no network. Runtime: Python 3 with numpy and scipy, plus the DEVSIM TCAD device simulator (import devsim) — build physics models of the lot if you choose to. BLAS/OpenMP threading is pinned to 4 in both this image and the grader, so your local timings match the graded ones.
  • Only files under methods/ are collected and re-run: keep everything predict() imports inside methods/main/. Do not modify data/, examples/, selfcheck.py or run_solver.py.

What You Have

  • data/practice/instances.json — 24 practice devices with complete extreme-regime truth (noise-free log10|I| on the full 12-point extreme grid), documented field by field in data/practice/DATA_CARD.md. This is your only labeled data; study it in full.
  • data/qualification/records.json — the 16 qualification devices your method will actually be judged on: same window protocol, same extreme grid, no truth. They are a fresh draw from the same production population as the practice fleet, with part of the lot weighted toward the harder corner of that same population.
  • examples/devsim_diode_demo.py — a working DEVSIM drift-diffusion model of this device architecture (mesh, doping, equation assembly, bias ramping with convergence back-off, temperature stepping, terminal current readout). A starting point, not a prescription.
  • methods/main/solver.py — the inherited starting method: a log-space window-trend fit extrapolated in temperature with the voltage law clamped at the window edge. It carries a real trend signal but is far from what the records support; its level is also the floor you must clearly beat before the evaluation awards any credit.
  • python3 selfcheck.py — free and unlimited: scores your current methods/main/solver.py on the practice fleet against its truth and prints per-device errors and the mean. The practice mean is not a point estimate of your qualification score. The 24-device practice fleet separates a broken method from a working one cleanly, but it is systematically optimistic about the qualification lot: for a strong method we have measured, the practice mean understates the qualification error by roughly a factor of 1.75. That gap is not sampling noise and a better method does not make it go away — the two fleets are different draws and the qualification lot leans toward the harder corner of the population, so part of the gap is priced in by construction. Use the practice mean for what it is good at: a floor check, a debugging tool, a regression guard, and relative comparisons between two of your own variants measured on the same 24 devices, where the fleet-specific offset largely cancels. Do not read an absolute practice number as the score you will get, and do not let a few percent of practice advantage outweigh physics you can justify.

What You Submit

Leave your best methods/main/solver.py (plus any helper files it needs inside methods/main/) in place. There is no submit step and no feedback from the graded lot: whatever sits in methods/main/ at the end is what the evaluation re-runs.

How It Is Judged

The evaluation re-runs your predict() once per qualification device, on records byte-identical to data/qualification/records.json, and compares your numbers to the sealed truth of that lot. Per device it computes the mean of |log10 I_pred − log10 I_true| over the device's extreme grid (LOWER is better; capped at 6.0, which is also the score for an invalid or over-budget run) — selfcheck.py computes the identical per-device error on practice. Device errors are averaged within each qualification condition (the main lot draw and the harder-corner draw from the same population), then across the two conditions. Your reward rises monotonically as that sealed mean error falls; at or above the shipped starting method's error it is zero.

Metric

mean absolute log10-current error on the sealed 16-device lot · lower is better

Per device: mean |log10 I_pred - log10 I_true| on 12 extreme points, capped at 6.0; averaged per condition, then both.

anchorvisible setheld-outreward
Bshipped starting method0.3312510.3980960.00
Rreference method0.0155260.0271460.30
Uexact prediction001.00
normalisation
m >= B0
B > m > R0.3 * (u(B) - u(m)) / (u(B) - u(R))
R >= m > U0.3 + 0.7 * (u(R) - u(m)) / (u(R) - u(U))
m <= U1

m = this run's held-out metric  ·  B = shipped starting method  ·  R = reference method  ·  U = exact prediction

u(x) = log10(x + 5.2e-5), linear in u between landmarks, clamped to [0,1]. Mapped once on the aggregate metric, not per device.

Rollouts

34 minwall clock
-spend
-tokens
9versions, 9 kept
0 0.075 0.150 0.225 0.300 0 15 30 45 60 agent step (this harness reports no tokens or timestamps) practice self-check mean |dlog10 I|, lower is better reference method · visible · 0.015526 v0 v1 v2 v3 v4 v5 v6 v7 v8
keptrevertedno scoreturning point
  1. v0Inherited baseline: window log-trend fit, voltage clamped at 3.6 V0.3313
  2. v1ni-scaled thermal law from median pairwise reverse activation, voltage power 0.60Fit a physical temperature and voltage law and set its scale from the deepest, hottest reverse point instead of clamping.0.0461
  3. v2Soft-breakdown term added where the 0.45 V forward current is low and b under 1.02Window signatures proxy high doping, so the avalanche-prone corner gets a second branch gated on them.0.0327
  4. v3Joint CV retune: voltage power 0.58, breakdown floor -5.550.0316
  5. v4Activation b estimated only from reverse points at |V| >= 2 V0.0294
  6. v5b nudged up when forward ideality n < 1.250.0276
  7. v6Avalanche strength scaled as gap^1.6 on the 0.45 V current proxy, floor -5.50Give the breakdown term dynamic range across the forward-level gap; the 3-device hard slice went 0.0302 to 0.0193.0.0264
  8. v7300 K deep-reverse points added to the scale median0.0258
  9. v8Activation b floored at 0.980.0252

Picked on a locked 6-device holdout and a 3-device hard slice, not the plotted mean; reverted directions were never snapshotted, so all 9 stand.

On the hidden set

held-out metricreward
shipped starting method0.3980960.00
reference method0.0271460.30
exact prediction01.00
this run0.0380250.2624
6 minwall clock
$0.77spend
4.4Mtokens
2versions, 2 kept
0 0.075 0.150 0.225 0.300 $0 $0.2 $0.3 $0.5 $0.6 cumulative spend on the run practice self-check mean |dlog10 I|, lower is better reference method · visible · 0.015526 v0 v1
keptrevertedno scoreturning point
  1. v0Inherited baseline: window-trend fit, voltage law clamped at window edge0.33136 min · $0.68
  2. v1RBF kernel ridge from 56 window log-currents to the 12 targets, alpha 1e-9Drop the physics and learn the window-to-extreme map off the 24 practice dies; sigma and alpha picked by leave-one-device-out.06 min · $0.66

Self-check reads 0.0000 at v1: alpha 1e-9 interpolates its own 24 dies. The agent's leave-one-out check, 0.024666, is the honest number.

On the hidden set

held-out metricreward
shipped starting method0.3980960.00
reference method0.0271460.30
exact prediction01.00
this run0.0409790.254
111 minwall clock
$20.71spend
25.2Mtokens
6versions, 6 kept
0 0.075 0.150 0.225 0.300 $0 $4 $8 $12 $16 cumulative spend on the run practice self-check mean |dlog10 I|, lower is better reference method · visible · 0.015526 v0 v1 v2 v3 v4 v5
keptrevertedno scoreturning point
  1. v0Inherited baseline: log-space window-trend fit, voltage law clamped at window edge0.331329 min · $3.29
  2. v1Shared-activation fit of the 3 deepest reverse biases; fleet-mean 12-point offsetSplit it into a per-device Arrhenius base measured on the deep reverse window plus one population offset to the extreme grid.0.041267 min · $7.27
  3. v2Offset predicted per device by kernel ridge on two forward-ideality featuresThe offset stops being a fleet constant and becomes a function of window shape; LOO 0.0430 to 0.0187 as in-sample collapses.0.006381 min · $10.35
  4. v3Ensemble of 6 kernel-ridge fits, heavier linear term, features and offset clippedSelection moved to a held-out corner-stress split; the linear term is what carries the trend outside the calibrated range.0.0064102 min · $14.93
  5. v4Base fit widened from the 3 to the 4 deepest reverse biases0.0064104 min · $16.38
  6. v5Float-tolerant bias matching; robustness checks on mutated records0.0061108 min · $18.66

Chosen on leave-one-device-out, not the plotted in-sample mean: LOO 0.0430 at v1, 0.0187 at v2, 0.0182 from v4 on.

On the hidden set

held-out metricreward
shipped starting method0.3980960.00
reference method0.0271460.30
exact prediction01.00
this run0.0454120.2426
188 minwall clock
$55.97spend
73.7Mtokens
36versions, 32 kept
0 0.1 0.2 0.3 0.4 $0 $15 $30 $45 cumulative spend on the run practice self-check mean |dlog10 I|, lower is better reference method · visible · 0.015526 v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35
keptrevertedno scoreturning point
  1. v0Untouched baseline: three-parameter reverse-window trend, voltage clamped at -3.6 V0.33130 min · $0.11
  2. v1Voltage clamp removed, per-device log-voltage coefficient extrapolated freely0.43191 min · $0.23
  3. v2Clamped term kept plus a physical depletion-width continuation in log voltageExtrapolate past the window with a depletion-width law instead of freezing the current at the clamp edge.0.07972 min · $0.28
  4. v3Linear 1/T feature replaced by the silicon intrinsic-density law0.06925 min · $0.75
  5. v4Edge anchor fit on a thermal coordinate, then a calibrated high-field continuation0.043814 min · $2.83
  6. v5Ridge map from 32 forward-window log currents to the v3 residual, alpha 0.0178Learn the window-to-extreme residual from the fleet; fit-on-all 0.0164 against leave-one-device-out 0.0340.0.016420 min · $5.09
  7. v6Convex ensemble, 65% learned v5 with 35% edge-anchor v40.02320 min · $5.22
  8. v7Component-wise ensemble: 75% learned hot level, 60% learned voltage shape0.021923 min · $6.29
  9. v8Five-device high-field family gated on forward signatures, own normalized curveDevices sort into mechanism families; calibrate one shared curve per family and infer its gain from forward level.0.01826 min · $7.31
  10. v9Four-device high-voltage-knee family, gain from a linear curve manifold0.016527 min · $7.91
  11. v10Moderate-saturation family gated on the safe reverse span and forward level0.01430 min · $8.57
  12. v11Hard replacement law for the two-device strong-saturation family0.014630 min · $8.73
  13. v12Half-strength shrinkage toward the strong-saturation family law0.014130 min · $8.88
  14. v13High-field curve manifold extended to the low-temperature-coefficient phenotype0.01333 min · $10.18
  15. v14Temperature-specific family de-biasing of the regularized -8 V hot-current anchor0.0140 min · $11.32
  16. v15Edge anchor retuned to thermal prefactor 2.2 and field exponent 0.720.011142 min · $11.86
  17. v16Anchor-preserving curve correction for the ten devices outside every family0.009155 min · $14.73
  18. v17High-field gain proxy read off a fitted temperature/voltage forward surface0.00962 min · $17.06
  19. v18Ordinary curve map inputs switched from raw endpoints to surface evaluations0.008968 min · $19.39
  20. v19Full strong-saturation curve law restored, paired with its own anchor correction0.008869 min · $20.01
  21. v20Common temperature-specific anchor de-bias for the ordinary population0.008472 min · $21.38
  22. v21Raw family gates replaced by quadratic-surface signatures0.008476 min · $22.99
  23. v22Ordinary anchor mean-only correction becomes a four-summary ridge map, half strength0.007693 min · $27.20
  24. v23Family-centered anchor-only ridge correction for the high/late-field and knee groups0.0064104 min · $29.56
  25. v24Knee family mean anchor de-bias raised from quarter to half strength0.0062106 min · $30.32
  26. v25Ordinary anchor map feature term shrunk from 50% to 75% strength0.0059110 min · $31.26
  27. v26Ordinary curve ensembled equally with a two-gain low-dimensional profile model0.0063121 min · $34.70
  28. v27Ordinary hot-anchor blend moved from 75/25 learned/edge-physics to 50/500.0069124 min · $35.77
  29. v28Ordinary latent residual map becomes a six-coefficient temperature/voltage surface0.0079136 min · $39.42
  30. v29Ordinary auxiliary two-gain curve contribution cut from 50% to 25%0.0082138 min · $39.74
  31. v30Ordinary residual maps clipped at one standard deviation instead of two0.0078152 min · $42.68
  32. v31Clipped ordinary branch coherently refit at 60/40 level, 30/70 shape, ridge 1.00.00662157 min · $44.30
  33. v32Redundant ordinary two-gain ensemble removed, rich curve kept alone0.00649166 min · $47.27
  34. v33Knee family fixed gain replaced by a one-feature ridge on thermal curvature0.00644172 min · $49.94
  35. v34Special families' raw 32-reading residual map swapped for the six-coefficient surface0.00666181 min · $53.91
  36. v35Documentation cleanup; predictions byte-identical to v340.00666186 min · $55.60

Best in-sample was v25 0.0059; v26-v29 traded it away for grouped-CV transfer. Selection ran on held-out devices, not the plotted mean.

On the hidden set

held-out metricreward
shipped starting method0.3980960.00
reference method0.0271460.30
exact prediction01.00
this run0.0527430.2259
27 minwall clock
$6.97spend
8.6Mtokens
7versions, 6 kept
0 0.075 0.150 0.225 0.300 $0 $1.5 $3 $4.5 $6 cumulative spend on the run practice self-check mean |dlog10 I|, lower is better reference method · visible · 0.015526 v1 v2 v3 v4 v5 v6 v7
keptrevertedno scoreturning point
  1. v1Untouched baseline: window-trend fit, voltage law clamped at window edge0.33131 min · $0.15
  2. v2Additive Arrhenius + quadratic log|V| reverse law, noisy -0.4 V points droppedReplace the clamp with a fitted voltage law, so the extreme bias is extrapolated instead of frozen at the window edge.0.07372 min · $0.34
  3. v3Ridge calibration of 22 window features to the 12 targets, blended 80/20 with physicsLearn the window-to-extreme map from the fleet and keep the physics fit as a 20% anchor. LOO 0.0252.0.01787 min · $1.33
  4. v4Physics anchor cut from 20% to 15%0.014515 min · $3.26
  5. v5Jackknife average of 24 leave-one-out ridge calibrations, collapsed to one affine mapAverage calibrations that each omit one die, so no single practice device sets the map; wins 78% of paired splits.0.016218 min · $3.95
  6. v6Physics anchor becomes an equal average of three reverse extrapolators0.015125 min · $6.12
  7. v7Cleanup: superseded coefficients removed, predictions byte-identical0.015126 min · $6.64

v4 had the best in-sample score of the run and was reverted for losing on LOO and on repeated train-20 splits.

On the hidden set

held-out metricreward
shipped starting method0.3980960.00
reference method0.0271460.30
exact prediction01.00
this run0.0538190.2236