Adaptive sampling algorithms from structural optimization can improve the efficiency of machine learning surrogate models for simulation problems.
Adversarial Debate Score
57% survival rate under critique
Expert panel critique
Independent views, each critiquing the hypothesis on its own — the score rewards genuine disagreement and discounts consensus.
Supporting Research Papers
- Cheap Thrills: Effective Amortized Optimization Using Inexpensive Labels
To scale the solution of optimization and simulation problems, prior work has explored machine-learning surrogates that inexpensively map problem parameters to corresponding solutions. Commonly used a...
- FlashOptim: Optimizers for Memory Efficient Training
Standard mixed-precision training of neural networks requires many bytes of accelerator memory for each model parameter. These bytes reflect not just the parameter itself, but also its gradient and on...
- Universal Persistent Brownian Motions in Confluent Tissues
Biological tissues are active materials whose non-equilibrium dynamics emerge from distinct cellular force-generating mechanisms. Using a two-dimensional active foam model, we compare the effects of t...
- Toward Expert Investment Teams:A Multi-Agent LLM System with Fine-Grained Trading Tasks
The advancement of large language models (LLMs) has accelerated the development of autonomous financial trading systems. While mainstream approaches deploy multi-agent systems mimicking analyst and ma...
Formal Verification
Z3 checks whether the hypothesis is internally consistent, not whether it is empirically true.
This discovery has a Claude-generated validation package with a full experimental design.
Precise Hypothesis
Adaptive sampling algorithms originally developed for structural/mechanical optimization (e.g., space-filling designs, expected improvement, variance-based sequential sampling) can reduce the number of expensive simulation evaluations required to train a machine learning surrogate model to a target accuracy threshold by ≥30% compared to passive (random or grid) sampling strategies, across at least two distinct simulation problem classes (e.g., computational fluid dynamics, finite element analysis) and at least two surrogate model architectures (e.g., Gaussian Process, neural network). Formally: given a fixed accuracy budget ε (e.g., RMSE ≤ 5% of output range), adaptive sampling reaches ε with N_adaptive evaluations such that N_adaptive ≤ 0.70 × N_passive, with statistical significance p < 0.05 over ≥10 independent trials per configuration.
- PRIMARY DISPROOF: Across ≥3 simulation benchmarks and ≥2 surrogate types, adaptive sampling fails to achieve ≥20% reduction in required evaluations at target accuracy ε (RMSE ≤ 5% of output range) compared to Latin Hypercube Sampling (LHS) baseline, with p > 0.10 in paired Wilcoxon signed-rank test over 10 trials.
- EFFICIENCY REVERSAL: In ≥2 of 4 benchmark problems, passive LHS achieves target accuracy with fewer evaluations than the best adaptive method tested (i.e., N_adaptive > N_passive).
- OVERHEAD DOMINANCE: The computational overhead of the adaptive selection step (acquisition function optimization, GP fitting) exceeds 15% of total simulation wall-clock time, eliminating practical benefit even when sample counts are reduced.
- SURROGATE DEGRADATION: The surrogate trained on adaptively selected points shows worse generalization on a held-out uniform test grid (N_test ≥ 500) than the passively trained surrogate at matched sample sizes N ∈ {100, 200, 500}, indicating overfitting to adaptively clustered regions.
- ALGORITHM SPECIFICITY FAILURE: Only one specific adaptive algorithm (e.g., only EI-based BO) shows improvement while all other structural-optimization-derived methods (LOLA-Voronoi, FLOLA, variance-based) perform at or below LHS baseline, suggesting the result is algorithm-specific rather than a general property of the adaptive sampling class.
- DOMAIN TRANSFER FAILURE: Algorithms tuned on structural mechanics benchmarks show no statistically significant improvement when transferred to a different simulation domain (e.g., CFD, electromagnetics) without re-tuning, contradicting the cross-domain efficiency claim.
Experimental Protocol
MINIMUM VIABLE TEST (MVT) — 4-benchmark, 3-algorithm, 2-surrogate factorial design:
BENCHMARK PROBLEMS (4 total): B1: Branin-Hoo function (d=2, analytical, cheap proxy for smooth structural response) B2: Hartmann-6 function (d=6, multimodal, proxy for nonlinear FEA response) B3: OpenFOAM lid-driven cavity CFD (d=4: Re, mesh density, boundary conditions × 2) — real simulation, ~15 min/run B4: FEniCS linear elasticity beam deflection (d=5: geometry, material, load parameters) — real simulation, ~8 min/run
ADAPTIVE ALGORITHMS (3, all from structural optimization literature): A1: Bayesian Optimization with Expected Improvement (EI) + GP surrogate (Mockus 1978, widely used in structural opt.) A2: LOLA-Voronoi sequential space-filling (Crombecq et al. 2011, developed for structural simulation surrogates) A3: FLOLA-Voronoi with gradient-enhanced exploration (van der Herten et al. 2015)
BASELINE: A0: Latin Hypercube Sampling (LHS) — standard passive baseline
SURROGATE MODELS (2): S1: Gaussian Process (Matérn 5/2 kernel, GPy library) S2: Neural Network (3-layer MLP, 64-128-64 units, ReLU, Adam optimizer)
FACTORIAL DESIGN: 4 benchmarks × 4 algorithms (3 adaptive + 1 baseline) × 2 surrogates × 10 independent trials = 320 experimental runs
EVALUATION METRIC: Number of simulation evaluations N* to reach RMSE ≤ 5% of output range on held-out uniform test grid (N_test = 500 for analytical, 200 for real simulations). Secondary: RMSE at fixed N ∈ {50, 100, 200, 500}.
-
ANALYTICAL BENCHMARK FUNCTIONS:
- Branin-Hoo (d=2): Implemented in Python, zero cost, standard ML benchmark
- Hartmann-6 (d=6): Implemented in Python, zero cost, from HPOLIB/BoTorch test suite
- Source: github.com/pytorch/botorch/tree/main/botorch/test_functions
-
CFD SIMULATION ENVIRONMENT:
- OpenFOAM v10 (open-source): lid-driven cavity tutorial, parameterized via PyFOAM
- Parameter space: Re ∈ [100, 5000], mesh [20×20 to 80×80], inlet velocity profile (2 params)
- Requires: Linux HPC cluster, ~15 min/run, ~2 GB RAM/run
- Output: velocity field L2 norm, pressure drop
-
FEA SIMULATION ENVIRONMENT:
- FEniCS/DOLFINx v0.7 (open-source): cantilever beam, parameterized geometry + material
- Parameter space: beam length [0.5–2.0m], width [0.05–0.2m], E [70–210 GPa], load [1–50 kN], Poisson ratio [0.25–0.45]
- Requires: ~8 min/run, ~1 GB RAM/run
- Output: max deflection, von Mises stress peak
-
ADAPTIVE SAMPLING LIBRARIES:
- SMT (Surrogate Modeling Toolbox, v2.x): LOLA-Voronoi, FLOLA implementations Source: github.com/SMTorg/smt
- BoTorch v0.9+: EI-based Bayesian Optimization Source: github.com/pytorch/botorch
- GPy v1.10: Gaussian Process surrogate
- scikit-learn v1.4+: MLP surrogate, LHS via scipy.stats.qmc
-
HARDWARE:
- HPC cluster with ≥16 CPU cores for parallel simulation runs
- 1× GPU (NVIDIA A100 or V100) for neural network surrogate training
- Minimum 64 GB RAM node for concurrent OpenFOAM runs
-
REFERENCE DATASETS FOR VALIDATION:
- NASA UQ Challenge benchmark dataset (structural, public): nasa.gov/uq-challenge
- SurrogateLib benchmark suite: github.com/benchopt/benchopt (surrogate track)
- PRIMARY: Mean efficiency ratio R ≥ 1.30 (≥30% reduction in required evaluations) for at least 2 of 3 adaptive algorithms, across at least 3 of 4 benchmarks, for at least 1 surrogate type, with p < 0.05 (Bonferroni-corrected) in paired Wilcoxon test.
- CONSISTENCY: R ≥ 1.15 for all 3 adaptive algorithms on at least 2 benchmarks (no algorithm performs worse than 15% below passive baseline on any benchmark).
- REAL SIMULATION TRANSFER: R ≥ 1.20 on at least one of B3 (CFD) or B4 (FEA) real simulation benchmarks for at least 2 adaptive algorithms.
- OVERHEAD ACCEPTABILITY: Adaptive selection overhead < 10% of simulation wall-clock time for all algorithms on B3 and B4.
- SURROGATE GENERALIZATION: Adaptively trained surrogates show RMSE on held-out uniform test grid ≤ 110% of passively trained surrogate RMSE at matched N (no overfitting penalty > 10%).
- REPRODUCIBILITY: Independent re-run of 20% of experimental conditions (randomly selected) reproduces mean RMSE within ±15% relative error.
- HARD FAILURE: Mean efficiency ratio R < 1.10 across all adaptive algorithms on ≥3 of 4 benchmarks — adaptive sampling provides no meaningful advantage.
- HARD FAILURE: Any adaptive algorithm achieves R < 0.90 (i.e., requires >11% MORE evaluations than LHS) on ≥2 benchmarks — adaptive sampling is actively harmful.
- HARD FAILURE: Overhead ratio > 25% for any adaptive algorithm on real simulations (B3, B4) — practical inapplicability.
- SOFT FAILURE: R ≥ 1.30 only for analytical benchmarks (B1, B2) but R < 1.15 for both real simulations (B3, B4) — gains do not transfer to realistic simulation contexts.
- SOFT FAILURE: Statistical significance achieved (p < 0.05) for only 1 of 3 adaptive algorithms — result is algorithm-specific, not a general property of structural optimization-derived adaptive sampling.
- SOFT FAILURE: Efficiency gains disappear (R < 1.10) when ε is tightened from 5% to 2% RMSE — adaptive sampling only helps for low-accuracy surrogates.
- ABORT TRIGGER: >20% of simulation runs (B3, B4) fail to converge in adaptive sampling conditions, suggesting the adaptive sampler is proposing physically unrealizable parameter combinations.
18
GPU hours
35d
Time to result
$420
Min cost
$2,850
Full cost
ROI Projection
- SOFTWARE TOOLING: A validated, benchmarked adaptive sampling library (extending SMT or BoTorch) with documented efficiency gains on real simulations has commercial value as: (a) open-source with consulting/support revenue ($200K–$500K/year for a 3-person team), (b) SaaS integration into existing simulation platforms (ANSYS, Siemens Simcenter, Dassault SIMULIA) — licensing value $1M–$5M.
- CONSULTING MARKET: Validated methodology creates a defensible consulting offering for simulation-heavy industries (aerospace, automotive, oil & gas, pharmaceuticals). Market size for simulation optimization consulting: ~$800M globally (2025), growing 12% CAGR.
- ACADEMIC IMPACT: High-citation methodology paper (estimated 150–400 citations in 5 years based on comparable surrogate modeling papers) strengthens grant applications in NSF CSSI, DOE ASCR, EU Horizon simulation programs. Estimated grant leverage: $2M–$8M in follow-on funding.
- PHARMACEUTICAL APPLICATION: Adaptive surrogate models for PBPK (physiologically-based pharmacokinetic) simulations in drug development reduce Phase 1 trial design costs. For the MS therapeutic targets (CTSS, DNMT1) identified in the parent preprint, adaptive PK/PD surrogate modeling could reduce computational screening costs by $200K–$1M per target.
- DIGITAL TWIN INTEGRATION: Validated adaptive sampling is a core enabler for efficient digital twin calibration in manufacturing and infrastructure monitoring — market projected at $73B by 2027 (MarketsandMarkets). Early validated methodology positions researchers for high-value industry partnerships.
- OPEN-SOURCE ECOSYSTEM VALUE: Contribution to BoTorch/SMT ecosystems with documented real-simulation benchmarks increases library adoption, creating network effects valued at $500K–$2M in community development equivalent.
🔓 If proven, this unlocks
Proving this hypothesis is a prerequisite for the following downstream discoveries and applications:
- 1ADAPTIVE_SAMPLING_HIGH_DIM_EXTENSION_004
- 2MULTIFIDELITY_SURROGATE_ADAPTIVE_005
- 3STRUCTURAL_OPT_TRANSFER_CFD_006
- 4ACTIVE_LEARNING_PHYSICS_INFORMED_NN_007
- 5ADAPTIVE_SAMPLING_MS_DRUG_RESPONSE_SURFACE_008
Prerequisites
These must be validated before this hypothesis can be confirmed:
- SMT_LOLA_VORONOI_BENCHMARK_001
- BOTORCH_EI_SURROGATE_VALIDATION_002
- OPENFOAM_PARAMETRIC_WRAPPER_003
Implementation Sketch
# ============================================================ # ADAPTIVE SAMPLING EVP — IMPLEMENTATION SKETCH # ============================================================ # Dependencies: botorch, gpytorch, smt, fenics, PyFOAM, scipy, numpy, h5py import numpy as np from scipy.stats.qmc import LatinHypercube from botorch.models import SingleTaskGP from botorch.acquisition import ExpectedImprovement from botorch.optim import optimize_acqf from smt.sampling_methods import LHS as SMT_LHS from smt.surrogate_models import KRG # for LOLA-Voronoi integration import h5py, time # ---- CONFIGURATION ---- BENCHMARKS = { 'branin': {'d': 2, 'bounds': [(-5,10),(0,15)], 'func': branin_fn, 'sim': False}, 'hartmann6': {'d': 6, 'bounds': [(0,1)]*6, 'func': hartmann6_fn, 'sim': False}, 'openfoam_cavity': {'d': 4, 'bounds': [(100,5000),(20,80),(0.1,1.0),(0.1,1.0)], 'func': openfoam_wrapper, 'sim': True, 'cost_min': 900}, 'fenics_beam': {'d': 5, 'bounds': [(0.5,2.0),(0.05,0.2),(70e9,210e9),(1e3,50e3),(0.25,0.45)], 'func': fenics_wrapper, 'sim': True, 'cost_min': 480}, } ALGORITHMS = ['lhs_baseline', 'ei_bo', 'lola_voronoi', 'flola_voronoi'] SURROGATES = ['gp', 'mlp'] N_TRIALS = 10 N_INIT = 10 N_MAX = 500 EPSILON_FRAC = 0.05 # 5% of output range # ---- SIMULATION WRAPPERS ---- def openfoam_wrapper(x: np.ndarray) -> float: """ x: [Re, mesh_size, inlet_u, inlet_v] Returns: L2 norm of velocity field (scalar QoI) Calls PyFOAM to modify blockMeshDict, run icoFoam, extract postProcessing data """ Re, mesh, u_in, v_in = x config = write_openfoam_config(Re=Re, mesh=int(mesh), u=(u_in, v_in)) result = run_openfoam(config, timeout=1200) # 20 min timeout if result.converged: return extract_velocity_norm(result.path) else: raise SimulationError(f"OpenFOAM non-convergence at x={x}") def fenics_wrapper(x: np.ndarray) -> float: """ x: [length, width, E, load, nu] Returns: max deflection (m) """ L, W, E, F, nu = x mesh = create_beam_mesh(L, W) u = solve_elasticity(mesh, E=E, nu=nu, load=F) return float(u.vector().max()) # ---- SURROGATE TRAINING ---- def train_surrogate(X: np.ndarray, y: np.ndarray, stype: str): if stype == 'gp': from gpytorch.kernels import MaternKernel, ScaleKernel model = SingleTaskGP(torch.tensor(X), torch.tensor(y).unsqueeze(-1)) mll = ExactMarginalLogLikelihood(model.likelihood, model) fit_gpytorch_mll(mll) return model elif stype == 'mlp': from sklearn.neural_network import MLPRegressor model = MLPRegressor(hidden_layer_sizes=(64,128,64), activation='relu', max_iter=2000, random_state=42) model.fit(X, y) return model def evaluate_surrogate(model, X_test: np.ndarray, y_test: np.ndarray, stype: str, y_range: float) -> float: if stype == 'gp': with torch.no_grad(): pred = model(torch.tensor(X_test)).mean.numpy() else: pred = model.predict(X_test) rmse = np.sqrt(np.mean((pred - y_test)**2)) return rmse / y_range # normalized RMSE # ---- ADAPTIVE SAMPLING LOOPS ---- def run_ei_bo(benchmark: dict, surrogate_type: str, trial: int) -> dict: """Bayesian Optimization with Expected Improvement""" bounds = torch.tensor(benchmark['bounds']).T.float() X = lhs_init(benchmark['d'], N_INIT, benchmark['bounds']) y = np.array([benchmark['func'](x) for x in X]) results = {'N': [], 'rmse': [], 'overhead_frac': []} for n in range(N_INIT, N_MAX): t0 = time.time() model = train_surrogate(X, y, 'gp') # GP always for acquisition best_f = torch.tensor(y.min()) EI = ExpectedImprovement(model, best_f=best_f) x_new, _ = optimize_acqf(EI, bounds=bounds, q=1, num_restarts=10, raw_samples=512) t_overhead = time.time() - t0 t_sim = time.time() y_new = benchmark['func'](x_new.numpy().flatten()) t_sim_elapsed = time.time() - t_sim X = np.vstack([X, x_new.numpy()]) y = np.append(y, y_new) surrogate = train_surrogate(X, y, surrogate_type) rmse_norm = evaluate_surrogate(surrogate, X_test, y_test, surrogate_type, y_range) results['N'].append(n+1) results['rmse'].append(rmse_norm) results['overhead_frac'].append(t_overhead / (t_overhead + t_sim_elapsed)) if rmse_norm <= EPSILON_FRAC: results['N_star'] = n + 1 break return results def run_lola_voronoi(benchmark: dict, surrogate_type: str, trial: int) -> dict: """LOLA-Voronoi sequential space-filling (via SMT)""" from smt.sampling_methods import LolaVoronoi sampling = LolaVoronoi(xlimits=np.array(benchmark['bounds'])) X = sampling(N_INIT) y = np.array([benchmark['func'](x) for x in X]) results = {'N': [], 'rmse': [], 'overhead_frac': []} for n in range(N_INIT, N_MAX): t0 = time.time() sampling.update(X, y) x_new = sampling(1) t_overhead = time.time() - t0 t_sim = time.time() y_new = benchmark['func'](x_new.flatten()) t_sim_elapsed = time.time() - t_sim X = np.vstack([X, x_new]) y = np.append(y, y_new) surrogate = train_surrogate(X, y, surrogate_type) rmse_norm = evaluate_surrogate(surrogate, X_test, y_test, surrogate_type, y_range) results['N'].append(n+1) results['rmse'].append(rmse_norm) results['overhead_frac'].append(t_overhead / (t_overhead + t_sim_elapsed)) if rmse_norm <= EPSILON_FRAC: results['N_star'] = n + 1 break return results # ---- MAIN EXPERIMENT LOOP ---- def run_full_experiment(): all_results = {} for bname, benchmark in BENCHMARKS.items(): # Generate held-out test grid X_test, y_test = generate_test_grid(benchmark, N=500 if not benchmark['sim'] else 200) y_range = y_test.max() - y_test.min() for algo in ALGORITHMS: for stype in SURROGATES: trial_results = [] for trial in range(N_TRIALS): np.random.seed(trial * 42) if algo == 'lhs_baseline': res = run_lhs_baseline(benchmark, stype, trial) elif algo == 'ei_bo': res = run_ei_bo(benchmark, stype, trial) elif algo == 'lola_voronoi': res = run_lola_voronoi(benchmark, stype, trial) elif algo == 'flola_voronoi': res = run_flola_voronoi(benchmark, stype, trial) trial_results.append(res) key = f"{bname}_{algo}_{stype}" all_results[key] = aggregate_trial_results(trial_results) # Statistical analysis efficiency_ratios = compute_efficiency_ratios(all_results) p_values = run_wilcoxon_tests(all_results, correction='bonferroni') overhead_stats = compute_overhead_stats(all_results) # Save results with h5py.File('evp_results.h5', 'w') as f: save_results_hdf5(f, all_results, efficiency_ratios, p_values) generate_figures(efficiency_ratios, p_values, overhead_stats) return all_results, efficiency_ratios, p_values # ---- ABORT CHECKPOINT LOGIC ---- def check_abort_conditions(results_so_far: dict, checkpoint_n: int) -> bool: """Called after each benchmark completes""" if checkpoint_n >= 2: # After first 2 benchmarks mean_R = np.mean([r.get('efficiency_ratio', 1.0) for r in results_so_far.values()]) if mean_R < 0.95: print(f"ABORT: Mean efficiency ratio {mean_R:.3f} < 0.95 after {checkpoint_n} benchmarks") return True convergence_failures = sum(1 for r in results_so_far.values() if r.get('sim_failure_rate', 0) > 0.20) if convergence_failures > 0: print(f"ABORT: Simulation failure rate > 20% in {convergence_failures} conditions") return True return False if __name__ == '__main__': results, ratios, pvals = run_full_experiment() print_summary_table(ratios, pvals)
CHECKPOINT 1 — POST-SETUP VALIDATION (Day 3, before any simulation runs): Condition: OpenFOAM Re=1000 cavity benchmark deviates > 5% from Ghia et al. (1982) reference velocity profile, OR FEniCS beam deflection deviates > 2% from Euler-Bernoulli analytical solution. Action: ABORT simulation benchmarks (B3, B4); continue with analytical benchmarks only (B1, B2). Revise scope and cost estimates downward by 40%.
CHECKPOINT 2 — POST-BASELINE (Day 13, after LHS baseline complete): Condition A: LHS baseline RMSE at N=200 exceeds 20% of output range for any benchmark — response surface too complex for any surrogate at this budget. Condition B: GP fitting time at N=200 exceeds 60 seconds on available hardware — GP scaling will violate overhead budget. Action A: Increase N_MAX to 1000 and re-evaluate cost/timeline (+$400, +5 days), OR replace that benchmark with a smoother alternative. Action B: Switch to sparse GP (GPyTorch SparseGP, M=50 inducing points) for all GP-based methods before proceeding.
CHECKPOINT 3 — EARLY ADAPTIVE RESULTS (Day 22, after 50% of adaptive runs complete): Condition: Mean efficiency ratio R < 1.05 across all completed (benchmark, algorithm) pairs, with no single pair showing R > 1.20. Action: ABORT remaining adaptive runs. Conduct post-hoc analysis to identify whether failure is due to (a) smooth response surfaces where LHS is near-optimal, (b) overhead dominance, or (c) fundamental algorithm mismatch. Publish negative result with diagnostic analysis.
CHECKPOINT 4 — SIMULATION FAILURE RATE (Rolling, Days 18–25): Condition: Simulation non-convergence rate exceeds 20% in any 50-run window for B3 or B4 under adaptive sampling. Action: Immediately restrict adaptive algorithm parameter proposals to a conservative subspace (exclude Re > 3000 for OpenFOAM; exclude E > 180 GPa + load > 40 kN combinations for FEniCS). If failure rate remains > 15% after restriction, abort real simulation benchmarks and complete study on analytical benchmarks only.
CHECKPOINT 5 — OVERHEAD BUDGET (Day 25, after first complete adaptive runs on B3/B4): Condition: Adaptive selection overhead (acquisition optimization + GP fitting) exceeds 20% of simulation wall-clock time for any algorithm on B3 or B4. Action: For EI-BO, reduce num_restarts from 10 to 3 and raw_samples from 512 to 128. For LOLA/FLOLA, profile SMT internals and apply caching. If overhead remains > 15% after optimization, flag as a known limitation but do not abort — report overhead-adjusted efficiency ratio as secondary metric.
CHECKPOINT 6 — STATISTICAL POWER (Day 28, after statistical analysis): Condition: Bonferroni-corrected p-values > 0.10 for all 12 (algorithm × benchmark) comparisons, AND effect sizes (Cohen's d) < 0.3 for all comparisons. Action: Do not claim statistical validation of the hypothesis. Report as "insufficient evidence" with power analysis indicating required N_trials for future definitive test (estimated N_trials ≥ 25 based on observed effect sizes). Publish as preliminary/negative result.