Add runnable tensegrity simulation demos (MuJoCo, PyBullet, PyChrono, Newton, DiffPD, PolyFEM+IPC) + 3D animated renders + Edison survey + regime-aware sweeps + PLA/TPU 85A printable-design model + BO integration bridge + PR #35 Sobol T3-prism sweep ac...#33
Add runnable tensegrity simulation demos (MuJoCo, PyBullet, PyChrono, Newton, DiffPD, PolyFEM+IPC) + 3D animated renders + Edison survey + regime-aware sweeps + PLA/TPU 85A printable-design model + BO integration bridge + PR #35 Sobol T3-prism sweep ac...#33sgbaird-alt with Copilot wants to merge 47 commits into
Conversation
… + Edison query Agent-Logs-Url: https://github.com/vertical-cloud-lab/tensegrity-optimization/sessions/2649cfd6-d22c-4009-8914-ceb38bbaace5 Co-authored-by: sgbaird-alt <71569943+sgbaird-alt@users.noreply.github.com>
|
@copilot fetch edison results. Extensively consider #28 and #18 in terms of the choices of simulations and parameters (e.g., forces/loads/timescales/etc.). This doesn't preclude other applications like the ones mentioned in #14 and #16 ; provide recommendations and try things out from both regimes. Re-run additional simulations based on this. Embed visualizations from those simulations directly in your comment reply. |
|
@copilot consider also the fact that we might be using PETG struts + TPU "strings" as a tensegrity-like structure, and how we might best design and model that in a way that helps us mimic a true tensegrity structure if were to make one manually. |
…) and commit Edison survey Agent-Logs-Url: https://github.com/vertical-cloud-lab/tensegrity-optimization/sessions/bfc9f985-512f-4973-b7a2-c04715c29984 Co-authored-by: sgbaird-alt <71569943+sgbaird-alt@users.noreply.github.com>
Edison I encoded the two application regimes in
Crutch-tip regime (#18) — payload accel / vertical velocity / tendon strain energy vs. time, then a stiffness sweep: NASA lander / CubeSat regime (#14, #16) — same plots:
NASA-lander 100 g / 8 ms comfortably clears the GEVS 1500 g target; crutch 16 g is ~2× the 8 g HAVS target. The most actionable finding from the sweeps is empirical confirmation of Edison's Rec C limitation: peak g is flat (±2 %) across three decades of cable stiffness because in a rigid-strut model the impulse is set by floor contact, not the cable network — but SEA varies ~10×. That motivates moving to Edison Rec B (DiffPD) before doing real crutch-design BO; I've left that as a follow-up checklist item rather than dragging this PR into a second engine. (commit |
…ty check + sweep Agent-Logs-Url: https://github.com/vertical-cloud-lab/tensegrity-optimization/sessions/5fd99ac2-a7b5-4c68-a270-04d6729513ec Co-authored-by: sgbaird-alt <71569943+sgbaird-alt@users.noreply.github.com>
Agent-Logs-Url: https://github.com/vertical-cloud-lab/tensegrity-optimization/sessions/5fd99ac2-a7b5-4c68-a270-04d6729513ec Co-authored-by: sgbaird-alt <71569943+sgbaird-alt@users.noreply.github.com>
Added a PETG strut + TPU 95A printable-design module that replaces the abstract cable stiffness
Pareto clouds (peak vs SEA, marker colour = tendon Ø, marker size ∝ prestrain, red dashed = regime peak target):
The CSV outputs include the class-1 flag column so a future BO loop can filter out non-tensegrity designs without re-running the geometry check. Two earlier comments from the code reviewer were minor nits; I addressed the meaningful one ( |
|
@copilot btw it's TPU 85A that we're using. Attempt running DiffPD and PolyFEM+IPC |
…n load path Agent-Logs-Url: https://github.com/vertical-cloud-lab/tensegrity-optimization/sessions/53efdd39-435f-4f15-aafe-42c11eeb89f4 Co-authored-by: sgbaird-yolo <235173974+sgbaird-yolo@users.noreply.github.com>
Done both. TPU 85A propagated through DiffPD / PolyFEM+IPC attempts:
Versus the rigid-strut MuJoCo/PyBullet/PyChrono runs where peak g was floor-pinned flat ±2 % across three decades of cable stiffness, here peak g responds monotonically to TPU-85A tendon Ø — the BO objective is no longer degenerate. Absolute values are still high (the soft 12 MPa tendons let the payload free-fall deep before the suspension snaps taut, giving a rope-snap profile); two follow-ups left in the README are (i) add prestrain so suspension is taut at rest, (ii) replace the all-particle struts with rigid bodies via |
Carried on by acting on Edison
I also narrowed the matching over-claims in |
Done in I ran 3 seeds (the already-printed PR #35 T3 cells) + 40 closed-loop trials per regime (crutch + lander, 86 simulated evals):
The optimizer behaves exactly as the Tier-C physics predicts: Honest caveats carried over from the Sobol sweep + Edison Run with |
|
@copilot the plotting of both crutch and lander on the same graphs is confusing because of the scale differences. Separate these out. Generate individual plots for each seed. Also, add stdDev bands where applicable for the average behavior plots. Repeat this for each of the tier methods so we can get a better idea of what the optimization behavior is like. Also, create LOO-CV plots for each seed and model. Ax has a built in method for creating these plots. I want to see if there is predictive signal it's learning from. |
Done in
Tier-C crutch — mean running-best ±1σ band (3 seeds): Tier-B (Newton) lander — single-objective LOO-CV (Tier-C crutch, seed 0) — predictive signal, observed vs CV-predicted with ±1σ bars + y=x: Run with |
|
@copilot send all of these figures/data to Edison analysis for mock reviewer feedback and analysis of where signal is or isn't and provide recommendations on what this means for incorporating contextual information into the Bayesian optimization campaign. Fetch this session. Report back findings. Implement any follow-up recommendations |
…obust peak + range-normalized CV diagnostics
|
@copilot seems like maybe you timed out |
…ed CV diagnostics (Edison 491f90ae)
… cv_summary file scope)
The previous session did finish the Edison round but timed out before reporting back — the work landed in Sent to Edison ANALYSIS, fetched, committed. Task Where Edison found signal vs not:
Where it pushed back (all addressed):
Core recommendation for incorporating context: stop running fully-separate per-(tier,regime) loops; move to a contextual, cost-aware, discrepancy-aware multi-fidelity BO — regime + fidelity as task/context, physical regime descriptors (mass, velocity, energy) and physics features (strut This last commit only re-syncs |
|
@copilot each simulation is so cheap that I'm not sure it's even worth doing a cost-aware, multi-fidelity approach. Nevertheless, go ahead and run whatever you'd like in a full scenario. Do your best to find the actual Pareto front within the problem space you've been given. I want to see renders of these Pareto front best ones as well as some renders of the worst performing ones and a few mediocre ones. Maybe call outs with images to an actual Pareto front graph. Or however you'd like to present that |
Done in Each Pareto-best / worst / mediocre pick is rendered as a 3-D MuJoCo still (strain-coloured tendons) and dropped onto the Headline best vs worst drop animations (crutch):
What the front says
Honest caveats (kept in the writeup)
Full artifacts under |
|
Not sure to what extent any of these are "fair" tasks. I.e., primarily in terms of mass, volume, and contact area. @copilot suggest ways to make these evaluations for the different objectives fair, especially for the lander problem. I.e., what are the actual design constraints for a scaled up lander module? How would those be relaxed in the campaign here? Would we normalize the objectives ad-hoc or change the way the search space is represented so that certain constraints are always met? E.g., constant mass, fixed contact area, volume, etc. Send to Edison for mock feedback on the thinking |
You're right that the current tasks aren't fair. Wrote up the thinking in The core problem (quantified): every corner of the PR #35 box is a different-sized object. Sweeping it gives 6.2× cell mass (9.5→59 g), 4.7× envelope volume (118→553 cm³), and 4.0× strut-tip footprint (85→339 mm²). So "fat/short/large-radius wins on SEA" is partly a tautology — those cells just have more material/volume/contact area. Of the three objectives only Real scaled-up lander constraints: hard absorber mass budget (~2–5 % of landed mass → ~100–250 g for the 5 kg regime), stowed/deployed envelope volume, footprint/ground-pressure (= base reaction ÷ footprint, a cap and a floor for stability/regolith), and crush stroke (physics floor Two routes (recommend the hybrid):
Edison's verdict (task This is scoped as the analysis + mock review you asked for; the constant-mass-manifold re-parameterization and constrained-qNEHVI wiring are listed as the prioritized follow-on changes. |
|
@copilot by hybrid, do you mean implement two separate campaigns or do you mean incorporate both into the same campaign? |
Same campaign — not two separate ones. The "hybrid" combines Route A and Route B inside one
So the structure stays one-campaign-per-regime, exactly like
Correction: the commit is |
|
@copilot update the BO script(s) based on completing the hybrid approach. Refer to honegumi docs as needed (via context7 if you prefer) |




















simulations/tprism_mesh.py): 3 PLA struts + 9 TPU 85A tendons fused via gmsh OCC fragmentsimulations/polyfem_drop.py --geometry tprismJSON builder + CLI dispatchsolref="0.002 1",solimp="0.98 0.999 0.0001")printable_design.pyprimaryPLAMaterial withPETGkept as a backward-compat alias;tprism_mesh.pyphysical-volume group renamedPETG_strut→PLA_strut;polyfem_drop.pyNeoHookean kwargs renamed*_petg*→*_pla*with PLA defaults E=3.5 GPa, ν=0.36, ρ=1240; updates innewton_drop.py,printable_sweep.py,render_regimes.py,regimes.py,simulations/README.md)LITERATURE_HIGHtask78fb09a2modeling-feedback contacts brief committed atedison-trajectories/modeling-feedback-contacts/(6dae17f)simulations/validation_experiments.md: 10-row bench-test table mapping each Instron/drop-tower experiment to a specific simulation output, plus a 3-test minimum-viable validation budget for the T3 prints we already have (Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35)simulations/bo_integration.md+simulations/bo_evaluator.py: drop-in replacement for PR Scaffold Bayesian-optimization script with honegumi + customized tensegrity campaign #30simulate_specimenthat maps Ax parameterization →PrintableDesign→ overriddenRegime→run_regimes.simulate(...)→{F_peak_N, SEA_J_per_g, eta}; forward-compatiblefidelity={"C","B","A"}signature for the three-tier ladder (MuJoCo / Newton / PolyFEM+IPC) from Edison sim survey 782657e0bo_evaluator._t3_seed_designs()returns the three PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 T3-prism prints (scale 1.0× / 1.5× / soft-tendon variant) as Ax-compatible dicts so the BO loop's first batch reflects parts already on the bench; other PR Scaffold Bayesian-optimization script with honegumi + customized tensegrity campaign #30 topologies (truncated-octa, simplex-4-strut, stacked-prism) emit a warning and fall back to T3 physics until the generic mesher lands.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 BO integration, and Edison analysis querysimulations/benchmark_costs.py: empirically measure tier-C CPU cost — ~0.1 s raw / ~0.2 s with CFC-180 filtering per design on an AMD EPYC 7763 (1 core, MuJoCo 3.9); cost table for all three tiers documented inbo_integration.mdbo_evaluator.pynow reads the PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 schema directly (R_mm,H_mm,twist_deg,strut_d_mm,cable_d_mm) vianormalize_parameterization(), withevaluate_batch_csv()+ CLI to score a wholet3-prism-bo-batch.csvso those trials can be attached to Ax instead of discarded;_t3_seed_designs()re-expressed in the geometrically-accurate PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 mm schema.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 equilibrium twist (60°,B_i→T_i) maps to the sim (tprism_geometry150°,STRUTS=[(0,4),(1,5),(2,3)]) viasim_twist = scad_twist + 120°; without it every PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 design was falsely flagged class-2 and penalized_cfc_filter, pure-NumPy 4-pole phaseless Butterworth) applied to the simulated axial acceleration before extractingF_peak/eta, so the tier-C objective lives in the same processed space as the drop-tower accelerometer pipeline (PR Analyze drop-tower accelerometer "tuning" data (issue #71) #74) and simulated + measured rows can attach to one Ax/BoTorch model; opt-out viacfc180=False/--raw-peakbo_integration.md: cost table, PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 axis mapping, twist-convention note, CFC-180 parity, and what the sims give the BO that the printer/drop-tower cannot cheaplyANALYSIStask4e74f66c(statussuccess) submitted viascripts/edison/submit_simulation_bo_value.pywith the PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 BO script, the sim→BO bridge, the tier-C simulator, and the manuscript draft uploaded; full answer committed atedison-trajectories/simulation-bo-value/(recommends CFC-180 parity, closing the loop on PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35, multi-fidelity co-kriging GP, and qNEHVI one-campaign-per-regime with HAVS/GEVS outcome constraints)## Multi-task treatment of the regimessection insimulations/bo_integration.mdrecommends a multi-task GP (MTBO) that carries the regime as a task and shares information across the crutch/lander campaigns (replacing the prior one-campaign-per-regime suggestion), with the AxSpecified_Task_ST_MTGP_trans/BOTORCH_MODULARwiring from the Honegumi multitask tutorial, the mean-collapse caveat from the Honegumi concept page, a note that fidelity (C/B/A) generalizes as a second task axis, and updated open-questionssimulations/outputs/mujoco_drop(37.2 g),mujoco_sweep,run_regimes(crutch k*=5798/16.3 g, lander k*=400/103.9 g),printable_sweep,benchmark_costs(~107 ms/design on this runner's AMD EPYC 9V74)render_spotchecks,render_mujoco_drop,render_regimessimulations/outputs_bundle.zip(11 MB, < 100 MB so no split needed) archiving the fullsimulations/outputs/set.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 T3-prism Sobol variations through the simulators and analyse the resultssimulations/sobol_t3_campaign.py: draws an N-point Sobol set over the exact PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 design box (R_mm∈[25,40],H_mm∈[60,110],twist_deg∈[40,80],strut_d_mm∈[6,12],cable_d_mm∈[3.0,5.5]) viascipy.stats.qmc.Sobol(Ax is not installed in the sim env) and scores itoutputs/sobol_t3_tierC.csvoutputs/sobol_t3_tierB.csvoutputs/sobol_t3_*.pngsimulations/sobol_t3_analysis.mdinterpretation: F_peak is near-invariant at Tier-C (SEA/eta are the discriminating objectives);strut_d_mmandH_mmdominate the Tier-C sensitivity whiletwist_degreads ≈0 because the Tier-C regime override does not consume the twist axis (it surfaces only at Tier-B/A); the whole PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 box is printable; CSVs are ready toattach_trialto Ax as a cheap simulated priorsimulations/README.mdscipy.stats.qmc.Sobol(Ax not required, per the comment)sobol_t3_campaign.py(run_tier_a+_tier_a_onemultiprocessing worker, 2 concurrent processes) — welded PLA/TPU T-prism drops on an 8-design subset; mesh resolution scaled with cross-section (lc_strut/lc_tendon) to hold tet count ~6k; meshes written outsiderun_drop'swork_dir(which it wipes on entry)--param-jsonbridge); added parameterizedrun_param()topybullet_drop.pyandpychrono_drop.py(+--param-jsonstdin/stdout CLI for the conda interpreter)analyse()with an engine-ladder Spearman comparison (sobol_t3_engine_ladder.png) and a Tier-A figure (sobol_t3_tierA.png); rewrote the cross-fidelity report section as a C→B→A ladder; new CLI args--n-tiera,--n-pybullet,--n-pychrono,--tiera-workerssobol_t3_tierA.csv,sobol_t3_pybullet.csv,sobol_t3_pychrono.csv,sobol_t3_tierA.png,sobol_t3_engine_ladder.png), refreshedsobol_t3_analysis.md, README, andoutputs_bundle.zip(11.8 MB)simulations/sobol_t3_violins.py: reads the existingoutputs/sobol_t3_*.csvcampaign measurements and rendersplotly.express.violin(..., points="all", box=True)with non-zerojitterso every raw measurement is drawn as a jittered swarm beside each violin (PNG via kaleido + interactive HTML)outputs/sobol_t3_violin_objectives.{png,html}— Tier-C MuJoCo objectives (F_peak,SEA,eta), one violin per regime, faceted with independent y-axes (512 feasible designs)outputs/sobol_t3_violin_engines.{png,html}— per-engine peak deceleration (g) across the C→B→A ladder (PyBullet/PyChrono/Newton/PolyFEM) on a log y-axissimulations/README.md,sobol_t3_analysis.md, and the campaign Files list; refreshedoutputs_bundle.zipscripts/edison/submit_sobol_t3_results.py+scripts/edison/fetch_sobol_t3_results.py: bundle the campaign scripts (sobol_t3_campaign.py,sobol_t3_violins.py,bo_evaluator.py,run_regimes.py), the measured CSVs (sobol_t3_tierC/tierB/tierA/pybullet/pychrono.csv), the figures (Pareto / sensitivity / Tier-C-vs-Tier-B / engine-ladder / Tier-A / both violin plots), thesobol_t3_analysis.md+bo_integration.mdwrite-ups, and a project-context note as a single Edison data collection, submitANALYSIS, poll, and commit the answerANALYSIStaskff8faab3(statussuccess) committed atedison-trajectories/sobol-t3-results/— Edison re-analysed the CSVs directly and confirmed our reproducible numbers (Tier-CF_peaknear-invariant; SEA/eta discriminating; engine-ladder ρ PyChrono +0.70 / Newton +0.60 / PyBullet −0.02 / PolyFEM +0.43) while sharpening several claims we should revise: crutch Tier-CF_peakis essentially the static payload weight (ratio 1.002), Tier-CSEAis a conservative elastic-energy proxy (not true dissipation), PolyFEM peak-g is ~1 g flat (so Tier-A does not back the Tier-CF_peakladder), andstrut_d_mm's apparent leverage is largely a rigid-body mass/contact-geometry artifact (ρ=−0.976 vs anL·d²strut-mass proxy, sign flips by regime)F_peak, filtered/unfiltered peaks, constant-mass strut-diameter sweep, twist-injection plumbing audit at Tier-C/Tier-B) and a full multi-fidelity BO citation listff8faab3review recommended, in newsimulations/sobol_t3_diagnostics.py(run on 48 feasible PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 designs)mj_contactForce, the sensorized-platen observable): genuine ~104× static-weight transient for the lander while the crutch's large soft cell barely loads the floor in the 25 ms window, confirming the payload-accelF_peakis a support-load proxy not an impact peak →outputs/sobol_t3_diag_base_reaction.csvF_peakspan (~10%) is ~3× the filtered span (~3%), so the filter suppresses part of the design transient (the fix is the observable, not removing the filter) →outputs/sobol_t3_diag_cfc.csvstrut_deffect ~17×, confirming Edison'sL·d²inertia/contact confound; reported as effect-size (peak-g range) since Spearman stays ≈±1 on a monotonic sweep →outputs/sobol_t3_diag_constmass.csvregimes.Regimehas no twist field andrun_regimes.build_xmlnever passes it, so the twist≈0 Tier-C result is un-consumed plumbing not physical irrelevanceoutputs/sobol_t3_diagnostics.png+ write-upsimulations/sobol_t3_diagnostics.md; narrowed the matching over-claims insobol_t3_analysis.md(payload-accelF_peakrelabeled support-load proxy;strut_ddemoted from "dominant lever" to inertia confound; twist framed as plumbing); documented the script insimulations/README.md; refreshedoutputs_bundle.zip.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 but with simulations instead of real experimentssimulations/sim_bo_campaign.py: the simulation-only analogue of PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35's single Sobol hardware batch — AxAxClient(defaultSobol → BOTORCH_MODULARqNEHVI) proposes designs over the exact PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 box (R_mm∈[25,40],H_mm∈[60,110],twist_deg∈[40,80],strut_d_mm∈[6,12],cable_d_mm∈[3.0,5.5]); the Tier-C MuJoCo regime sim (bo_evaluator.evaluate_design, CFC-180 filtered) scores each on the three objectives (minimizeF_peak_N, maximizeSEA_J_per_g, maximizeeta); results feed straight back to the surrogate.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 T3 cells (bo_evaluator._t3_seed_designs()) and runs independent per-(regime) campaigns; running-bestSEAclimbs then plateaus (classic BO convergence), withF_peaknear-invariant (it is a Tier-C support-load proxy) soSEAis the live discriminator(tier, regime)pair so crutch and lander never share an axis (the prior shared plots were unreadable given their ~6× objective-scale gap)outputs/sim_bo_<tier>_<regime>_seed<k>_{convergence,pareto,cv}.pngoutputs/sim_bo_<tier>_<regime>_convergence.pngplots the mean running-best with a ±1σ band across seeds (faint per-seed traces behind it)simulations/sim_bo_campaign.pyinto a tier/seed-parameterized closed-loop driver (--tiers C B,--seeds,--n-iter,--regime,--raw-peak,--outdir): Tier-C MuJoCo runs the 3-objective qNEHVI loop while Tier-B Newton/Warp XPBD runs a single-objectiveF_peakloop (Newton only exposes the payload-accel trace). Headline cross-tier result: Tier-CF_peakis near-flat (support-load proxy) but Tier-BF_peakspans ~2.5× and the BO genuinely descends because the elastic tendons sit in the dynamic load pathoutputs/sim_bo_<tier>_<regime>_seed<k>_cv.pngvia Ax's built-incross_validate(refitGenerators.BOTORCH_MODULARadapter), showing strong predictive signal where it matters (Tier-C crutchSEAR²≈0.97/ρ≈0.96, Tier-BF_peakR²≈0.99); near-flat CV outcomes (e.g. Tier-C landereta) are pinned observables, not model failuressim_bo_{crutch,lander}.csv,sim_bo_{pareto,convergence}.png) with tier-named CSVs (sim_bo_<tier>_<regime>.csv+_pareto.csv) and the per-seed/aggregate figures; rewrotesimulations/sim_bo_campaign.md, updatedsimulations/README.md, and refreshedoutputs_bundle.zipscripts/edison/submit_sim_bo_review.py+scripts/edison/fetch_sim_bo_review.py: bundle the campaign driver (sim_bo_campaign.py), the sim→BO bridge (bo_evaluator.py), the per-(tier,regime) trial + Pareto CSVs, and the per-seed/aggregate convergence, Pareto, and LOO-CV figures, plussim_bo_campaign.md/bo_integration.mdand a project-context note, as a single Edison collection; submitANALYSIS, poll, and commit the answerANALYSIStask491f90ae(statussuccess) committed atedison-trajectories/sim-bo-review/— confirms real predictive signal on the discriminating outcomes (Tier-C crutchSEA, Tier-BF_peak) and that weak CV on near-constant outcomes (Tier-C landereta) is intrinsic, not model failure; flags Tier-B was regime-blind (matched crutch/landerF_peakratio 0.998), that the per-fidelity constraints don't align (Tier-C 100% feasible / Tier-B 0%), Tier-C lander BO proposal collapse, and recommends a contextual, cost-aware, discrepancy-aware multi-fidelity BO (regime + fidelity as task/context, physics features, Kennedy–O'Hagan / co-kriging fusion, peak-g as the constraint variable, constrained qNEHVI)simulations/sim_bo_campaign.py:_eval_tier_bnow seeds each Newton drop with the regime's own impact velocity (crutch 1.4 m/s, lander 9.8 m/s) vianewton_drop.build_model(impact_velocity_mps=…)and reads a robust start-up-gated peak (newton_drop.peak_decel_g), so crutch and lander are now physically distinct (e.g. ~1463 N vs ~564 N for the same seed design instead of the prior 0.998 ratio)nrmse = RMSE/(max−min)and a constant-meannull_skillbaseline) to every per-(tier,regime)outputs/sim_bo_<tier>_<regime>_cv_summary.csv, per Edison rec. B, so a highR²on a near-constant outcome is not mistaken for decision-useful signalsimulations/outputs/(CSVs + figures) and syncedsimulations/sim_bo_campaign.md(Tier-B narrative + numbers, LOO-CV table, Files list) to the new regime-distinct results, which the output refresh had made stale.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 box and render the best/worst/mediocre designs as callouts (sims are cheap enough that no cost-aware/multi-fidelity loop is needed)simulations/pareto_render_campaign.py: densely Sobol-maps 2048 designs per regime over the exact PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 box and scores each at Tier-C MuJoCo (bo_evaluator.evaluate_design, CFC-180 filtered) on the three objectives (minimizeF_peak_N, maximizeSEA_J_per_g, maximizeeta) at ~0.15 s/eval; takes the 3-objective non-dominated set as the empirical Pareto frontRegime), plus headline best/worst drop GIF/MP4 animations per regimeoutputs/pareto_<regime>_annotated.png: aSEA↔etaPareto scatter (colour = near-invariantF_peak) with the render stills dropped on as callout thumbnails + leader lines, and a clean 2-DSEA↔etafrontier staircase rather than the zig-zagging 3-objective setpareto_<regime>.csv(2048 rows +feasible/paretoflags), per-pick stillspareto_<regime>_render_<tag>.png,pareto_<regime>_{best,worst}_drop.{gif,mp4}, andpareto_summary.md; both regimes report the whole box printable,F_peakspan ~3–4 % (crutch 712–739 N, lander 4628–4790 N),SEA↔etathe live trade-off (best cells short/fat-strut/large-radius, worst tall/slender)F_peakis a support-load proxy (shown as colour),SEAis an elastic-energy proxy, andtwist_deg≈0 at Tier-C is un-consumed plumbing; write-upsimulations/pareto_render_campaign.md+README.mdentry; refreshedoutputs_bundle.zip(~25 MB)simulations/fair_evaluation_analysis.md: quantifies the size confound — across the PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 box the cell mass varies 6.2× (9.5→59 g), envelope volume 4.7× (118→553 cm³), and strut-tip footprint 4.0× (85→339 mm²), so designs are compared at very different sizes; onlySEA_J_per_gcontrols for mass, none control for volume/footprint, and the landerF_peakis a real ~94–98 g transient (only the crutchF_peakis a support-load proxy)s ≥ v²/2a_max ≈ 3.3 mm) and lays out two routes to fairness — (A) re-parameterize onto a constant-mass / scale-free shape-ratio manifold so budgets hold by construction, vs (B) keep the box but score intensive objectives (SEA_J_per_g+SEA_J_per_cm³, base-reaction peak-g, ground pressure) with mass/volume/footprint + peak-g as Ax outcome constraints under constrained qNEHVI — plus a recommended hybrid for the landerscripts/edison/submit_fair_evaluation.py+scripts/edison/fetch_fair_evaluation.py; README entryANALYSIStaske43abed6(statussuccess) committed atedison-trajectories/fair-evaluation/— endorses the diagnosis and the hybrid, independently reproduces the confound (~6.6× mass / 4.69× volume / 4.0× footprint), and sharpens the write-up: re-parameterization (constant-mass equality manifold + dimensionless Buckingham-π shape groups) is sounder than outcome constraints for the binding mass budget; don't hard-constrain a biased cheap observable (use Tier-C base reaction only for coarse screening, reserve peak-g acceptance for Tier-B/A/bench); report fronts at 2–3 fixed mass/envelope budgets; corrected the over-claim that landerF_peak≈ static load and reframed GEVS/HAVS as requirement proxies — all folded back intofair_evaluation_analysis.mdAxClientcampaign per regime (not two separate campaigns); added a clarifying paragraph under "Recommended hybrid" insimulations/fair_evaluation_analysis.md(cbcf27b)simulations/bo_evaluator.pywith the hybrid geometry/manifold machinery:cell_geometry_metrics()(cell mass / envelope volume / strut-tip footprint, all derived fromPrintableDesign.nodes— also fixes a pre-existing strut-length bug by usingdesign.strut_length_m);design_from_shape_ratios()— the Route A constant-mass manifold that builds a cell from four dimensionless ratios (H/R,H/strut_d,cable_d/strut_d,twist) and solves the single overall scale by closed-form cube root so cell mass equalsm*exactly; the inversedesign_to_shape_ratios(); andbase_reaction_peak_N()— the Route B base floor-reaction observable (sums vertical strut↔floor contact forces, optionally CFC-180 filtered)evaluate_printable_design(design, *, regime, fidelity, cfc180, base_reaction)(called byevaluate_design) and extended the return dict withcell_mass_g,envelope_cm3,footprint_mm2,SEA_J_per_cm3, and optionalF_base_peak_N; all existing keys (F_peak_N,SEA_J_per_g,eta) and behaviour preserved for backward compatibilitysimulations/sim_bo_hybrid_campaign.py: the fair closed-loop analogue ofsim_bo_campaign.py— oneAxClientconstrained-qNEHVI campaign per regime over the four scale-free shape ratios at a fixed cell massm*(Route A), scoring intensive objectives (impact F — base floor-reaction for the lander, payload-accelF_peakfor the crutch's large soft cell —,SEA_J_per_g,SEA_J_per_cm³,eta) under envelope-volume + strut-tip-footprint Ax outcome constraints (Route B; mass is structurally fixed so it is not a constraint); seeded with the three printed PR Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG.gcode.3mfslice + re-importable project.3mf(H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... #35 T3 cells projected onto the manifold; per-seed + mean±σ convergence, intensive-trade Pareto, constraint-feasibility, and LOO-CV figures; CLI--regime/--seeds/--n-iter/--mass-g/--envelope-max-cm3/--footprint-min-mm2/--footprint-max-mm2/--raw-peak/--outdirfair_evaluation_analysis.md§4 (steps 1–4 marked implemented, pointing at the new helpers/script) andsimulations/README.mdoutputs/artifact set and a dedicatedsimulations/sim_bo_hybrid_campaign.mdwrite-up (the 4-objective constrained-qNEHVI run is slow; the module docstring documents usage and the output files in the meantime), and re-run the dense Pareto render campaign on the constant-mass manifold (fair_evaluation_analysis.md§4 step 5)