← All projectsGitHub
Digital twins & sim-to-real

How few real trials certify a robot policy when a biased simulator supplies the rest?

research/sim2real-inference

Research programme (milestones 3 to 6 logged): valid, bias-agnostic sim-to-real evaluation of robot policies, consolidating about 130 twin projects into one question, with 13 checked references, hypotheses H1 to H6 and CoRL as the target venue

33 tests

What it found

An open research programme rather than a finished project. A digital twin is biased, so twin-only evaluation of a robot policy is wrong however many runs it makes; real trials are unbiased but scarce. The programme asks for estimators and tests that combine many twin runs with a few real ones, stay valid whatever the twin's bias, and say how many real trials they save, for mean return, failure rate and policy comparisons. It reconciles two answers already in this repository: control-variate savings that grow as 1/(1−ρ²) (twin-evaluation) and a worst-case result that a twin cannot shorten a failure-rate certificate (twin-certification). Planned: one estimator family under context pairing (control variate, PPI++, multifidelity Monte Carlo), a certification lower bound under checkable discrepancy assumptions, active choice of real trials, anytime-valid stopping, and tests on MuJoCo model pairs and on SIMPLER's published paired real and simulated results. First results (milestone 3, 21 MuJoCo model-versus-model pairs): context-paired twin runs raise the effective real sample up to 3.2×, within 6% of 1/(1−ρ²(1−n/N)); unpaired twin runs give none; plug-in t intervals undercover (as low as 87% at n=30; real-only reaches 91%) so H1 is refuted as pre-registered; detectability predicts value almost as well as ρ here (Spearman −0.95 vs 0.999). Magnitudes of the omitted effects are swept, not sourced from datasheets. Milestone 3b: a studentised-bootstrap interval lifts mean 95% coverage at n=30 from 92.0% to 93.6% for the control variate (worst pair 90.8%) at 14% greater mean width, while the percentile bootstrap is worse than the t interval; a distribution-free interval is still needed for a guarantee. Milestone 3c: a union-bound empirical-Bernstein interval for the control variate is valid (100% coverage on all 21 pairs) but 2.1–3.1× wider than a real-only one, because the bound is dominated by its range term; the twin's variance gain is invisible to it, which rules out generic Bernstein bounds and points to betting or observed-range intervals. Milestone 3d: a betting (hedged-capital) interval is also valid (coverage at least 99.5%) and again 1.9–3.4× wider with the twin, because its bets are capped on 99–100% of steps, so any bound that leans on the worst-case range hides the twin's variance gain at n=30–60. Milestone 3e: a bounded-discrepancy lower bound (pilot-checked bound on |R−T|, Hoeffding on the clipped discrepancy) is valid (100% coverage) but never tighter than a real-only empirical-Bernstein bound on any of the 21 pairs at n up to 240, because the pilot maximum of |R−T| stays at 0.26–0.36 even at ρ ≈ 0.87 and the check on the bound costs γ = 0.056 at n=240; the proposal's H3 is refuted for a max-based bound in this benchmark. Milestone 3f: for failure rates, a twin-informed upper bound (twin failure rate plus an exact bound on P(real fails, twin passes)) is valid (coverage at least 98.6%) but tighter than Clopper–Pearson on 0 of 21 pairs at n up to 240, because even the best pair’s twin passes about 55% of the real failures; it would need to miss under roughly 5–10%, which confirms the worst-case result of twin-certification with a number. Milestone 6 (theory): no valid 95% lower bound on mean return, from m paired runs and any number of twin runs, can have a median gap below 1−(0.10)1/m (about 2.3/m) in the worst case, even with a perfect twin; this floor is 0.0095 at m=240, against 0.060 for real-only empirical Bernstein and 0.193 for the milestone 3e bound, so those failures are construction losses with room above the floor, but no construction can beat the 1/m term.

Research log

Ongoing: each run adds a batch and an entry, newest first. Source: LOG.md.

2026-10-30 · Milestone 7y: finite-pool certificate moves into the main text (a writing step, no experiment)

2026-10-28 · Per-episode pairs: the blocker is the data, not the host (a check, not an experiment)

2026-10-28 · Milestone 2s: the synthesis of the 138 *-twin projects (a count, not an experiment)

2026-10-27 · Citation check: all 14 references verified (a check, not an experiment)

2026-10-27 · Test-suite check: one order-dependent failure fixed (a check, not an experiment)

2026-10-26 · Milestone 7x: abstract leads with the real data (a writing step, no experiment)

2026-10-26 · Milestone 7w: restructure the paper for CoRL's framing (a writing step, no experiment)

2026-10-26 · Milestone 7v: what does the CoRL call actually require? (a check, not an experiment)

