auto: daily sync
This commit is contained in:
@@ -52,8 +52,8 @@ These directly control rib pattern shape and density. Every trial samples all 8.
|
||||
| `gamma_stress` | [0.0, 1.5] | Stress feedback gain — how much FEA stress adds density |
|
||||
| `R_0` | [10, 100] mm | Base influence radius — how far hole influence spreads |
|
||||
| `R_edge` | [5, 40] mm | Edge influence radius — depth of perimeter reinforcement band |
|
||||
| `s_min` | [8, 20] mm | Minimum triangle edge length → densest zone spacing |
|
||||
| `s_max` | [25, 60] mm | Maximum triangle edge length → sparsest zone spacing |
|
||||
| `s_min` | [15, 35] mm | Minimum triangle edge length → densest zone spacing (manufacturing floor: 15 mm) |
|
||||
| `s_max` | [40, 60] mm | Maximum triangle edge length → sparsest zone spacing (lower bound 40 guarantees s_min < s_max) |
|
||||
|
||||
**Total: 8 continuous variables.** Manageable for Optuna TPE; expect useful signal in 50–100 trials, convergence in 200–500.
|
||||
|
||||
@@ -67,9 +67,8 @@ They can be adjusted between campaigns if the process changes.
|
||||
| `t_min` | 2.5 mm | Minimum rib thickness: thinner ribs are not machinable and would break | CNC milling minimum land width |
|
||||
| `t_0` | 3.5 mm | Nominal rib thickness: baseline starting width before density scaling | Design intent |
|
||||
| `w_frame` | 5.0 mm | Perimeter frame width: solid band around the sandbox boundary | Edge seal, clamping, aesthetics |
|
||||
| `r_f` | 1.5 mm | Pocket fillet radius: corner radius on each pocket | = tool radius. Smaller → need smaller endmill |
|
||||
| `r_f` | 1.5 mm | Pocket fillet radius: corner radius on each pocket. **Sole pocket size filter.** | = tool radius. Smaller → need smaller endmill |
|
||||
| `d_keep` | 1.2× | Hole keepout multiplier: minimum clear distance = 1.2 × hole diameter | Prevents thin walls around bolt holes |
|
||||
| `min_pocket_radius` | 6.0 mm | Minimum inscribed radius of any pocket | Must fit the drill/endmill for pocket entry |
|
||||
| `min_triangle_area` | 25.0 mm² | Minimum pocketable triangle area | Below this: too small to machine → skip as solid |
|
||||
|
||||
> To change manufacturing constraints for a campaign, edit `MANUFACTURING_CONSTRAINTS` in
|
||||
@@ -204,8 +203,9 @@ All three were imported to NX using the update-in-place workflow (sketch preserv
|
||||
| Estimated iteration time | ~90–120 sec (NX mesh + Nastran + extract) |
|
||||
| Total runtime estimate | ~8–10 hours for 200 trials |
|
||||
|
||||
Stress feedback (`gamma_stress`) will be active from trial 1 if OP2 from the previous trial is available.
|
||||
For trial 1, the optimizer will sample `gamma_stress` but the stress field is loaded from the baseline OP2.
|
||||
In V1, `gamma_stress` is sampled by TPE but has no effect (no S_prev stress field available).
|
||||
In V2 (sequential seeding), S_prev is loaded from the globally best previous trial; `gamma_stress`
|
||||
then actively reshapes the density field toward high-stress zones. No extra FEA per trial.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -65,8 +65,8 @@ penalty = 1e4 × ((σ_max / σ_allow) − 1)² if σ_max > σ_allow
|
||||
| `gamma_stress` | 0.0 | 1.5 | — | FEA stress feedback gain |
|
||||
| `R_0` | 10 | 100 | mm | Base hole influence radius |
|
||||
| `R_edge` | 5 | 40 | mm | Edge influence radius |
|
||||
| `s_min` | 8 | 20 | mm | Min cell size (densest) |
|
||||
| `s_max` | 25 | 60 | mm | Max cell size (sparsest) |
|
||||
| `s_min` | 15 | 35 | mm | Min cell size (densest) — manufacturing floor: 15 mm |
|
||||
| `s_max` | 40 | 60 | mm | Max cell size (sparsest) — lower bound 40 guarantees s_min < s_max |
|
||||
|
||||
Fixed parameters (manufacturing constraints + math constants): see `optimization_engine/isogrid/study.py`.
|
||||
|
||||
|
||||
@@ -355,7 +355,18 @@ def make_objective(rm: TrialRetentionManager):
|
||||
|
||||
print(f" [Brain] Total pockets: {n_pockets_total}")
|
||||
|
||||
# ── 3b. Save per-trial figures (density, mesh, rib pattern) ──────────
|
||||
# ── 3b. Degenerate check — prune near-solid trials early ─────────────
|
||||
# If fewer than N_MIN_POCKETS are generated, the design is essentially a
|
||||
# solid plate (likely all triangles rejected by area/fillet filter).
|
||||
# Return a large penalty immediately — no point burning an NX license.
|
||||
N_MIN_POCKETS = 8
|
||||
if n_pockets_total < N_MIN_POCKETS:
|
||||
print(f" [Brain] Degenerate trial: only {n_pockets_total} pockets "
|
||||
f"(min={N_MIN_POCKETS}) — pruning before NX")
|
||||
trial.set_user_attr("error", f"degenerate:{n_pockets_total}_pockets")
|
||||
return 1e6
|
||||
|
||||
# ── 3d. Save per-trial figures (density, mesh, rib pattern) ──────────
|
||||
t_fig = time.time()
|
||||
n_figs = len(plot_trial_figures(sb_data, trial_dir))
|
||||
print(f" [Plot] {n_figs} figures → trial_{trial_number:04d}/ ({time.time()-t_fig:.1f}s)")
|
||||
|
||||
Reference in New Issue
Block a user