2026-10-26 · Milestone 7u: SureSim's released interval code on our pairs (planned before running)

### Outcome (experiments/m7u_suresim_code/: suresim_code.py, results/suresim_code.csv, results/summary.txt; 200 replications, 21 pairs per task, analysis as pre-registered)

2026-10-26 · Milestone 7t: does the paper draft build? (a check, not an experiment)

2026-10-26 · Milestone 7s: does SureSim ship data or code we can replicate against? (a check, not an experiment)

2026-10-26 · Milestone 7q: does our betting construction win in SureSim's own setting? (planned before running)

### Outcome (experiments/m7q_suresim_setting/: suresim_setting.py, results/suresim_setting.csv, results/summary.txt; 100 replications, 21 pairs per task)

2026-10-26 · Milestone 4f: how many real trials per policy does it take to rank policies as well as the twin does? (planned before running)

### Outcome (experiments/m4f_ranking/: ranking.py, results/summary_4f.txt; analysis as pre-registered)

2026-10-26 · Milestone 4e: does the SIMPLER calibration transfer to a held-out task or policy? (planned before running)

### Outcome (experiments/m4e_transfer/: transfer.py, results/summary_4e.txt; analysis as pre-registered, but two hypotheses had a sign error, below)

2026-10-26 · Milestone 4c: do the SIMPLER intervals survive resampling tasks and policies, not cells? (analysis written after the first run, not pre-registered)

2026-10-26 · Milestone 4d: which eggplant value is the PDF's? (resolves the open item in 4b; analysis written after the run)

2026-10-25 · Milestone 4b: does the SIMPLER transcription match the authors' own tables? (analysis written after the first run, not pre-registered)

2026-10-25 · Milestone 7p: paper section for the 7k to 7o chain (writing step, no new experiment)

2026-10-25 · Milestone 7o: is the cart-pole loss a near-ceiling artefact? (planned before running)

### Outcome (experiments/m7o_ceiling/: ceiling.py, results/ceiling.csv, results/summary.txt; 84 cells, 100 replications)

2026-10-25 · Milestone 7n: what sets the width of the betting interval for the residual R - T? (planned before running)

### Outcome (experiments/m7n_residual_width/: residual_width.py, decomposition.py, results/; 84 cells, 200 replications each, same subsample for both intervals)

2026-10-25 · Milestone 7m: is the finite-twin win a threshold on real-only width over twin-mean width? (planned before running)

### Outcome (experiments/m7m_threshold/: threshold.py, results/threshold.csv, results/summary.txt; 168 cells per system, W_T from 40 fresh twin-mean intervals per (system, N, f))

2026-10-25 · Milestone 7l: what predicts when a twin pays? rho and residual spread against the finite-twin win (planned before running)

### Outcome (42 pairs per n; experiments/m7l_predictor/results/; analysis of the 7j and 7k CSVs, no new simulation)

2026-10-25 · Milestone 7k: does cart-pole ever win with a large twin pool? (planned before running)

### Outcome (21 cart-pole pairs, 200 replications per cell; experiments/m7k_cartpole_large_n/results/)

2026-10-25 · Milestone 7j: does a larger twin pool or an uneven alpha split make the finite-twin win typical? (planned before running)

### Outcome (21 pendulum pairs, 200 replications per cell; experiments/m7j_n_sweep/results/)

2026-10-25 · Milestone 7i: does the twin-assisted betting win survive a finite twin pool? (planned before running)

### Outcome (2 x 21 pools, 300 replications per cell; experiments/m7i_finite_twin/results/)

2026-10-25 · Milestone 7h: was the negative certificate result an artefact of the capped bet? (planned before running)

### Outcome (2 x 21 pools, 300 replications per cell, n in {60, 240, 960}; experiments/m7h_uncapped_betting/results/)

2026-10-25 · Milestone 7g: does the twin shorten a certificate at larger n? (SureSim check; planned before running)

### Outcome (2 x 21 pools, 1,000 replications per cell; experiments/m7g_large_n/results/)

2026-10-25 · Milestone 7f: how wrong may the twin's tail be before an upper bound on the cost fails? (planned before running)

### Outcome (21 cost pools, population values; experiments/m7f_tailratio/results/)

2026-10-25 · Milestone 7e: does a twin-assisted lower bound on the clipped cost beat real-only? (planned before running)

### Outcome (21 cost pools, q = 0.999, c = 2.009, 1,000 replications per cell; experiments/m7e_clip_cv/results/)

2026-10-25 · Milestone 7d: what does a twin-chosen clip level buy a certificate on an unbounded cost? (planned before running)

### Outcome (21 cost pools, 1,000 replications per cell; experiments/m7d_clip/results/)

2026-10-25 · Milestone 7c: does it hold with an unbounded, heavy-tailed outcome? (planned before running)

### Outcome (21 cost pools, rho 0.60 to 0.94, 4,000 contexts each; experiments/m7c_cost/results/)

2026-10-25 · Milestone 7b: paper draft updated with the cart-pole replication (no new experiment)

2026-10-25 · Milestone 7a: does milestone 3 replicate on a second, unstable task? (planned before running)

### Outcome (21 cart-pole pairs, rho 0.37 to 0.86, 4,000 contexts each; experiments/m7_cartpole/results/)

2026-10-24 · Milestone 6d: is |R - T| a lower-variance target than R? (planned before running)

### Outcome (21 pools; experiments/m6d_target_variance/results/, 2 tests)

2026-10-24 · Milestone 6c: a quantile or mean discrepancy bound instead of the maximum (planned before running)

### Outcome (21 pools; experiments/m6c_quantile/results/, 3 tests)

2026-10-24 · Milestone 6b: the floor scales with a known discrepancy bound D, and a zero-real-run ceiling (theory plus an oracle check; planned before running)

### Outcome (21 pools; experiments/m6b_dfloor/results/, 3 tests)

2026-10-24 · Milestone 7: paper draft (paper/)

2026-10-24 · Milestone 6: a distribution-free floor on any twin-assisted lower bound (theory; the numerical check was planned before running)

2026-10-24 · Milestone 5b: anytime confidence sequences with the twin as control variate (H5) (planned before running)

### Outcome (21 pairs, 1,000 replications per cell, nmax = 300, delta = 0.05; experiments/m5b_anytime/results/)

2026-10-24 · Milestone 5a: active selection of real trials (H4) (planned before running)

### Outcome (21 pairs, 1,000 replications per cell, n in {30, 60, 120}; experiments/m5a_active/results/)

2026-10-24 · Milestone 3f: failure-rate certificates, twin-informed versus Clopper-Pearson (planned before running)

### Outcome (21 pairs, 1,000 replications per cell, tau = 0.65; experiments/m3f_failure_rate/results/)

2026-10-24 · Milestone 4: SIMPLER's paired real and sim success rates (planned before running)

### Outcome (36 cells: 8 task columns, 6 Google Robot and 3 WidowX policies; experiments/m4_simpler/results/)

2026-10-24 · Milestone 3e: a bounded-discrepancy lower bound (planned before running)

### Outcome (21 pairs, 1,000 replications per cell, n in {30, 60, 120, 240}; experiments/m3e_bounded_disc/results/)

2026-10-24 · Milestone 3d: a betting interval (planned before running)

### Outcome (21 pairs, 1,000 replications per cell, n in {30, 60}; experiments/m3d_betting/results/)

2026-10-24 · Milestone 3c: a distribution-free interval (planned before running)

### Outcome (21 pairs, 1,000 replications per cell, n in {30, 60}; experiments/m3c_dfree/results/)

2026-10-24 · Milestone 3b: finite-sample intervals (planned before running)

### Outcome (21 pairs, 2,000 replications per cell, B = 399; experiments/m3b_intervals/results/; MC s.e. about 0.5 points)

2026-10-24 · Milestone 3: benchmark v1, MuJoCo pairs (planned before running the estimators)

### Outcome (21 pairs, 4,000 contexts each, 4,000 replications per pair and n; experiments/m3_benchmark/results/)

2026-10-24 · Milestone 2 part 1: consolidated estimator library

2026-10-24 · Programme opened

Paper, code and results

More in Digital twins & sim-to-real

All 164 Digital twins & sim-to-real projects →

Other research topics

Proper scoring & elicitation28Effort & peer prediction9Verification games & slashing19Detection & tolerances14Markets as routers13Prediction-market design9Paying contributors8Decentralised training systems23Digital twins & sim-to-real164LLM chip design loops40Robot manufacturing loops53Ambient AI assistant46Self-replicating manufacturing34Simulation-first design64Engineered clothing45Task-specific AI accelerators40Algorithmic chip-design loops42Open-source purpose-built robots44The software-engineering loop43Adversarial human imitation41Open-source residential construction41Autonomous multi-angle capture34Sensing, imaging and 3D31Energy supply and dense energy storage39Robot societies among people31Agentic co-design of low-cost robots27Laundry-hanging robots25Machine learning on qualitative data23Robots on the building site27Civilizations & group psychology1History & human sciences1

Produced with AI assistance (Claude). Results are from the code in this repository and are simulated or stylised unless the abstract says otherwise; nothing here implies affiliation with or endorsement by any lab, researcher or company cited. MIT licensed.