auto: daily sync

This commit is contained in:
2026-02-10 08:00:17 +00:00
parent 857c01e7ca
commit 3ab1cad4e1
26 changed files with 1874 additions and 742 deletions

View File

@@ -1,326 +1,326 @@
# Technical Breakdown — Hydrotech Beam Structural Optimization
**Project:** Hydrotech Beam
**Protocol:** OP_10 (Project Intake), Step 2 — Technical Breakdown
**Author:** Technical Lead 🔧
**Date:** 2025-02-09
**Status:** Ready for review
---
## 1. Geometry Description & Structural Behavior
### 1.1 Structural Configuration
The component is a **sandwich I-beam** serving as the primary load-bearing member in a test fixture assembly. Key geometric features:
- **Cross-section:** Sandwich construction — a core layer flanked by face sheets on top and bottom flanges
- **Web:** Contains a pattern of **lightening holes** (circular cutouts) to reduce mass
- **Loading:** Static structural — likely a cantilever or simply-supported configuration with transverse loading (evidenced by "tip displacement" as a key output)
- **Material:** Steel (AISI) — conservatively strong for this application, which is consistent with the "overbuilt" assessment
### 1.2 Structural Behavior Analysis
The beam behaves as a **bending-dominated structure**. Key physics:
| Behavior | Governing Parameters | Notes |
|----------|---------------------|-------|
| **Bending stiffness (EI)** | Face thickness, core thickness | Sandwich theory: faces carry bending stress, core carries shear. Stiffness scales roughly with the square of the distance from the neutral axis |
| **Mass** | All four variables | Core thickness and face thickness add material directly; holes remove material from the web |
| **Stress concentrations** | Hole diameter, hole spacing | Larger holes → higher stress concentration factors at hole edges. Closely spaced holes can have interacting stress fields |
| **Shear capacity** | Core thickness, hole count, hole diameter | Web lightening holes reduce shear area. More holes or larger holes = less shear-carrying web |
| **Local buckling** | Face thickness, hole geometry | Thin faces or large unsupported spans between holes may introduce local instability, though at steel gauges this is less likely |
### 1.3 Baseline Assessment
The current design (~974 kg, ~22 mm tip displacement) is **significantly overbuilt** in mass but **under-stiff** relative to the 10 mm displacement target. This is an important observation:
> ⚠️ **The baseline FAILS the displacement constraint.** Tip displacement is 22 mm vs. a 10 mm limit. This means the optimizer must simultaneously **increase stiffness (reduce displacement by >50%)** while **reducing mass**. These objectives are naturally conflicting — stiffer generally means heavier.
This will drive the optimizer toward a specific region: **thicker faces** (increased bending stiffness) but **thinner core** and/or **more/larger holes** (reduced mass). The feasible region may be narrow.
---
## 2. Design Variable Assessment
### 2.1 Individual Variable Analysis
| Variable | ID | Range | Type | Sensitivity Expectation | Primary Effect |
|----------|----|-------|------|------------------------|----------------|
| `beam_half_core_thickness` | DV1 | 1040 mm | Continuous | **High** on mass, **Medium** on stiffness | Increases distance between face sheets → stiffness scales ~quadratically. Also adds core mass. |
| `beam_face_thickness` | DV2 | 1040 mm | Continuous | **High** on both mass and stiffness | Thicker faces = more bending stiffness AND more mass. Key trade-off variable. |
| `holes_diameter` | DV3 | 150450 mm | Continuous | **High** on mass, **High** on stress | Larger holes remove more web material (mass ∝ d²). But stress concentrations scale with hole size. |
| `hole_count` | DV4 | 515 | **Integer** | **Medium** on mass, **Medium** on stress | More holes = less web mass, but also less shear-carrying area and potential hole interaction effects |
### 2.2 Interaction Effects (Expected)
These variables are **not independent** — significant interactions are expected:
1. **DV1 × DV2 (core × face):** Classic sandwich interaction. Optimal bending stiffness comes from balancing core depth (lever arm) vs. face material (bending resistance). Increasing core thickness makes face thickness more effective for stiffness.
2. **DV3 × DV4 (hole diameter × hole count):** Strong interaction. Both control how much web material is removed. Large holes + many holes could create a web that's more hole than steel — stress will spike. There may be a **feasibility boundary** where the holes start to overlap or leave insufficient ligament width between them.
3. **DV2 × DV3 (face × hole diameter):** Stress at hole edges depends on the overall stress field, which is influenced by face sheet proportioning. Thicker faces reduce nominal stress → allowing larger holes.
4. **DV1 × DV3 (core × hole diameter):** Core thickness determines beam depth → determines web height → constrains maximum feasible hole diameter. If `holes_diameter` can approach the web height, we need a geometric feasibility check.
### 2.3 Discrete Variable Handling — `hole_count`
`hole_count` is an **integer variable** (515, 11 levels). Options:
| Approach | Pros | Cons |
|----------|------|------|
| **Treat as continuous, round at end** | Simple, works with any algorithm | Rounding may violate constraints; NX may not accept non-integer |
| **Treat as truly integer** | Correct physics per evaluation | Limits algorithm choices; some optimizers handle poorly |
| **Relaxed continuous + periodic integer check** | Best of both worlds | More complex implementation |
**Recommendation:** Treat `hole_count` as **integer throughout**. With only 11 levels and NX-in-the-loop (where the model must be rebuilt with integer hole count), there's no benefit to continuous relaxation. The algorithms recommended below (CMA-ES, TPE) both handle mixed integer/continuous natively.
---
## 3. Objective Formulation
### 3.1 Single-Objective vs. Multi-Objective
The handoff mentions three goals: minimize mass, minimize displacement, keep stress safe. Let's decompose:
| Goal | Type | Rationale |
|------|------|-----------|
| Minimize mass | **Primary objective** | Antoine's explicit priority |
| Tip displacement < 10 mm | **Constraint** | Hard limit, not a competing objective |
| Von Mises stress < 130 MPa | **Constraint** | Hard limit (safety) |
**Recommendation: Single-objective optimization.**
$$\min_{x} \quad f(x) = \text{mass}(x)$$
$$\text{s.t.} \quad g_1(x) = \delta_{\text{tip}}(x) \leq 10 \text{ mm}$$
$$\quad\quad g_2(x) = \sigma_{\text{VM,max}}(x) \leq 130 \text{ MPa}$$
Rationale:
- Mass is the clear primary objective
- Displacement and stress are hard constraints, not competing objectives to trade off
- Single-objective is simpler, converges faster, and is appropriate for 4 design variables
- If Antoine later wants to explore the Pareto front (mass vs. displacement), we can reformulate
### 3.2 Constraint Margins
Given that the baseline **already violates** the displacement constraint, we should consider:
- Running the optimizer **without constraint penalties initially** to map the landscape
- Using a **penalty-based** approach with gradually increasing penalty weight
- Or using **feasibility-first** ranking (preferred for population-based methods)
**Recommendation:** Use a constraint-handling approach where feasible solutions always rank above infeasible ones (Deb's feasibility rules), with infeasible solutions ranked by constraint violation magnitude.
---
## 4. Constraint Formulation — Extraction from NX
### 4.1 Mass (Objective)
- **Source:** NX expression `p173`
- **Extraction:** Read directly from the NX expression system after model update
- **Units:** kg
- **Validation:** Cross-check with manual volume × density at baseline
### 4.2 Tip Displacement (Constraint g₁)
- **Source:** NX Nastran SOL 101 results — nodal displacement
- **Extraction method options:**
1. **DRESP1 in the .sim:** Define a displacement response at the tip node(s). Extract max magnitude from the .f06 or .op2 results file
2. **Post-processing script:** Parse the Nastran output (.f06 or .op2) for the displacement at the tip node ID
3. **NX expression/sensor:** If a result sensor is defined in the sim, it can be queried as an expression
- **Recommended:** Define a **displacement result sensor** in `Beam_sim1.sim` at the beam tip. This gives us a clean NX expression we can extract alongside `p173`
- **Component:** We need to clarify whether the constraint is on **total magnitude** (RSS of X, Y, Z) or a **single component** (likely vertical/Z displacement). Assume magnitude for now.
### 4.3 Von Mises Stress (Constraint g₂)
- **Source:** NX Nastran SOL 101 elemental/nodal stress results
- **Extraction method options:**
1. **DRESP1:** Maximum von Mises stress across the model or a specific group
2. **Result sensor:** Max stress sensor in the sim
3. **Post-processing:** Parse peak stress from .f06
- **Recommended:** Define a **stress result sensor** for max von Mises. Critical: identify the **stress reporting location** — element centroid vs. corner nodes can differ by 1020%
- **Concern:** Stress at hole edges will be mesh-sensitive. Need to ensure mesh convergence at holes (see Section 5)
### 4.4 Extractor Requirements
The Atomizer framework will need extractors for:
1. `mass` ← NX expression `p173`
2. `tip_displacement` ← displacement sensor or Nastran output parse
3. `max_von_mises` ← stress sensor or Nastran output parse
> ⚠️ **Action needed:** Confirm whether result sensors already exist in `Beam_sim1.sim`, or whether we need to create them. This determines extractor complexity.
---
## 5. Solver Requirements
### 5.1 Solution Type
- **SOL 101 (Linear Static)** — appropriate for this problem
- Steel under moderate loading → linear elastic behavior expected
- Small displacement assumption: 22 mm tip displacement on a beam that's likely 2+ meters long → probably OK, but should verify L/δ ratio
- If L/δ < 50, consider SOL 106 (geometric nonlinearity) — **unlikely to be needed**
### 5.2 Mesh Considerations
| Concern | Requirement | Priority |
|---------|-------------|----------|
| **Hole edge refinement** | Stress accuracy at lightening holes requires adequate mesh density. At minimum 46 elements around each hole quarter-circumference | **Critical** |
| **Mesh morphing vs. remeshing** | When `holes_diameter` or `hole_count` changes, does the mesh adapt? Parametric NX models typically **remesh** on update — need to confirm | **High** |
| **Mesh convergence** | Must verify that the baseline mesh gives converged stress results. If not, results will be noisy and optimization will struggle | **Critical** |
| **Element type** | Confirm element type: CQUAD4/CQUAD8 for shell? CTETRA/CHEXA for solid? Shell elements for thin faces are more efficient | **Medium** |
| **Mesh size consistency** | If mesh density varies with design variable changes, the noise in the objective/constraints could mislead the optimizer | **High** |
### 5.3 Solver Runtime
- Need to benchmark: **how long does one SOL 101 run take?** This directly determines feasible trial budget
- Estimated: for a single beam with ~10K100K DOF → probably **seconds to low minutes** per evaluation
- If < 2 minutes per run → budget of 100200 trials is very feasible
---
## 6. Algorithm Recommendation
### 6.1 Problem Characterization
| Dimension | Value |
|-----------|-------|
| Design variables | 4 (3 continuous + 1 integer) |
| Objectives | 1 (mass) |
| Constraints | 2 (displacement, stress) |
| Evaluation cost | Medium (NX model update + SOL 101 solve) |
| Landscape | Expected smooth with possible local features near constraint boundaries |
| Variable interactions | Significant (sandwich theory, hole interaction) |
### 6.2 Algorithm Comparison
| Algorithm | Handles Integer? | Handles Constraints? | Trial Efficiency | Exploration | Notes |
|-----------|-----------------|---------------------|-----------------|-------------|-------|
| **CMA-ES** | Yes (with rounding) | Via penalty/repair | Good for 4D | Excellent | Strong for low-dimensional continuous; integer handling is approximate |
| **TPE (Bayesian)** | Yes (natively) | Via constraint observations | Excellent | Good | Optuna's default; handles mixed types well; sample-efficient |
| **NSGA-II** | Yes | Yes (Pareto-based) | Moderate | Excellent | Overkill for single-objective; better for multi-obj |
| **Nelder-Mead** | No | Via penalty | Moderate | Poor | Too simple for mixed-integer |
| **SOL 200 (Nastran)** | Limited | Yes (native) | Excellent (gradient) | Poor | Nastran-native; no integer support; gradient-based so fast convergence but may miss global optimum |
| **Latin Hypercube + Surrogate** | Yes | Yes | High (via surrogate) | Excellent | Build surrogate from DoE, optimize on surrogate. Very efficient for expensive sims |
### 6.3 Recommended Approach: **Two-Phase Strategy**
#### Phase 1: Design of Experiments (DoE) — Landscape Mapping
- **Method:** Latin Hypercube Sampling (LHS)
- **Budget:** 4050 evaluations
- **Purpose:**
- Map the design space
- Identify feasible region
- Understand variable sensitivities and interactions
- Build intuition before optimization
- Catch any model failures or numerical issues early
- **Output:** Sensitivity plots, interaction plots, feasible region visualization
#### Phase 2: Directed Optimization — TPE (Tree-structured Parzen Estimator)
- **Method:** TPE via Optuna
- **Budget:** 60100 evaluations
- **Purpose:**
- Exploit the landscape knowledge from Phase 1
- Converge to the optimum
- **Why TPE over CMA-ES:**
- Native mixed-integer support (no rounding hacks for `hole_count`)
- Built-in constraint handling via Optuna's constraint interface
- Sample-efficient — important if NX solve time is non-trivial
- Handles non-smooth constraint boundaries well (stress around holes can have sharp gradients)
- Well-supported in Python/Optuna ecosystem
#### Total Budget: ~100150 NX evaluations
At 12 minutes per evaluation → **25 hours total compute time**. Very manageable.
### 6.4 Alternative: SOL 200 for Continuous Subproblem
If we fix `hole_count` at a few integer values (e.g., 7, 10, 13), we could run **Nastran SOL 200** for the remaining 3 continuous variables at each fixed hole count. SOL 200 uses gradient-based optimization with analytical sensitivities — extremely efficient. Then pick the best across the integer levels.
**Pros:** Fastest convergence for continuous variables, leverages Nastran's native sensitivity analysis
**Cons:** Requires DESVAR/DRESP setup in the .sim, more NX expertise, less framework-portable
**Verdict:** Keep as a **backup option**. TPE is more aligned with the Atomizer framework approach and handles the full mixed-integer problem in one pass.
---
## 7. Gap Analysis
### 7.1 Must-Clarify Before Proceeding
| # | Item | Why It Matters | Risk if Unresolved |
|---|------|---------------|-------------------|
| G1 | **Beam length and support conditions** | Need to understand L/δ ratio; affects whether linear analysis is sufficient; affects sensitivity expectations | Could invalidate SOL 101 assumption |
| G2 | **Loading definition** | What loads are applied? Point load at tip? Distributed? Self-weight? This affects stress distribution and which variables matter most | Incorrect optimization direction |
| G3 | **Displacement measurement location** | "Tip displacement" — which node exactly? Max of a set? Single point? Which DOF component? | Wrong constraint extraction |
| G4 | **Stress constraint location** | Max VM stress where? Entire model? Exclude supports/load application points? Stress at hole edges specifically? | Over-constraining or missing real failures |
| G5 | **Geometric feasibility of hole patterns** | When `hole_count = 15` and `holes_diameter = 450 mm`, do holes overlap? What's the beam web length? | Infeasible geometries will crash NX |
| G6 | **Result sensors in the sim** | Do `Beam_sim1.sim` already have displacement/stress sensors defined? | Determines extractor development effort |
| G7 | **NX model parametric update method** | How are design variables linked to NX expressions? Does the model reliably rebuild across the full range? | Model rebuild failures during optimization |
| G8 | **Mesh type and density** | Shell or solid elements? Current mesh size? Has convergence been checked? | Noisy results → poor optimization |
| G9 | **Stress allowable basis** | 130 MPa — is this yield with a safety factor? What factor? Is it a project spec? | Constraint may be wrong |
### 7.2 Nice-to-Know
| # | Item | Value |
|---|------|-------|
| N1 | Any previous optimization attempts on this beam? | Avoids repeating failed approaches |
| N2 | Are there manufacturing constraints (min face thickness, standard hole sizes)? | May restrict feasible designs |
| N3 | Is fatigue a concern? | Static optimization alone may not be sufficient |
| N4 | Any other load cases (dynamic, thermal, handling)? | Current scope is single static case |
| N5 | Target mass? Antoine says "lighter" — is there a specific mass goal? | Helps gauge success criteria |
---
## 8. Risk Assessment
### 8.1 Risk Register
| # | Risk | Likelihood | Impact | Mitigation |
|---|------|-----------|--------|------------|
| R1 | **Narrow feasible region** — displacement constraint is already violated at baseline. The feasible region (displacement < 10 mm AND low mass) may be very small or empty | **High** | **Critical** | Run DoE first to map feasibility. If no feasible point found, discuss relaxing constraints with Antoine |
| R2 | **NX model rebuild failures** — parametric models can fail at extreme variable combinations (geometry boolean failures, mesh errors) | **Medium** | **High** | Test all 4 corners of the design space manually before optimization. Implement robust error handling |
| R3 | **Mesh-dependent stress results** — stress at hole edges is mesh-sensitive. If the mesh changes character across the design space, stress results may be inconsistent | **Medium** | **High** | Conduct mesh convergence study at baseline. Verify mesh quality at 23 points in the design space |
| R4 | **Conflicting objectives** — reducing mass while halving displacement requires finding a very specific structural configuration | **High** | **Medium** | The sandwich effect is our ally: increasing core depth increases stiffness faster than mass. But the feasible region may demand thick faces |
| R5 | **Hole overlap at extreme parameters** — high hole count + large diameter could create infeasible geometry | **Medium** | **Medium** | Add a geometric feasibility pre-check before NX evaluation. Calculate minimum ligament width |
| R6 | **Linear analysis limitation** — if optimal design has very thin members, local buckling or geometric nonlinearity could invalidate results | **Low** | **Medium** | Post-optimization validation: run SOL 105 (buckling) and/or SOL 106 on final design |
| R7 | **Single load case optimization** — optimizing for one load case may create a design that fails under other real-world conditions | **Medium** | **High** | Flag to Antoine: are there other load cases? Plan verification runs post-optimization |
### 8.2 Overall Risk Rating: **MEDIUM-HIGH**
The primary risk driver is **R1 — the feasible region may be very constrained** (or empty). The baseline design already violates the displacement constraint. The optimization isn't just about making it lighter — it must first make it stiffer, then lighter within the stiffness constraint. This is achievable with sandwich theory (the core thickness lever arm is powerful), but we need the DoE phase to confirm.
---
## 9. Recommended Next Steps
1. **Clarify gaps G1G9** with Antoine (via Manager)
2. **Baseline model validation:**
- Open NX model and document geometry, mesh, BCs, loading
- Run baseline and verify reported mass/displacement/stress values
- Conduct mesh convergence check
3. **Test parametric rebuild** at design space corners
4. **Set up extractors** for mass, displacement, stress
5. **Execute Phase 1 DoE** (4050 LHS samples)
6. **Analyze DoE results** — sensitivity, feasibility, interactions
7. **Execute Phase 2 TPE** optimization (60100 trials)
8. **Validate optimum** — confirm NX results, check buckling, review physics
---
## 10. Summary
| Aspect | Recommendation |
|--------|---------------|
| **Formulation** | Single-objective: minimize mass, constrain displacement (≤10mm) and stress (≤130 MPa) |
| **Algorithm** | Two-phase: LHS DoE (4050 trials) → TPE optimization (60100 trials) |
| **Total budget** | ~100150 NX evaluations |
| **Integer handling** | `hole_count` treated as true integer (TPE native support) |
| **Key risk** | Baseline violates displacement constraint — feasible region may be tight |
| **Key gap** | Need to confirm loading, BCs, and geometric feasibility limits |
| **Confidence** | **Medium** — solid approach, but dependent on gap resolution |
---
*Technical Lead 🔧 — The physics is the boss.*
# Technical Breakdown — Hydrotech Beam Structural Optimization
**Project:** Hydrotech Beam
**Protocol:** OP_10 (Project Intake), Step 2 — Technical Breakdown
**Author:** Technical Lead 🔧
**Date:** 2025-02-09
**Status:** Ready for review
---
## 1. Geometry Description & Structural Behavior
### 1.1 Structural Configuration
The component is a **sandwich I-beam** serving as the primary load-bearing member in a test fixture assembly. Key geometric features:
- **Cross-section:** Sandwich construction — a core layer flanked by face sheets on top and bottom flanges
- **Web:** Contains a pattern of **lightening holes** (circular cutouts) to reduce mass
- **Loading:** Static structural — likely a cantilever or simply-supported configuration with transverse loading (evidenced by "tip displacement" as a key output)
- **Material:** Steel (AISI) — conservatively strong for this application, which is consistent with the "overbuilt" assessment
### 1.2 Structural Behavior Analysis
The beam behaves as a **bending-dominated structure**. Key physics:
| Behavior | Governing Parameters | Notes |
|----------|---------------------|-------|
| **Bending stiffness (EI)** | Face thickness, core thickness | Sandwich theory: faces carry bending stress, core carries shear. Stiffness scales roughly with the square of the distance from the neutral axis |
| **Mass** | All four variables | Core thickness and face thickness add material directly; holes remove material from the web |
| **Stress concentrations** | Hole diameter, hole spacing | Larger holes → higher stress concentration factors at hole edges. Closely spaced holes can have interacting stress fields |
| **Shear capacity** | Core thickness, hole count, hole diameter | Web lightening holes reduce shear area. More holes or larger holes = less shear-carrying web |
| **Local buckling** | Face thickness, hole geometry | Thin faces or large unsupported spans between holes may introduce local instability, though at steel gauges this is less likely |
### 1.3 Baseline Assessment
The current design (~974 kg, ~22 mm tip displacement) is **significantly overbuilt** in mass but **under-stiff** relative to the 10 mm displacement target. This is an important observation:
> ⚠️ **The baseline FAILS the displacement constraint.** Tip displacement is 22 mm vs. a 10 mm limit. This means the optimizer must simultaneously **increase stiffness (reduce displacement by >50%)** while **reducing mass**. These objectives are naturally conflicting — stiffer generally means heavier.
This will drive the optimizer toward a specific region: **thicker faces** (increased bending stiffness) but **thinner core** and/or **more/larger holes** (reduced mass). The feasible region may be narrow.
---
## 2. Design Variable Assessment
### 2.1 Individual Variable Analysis
| Variable | ID | Range | Type | Sensitivity Expectation | Primary Effect |
|----------|----|-------|------|------------------------|----------------|
| `beam_half_core_thickness` | DV1 | 1040 mm | Continuous | **High** on mass, **Medium** on stiffness | Increases distance between face sheets → stiffness scales ~quadratically. Also adds core mass. |
| `beam_face_thickness` | DV2 | 1040 mm | Continuous | **High** on both mass and stiffness | Thicker faces = more bending stiffness AND more mass. Key trade-off variable. |
| `holes_diameter` | DV3 | 150450 mm | Continuous | **High** on mass, **High** on stress | Larger holes remove more web material (mass ∝ d²). But stress concentrations scale with hole size. |
| `hole_count` | DV4 | 515 | **Integer** | **Medium** on mass, **Medium** on stress | More holes = less web mass, but also less shear-carrying area and potential hole interaction effects |
### 2.2 Interaction Effects (Expected)
These variables are **not independent** — significant interactions are expected:
1. **DV1 × DV2 (core × face):** Classic sandwich interaction. Optimal bending stiffness comes from balancing core depth (lever arm) vs. face material (bending resistance). Increasing core thickness makes face thickness more effective for stiffness.
2. **DV3 × DV4 (hole diameter × hole count):** Strong interaction. Both control how much web material is removed. Large holes + many holes could create a web that's more hole than steel — stress will spike. There may be a **feasibility boundary** where the holes start to overlap or leave insufficient ligament width between them.
3. **DV2 × DV3 (face × hole diameter):** Stress at hole edges depends on the overall stress field, which is influenced by face sheet proportioning. Thicker faces reduce nominal stress → allowing larger holes.
4. **DV1 × DV3 (core × hole diameter):** Core thickness determines beam depth → determines web height → constrains maximum feasible hole diameter. If `holes_diameter` can approach the web height, we need a geometric feasibility check.
### 2.3 Discrete Variable Handling — `hole_count`
`hole_count` is an **integer variable** (515, 11 levels). Options:
| Approach | Pros | Cons |
|----------|------|------|
| **Treat as continuous, round at end** | Simple, works with any algorithm | Rounding may violate constraints; NX may not accept non-integer |
| **Treat as truly integer** | Correct physics per evaluation | Limits algorithm choices; some optimizers handle poorly |
| **Relaxed continuous + periodic integer check** | Best of both worlds | More complex implementation |
**Recommendation:** Treat `hole_count` as **integer throughout**. With only 11 levels and NX-in-the-loop (where the model must be rebuilt with integer hole count), there's no benefit to continuous relaxation. The algorithms recommended below (CMA-ES, TPE) both handle mixed integer/continuous natively.
---
## 3. Objective Formulation
### 3.1 Single-Objective vs. Multi-Objective
The handoff mentions three goals: minimize mass, minimize displacement, keep stress safe. Let's decompose:
| Goal | Type | Rationale |
|------|------|-----------|
| Minimize mass | **Primary objective** | Antoine's explicit priority |
| Tip displacement < 10 mm | **Constraint** | Hard limit, not a competing objective |
| Von Mises stress < 130 MPa | **Constraint** | Hard limit (safety) |
**Recommendation: Single-objective optimization.**
$$\min_{x} \quad f(x) = \text{mass}(x)$$
$$\text{s.t.} \quad g_1(x) = \delta_{\text{tip}}(x) \leq 10 \text{ mm}$$
$$\quad\quad g_2(x) = \sigma_{\text{VM,max}}(x) \leq 130 \text{ MPa}$$
Rationale:
- Mass is the clear primary objective
- Displacement and stress are hard constraints, not competing objectives to trade off
- Single-objective is simpler, converges faster, and is appropriate for 4 design variables
- If Antoine later wants to explore the Pareto front (mass vs. displacement), we can reformulate
### 3.2 Constraint Margins
Given that the baseline **already violates** the displacement constraint, we should consider:
- Running the optimizer **without constraint penalties initially** to map the landscape
- Using a **penalty-based** approach with gradually increasing penalty weight
- Or using **feasibility-first** ranking (preferred for population-based methods)
**Recommendation:** Use a constraint-handling approach where feasible solutions always rank above infeasible ones (Deb's feasibility rules), with infeasible solutions ranked by constraint violation magnitude.
---
## 4. Constraint Formulation — Extraction from NX
### 4.1 Mass (Objective)
- **Source:** NX expression `p173`
- **Extraction:** Read directly from the NX expression system after model update
- **Units:** kg
- **Validation:** Cross-check with manual volume × density at baseline
### 4.2 Tip Displacement (Constraint g₁)
- **Source:** NX Nastran SOL 101 results — nodal displacement
- **Extraction method options:**
1. **DRESP1 in the .sim:** Define a displacement response at the tip node(s). Extract max magnitude from the .f06 or .op2 results file
2. **Post-processing script:** Parse the Nastran output (.f06 or .op2) for the displacement at the tip node ID
3. **NX expression/sensor:** If a result sensor is defined in the sim, it can be queried as an expression
- **Recommended:** Define a **displacement result sensor** in `Beam_sim1.sim` at the beam tip. This gives us a clean NX expression we can extract alongside `p173`
- **Component:** We need to clarify whether the constraint is on **total magnitude** (RSS of X, Y, Z) or a **single component** (likely vertical/Z displacement). Assume magnitude for now.
### 4.3 Von Mises Stress (Constraint g₂)
- **Source:** NX Nastran SOL 101 elemental/nodal stress results
- **Extraction method options:**
1. **DRESP1:** Maximum von Mises stress across the model or a specific group
2. **Result sensor:** Max stress sensor in the sim
3. **Post-processing:** Parse peak stress from .f06
- **Recommended:** Define a **stress result sensor** for max von Mises. Critical: identify the **stress reporting location** — element centroid vs. corner nodes can differ by 1020%
- **Concern:** Stress at hole edges will be mesh-sensitive. Need to ensure mesh convergence at holes (see Section 5)
### 4.4 Extractor Requirements
The Atomizer framework will need extractors for:
1. `mass` ← NX expression `p173`
2. `tip_displacement` ← displacement sensor or Nastran output parse
3. `max_von_mises` ← stress sensor or Nastran output parse
> ⚠️ **Action needed:** Confirm whether result sensors already exist in `Beam_sim1.sim`, or whether we need to create them. This determines extractor complexity.
---
## 5. Solver Requirements
### 5.1 Solution Type
- **SOL 101 (Linear Static)** — appropriate for this problem
- Steel under moderate loading → linear elastic behavior expected
- Small displacement assumption: 22 mm tip displacement on a beam that's likely 2+ meters long → probably OK, but should verify L/δ ratio
- If L/δ < 50, consider SOL 106 (geometric nonlinearity) — **unlikely to be needed**
### 5.2 Mesh Considerations
| Concern | Requirement | Priority |
|---------|-------------|----------|
| **Hole edge refinement** | Stress accuracy at lightening holes requires adequate mesh density. At minimum 46 elements around each hole quarter-circumference | **Critical** |
| **Mesh morphing vs. remeshing** | When `holes_diameter` or `hole_count` changes, does the mesh adapt? Parametric NX models typically **remesh** on update — need to confirm | **High** |
| **Mesh convergence** | Must verify that the baseline mesh gives converged stress results. If not, results will be noisy and optimization will struggle | **Critical** |
| **Element type** | Confirm element type: CQUAD4/CQUAD8 for shell? CTETRA/CHEXA for solid? Shell elements for thin faces are more efficient | **Medium** |
| **Mesh size consistency** | If mesh density varies with design variable changes, the noise in the objective/constraints could mislead the optimizer | **High** |
### 5.3 Solver Runtime
- Need to benchmark: **how long does one SOL 101 run take?** This directly determines feasible trial budget
- Estimated: for a single beam with ~10K100K DOF → probably **seconds to low minutes** per evaluation
- If < 2 minutes per run → budget of 100200 trials is very feasible
---
## 6. Algorithm Recommendation
### 6.1 Problem Characterization
| Dimension | Value |
|-----------|-------|
| Design variables | 4 (3 continuous + 1 integer) |
| Objectives | 1 (mass) |
| Constraints | 2 (displacement, stress) |
| Evaluation cost | Medium (NX model update + SOL 101 solve) |
| Landscape | Expected smooth with possible local features near constraint boundaries |
| Variable interactions | Significant (sandwich theory, hole interaction) |
### 6.2 Algorithm Comparison
| Algorithm | Handles Integer? | Handles Constraints? | Trial Efficiency | Exploration | Notes |
|-----------|-----------------|---------------------|-----------------|-------------|-------|
| **CMA-ES** | Yes (with rounding) | Via penalty/repair | Good for 4D | Excellent | Strong for low-dimensional continuous; integer handling is approximate |
| **TPE (Bayesian)** | Yes (natively) | Via constraint observations | Excellent | Good | Optuna's default; handles mixed types well; sample-efficient |
| **NSGA-II** | Yes | Yes (Pareto-based) | Moderate | Excellent | Overkill for single-objective; better for multi-obj |
| **Nelder-Mead** | No | Via penalty | Moderate | Poor | Too simple for mixed-integer |
| **SOL 200 (Nastran)** | Limited | Yes (native) | Excellent (gradient) | Poor | Nastran-native; no integer support; gradient-based so fast convergence but may miss global optimum |
| **Latin Hypercube + Surrogate** | Yes | Yes | High (via surrogate) | Excellent | Build surrogate from DoE, optimize on surrogate. Very efficient for expensive sims |
### 6.3 Recommended Approach: **Two-Phase Strategy**
#### Phase 1: Design of Experiments (DoE) — Landscape Mapping
- **Method:** Latin Hypercube Sampling (LHS)
- **Budget:** 4050 evaluations
- **Purpose:**
- Map the design space
- Identify feasible region
- Understand variable sensitivities and interactions
- Build intuition before optimization
- Catch any model failures or numerical issues early
- **Output:** Sensitivity plots, interaction plots, feasible region visualization
#### Phase 2: Directed Optimization — TPE (Tree-structured Parzen Estimator)
- **Method:** TPE via Optuna
- **Budget:** 60100 evaluations
- **Purpose:**
- Exploit the landscape knowledge from Phase 1
- Converge to the optimum
- **Why TPE over CMA-ES:**
- Native mixed-integer support (no rounding hacks for `hole_count`)
- Built-in constraint handling via Optuna's constraint interface
- Sample-efficient — important if NX solve time is non-trivial
- Handles non-smooth constraint boundaries well (stress around holes can have sharp gradients)
- Well-supported in Python/Optuna ecosystem
#### Total Budget: ~100150 NX evaluations
At 12 minutes per evaluation → **25 hours total compute time**. Very manageable.
### 6.4 Alternative: SOL 200 for Continuous Subproblem
If we fix `hole_count` at a few integer values (e.g., 7, 10, 13), we could run **Nastran SOL 200** for the remaining 3 continuous variables at each fixed hole count. SOL 200 uses gradient-based optimization with analytical sensitivities — extremely efficient. Then pick the best across the integer levels.
**Pros:** Fastest convergence for continuous variables, leverages Nastran's native sensitivity analysis
**Cons:** Requires DESVAR/DRESP setup in the .sim, more NX expertise, less framework-portable
**Verdict:** Keep as a **backup option**. TPE is more aligned with the Atomizer framework approach and handles the full mixed-integer problem in one pass.
---
## 7. Gap Analysis
### 7.1 Must-Clarify Before Proceeding
| # | Item | Why It Matters | Risk if Unresolved |
|---|------|---------------|-------------------|
| G1 | **Beam length and support conditions** | Need to understand L/δ ratio; affects whether linear analysis is sufficient; affects sensitivity expectations | Could invalidate SOL 101 assumption |
| G2 | **Loading definition** | What loads are applied? Point load at tip? Distributed? Self-weight? This affects stress distribution and which variables matter most | Incorrect optimization direction |
| G3 | **Displacement measurement location** | "Tip displacement" — which node exactly? Max of a set? Single point? Which DOF component? | Wrong constraint extraction |
| G4 | **Stress constraint location** | Max VM stress where? Entire model? Exclude supports/load application points? Stress at hole edges specifically? | Over-constraining or missing real failures |
| G5 | **Geometric feasibility of hole patterns** | When `hole_count = 15` and `holes_diameter = 450 mm`, do holes overlap? What's the beam web length? | Infeasible geometries will crash NX |
| G6 | **Result sensors in the sim** | Do `Beam_sim1.sim` already have displacement/stress sensors defined? | Determines extractor development effort |
| G7 | **NX model parametric update method** | How are design variables linked to NX expressions? Does the model reliably rebuild across the full range? | Model rebuild failures during optimization |
| G8 | **Mesh type and density** | Shell or solid elements? Current mesh size? Has convergence been checked? | Noisy results → poor optimization |
| G9 | **Stress allowable basis** | 130 MPa — is this yield with a safety factor? What factor? Is it a project spec? | Constraint may be wrong |
### 7.2 Nice-to-Know
| # | Item | Value |
|---|------|-------|
| N1 | Any previous optimization attempts on this beam? | Avoids repeating failed approaches |
| N2 | Are there manufacturing constraints (min face thickness, standard hole sizes)? | May restrict feasible designs |
| N3 | Is fatigue a concern? | Static optimization alone may not be sufficient |
| N4 | Any other load cases (dynamic, thermal, handling)? | Current scope is single static case |
| N5 | Target mass? Antoine says "lighter" — is there a specific mass goal? | Helps gauge success criteria |
---
## 8. Risk Assessment
### 8.1 Risk Register
| # | Risk | Likelihood | Impact | Mitigation |
|---|------|-----------|--------|------------|
| R1 | **Narrow feasible region** — displacement constraint is already violated at baseline. The feasible region (displacement < 10 mm AND low mass) may be very small or empty | **High** | **Critical** | Run DoE first to map feasibility. If no feasible point found, discuss relaxing constraints with Antoine |
| R2 | **NX model rebuild failures** — parametric models can fail at extreme variable combinations (geometry boolean failures, mesh errors) | **Medium** | **High** | Test all 4 corners of the design space manually before optimization. Implement robust error handling |
| R3 | **Mesh-dependent stress results** — stress at hole edges is mesh-sensitive. If the mesh changes character across the design space, stress results may be inconsistent | **Medium** | **High** | Conduct mesh convergence study at baseline. Verify mesh quality at 23 points in the design space |
| R4 | **Conflicting objectives** — reducing mass while halving displacement requires finding a very specific structural configuration | **High** | **Medium** | The sandwich effect is our ally: increasing core depth increases stiffness faster than mass. But the feasible region may demand thick faces |
| R5 | **Hole overlap at extreme parameters** — high hole count + large diameter could create infeasible geometry | **Medium** | **Medium** | Add a geometric feasibility pre-check before NX evaluation. Calculate minimum ligament width |
| R6 | **Linear analysis limitation** — if optimal design has very thin members, local buckling or geometric nonlinearity could invalidate results | **Low** | **Medium** | Post-optimization validation: run SOL 105 (buckling) and/or SOL 106 on final design |
| R7 | **Single load case optimization** — optimizing for one load case may create a design that fails under other real-world conditions | **Medium** | **High** | Flag to Antoine: are there other load cases? Plan verification runs post-optimization |
### 8.2 Overall Risk Rating: **MEDIUM-HIGH**
The primary risk driver is **R1 — the feasible region may be very constrained** (or empty). The baseline design already violates the displacement constraint. The optimization isn't just about making it lighter — it must first make it stiffer, then lighter within the stiffness constraint. This is achievable with sandwich theory (the core thickness lever arm is powerful), but we need the DoE phase to confirm.
---
## 9. Recommended Next Steps
1. **Clarify gaps G1G9** with Antoine (via Manager)
2. **Baseline model validation:**
- Open NX model and document geometry, mesh, BCs, loading
- Run baseline and verify reported mass/displacement/stress values
- Conduct mesh convergence check
3. **Test parametric rebuild** at design space corners
4. **Set up extractors** for mass, displacement, stress
5. **Execute Phase 1 DoE** (4050 LHS samples)
6. **Analyze DoE results** — sensitivity, feasibility, interactions
7. **Execute Phase 2 TPE** optimization (60100 trials)
8. **Validate optimum** — confirm NX results, check buckling, review physics
---
## 10. Summary
| Aspect | Recommendation |
|--------|---------------|
| **Formulation** | Single-objective: minimize mass, constrain displacement (≤10mm) and stress (≤130 MPa) |
| **Algorithm** | Two-phase: LHS DoE (4050 trials) → TPE optimization (60100 trials) |
| **Total budget** | ~100150 NX evaluations |
| **Integer handling** | `hole_count` treated as true integer (TPE native support) |
| **Key risk** | Baseline violates displacement constraint — feasible region may be tight |
| **Key gap** | Need to confirm loading, BCs, and geometric feasibility limits |
| **Confidence** | **Medium** — solid approach, but dependent on gap resolution |
---
*Technical Lead 🔧 — The physics is the boss.*

View File

@@ -1,45 +1,45 @@
# CONTEXT.md — Hydrotech Beam Structural Optimization
## Client
Hydrotech (internal test fixture)
## Objective
Minimize beam mass while reducing tip displacement and keeping stress within limits. Multi-objective: lighter, stiffer, safe.
## Key Parameters
| Parameter | Current | Range | Units | Notes |
|-----------|---------|-------|-------|-------|
| beam_half_core_thickness | 20 | 1040 | mm | Core half-thickness |
| beam_face_thickness | 20 | 1040 | mm | Face sheet thickness |
| holes_diameter | 300 | 150450 | mm | Lightening hole diameter |
| hole_count | 10 | 515 | integer | Number of lightening holes |
## Constraints
- Max tip displacement: < 10 mm
- Max von Mises stress: < ~130 MPa (steel, conservative)
- Mass tracked via NX expression `p173`
## Objectives
- Minimize mass (currently ~974 kg — way too heavy)
- Minimize tip displacement (currently ~22 mm, target < 10 mm)
- Keep stress reasonable (steel, margin exists)
## Baseline Performance
- Mass: ~974 kg
- Tip displacement: ~22 mm
- Material: Steel (AISI)
## Model
- NX Part: `Beam.prt`
- FEM: `Beam_fem1.fem`
- Idealized part: `Beam_fem1_i.prt`
- Simulation: `Beam_sim1.sim`
- Solver: NX Nastran (static structural)
- Analysis: Static structural
## Decisions
- 2026-02-08: Project received from Antoine
## Status
Phase: Intake
Channel: #project-hydrotech-beam
# CONTEXT.md — Hydrotech Beam Structural Optimization
## Client
Hydrotech (internal test fixture)
## Objective
Minimize beam mass while reducing tip displacement and keeping stress within limits. Multi-objective: lighter, stiffer, safe.
## Key Parameters
| Parameter | Current | Range | Units | Notes |
|-----------|---------|-------|-------|-------|
| beam_half_core_thickness | 20 | 1040 | mm | Core half-thickness |
| beam_face_thickness | 20 | 1040 | mm | Face sheet thickness |
| holes_diameter | 300 | 150450 | mm | Lightening hole diameter |
| hole_count | 10 | 515 | integer | Number of lightening holes |
## Constraints
- Max tip displacement: < 10 mm
- Max von Mises stress: < ~130 MPa (steel, conservative)
- Mass tracked via NX expression `p173`
## Objectives
- Minimize mass (currently ~974 kg — way too heavy)
- Minimize tip displacement (currently ~22 mm, target < 10 mm)
- Keep stress reasonable (steel, margin exists)
## Baseline Performance
- Mass: ~974 kg
- Tip displacement: ~22 mm
- Material: Steel (AISI)
## Model
- NX Part: `Beam.prt`
- FEM: `Beam_fem1.fem`
- Idealized part: `Beam_fem1_i.prt`
- Simulation: `Beam_sim1.sim`
- Solver: NX Nastran (static structural)
- Analysis: Static structural
## Decisions
- 2026-02-08: Project received from Antoine
## Status
Phase: Intake
Channel: #project-hydrotech-beam

View File

@@ -1,47 +1,54 @@
# DECISIONS.md — Hydrotech Beam
Numbered decision log. Check here before proposing anything that contradicts a prior decision.
---
## DEC-HB-001: Single-objective formulation
- **Date:** 2026-02-08
- **By:** Technical Lead 🔧
- **Decision:** Minimize mass as sole objective. Tip displacement (≤ 10 mm) and von Mises stress (≤ 130 MPa) as hard constraints.
- **Rationale:** Mass is Antoine's clear priority. Displacement and stress are pass/fail limits, not competing objectives to trade off. Single-objective converges faster and is appropriate for 4 design variables.
- **Status:** Proposed — awaiting CEO confirmation
## DEC-HB-002: Two-phase optimization strategy
- **Date:** 2026-02-08
- **By:** Technical Lead 🔧
- **Decision:** Phase 1 = Latin Hypercube DoE (4050 trials) to map landscape. Phase 2 = TPE via Optuna (60100 trials) to converge.
- **Rationale:** DoE first catches model failures, maps feasibility, reveals sensitivities. TPE handles mixed integer/continuous natively and is sample-efficient.
- **Status:** Proposed — awaiting CEO confirmation
## DEC-HB-003: Integer handling for hole_count
- **Date:** 2026-02-08
- **By:** Technical Lead 🔧
- **Decision:** Treat `hole_count` as true integer throughout (not continuous + rounding).
- **Rationale:** Only 11 levels (515). NX model must rebuild with integer count anyway. TPE handles mixed types natively.
- **Status:** Proposed — awaiting CEO confirmation
## DEC-HB-004: Project structure — KB-integrated layout
- **Date:** 2026-02-09
- **By:** Manager 🎯 + CEO
- **Decision:** Projects use KB-integrated structure with `models/`, `kb/`, `studies/`, `deliverables/`. Knowledge base follows accumulation principle from shared KB skill. Studies are self-contained with own model copy and introspection.
- **Rationale:** Centralizes project knowledge, supports multiple studies per project, enables CDR compilation from KB, keeps everything in Gitea.
- **Status:** Approved
## DEC-HB-005: No Notion — Gitea + .md as source of truth
- **Date:** 2026-02-09
- **By:** CEO
- **Decision:** All project documentation lives as .md files in the Atomizer Gitea repo. No external project management tools.
- **Rationale:** CEO preference. Efficient, version-controlled, browseable on Gitea, accessible to all agents.
- **Status:** Approved
## DEC-HB-006: KB skill — extension pattern, no fork
- **Date:** 2026-02-09
- **By:** Manager 🎯 + CEO
- **Decision:** Use Mario's shared knowledge-base skill as-is. Atomizer maintains an extension file (`knowledge-base-atomizer-ext.md`) for agent-specific workflows. No fork of the shared repo.
- **Rationale:** Avoids merge conflicts, gets upstream improvements automatically, clean separation between general toolbox and Atomizer playbook.
- **Status:** Approved
# DECISIONS.md — Hydrotech Beam
Numbered decision log. Check here before proposing anything that contradicts a prior decision.
---
## DEC-HB-001: Single-objective formulation
- **Date:** 2026-02-08
- **By:** Technical Lead 🔧
- **Decision:** Minimize mass as sole objective. Tip displacement (≤ 10 mm) and von Mises stress (≤ 130 MPa) as hard constraints.
- **Rationale:** Mass is Antoine's clear priority. Displacement and stress are pass/fail limits, not competing objectives to trade off. Single-objective converges faster and is appropriate for 4 design variables.
- **Status:** Proposed — awaiting CEO confirmation
## DEC-HB-002: Two-phase optimization strategy
- **Date:** 2026-02-08
- **By:** Technical Lead 🔧
- **Decision:** Phase 1 = Latin Hypercube DoE (4050 trials) to map landscape. Phase 2 = TPE via Optuna (60100 trials) to converge.
- **Rationale:** DoE first catches model failures, maps feasibility, reveals sensitivities. TPE handles mixed integer/continuous natively and is sample-efficient.
- **Status:** Proposed — awaiting CEO confirmation
## DEC-HB-003: Integer handling for hole_count
- **Date:** 2026-02-08
- **By:** Technical Lead 🔧
- **Decision:** Treat `hole_count` as true integer throughout (not continuous + rounding).
- **Rationale:** Only 11 levels (515). NX model must rebuild with integer count anyway. TPE handles mixed types natively.
- **Status:** Proposed — awaiting CEO confirmation
## DEC-HB-004: Project structure — KB-integrated layout
- **Date:** 2026-02-09
- **By:** Manager 🎯 + CEO
- **Decision:** Projects use KB-integrated structure with `models/`, `kb/`, `studies/`, `deliverables/`. Knowledge base follows accumulation principle from shared KB skill. Studies are self-contained with own model copy and introspection.
- **Rationale:** Centralizes project knowledge, supports multiple studies per project, enables CDR compilation from KB, keeps everything in Gitea.
- **Status:** Approved
## DEC-HB-005: No Notion — Gitea + .md as source of truth
- **Date:** 2026-02-09
- **By:** CEO
- **Decision:** All project documentation lives as .md files in the Atomizer Gitea repo. No external project management tools.
- **Rationale:** CEO preference. Efficient, version-controlled, browseable on Gitea, accessible to all agents.
- **Status:** Approved
## DEC-HB-006: KB skill — extension pattern, no fork
- **Date:** 2026-02-09
- **By:** Manager 🎯 + CEO
- **Decision:** Use Mario's shared knowledge-base skill as-is. Atomizer maintains an extension file (`knowledge-base-atomizer-ext.md`) for agent-specific workflows. No fork of the shared repo.
- **Rationale:** Avoids merge conflicts, gets upstream improvements automatically, clean separation between general toolbox and Atomizer playbook.
- **Status:** Approved
## DEC-HB-007: Single source of truth — repo projects folder
- **Date:** 2026-02-09
- **By:** CEO
- **Decision:** All project data lives in `/repos/Atomizer/projects/`. This is the single source of truth for all current and future projects. Synced to Windows (dalidou) via Syncthing. No duplicate local folders.
- **Rationale:** One place for everything — agents, CEO, and Windows all reference the same files. Version-controlled via Gitea, bidirectional sync via Syncthing.
- **Status:** Approved

View File

@@ -1,72 +1,72 @@
# Hydrotech Beam — Structural Optimization
**Client:** Hydrotech (internal test fixture)
**Channel:** #project-hydrotech-beam
**Created:** 2026-02-08
**Status:** Technical Breakdown Complete — Awaiting Gap Resolution
---
## Objective
Optimize a sandwich I-beam with lightening holes: minimize mass while meeting stiffness and strength constraints.
## Key Numbers
| Metric | Baseline | Target |
|--------|----------|--------|
| Mass | ~974 kg | Minimize |
| Tip displacement | ~22 mm | ≤ 10 mm |
| Von Mises stress | TBD | ≤ 130 MPa |
## Design Variables
| Variable | Range | Type |
|----------|-------|------|
| Half-core thickness | 1040 mm | Continuous |
| Face thickness | 1040 mm | Continuous |
| Hole diameter | 150450 mm | Continuous |
| Hole count | 515 | Integer |
## Approach
Two-phase optimization:
1. **DoE** (LHS, 4050 trials) — map the landscape
2. **TPE** (Bayesian, 60100 trials) — converge to optimum
Total budget: ~100150 NX evaluations, est. 25 hours compute.
## Project Structure
```
hydrotech-beam/
├── README.md ← You are here
├── CONTEXT.md # Intake requirements
├── BREAKDOWN.md # Technical analysis
├── DECISIONS.md # Decision log
├── models/ # Reference NX models (golden copies)
├── kb/ # Living knowledge base
│ ├── components/ # Per-component knowledge
│ ├── materials/ # Material data
│ ├── fea/ # FEA model knowledge
│ └── dev/ # Generation documents
├── images/ # Screenshots, plots, renders
├── studies/ # Optimization campaigns
│ └── 01_doe_landscape/ # (first study — pending)
└── deliverables/ # Final reports and recommendations
```
## Key Documents
- [CONTEXT.md](CONTEXT.md) — Full intake data
- [BREAKDOWN.md](BREAKDOWN.md) — Tech Lead's technical analysis
- [DECISIONS.md](DECISIONS.md) — All project decisions
- [kb/_index.md](kb/_index.md) — Knowledge base overview
## Team
| Role | Agent | Status |
|------|-------|--------|
| Manager | 🎯 Manager | Coordinating |
| Technical Lead | 🔧 Tech Lead | Breakdown complete |
| CEO | Antoine | Gap resolution pending |
# Hydrotech Beam — Structural Optimization
**Client:** Hydrotech (internal test fixture)
**Channel:** #project-hydrotech-beam
**Created:** 2026-02-08
**Status:** Technical Breakdown Complete — Awaiting Gap Resolution
---
## Objective
Optimize a sandwich I-beam with lightening holes: minimize mass while meeting stiffness and strength constraints.
## Key Numbers
| Metric | Baseline | Target |
|--------|----------|--------|
| Mass | ~974 kg | Minimize |
| Tip displacement | ~22 mm | ≤ 10 mm |
| Von Mises stress | TBD | ≤ 130 MPa |
## Design Variables
| Variable | Range | Type |
|----------|-------|------|
| Half-core thickness | 1040 mm | Continuous |
| Face thickness | 1040 mm | Continuous |
| Hole diameter | 150450 mm | Continuous |
| Hole count | 515 | Integer |
## Approach
Two-phase optimization:
1. **DoE** (LHS, 4050 trials) — map the landscape
2. **TPE** (Bayesian, 60100 trials) — converge to optimum
Total budget: ~100150 NX evaluations, est. 25 hours compute.
## Project Structure
```
hydrotech-beam/
├── README.md ← You are here
├── CONTEXT.md # Intake requirements
├── BREAKDOWN.md # Technical analysis
├── DECISIONS.md # Decision log
├── models/ # Reference NX models (golden copies)
├── kb/ # Living knowledge base
│ ├── components/ # Per-component knowledge
│ ├── materials/ # Material data
│ ├── fea/ # FEA model knowledge
│ └── dev/ # Generation documents
├── images/ # Screenshots, plots, renders
├── studies/ # Optimization campaigns
│ └── 01_doe_landscape/ # (first study — pending)
└── deliverables/ # Final reports and recommendations
```
## Key Documents
- [CONTEXT.md](CONTEXT.md) — Full intake data
- [BREAKDOWN.md](BREAKDOWN.md) — Tech Lead's technical analysis
- [DECISIONS.md](DECISIONS.md) — All project decisions
- [kb/_index.md](kb/_index.md) — Knowledge base overview
## Team
| Role | Agent | Status |
|------|-------|--------|
| Manager | 🎯 Manager | Coordinating |
| Technical Lead | 🔧 Tech Lead | Breakdown complete |
| CEO | Antoine | Gap resolution pending |

View File

@@ -1,22 +1,22 @@
# Knowledge Base History — Hydrotech Beam
All modifications tracked by generation.
---
## Gen 001 — 2026-02-09 — Initial KB
**Source:** Project intake (CONTEXT.md) + Technical Lead breakdown (BREAKDOWN.md)
**Author:** Manager 🎯
**Created:**
- `components/sandwich-beam.md` — initial component file from intake data
- `materials/steel-aisi.md` — material placeholder
- `fea/models/sol101-static.md` — FEA model placeholder from breakdown
- `dev/gen-001.md` — generation document
**Key findings from breakdown:**
- Baseline FAILS displacement constraint (22 mm vs 10 mm limit)
- Feasible region may be narrow — stiffness and mass compete
- Sandwich effect (core thickness) is the primary stiffness lever
- 9 gaps identified requiring CEO input before proceeding
# Knowledge Base History — Hydrotech Beam
All modifications tracked by generation.
---
## Gen 001 — 2026-02-09 — Initial KB
**Source:** Project intake (CONTEXT.md) + Technical Lead breakdown (BREAKDOWN.md)
**Author:** Manager 🎯
**Created:**
- `components/sandwich-beam.md` — initial component file from intake data
- `materials/steel-aisi.md` — material placeholder
- `fea/models/sol101-static.md` — FEA model placeholder from breakdown
- `dev/gen-001.md` — generation document
**Key findings from breakdown:**
- Baseline FAILS displacement constraint (22 mm vs 10 mm limit)
- Feasible region may be narrow — stiffness and mass compete
- Sandwich effect (core thickness) is the primary stiffness lever
- 9 gaps identified requiring CEO input before proceeding

View File

@@ -0,0 +1,22 @@
# Knowledge Base History — Hydrotech Beam
All modifications tracked by generation.
---
## Gen 001 — 2026-02-09 — Initial KB
**Source:** Project intake (CONTEXT.md) + Technical Lead breakdown (BREAKDOWN.md)
**Author:** Manager 🎯
**Created:**
- `components/sandwich-beam.md` — initial component file from intake data
- `materials/steel-aisi.md` — material placeholder
- `fea/models/sol101-static.md` — FEA model placeholder from breakdown
- `dev/gen-001.md` — generation document
**Key findings from breakdown:**
- Baseline FAILS displacement constraint (22 mm vs 10 mm limit)
- Feasible region may be narrow — stiffness and mass compete
- Sandwich effect (core thickness) is the primary stiffness lever
- 9 gaps identified requiring CEO input before proceeding

View File

@@ -1,47 +1,47 @@
# Knowledge Base — Hydrotech Beam
**Project:** Hydrotech Beam Structural Optimization
**Generation:** 001
**Last updated:** 2026-02-09
---
## Overview
Sandwich I-beam optimization for a test fixture. Steel construction with lightening holes in the web. Goal: reduce mass from ~974 kg while meeting displacement (≤ 10 mm) and stress (≤ 130 MPa) constraints.
## Components
| Component | File | Status |
|-----------|------|--------|
| Sandwich Beam | [sandwich-beam.md](components/sandwich-beam.md) | Initial |
## Materials
| Material | File | Status |
|----------|------|--------|
| Steel (AISI) | [steel-aisi.md](materials/steel-aisi.md) | Initial |
## FEA
| Model | File | Status |
|-------|------|--------|
| Static Analysis (SOL 101) | [fea/models/sol101-static.md](fea/models/sol101-static.md) | Pending gap resolution |
## Generations
| Gen | Date | Summary |
|-----|------|---------|
| 001 | 2026-02-09 | Initial KB from intake + technical breakdown |
## Open Tasks
- ❓ G1: Beam length and support conditions
- ❓ G2: Loading definition (point? distributed? self-weight?)
- ❓ G3: Displacement measurement location and DOF
- ❓ G4: Stress constraint scope (whole model? exclude supports?)
- ❓ G5: Geometric feasibility of hole patterns at extremes
- ❓ G6: Result sensors in Beam_sim1.sim
- ❓ G7: NX parametric rebuild reliability across full range
- ❓ G8: Mesh type, density, convergence status
- ❓ G9: 130 MPa stress limit basis (yield? safety factor?)
# Knowledge Base — Hydrotech Beam
**Project:** Hydrotech Beam Structural Optimization
**Generation:** 001
**Last updated:** 2026-02-09
---
## Overview
Sandwich I-beam optimization for a test fixture. Steel construction with lightening holes in the web. Goal: reduce mass from ~974 kg while meeting displacement (≤ 10 mm) and stress (≤ 130 MPa) constraints.
## Components
| Component | File | Status |
|-----------|------|--------|
| Sandwich Beam | [sandwich-beam.md](components/sandwich-beam.md) | Initial |
## Materials
| Material | File | Status |
|----------|------|--------|
| Steel (AISI) | [steel-aisi.md](materials/steel-aisi.md) | Initial |
## FEA
| Model | File | Status |
|-------|------|--------|
| Static Analysis (SOL 101) | [fea/models/sol101-static.md](fea/models/sol101-static.md) | Pending gap resolution |
## Generations
| Gen | Date | Summary |
|-----|------|---------|
| 001 | 2026-02-09 | Initial KB from intake + technical breakdown |
## Open Tasks
- ❓ G1: Beam length and support conditions
- ❓ G2: Loading definition (point? distributed? self-weight?)
- ❓ G3: Displacement measurement location and DOF
- ❓ G4: Stress constraint scope (whole model? exclude supports?)
- ❓ G5: Geometric feasibility of hole patterns at extremes
- ❓ G6: Result sensors in Beam_sim1.sim
- ❓ G7: NX parametric rebuild reliability across full range
- ❓ G8: Mesh type, density, convergence status
- ❓ G9: 130 MPa stress limit basis (yield? safety factor?)

View File

@@ -0,0 +1,47 @@
# Knowledge Base — Hydrotech Beam
**Project:** Hydrotech Beam Structural Optimization
**Generation:** 001
**Last updated:** 2026-02-09
---
## Overview
Sandwich I-beam optimization for a test fixture. Steel construction with lightening holes in the web. Goal: reduce mass from ~974 kg while meeting displacement (≤ 10 mm) and stress (≤ 130 MPa) constraints.
## Components
| Component | File | Status |
|-----------|------|--------|
| Sandwich Beam | [sandwich-beam.md](components/sandwich-beam.md) | Initial |
## Materials
| Material | File | Status |
|----------|------|--------|
| Steel (AISI) | [steel-aisi.md](materials/steel-aisi.md) | Initial |
## FEA
| Model | File | Status |
|-------|------|--------|
| Static Analysis (SOL 101) | [fea/models/sol101-static.md](fea/models/sol101-static.md) | Pending gap resolution |
## Generations
| Gen | Date | Summary |
|-----|------|---------|
| 001 | 2026-02-09 | Initial KB from intake + technical breakdown |
## Open Tasks
- ❓ G1: Beam length and support conditions
- ❓ G2: Loading definition (point? distributed? self-weight?)
- ❓ G3: Displacement measurement location and DOF
- ❓ G4: Stress constraint scope (whole model? exclude supports?)
- ❓ G5: Geometric feasibility of hole patterns at extremes
- ❓ G6: Result sensors in Beam_sim1.sim
- ❓ G7: NX parametric rebuild reliability across full range
- ❓ G8: Mesh type, density, convergence status
- ❓ G9: 130 MPa stress limit basis (yield? safety factor?)

View File

@@ -1,52 +1,52 @@
# Sandwich Beam
**Type:** Primary structural component
**Material:** Steel (AISI) — see [steel-aisi.md](../materials/steel-aisi.md)
**Status:** Baseline documented, optimization pending
---
## Description
Sandwich I-beam serving as primary load-bearing member in a test fixture assembly. Cross-section features a core layer flanked by face sheets on top and bottom flanges. Web contains a pattern of lightening holes (circular cutouts) to reduce mass.
## Specifications
| Parameter | Value | Units | Source |
|-----------|-------|-------|--------|
| Mass (baseline) | ~974 | kg | NX expression `p173` |
| Tip displacement (baseline) | ~22 | mm | SOL 101 result |
| Half-core thickness | 20 (baseline) | mm | DV range: 1040 |
| Face thickness | 20 (baseline) | mm | DV range: 1040 |
| Hole diameter | 300 (baseline) | mm | DV range: 150450 |
| Hole count | 10 (baseline) | — | DV range: 515 (integer) |
| Beam length | ❓ TBD | mm | Gap G1 |
| Support conditions | ❓ TBD | — | Gap G1 |
## Structural Behavior
*From Technical Breakdown (Gen 001):*
The beam is **bending-dominated**:
| Behavior | Governing Parameters | Notes |
|----------|---------------------|-------|
| Bending stiffness (EI) | Face thickness, core thickness | Faces carry bending stress, core carries shear. Stiffness scales ~quadratically with distance from neutral axis |
| Mass | All four variables | Core and face add material; holes remove material from web |
| Stress concentrations | Hole diameter, hole spacing | Larger holes → higher SCF at edges. Closely spaced holes can interact |
| Shear capacity | Core thickness, hole count, diameter | Holes reduce shear-carrying area |
## Design Variable Interactions
1. **Core × Face** — classic sandwich interaction. Optimal stiffness balances core depth (lever arm) vs face material (bending resistance)
2. **Hole diameter × Hole count** — both remove web material. Large + many could leave insufficient ligament width
3. **Face × Hole diameter** — thicker faces reduce nominal stress, allowing larger holes
4. **Core × Hole diameter** — core thickness determines web height, constrains max feasible hole diameter
## Key Risk
> ⚠️ Baseline FAILS displacement constraint (22 mm vs 10 mm target). Optimizer must increase stiffness by >50% while reducing mass. Feasible region may be tight.
## History
- **Gen 001** (2026-02-09): Initial documentation from intake + technical breakdown
# Sandwich Beam
**Type:** Primary structural component
**Material:** Steel (AISI) — see [steel-aisi.md](../materials/steel-aisi.md)
**Status:** Baseline documented, optimization pending
---
## Description
Sandwich I-beam serving as primary load-bearing member in a test fixture assembly. Cross-section features a core layer flanked by face sheets on top and bottom flanges. Web contains a pattern of lightening holes (circular cutouts) to reduce mass.
## Specifications
| Parameter | Value | Units | Source |
|-----------|-------|-------|--------|
| Mass (baseline) | ~974 | kg | NX expression `p173` |
| Tip displacement (baseline) | ~22 | mm | SOL 101 result |
| Half-core thickness | 20 (baseline) | mm | DV range: 1040 |
| Face thickness | 20 (baseline) | mm | DV range: 1040 |
| Hole diameter | 300 (baseline) | mm | DV range: 150450 |
| Hole count | 10 (baseline) | — | DV range: 515 (integer) |
| Beam length | ❓ TBD | mm | Gap G1 |
| Support conditions | ❓ TBD | — | Gap G1 |
## Structural Behavior
*From Technical Breakdown (Gen 001):*
The beam is **bending-dominated**:
| Behavior | Governing Parameters | Notes |
|----------|---------------------|-------|
| Bending stiffness (EI) | Face thickness, core thickness | Faces carry bending stress, core carries shear. Stiffness scales ~quadratically with distance from neutral axis |
| Mass | All four variables | Core and face add material; holes remove material from web |
| Stress concentrations | Hole diameter, hole spacing | Larger holes → higher SCF at edges. Closely spaced holes can interact |
| Shear capacity | Core thickness, hole count, diameter | Holes reduce shear-carrying area |
## Design Variable Interactions
1. **Core × Face** — classic sandwich interaction. Optimal stiffness balances core depth (lever arm) vs face material (bending resistance)
2. **Hole diameter × Hole count** — both remove web material. Large + many could leave insufficient ligament width
3. **Face × Hole diameter** — thicker faces reduce nominal stress, allowing larger holes
4. **Core × Hole diameter** — core thickness determines web height, constrains max feasible hole diameter
## Key Risk
> ⚠️ Baseline FAILS displacement constraint (22 mm vs 10 mm target). Optimizer must increase stiffness by >50% while reducing mass. Feasible region may be tight.
## History
- **Gen 001** (2026-02-09): Initial documentation from intake + technical breakdown

View File

@@ -0,0 +1,52 @@
# Sandwich Beam
**Type:** Primary structural component
**Material:** Steel (AISI) — see [steel-aisi.md](../materials/steel-aisi.md)
**Status:** Baseline documented, optimization pending
---
## Description
Sandwich I-beam serving as primary load-bearing member in a test fixture assembly. Cross-section features a core layer flanked by face sheets on top and bottom flanges. Web contains a pattern of lightening holes (circular cutouts) to reduce mass.
## Specifications
| Parameter | Value | Units | Source |
|-----------|-------|-------|--------|
| Mass (baseline) | ~974 | kg | NX expression `p173` |
| Tip displacement (baseline) | ~22 | mm | SOL 101 result |
| Half-core thickness | 20 (baseline) | mm | DV range: 1040 |
| Face thickness | 20 (baseline) | mm | DV range: 1040 |
| Hole diameter | 300 (baseline) | mm | DV range: 150450 |
| Hole count | 10 (baseline) | — | DV range: 515 (integer) |
| Beam length | ❓ TBD | mm | Gap G1 |
| Support conditions | ❓ TBD | — | Gap G1 |
## Structural Behavior
*From Technical Breakdown (Gen 001):*
The beam is **bending-dominated**:
| Behavior | Governing Parameters | Notes |
|----------|---------------------|-------|
| Bending stiffness (EI) | Face thickness, core thickness | Faces carry bending stress, core carries shear. Stiffness scales ~quadratically with distance from neutral axis |
| Mass | All four variables | Core and face add material; holes remove material from web |
| Stress concentrations | Hole diameter, hole spacing | Larger holes → higher SCF at edges. Closely spaced holes can interact |
| Shear capacity | Core thickness, hole count, diameter | Holes reduce shear-carrying area |
## Design Variable Interactions
1. **Core × Face** — classic sandwich interaction. Optimal stiffness balances core depth (lever arm) vs face material (bending resistance)
2. **Hole diameter × Hole count** — both remove web material. Large + many could leave insufficient ligament width
3. **Face × Hole diameter** — thicker faces reduce nominal stress, allowing larger holes
4. **Core × Hole diameter** — core thickness determines web height, constrains max feasible hole diameter
## Key Risk
> ⚠️ Baseline FAILS displacement constraint (22 mm vs 10 mm target). Optimizer must increase stiffness by >50% while reducing mass. Feasible region may be tight.
## History
- **Gen 001** (2026-02-09): Initial documentation from intake + technical breakdown

View File

@@ -1,58 +1,58 @@
# Gen 001 — Project Intake + Technical Breakdown
**Date:** 2026-02-09
**Sources:** CEO intake in #project-hydrotech-beam, Technical Lead analysis
**Author:** Manager 🎯
---
## What Happened
1. Antoine submitted the Hydrotech beam optimization request via #project-hydrotech-beam
2. Manager created project folder and CONTEXT.md from intake data
3. Technical Lead produced a full technical breakdown (BREAKDOWN.md)
4. Manager and CEO agreed on project structure (KB-integrated layout)
## Key Findings
### From Intake
- Sandwich I-beam, steel, with lightening holes in web
- 4 design variables (3 continuous + 1 integer)
- Current design: ~974 kg, ~22 mm tip displacement
- Targets: minimize mass, displacement ≤ 10 mm, stress ≤ 130 MPa
### From Technical Breakdown
- **Critical:** Baseline already violates displacement constraint (22 mm vs 10 mm)
- Single-objective formulation recommended (minimize mass, constrain the rest)
- Two-phase approach: DoE (4050 trials) then TPE (60100 trials)
- Significant variable interactions expected (sandwich theory, hole interactions)
- 9 gaps identified needing CEO input
- Overall risk: MEDIUM-HIGH (feasible region may be tight or empty)
## KB Entries Created
- `components/sandwich-beam.md` — component file with specs, behavior, interactions
- `materials/steel-aisi.md` — placeholder, needs NX model data
- `fea/models/sol101-static.md` — solver setup, pending gap resolution
## Decisions Made
- DEC-HB-004: KB-integrated project structure (Approved)
- DEC-HB-005: No Notion, Gitea + .md only (Approved)
- DEC-HB-006: KB skill extension pattern, no fork (Approved)
## Open Items
9 gaps pending CEO input (see [_index.md](../_index.md)):
- G1G2: Geometry and loading (most critical)
- G3G4: Result extraction specifics
- G5: Geometric feasibility at extremes
- G6G8: NX model details
- G9: Stress allowable basis
## Next Steps
1. Resolve gaps G1G9 with Antoine
2. Upload reference models to `models/`
3. Begin NX model introspection
4. Set up first study (DoE)
# Gen 001 — Project Intake + Technical Breakdown
**Date:** 2026-02-09
**Sources:** CEO intake in #project-hydrotech-beam, Technical Lead analysis
**Author:** Manager 🎯
---
## What Happened
1. Antoine submitted the Hydrotech beam optimization request via #project-hydrotech-beam
2. Manager created project folder and CONTEXT.md from intake data
3. Technical Lead produced a full technical breakdown (BREAKDOWN.md)
4. Manager and CEO agreed on project structure (KB-integrated layout)
## Key Findings
### From Intake
- Sandwich I-beam, steel, with lightening holes in web
- 4 design variables (3 continuous + 1 integer)
- Current design: ~974 kg, ~22 mm tip displacement
- Targets: minimize mass, displacement ≤ 10 mm, stress ≤ 130 MPa
### From Technical Breakdown
- **Critical:** Baseline already violates displacement constraint (22 mm vs 10 mm)
- Single-objective formulation recommended (minimize mass, constrain the rest)
- Two-phase approach: DoE (4050 trials) then TPE (60100 trials)
- Significant variable interactions expected (sandwich theory, hole interactions)
- 9 gaps identified needing CEO input
- Overall risk: MEDIUM-HIGH (feasible region may be tight or empty)
## KB Entries Created
- `components/sandwich-beam.md` — component file with specs, behavior, interactions
- `materials/steel-aisi.md` — placeholder, needs NX model data
- `fea/models/sol101-static.md` — solver setup, pending gap resolution
## Decisions Made
- DEC-HB-004: KB-integrated project structure (Approved)
- DEC-HB-005: No Notion, Gitea + .md only (Approved)
- DEC-HB-006: KB skill extension pattern, no fork (Approved)
## Open Items
9 gaps pending CEO input (see [_index.md](../_index.md)):
- G1G2: Geometry and loading (most critical)
- G3G4: Result extraction specifics
- G5: Geometric feasibility at extremes
- G6G8: NX model details
- G9: Stress allowable basis
## Next Steps
1. Resolve gaps G1G9 with Antoine
2. Upload reference models to `models/`
3. Begin NX model introspection
4. Set up first study (DoE)

View File

@@ -0,0 +1,58 @@
# Gen 001 — Project Intake + Technical Breakdown
**Date:** 2026-02-09
**Sources:** CEO intake in #project-hydrotech-beam, Technical Lead analysis
**Author:** Manager 🎯
---
## What Happened
1. Antoine submitted the Hydrotech beam optimization request via #project-hydrotech-beam
2. Manager created project folder and CONTEXT.md from intake data
3. Technical Lead produced a full technical breakdown (BREAKDOWN.md)
4. Manager and CEO agreed on project structure (KB-integrated layout)
## Key Findings
### From Intake
- Sandwich I-beam, steel, with lightening holes in web
- 4 design variables (3 continuous + 1 integer)
- Current design: ~974 kg, ~22 mm tip displacement
- Targets: minimize mass, displacement ≤ 10 mm, stress ≤ 130 MPa
### From Technical Breakdown
- **Critical:** Baseline already violates displacement constraint (22 mm vs 10 mm)
- Single-objective formulation recommended (minimize mass, constrain the rest)
- Two-phase approach: DoE (4050 trials) then TPE (60100 trials)
- Significant variable interactions expected (sandwich theory, hole interactions)
- 9 gaps identified needing CEO input
- Overall risk: MEDIUM-HIGH (feasible region may be tight or empty)
## KB Entries Created
- `components/sandwich-beam.md` — component file with specs, behavior, interactions
- `materials/steel-aisi.md` — placeholder, needs NX model data
- `fea/models/sol101-static.md` — solver setup, pending gap resolution
## Decisions Made
- DEC-HB-004: KB-integrated project structure (Approved)
- DEC-HB-005: No Notion, Gitea + .md only (Approved)
- DEC-HB-006: KB skill extension pattern, no fork (Approved)
## Open Items
9 gaps pending CEO input (see [_index.md](../_index.md)):
- G1G2: Geometry and loading (most critical)
- G3G4: Result extraction specifics
- G5: Geometric feasibility at extremes
- G6G8: NX model details
- G9: Stress allowable basis
## Next Steps
1. Resolve gaps G1G9 with Antoine
2. Upload reference models to `models/`
3. Begin NX model introspection
4. Set up first study (DoE)

View File

@@ -1,46 +1,46 @@
# SOL 101 — Static Analysis
**Simulation:** Beam_sim1.sim
**Solver:** NX Nastran SOL 101 (Linear Static)
**Status:** Pending gap resolution
---
## Setup
| Item | Value | Notes |
|------|-------|-------|
| Solution type | SOL 101 (Linear Static) | Appropriate for this problem |
| Element type | ❓ TBD | Gap G8: CQUAD4/CQUAD8 (shell) or CTETRA/CHEXA (solid)? |
| Mesh density | ❓ TBD | Gap G8: convergence checked? |
| Loading | ❓ TBD | Gap G2: point load? distributed? self-weight? |
| BCs | ❓ TBD | Gap G1: cantilever? simply-supported? |
## Result Extraction
| Output | Method | Expression/Sensor | Status |
|--------|--------|-------------------|--------|
| Mass | NX expression | `p173` | ✅ Known |
| Tip displacement | ❓ Sensor or .f06 parse | TBD | Gap G3, G6 |
| Von Mises stress | ❓ Sensor or .f06 parse | TBD | Gap G4, G6 |
## Solver Considerations
*From Technical Breakdown:*
- **Linear assumption:** 22 mm displacement on likely 2+ m beam → L/δ probably OK. Verify.
- **Mesh sensitivity:** Stress at hole edges is mesh-dependent. Need convergence check (Gap G8).
- **Mesh morphing vs remesh:** Parametric NX models typically remesh on update. Need to confirm behavior across DV range (Gap G7).
- **Runtime estimate:** Single beam, ~10K100K DOF → probably seconds to low minutes per evaluation.
## Validation Checklist
- [ ] Baseline mass matches NX expression `p173`
- [ ] Baseline displacement matches reported ~22 mm
- [ ] Mesh convergence verified at baseline
- [ ] Mesh quality acceptable at DV range extremes
- [ ] Model rebuilds cleanly at all 4 corners of design space
## History
- **Gen 001** (2026-02-09): Initial documentation from technical breakdown. All solver details pending gap resolution.
# SOL 101 — Static Analysis
**Simulation:** Beam_sim1.sim
**Solver:** NX Nastran SOL 101 (Linear Static)
**Status:** Pending gap resolution
---
## Setup
| Item | Value | Notes |
|------|-------|-------|
| Solution type | SOL 101 (Linear Static) | Appropriate for this problem |
| Element type | ❓ TBD | Gap G8: CQUAD4/CQUAD8 (shell) or CTETRA/CHEXA (solid)? |
| Mesh density | ❓ TBD | Gap G8: convergence checked? |
| Loading | ❓ TBD | Gap G2: point load? distributed? self-weight? |
| BCs | ❓ TBD | Gap G1: cantilever? simply-supported? |
## Result Extraction
| Output | Method | Expression/Sensor | Status |
|--------|--------|-------------------|--------|
| Mass | NX expression | `p173` | ✅ Known |
| Tip displacement | ❓ Sensor or .f06 parse | TBD | Gap G3, G6 |
| Von Mises stress | ❓ Sensor or .f06 parse | TBD | Gap G4, G6 |
## Solver Considerations
*From Technical Breakdown:*
- **Linear assumption:** 22 mm displacement on likely 2+ m beam → L/δ probably OK. Verify.
- **Mesh sensitivity:** Stress at hole edges is mesh-dependent. Need convergence check (Gap G8).
- **Mesh morphing vs remesh:** Parametric NX models typically remesh on update. Need to confirm behavior across DV range (Gap G7).
- **Runtime estimate:** Single beam, ~10K100K DOF → probably seconds to low minutes per evaluation.
## Validation Checklist
- [ ] Baseline mass matches NX expression `p173`
- [ ] Baseline displacement matches reported ~22 mm
- [ ] Mesh convergence verified at baseline
- [ ] Mesh quality acceptable at DV range extremes
- [ ] Model rebuilds cleanly at all 4 corners of design space
## History
- **Gen 001** (2026-02-09): Initial documentation from technical breakdown. All solver details pending gap resolution.

View File

@@ -0,0 +1,46 @@
# SOL 101 — Static Analysis
**Simulation:** Beam_sim1.sim
**Solver:** NX Nastran SOL 101 (Linear Static)
**Status:** Pending gap resolution
---
## Setup
| Item | Value | Notes |
|------|-------|-------|
| Solution type | SOL 101 (Linear Static) | Appropriate for this problem |
| Element type | ❓ TBD | Gap G8: CQUAD4/CQUAD8 (shell) or CTETRA/CHEXA (solid)? |
| Mesh density | ❓ TBD | Gap G8: convergence checked? |
| Loading | ❓ TBD | Gap G2: point load? distributed? self-weight? |
| BCs | ❓ TBD | Gap G1: cantilever? simply-supported? |
## Result Extraction
| Output | Method | Expression/Sensor | Status |
|--------|--------|-------------------|--------|
| Mass | NX expression | `p173` | ✅ Known |
| Tip displacement | ❓ Sensor or .f06 parse | TBD | Gap G3, G6 |
| Von Mises stress | ❓ Sensor or .f06 parse | TBD | Gap G4, G6 |
## Solver Considerations
*From Technical Breakdown:*
- **Linear assumption:** 22 mm displacement on likely 2+ m beam → L/δ probably OK. Verify.
- **Mesh sensitivity:** Stress at hole edges is mesh-dependent. Need convergence check (Gap G8).
- **Mesh morphing vs remesh:** Parametric NX models typically remesh on update. Need to confirm behavior across DV range (Gap G7).
- **Runtime estimate:** Single beam, ~10K100K DOF → probably seconds to low minutes per evaluation.
## Validation Checklist
- [ ] Baseline mass matches NX expression `p173`
- [ ] Baseline displacement matches reported ~22 mm
- [ ] Mesh convergence verified at baseline
- [ ] Mesh quality acceptable at DV range extremes
- [ ] Model rebuilds cleanly at all 4 corners of design space
## History
- **Gen 001** (2026-02-09): Initial documentation from technical breakdown. All solver details pending gap resolution.

View File

@@ -1,26 +1,26 @@
# Steel (AISI)
**Status:** Placeholder — needs full material card details
---
## Properties
| Property | Value | Units | Source |
|----------|-------|-------|--------|
| Standard | AISI | — | Intake |
| Grade | ❓ TBD | — | Need from NX model |
| Yield strength | ❓ TBD | MPa | — |
| E (Young's modulus) | ❓ TBD | GPa | — |
| Density | ❓ TBD | kg/m³ | — |
| Poisson's ratio | ❓ TBD | — | — |
## Notes
- Stress allowable of 130 MPa was given as constraint — need to confirm basis (Gap G9)
- If yield is ~250 MPa, then 130 MPa implies SF ≈ 1.9 — conservative
- Material card should be extracted from NX model during introspection
## History
- **Gen 001** (2026-02-09): Placeholder from intake — "Steel (AISI)" is all we have
# Steel (AISI)
**Status:** Placeholder — needs full material card details
---
## Properties
| Property | Value | Units | Source |
|----------|-------|-------|--------|
| Standard | AISI | — | Intake |
| Grade | ❓ TBD | — | Need from NX model |
| Yield strength | ❓ TBD | MPa | — |
| E (Young's modulus) | ❓ TBD | GPa | — |
| Density | ❓ TBD | kg/m³ | — |
| Poisson's ratio | ❓ TBD | — | — |
## Notes
- Stress allowable of 130 MPa was given as constraint — need to confirm basis (Gap G9)
- If yield is ~250 MPa, then 130 MPa implies SF ≈ 1.9 — conservative
- Material card should be extracted from NX model during introspection
## History
- **Gen 001** (2026-02-09): Placeholder from intake — "Steel (AISI)" is all we have

View File

@@ -0,0 +1,26 @@
# Steel (AISI)
**Status:** Placeholder — needs full material card details
---
## Properties
| Property | Value | Units | Source |
|----------|-------|-------|--------|
| Standard | AISI | — | Intake |
| Grade | ❓ TBD | — | Need from NX model |
| Yield strength | ❓ TBD | MPa | — |
| E (Young's modulus) | ❓ TBD | GPa | — |
| Density | ❓ TBD | kg/m³ | — |
| Poisson's ratio | ❓ TBD | — | — |
## Notes
- Stress allowable of 130 MPa was given as constraint — need to confirm basis (Gap G9)
- If yield is ~250 MPa, then 130 MPa implies SF ≈ 1.9 — conservative
- Material card should be extracted from NX model during introspection
## History
- **Gen 001** (2026-02-09): Placeholder from intake — "Steel (AISI)" is all we have

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -19,5 +19,7 @@ Studies should copy these to their own `model/` folder and modify there.
## Notes
- Model files will be added once Syncthing/file transfer is set up
- ⏳ Awaiting Syncthing setup for project folder sync (dalidou ↔ server)
- Model files will appear here once sync is live
- Verify model rebuild across full design variable range before optimization
- **Do NOT modify these reference copies** — studies copy them to their own `model/` folder

View File

@@ -0,0 +1,499 @@
# Optimization Strategy — Hydrotech Beam DoE & Landscape Mapping
**Study:** `01_doe_landscape`
**Project:** Hydrotech Beam Structural Optimization
**Author:** ⚡ Optimizer Agent
**Date:** 2025-02-09
**Status:** DRAFT — Awaiting review
**References:** [BREAKDOWN.md](../../BREAKDOWN.md), [DECISIONS.md](../../DECISIONS.md), [CONTEXT.md](../../CONTEXT.md)
---
## 1. Problem Formulation
### 1.1 Objective
$$\min_{x} \quad f(x) = \text{mass}(x) \quad [\text{kg}]$$
Single-objective minimization of total beam mass. This aligns with DEC-HB-001 (approved by Tech Lead, pending CEO confirmation).
### 1.2 Constraints
| ID | Constraint | Operator | Limit | Units | Source |
|----|-----------|----------|-------|-------|--------|
| g₁ | Tip displacement | ≤ | 10.0 | mm | NX Nastran SOL 101 — displacement sensor at beam tip |
| g₂ | Max von Mises stress | ≤ | 130.0 | MPa | NX Nastran SOL 101 — max elemental nodal VM stress |
Both are **hard constraints** — no trade-off or relaxation without CEO approval.
### 1.3 Design Variables
| ID | NX Expression | Type | Lower | Upper | Baseline | Units | Notes |
|----|---------------|------|-------|-------|----------|-------|-------|
| DV1 | `beam_half_core_thickness` | Continuous | 10 | 40 | 20 | mm | Core half-thickness; stiffness scales ~quadratically via sandwich effect |
| DV2 | `beam_face_thickness` | Continuous | 10 | 40 | 20 | mm | Face sheet thickness; primary bending stiffness contributor |
| DV3 | `holes_diameter` | Continuous | 150 | 450 | 300 | mm | Lightening hole diameter; mass ∝ d² reduction |
| DV4 | `hole_count` | **Integer** | 5 | 15 | 10 | — | Number of lightening holes; 11 discrete levels |
**Total design space:** 3 continuous × 1 integer (11 levels) = effectively 3D continuous × 11 slices.
### 1.4 Integer Handling
Per DEC-HB-003, `hole_count` is treated as a **true integer** throughout:
- **Phase 1 (LHS):** Generate continuous LHS, round DV4 to nearest integer. Use stratified integer sampling to ensure coverage across all 11 levels.
- **Phase 2 (TPE):** Optuna `IntDistribution(5, 15)` — native integer support, no rounding hacks.
- **NX rebuild:** The model requires integer hole count. Non-integer values will cause geometry failures.
### 1.5 Baseline Assessment
| Metric | Baseline Value | Constraint | Status |
|--------|---------------|------------|--------|
| Mass | ~974 kg | (minimize) | Overbuilt — room to reduce |
| Tip displacement | ~22 mm | ≤ 10 mm | ❌ **FAILS** by 120% |
| VM stress | (unknown) | ≤ 130 MPa | ⚠️ Assumed OK but unconfirmed |
> ⚠️ **Critical:** The baseline design **violates** the displacement constraint (22 mm vs 10 mm limit). The optimizer must first find the feasible region before it can meaningfully minimize mass. This shapes the entire strategy.
---
## 2. Algorithm Selection
### 2.1 Tech Lead's Recommendation
DEC-HB-002 proposes a two-phase strategy:
- **Phase 1:** Latin Hypercube Sampling (LHS) — 4050 trials
- **Phase 2:** TPE via Optuna — 60100 trials
### 2.2 My Assessment: **CONFIRMED with refinements**
The two-phase approach is the right call. Here's why, and what I'd adjust:
#### Why LHS → TPE is correct for this problem
| Factor | Implication | Algorithm Fit |
|--------|------------|---------------|
| 4 design variables (low-dim) | All methods work; sample efficiency less critical | Any |
| 1 integer variable | Need native mixed-type support | TPE ✓, CMA-ES ≈ (rounding) |
| Infeasible baseline | Must map feasibility BEFORE optimizing | LHS first ✓ |
| Expected significant interactions (DV1×DV2, DV3×DV4) | Need space-filling to detect interactions | LHS ✓ |
| Potentially narrow feasible region | Risk of missing it with random search | LHS gives systematic coverage ✓ |
| NX-in-the-loop (medium cost) | ~100-200 trials is budget-appropriate | TPE efficient enough ✓ |
#### What I'd modify
1. **Phase 1 budget: 50 trials (not 40).** With 4 variables, we want at least 10× the dimensionality for a reliable DoE. 50 trials also divides cleanly for stratified integer sampling (≈4-5 trials per hole_count level).
2. **Enqueue baseline as Trial 0.** LAC critical lesson: CMA-ES doesn't evaluate x0 first. While we're using LHS (not CMA-ES), the same principle applies — **always evaluate the baseline explicitly** so we have a verified anchor point. This also validates the extractor pipeline before burning 50 trials.
3. **Phase 2 budget: 80 trials (flexible 60-100).** Start with 60, apply convergence criteria (Section 6), extend to 100 if still improving.
4. **Seed Phase 2 from Phase 1 data.** Use Optuna's `enqueue_trial()` to warm-start TPE with the best feasible point(s) from the DoE. This avoids the TPE startup penalty (first `n_startup_trials` are random).
#### Algorithms NOT selected (and why)
| Algorithm | Why Not |
|-----------|---------|
| **CMA-ES** | Good option, but integer rounding is a hack; doesn't evaluate x0 first (LAC lesson); TPE is equally good at 4D |
| **NSGA-II** | Overkill for single-objective; population size wastes budget |
| **Surrogate + L-BFGS** | **LAC CRITICAL: Gradient descent on surrogates finds fake optima.** V5 mirror study: L-BFGS was 22% WORSE than pure TPE (WS=325 vs WS=290). V6 confirmed simple TPE beats complex surrogate methods. Do not use. |
| **SOL 200 (Nastran native)** | No integer support for hole_count; gradient-based so may miss global optimum; more NX setup effort. Keep as backup (Tech Lead's suggestion). |
| **Nelder-Mead** | No integer support; poor exploration; would miss the feasible region |
### 2.3 Final Algorithm Configuration
```
Phase 1: LHS DoE
- Trials: 50 (+ 1 baseline = 51 total)
- Sampling: Maximin LHS, DV4 rounded to nearest integer
- Purpose: Landscape mapping, feasibility identification, sensitivity analysis
Phase 2: TPE Optimization
- Trials: 60-100 (adaptive, see convergence criteria)
- Sampler: Optuna TPEsampler
- n_startup_trials: 0 (warm-started from Phase 1 best)
- Constraint handling: Optuna constraint interface with Deb's rules
- Purpose: Converge to minimum-mass feasible design
Total budget: 111-151 evaluations
```
---
## 3. Constraint Handling
### 3.1 The Challenge
The baseline FAILS the displacement constraint by 120% (22 mm vs 10 mm). This means:
- A significant portion of the design space may be infeasible
- Random sampling may return few or zero feasible points
- The optimizer must navigate toward feasibility AND optimality simultaneously
### 3.2 Approach: Deb's Feasibility Rules (Constraint Domination)
For ranking solutions during optimization, use **Deb's feasibility rules** (Deb 2000):
1. **Feasible vs feasible** → compare by objective (lower mass wins)
2. **Feasible vs infeasible** → feasible always wins
3. **Infeasible vs infeasible** → lower total constraint violation wins
This is implemented via Optuna's constraint interface:
```python
def constraints(trial):
"""Return constraint violations (negative = feasible, positive = infeasible)."""
disp = trial.user_attrs["tip_displacement"]
stress = trial.user_attrs["max_von_mises"]
return [
disp - 10.0, # ≤ 0 means displacement ≤ 10 mm
stress - 130.0, # ≤ 0 means stress ≤ 130 MPa
]
```
### 3.3 Why NOT Penalty Functions
| Method | Pros | Cons | Verdict |
|--------|------|------|---------|
| **Deb's rules** (selected) | No tuning params; feasible always beats infeasible; explores infeasible region for learning | Requires custom Optuna integration | ✅ Best for this case |
| **Quadratic penalty** | Simple to implement | Penalty weight requires tuning; wrong weight → optimizer ignores constraint OR over-penalizes | ❌ Fragile |
| **Adaptive penalty** | Self-tuning | Complex implementation; may oscillate | ❌ Over-engineered for 4 DVs |
| **Death penalty** (reject infeasible) | Simplest | With infeasible baseline, may reject 80%+ of trials → wasted budget | ❌ Dangerous |
### 3.4 Phase 1 (DoE) Constraint Handling
During the DoE phase, **record all results without filtering.** Every trial runs, every result is stored. Infeasible points are valuable for:
- Mapping the feasibility boundary
- Training the TPE model in Phase 2
- Understanding which variables drive constraint violation
### 3.5 Constraint Margin Buffer
Consider a 5% inner margin during optimization to account for numerical noise:
- Displacement target for optimizer: ≤ 9.5 mm (vs hard limit 10.0 mm)
- Stress target for optimizer: ≤ 123.5 MPa (vs hard limit 130.0 MPa)
The hard limits remain 10 mm / 130 MPa for final validation. The buffer prevents the optimizer from converging to designs that are right on the boundary and may flip infeasible under mesh variation.
---
## 4. Search Space Analysis
### 4.1 Bound Reasonableness
| Variable | Range | Span | Concern |
|----------|-------|------|---------|
| DV1: half_core_thickness | 1040 mm | 4× range | Reasonable. Lower bound = thin core, upper = thick. Stiffness-mass trade-off |
| DV2: face_thickness | 1040 mm | 4× range | Reasonable. 10 mm face is already substantial for steel |
| DV3: holes_diameter | 150450 mm | 3× range | ⚠️ **Needs geometric check** — see §4.2 |
| DV4: hole_count | 515 | 3× range | ⚠️ **Needs geometric check** — see §4.2 |
### 4.2 Geometric Feasibility: Hole Overlap Analysis
**Critical concern:** At extreme DV3 × DV4 combinations, holes may overlap or leave insufficient ligament (material between holes).
#### Overlap condition
If the beam web has usable length `L_web` and `n` holes of diameter `d` are equally spaced:
```
Spacing between hole centers = L_web / (n + 1)
Ligament between holes = spacing - d = L_web/(n+1) - d
```
For **no overlap**, we need: `L_web/(n+1) - d > 0`, i.e., `d < L_web/(n+1)`
#### Worst case: n=15 holes, d=450 mm
```
Required: L_web > (n+1) × d = 16 × 450 = 7200 mm = 7.2 m
```
If the beam is shorter than ~7.2 m, this combination is **geometrically infeasible**.
#### Minimum ligament width
For structural integrity and mesh quality, a minimum ligament of ~20-30 mm is advisable:
```
Minimum ligament constraint: L_web/(n+1) - d ≥ 30 mm
```
> ⚠️ **ACTION REQUIRED:** We need to know the beam web length to validate bounds. If beam length < 7.2 m, either reduce max hole_count, reduce max hole_diameter, or add a geometric feasibility pre-check that skips NX evaluation for impossible geometries.
### 4.3 Hole-to-Web-Height Ratio
The hole diameter must also fit within the web height. If web height = 2 × half_core_thickness + 2 × face_thickness (approximate):
```
At minimum DV1=10, DV2=10: web_height ≈ 2×10 + 2×10 = 40 mm → max hole = 40 mm
```
But holes_diameter goes up to 450 mm — this suggests the web height is substantially larger than what the parametric cross-section variables alone define, OR the holes are in a different part of the geometry (e.g., a wider flange region or a tall web independent of core/face dimensions).
> ⚠️ **ACTION REQUIRED:** Clarify the geometric relationship between DV1/DV2 and the web where holes are placed. The holes may be in a different structural member than the sandwich faces.
### 4.4 Expected Feasible Region
Based on the physics (Tech Lead's analysis §1.2 and §1.3):
| To reduce displacement (currently 22→10 mm) | Effect on mass |
|----------------------------------------------|---------------|
| ↑ DV1 (thicker core) | ↑ mass (but stiffness scales ~d², mass scales ~d) → **efficient** |
| ↑ DV2 (thicker face) | ↑ mass (direct) |
| ↓ DV3 (smaller holes) | ↑ mass (more web material) |
| ↓ DV4 (fewer holes) | ↑ mass (more web material) |
**Prediction:** The feasible region (displacement ≤ 10 mm) likely requires:
- DV1 in upper range (25-40 mm) — the sandwich effect is the most mass-efficient stiffness lever
- DV2 moderate (15-30 mm) — thicker faces help stiffness but cost mass directly
- DV3 and DV4 constrained by stress — large/many holes save mass but increase stress
The optimizer should find a "sweet spot" where core thickness provides stiffness, and holes are sized to save mass without violating stress limits.
### 4.5 Estimated Design Space Volume
- DV1: 30 mm span (continuous)
- DV2: 30 mm span (continuous)
- DV3: 300 mm span (continuous)
- DV4: 11 integer levels
Total configurations: effectively infinite (3 continuous), but the integer dimension creates 11 "slices" of the space. With 50 DoE trials, we get ~4-5 trials per slice — sufficient for trend identification.
---
## 5. Trial Budget & Compute Estimate
### 5.1 Budget Breakdown
| Phase | Trials | Purpose |
|-------|--------|---------|
| **Trial 0** | 1 | Baseline validation (enqueued) |
| **Phase 1: LHS DoE** | 50 | Landscape mapping, feasibility, sensitivity |
| **Phase 2: TPE** | 60100 | Directed optimization |
| **Validation** | 35 | Confirm optimum, check mesh sensitivity |
| **Total** | **114156** | |
### 5.2 Compute Time Estimate
| Parameter | Estimate | Notes |
|-----------|----------|-------|
| DOF count | 10K100K | Steel beam, SOL 101 |
| Single solve time | 30s3min | Depends on mesh density |
| Model rebuild time | 1030s | NX parametric update + remesh |
| Total per trial | 14 min | Rebuild + solve + extraction |
| Phase 1 (51 trials) | 13.5 hrs | |
| Phase 2 (60100 trials) | 17 hrs | |
| **Total compute** | **210 hrs** | Likely ~45 hrs |
### 5.3 Budget Justification
For 4 design variables, rule-of-thumb budgets:
- **Minimum viable:** 10 × n_vars = 40 trials (DoE only)
- **Standard:** 25 × n_vars = 100 trials (DoE + optimization)
- **Thorough:** 50 × n_vars = 200 trials (with validation)
Our budget of 114156 falls in the **standard-to-thorough** range. Appropriate for a first study where we're mapping an unknown landscape with an infeasible baseline.
---
## 6. Convergence Criteria
### 6.1 Phase 1 (DoE) — No Convergence Criteria
The DoE runs all 50 planned trials. It's not iterative — it's a one-shot space-filling design. Stop conditions:
- All 50 trials complete (or fail with documented errors)
- **Early abort:** If >80% of trials fail to solve (NX crashes), stop and investigate
### 6.2 Phase 2 (TPE) — Convergence Criteria
| Criterion | Threshold | Action |
|-----------|-----------|--------|
| **Improvement stall** | Best feasible objective unchanged for 20 consecutive trials | Consider stopping |
| **Relative improvement** | < 1% improvement over last 20 trials | Consider stopping |
| **Budget exhausted** | 100 trials completed in Phase 2 | Hard stop |
| **Perfect convergence** | Multiple trials within 0.5% of each other from different regions | Confident optimum found |
| **Minimum budget** | Always run at least 60 trials in Phase 2 | Ensures adequate exploration |
### 6.3 Decision Logic
```
After 60 Phase 2 trials:
IF best_feasible improved by >2% in last 20 trials → continue to 80
IF no feasible solution found → STOP, escalate (see §7.1)
ELSE → assess convergence, decide 80 or 100
After 80 Phase 2 trials:
IF still improving >1% per 20 trials → continue to 100
ELSE → STOP, declare converged
After 100 Phase 2 trials:
HARD STOP regardless
```
### 6.4 Phase 1 → Phase 2 Gate
Before starting Phase 2, review DoE results:
| Check | Action if FAIL |
|-------|---------------|
| At least 5 feasible points found | If 0 feasible: expand bounds or relax constraints (escalate to CEO) |
| NX solve success rate > 80% | If <80%: investigate failures, fix model, re-run failed trials |
| No systematic NX crashes at bounds | If crashes: tighten bounds away from failure region |
| Sensitivity trends visible | If flat: check extractors, may be reading wrong output |
---
## 7. Risk Mitigation
### 7.1 Risk: Feasible Region is Empty
**Likelihood: Medium** (baseline fails displacement by 120%)
**Detection:** After Phase 1, zero feasible points found.
**Mitigation ladder:**
1. **Check the data** — Are extractors reading correctly? Validate against manual NX check.
2. **Examine near-feasible** — Find the trial closest to feasibility. How far off? If displacement = 10.5 mm, we're close. If displacement = 18 mm, we have a problem.
3. **Targeted exploration** — Run additional trials at extreme stiffness (max DV1, max DV2, min DV3, min DV4). If even the stiffest/heaviest design fails, the constraint is physically impossible with this geometry.
4. **Constraint relaxation** — Propose to CEO: relax displacement to 12 or 15 mm. Document the mass-displacement Pareto front from DoE data to support the discussion.
5. **Geometric redesign** — If the problem is fundamentally infeasible, the beam geometry needs redesign (out of optimization scope).
### 7.2 Risk: NX Crashes at Parameter Extremes
**Likelihood: Medium** (LAC: rib_thickness had undocumented CAD constraint at 9mm, causing 34% failure rate in V13)
**Detection:** Solver returns no results for certain parameter combinations.
**Mitigation:**
1. **Pre-flight corner tests** — Before Phase 1, manually test the 16 corners of the design space (2⁴ combinations of min/max for each variable). This catches geometric rebuild failures early.
2. **Error-handling in run script** — Every trial must catch exceptions and log:
- NX rebuild failure (geometry Boolean crash)
- Meshing failure (degenerate elements)
- Solver failure (singularity, divergence)
- Extraction failure (missing result)
3. **Infeasible-by-default** — If a trial fails for any reason, record it as infeasible with maximum constraint violation (displacement=9999, stress=9999). This lets Deb's rules naturally steer away from crashing regions.
4. **NEVER kill NX processes directly** — LAC CRITICAL RULE. Use NXSessionManager.close_nx_if_allowed() only. If NX hangs, implement a timeout (e.g., 10 min per trial) and let NX time out gracefully.
### 7.3 Risk: Mesh-Dependent Stress Results
**Likelihood: Medium** (stress at hole edges is mesh-sensitive)
**Mitigation:**
1. **Mesh convergence pre-study** — Run baseline at 3 mesh densities. If stress varies >10%, refine mesh or use stress averaging region.
2. **Consistent mesh controls** — Ensure NX applies the same mesh size/refinement strategy regardless of parameter values. The parametric model should have mesh controls tied to hole geometry.
3. **Stress extraction method** — Use elemental nodal stress (conservative) per LAC success pattern. Note: pyNastran returns stress in kPa for NX kg-mm-s unit system — **divide by 1000 for MPa**.
### 7.4 Risk: Surrogate Temptation
**Mitigation: DON'T DO IT (yet).**
LAC lessons from the M1 Mirror project are unequivocal:
- V5 surrogate + L-BFGS was 22% **worse** than V6 pure TPE
- MLP surrogates have smooth gradients everywhere → L-BFGS descends to fake optima outside training distribution
- No uncertainty quantification = no way to detect out-of-distribution predictions
With only 4 variables and affordable FEA (~2 min/trial), direct FEA evaluation via TPE is both simpler and more reliable. Surrogate methods should only be considered if:
- FEA solve time exceeds 30 minutes per trial, AND
- We have 100+ validated training points, AND
- We use ensemble surrogates with uncertainty quantification (SYS_16 protocol)
### 7.5 Risk: Study Corruption
**Mitigation:** LAC CRITICAL — **Always copy working studies, never rewrite from scratch.**
- Phase 2 study will be created by **copying** the Phase 1 study directory and adding optimization logic
- Never modify `run_optimization.py` in-place for a new phase — copy to a new version
- Git-commit the study directory after each phase completion
---
## 8. AtomizerSpec Draft
See [`atomizer_spec_draft.json`](./atomizer_spec_draft.json) for the full JSON config.
### 8.1 Key Configuration Decisions
| Setting | Value | Rationale |
|---------|-------|-----------|
| `algorithm.phase1.type` | `LHS` | Space-filling DoE for landscape mapping |
| `algorithm.phase2.type` | `TPE` | Native mixed-integer, sample-efficient, LAC-proven |
| `hole_count.type` | `integer` | DEC-HB-003: true integer, no rounding |
| `constraint_handling` | `deb_feasibility_rules` | Best for infeasible baseline |
| `baseline_trial` | `enqueued` | LAC lesson: always validate baseline first |
| `penalty_config.method` | `deb_rules` | No penalty weight tuning needed |
### 8.2 Extractor Requirements
| ID | Type | Output | Source | Notes |
|----|------|--------|--------|-------|
| `ext_001` | `expression` | `mass` | NX expression `p173` | Direct read from NX |
| `ext_002` | `displacement` | `tip_displacement` | SOL 101 result sensor or .op2 parse | ⚠️ Need sensor setup or node ID |
| `ext_003` | `stress` | `max_von_mises` | SOL 101 elemental nodal | kPa → MPa conversion needed |
### 8.3 Open Items for Spec Finalization
Before this spec can be promoted from `_draft` to production:
1. **Beam web length** — Required to validate DV3 × DV4 geometric feasibility
2. **Displacement extraction method** — Sensor in .sim, or node ID for .op2 parsing?
3. **Stress extraction scope** — Whole model max, or specific element group?
4. **NX expression names confirmed** — Verify `p173` is mass, confirm displacement/stress expression names
5. **Solver runtime benchmark** — Time one SOL 101 run to refine compute estimates
6. **Corner test results** — Validate model rebuilds at all 16 bound corners
---
## 9. Execution Plan Summary
```
┌─────────────────────────────────────────────────────────────────┐
│ HYDROTECH BEAM OPTIMIZATION │
│ Study: 01_doe_landscape │
├─────────────────────────────────────────────────────────────────┤
│ │
│ PRE-FLIGHT (before any trials) │
│ ├── Validate baseline: run Trial 0, verify mass/disp/stress │
│ ├── Corner tests: 16 extreme combinations, check NX rebuilds │
│ ├── Mesh convergence: 3 density levels at baseline │
│ └── Confirm extractors: mass, displacement, stress pipelines │
│ │
│ PHASE 1: DoE LANDSCAPE (51 trials) │
│ ├── Trial 0: Baseline (enqueued) │
│ ├── Trials 1-50: LHS with integer rounding for hole_count │
│ ├── Analysis: sensitivity, interaction, feasibility mapping │
│ └── GATE: ≥5 feasible? NX success >80%? Proceed/escalate │
│ │
│ PHASE 2: TPE OPTIMIZATION (60-100 trials) │
│ ├── Warm-start from best Phase 1 feasible point(s) │
│ ├── Deb's feasibility rules for constraint handling │
│ ├── Convergence check every 20 trials │
│ └── Hard stop at 100 trials │
│ │
│ VALIDATION (3-5 trials) │
│ ├── Re-run best design to confirm repeatability │
│ ├── Perturb ±5% on each variable to check sensitivity │
│ └── Document final design with full NX results │
│ │
│ TOTAL: 114-156 NX evaluations | ~4-5 hours compute │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## 10. LAC Lessons Incorporated
| LAC Lesson | Source | How Applied |
|------------|--------|-------------|
| CMA-ES doesn't evaluate x0 first | Mirror V7 failure | Baseline enqueued as Trial 0 for both phases |
| Surrogate + L-BFGS = fake optima | Mirror V5 failure | No surrogates in this study; direct FEA only |
| Never kill NX processes directly | Dec 2025 incident | Timeout-based error handling; NXSessionManager only |
| Copy working studies, never rewrite | Mirror V5 failure | Phase 2 created by copying Phase 1 |
| pyNastran stress in kPa | Support arm success | Extractor divides by 1000 for MPa |
| CAD constraints can limit bounds | Mirror V13 (rib_thickness) | Pre-flight corner tests before DoE |
| Always include README.md | Repeated failures (Dec 2025, Jan 2026) | README.md created with study |
| Simple beats complex (TPE > surrogate) | Mirror V6 vs V5 | TPE selected over surrogate-based methods |
---
*⚡ Optimizer — The algorithm is the strategy.*

View File

@@ -0,0 +1,71 @@
# Study: 01_doe_landscape — Hydrotech Beam
> See [../../README.md](../../README.md) for project overview.
## Purpose
Map the design space of the Hydrotech sandwich I-beam to identify feasible regions, characterize variable sensitivities, and converge on a minimum-mass design that satisfies displacement and stress constraints.
## Quick Facts
| Item | Value |
|------|-------|
| **Objective** | Minimize mass (kg) |
| **Constraints** | Tip displacement ≤ 10 mm, Von Mises stress ≤ 130 MPa |
| **Design variables** | 4 (3 continuous + 1 integer) |
| **Algorithm** | Phase 1: LHS DoE (50 trials) → Phase 2: TPE (60-100 trials) |
| **Total budget** | 114156 NX evaluations |
| **Estimated compute** | ~45 hours |
| **Status** | DRAFT — Awaiting pre-flight checks and review |
## Design Variables
| ID | Name | Range | Type | Baseline |
|----|------|-------|------|----------|
| DV1 | `beam_half_core_thickness` | 1040 mm | Continuous | 20 mm |
| DV2 | `beam_face_thickness` | 1040 mm | Continuous | 20 mm |
| DV3 | `holes_diameter` | 150450 mm | Continuous | 300 mm |
| DV4 | `hole_count` | 515 | Integer | 10 |
## Baseline Performance
| Metric | Value | Constraint | Status |
|--------|-------|------------|--------|
| Mass | ~974 kg | minimize | Overbuilt |
| Tip displacement | ~22 mm | ≤ 10 mm | ❌ FAILS |
| VM stress | unknown | ≤ 130 MPa | ⚠️ TBD |
## Key Decisions
- **Single-objective** formulation (DEC-HB-001)
- **Two-phase** algorithm: LHS → TPE (DEC-HB-002)
- **True integer** handling for hole_count (DEC-HB-003)
- **Deb's feasibility rules** for constraint handling (infeasible baseline)
- **Baseline enqueued** as Trial 0 (LAC lesson)
## Files
| File | Description |
|------|-------------|
| `OPTIMIZATION_STRATEGY.md` | Full strategy document (problem formulation, algorithm selection, risk mitigation) |
| `atomizer_spec_draft.json` | AtomizerSpec configuration skeleton (DRAFT — open items must be resolved) |
| `README.md` | This file |
## Open Items Before Execution
1. Beam web length needed (geometric feasibility of hole patterns)
2. Displacement extraction method (sensor vs .op2 node parsing)
3. Stress extraction scope (whole model vs element group)
4. Baseline stress measurement
5. SOL 101 runtime benchmark
6. Corner test validation (16 bound combinations)
## References
- [BREAKDOWN.md](../../BREAKDOWN.md) — Tech Lead's technical analysis
- [DECISIONS.md](../../DECISIONS.md) — Decision log
- [CONTEXT.md](../../CONTEXT.md) — Project context
---
*Created by ⚡ Optimizer Agent | 2026-02-09*

View File

@@ -0,0 +1,302 @@
{
"meta": {
"version": "2.0",
"created": "2026-02-09T12:00:00Z",
"modified": "2026-02-09T12:00:00Z",
"created_by": "optimizer-agent",
"modified_by": "optimizer-agent",
"study_name": "01_doe_landscape",
"description": "Hydrotech Beam — DoE landscape mapping + TPE optimization. Minimize mass subject to displacement and stress constraints.",
"tags": ["hydrotech-beam", "doe", "landscape", "tpe", "single-objective"]
},
"model": {
"sim": {
"path": "models/Beam_sim1.sim",
"solver": "nastran"
},
"part": "models/Beam.prt",
"fem": "models/Beam_fem1.fem",
"idealized": "models/Beam_fem1_i.prt"
},
"design_variables": [
{
"id": "dv_001",
"name": "beam_half_core_thickness",
"expression_name": "beam_half_core_thickness",
"type": "continuous",
"bounds": {
"min": 10,
"max": 40
},
"baseline": 20,
"units": "mm",
"enabled": true,
"description": "Core half-thickness. Stiffness scales ~quadratically via sandwich effect (lever arm). Also adds core mass linearly."
},
{
"id": "dv_002",
"name": "beam_face_thickness",
"expression_name": "beam_face_thickness",
"type": "continuous",
"bounds": {
"min": 10,
"max": 40
},
"baseline": 20,
"units": "mm",
"enabled": true,
"description": "Face sheet thickness. Primary bending stiffness contributor AND primary mass contributor. Key trade-off variable."
},
{
"id": "dv_003",
"name": "holes_diameter",
"expression_name": "holes_diameter",
"type": "continuous",
"bounds": {
"min": 150,
"max": 450
},
"baseline": 300,
"units": "mm",
"enabled": true,
"description": "Lightening hole diameter. Mass reduction scales with d². Stress concentration scales with hole size. Geometric feasibility depends on beam web length."
},
{
"id": "dv_004",
"name": "hole_count",
"expression_name": "hole_count",
"type": "integer",
"bounds": {
"min": 5,
"max": 15
},
"baseline": 10,
"units": "",
"enabled": true,
"description": "Number of lightening holes in the web. Integer variable (11 levels). Interacts strongly with holes_diameter for geometric feasibility."
}
],
"extractors": [
{
"id": "ext_001",
"name": "Mass Extractor",
"type": "expression",
"config": {
"expression_name": "p173",
"description": "Total beam mass from NX expression"
},
"outputs": [
{
"name": "mass",
"metric": "total",
"units": "kg"
}
]
},
{
"id": "ext_002",
"name": "Displacement Extractor",
"type": "displacement",
"config": {
"method": "result_sensor_or_op2",
"component": "magnitude",
"location": "beam_tip",
"description": "Tip displacement magnitude from SOL 101. Preferred: NX result sensor. Fallback: parse .op2 at tip node ID.",
"TODO": "Confirm displacement sensor exists in Beam_sim1.sim OR identify tip node ID"
},
"outputs": [
{
"name": "tip_displacement",
"metric": "max_magnitude",
"units": "mm"
}
]
},
{
"id": "ext_003",
"name": "Stress Extractor",
"type": "stress",
"config": {
"method": "op2_elemental_nodal",
"stress_type": "von_mises",
"scope": "all_elements",
"unit_conversion": "kPa_to_MPa",
"description": "Max von Mises stress (elemental nodal) from SOL 101. pyNastran returns kPa for NX kg-mm-s units — divide by 1000 for MPa.",
"TODO": "Verify element types in model (CQUAD4? CTETRA? CHEXA?) and confirm stress scope"
},
"outputs": [
{
"name": "max_von_mises",
"metric": "max",
"units": "MPa"
}
]
}
],
"objectives": [
{
"id": "obj_001",
"name": "Minimize beam mass",
"direction": "minimize",
"weight": 1.0,
"source": {
"extractor_id": "ext_001",
"output_name": "mass"
},
"units": "kg"
}
],
"constraints": [
{
"id": "con_001",
"name": "Tip displacement limit",
"type": "hard",
"operator": "<=",
"threshold": 10.0,
"source": {
"extractor_id": "ext_002",
"output_name": "tip_displacement"
},
"penalty_config": {
"method": "deb_rules",
"description": "Deb's feasibility rules: feasible always beats infeasible; among infeasible, lower violation wins"
},
"margin_buffer": {
"optimizer_target": 9.5,
"hard_limit": 10.0,
"description": "5% inner margin during optimization to account for numerical noise"
}
},
{
"id": "con_002",
"name": "Von Mises stress limit",
"type": "hard",
"operator": "<=",
"threshold": 130.0,
"source": {
"extractor_id": "ext_003",
"output_name": "max_von_mises"
},
"penalty_config": {
"method": "deb_rules",
"description": "Deb's feasibility rules: feasible always beats infeasible; among infeasible, lower violation wins"
},
"margin_buffer": {
"optimizer_target": 123.5,
"hard_limit": 130.0,
"description": "5% inner margin during optimization to account for mesh sensitivity"
}
}
],
"optimization": {
"phases": [
{
"id": "phase_1",
"name": "DoE Landscape Mapping",
"algorithm": {
"type": "LHS",
"config": {
"criterion": "maximin",
"integer_handling": "round_nearest_stratified",
"seed": 42
}
},
"budget": {
"max_trials": 50,
"baseline_enqueued": true,
"total_with_baseline": 51
},
"purpose": "Map design space, identify feasible region, assess sensitivities and interactions"
},
{
"id": "phase_2",
"name": "TPE Optimization",
"algorithm": {
"type": "TPE",
"config": {
"sampler": "TPESampler",
"n_startup_trials": 0,
"warm_start_from": "phase_1_best_feasible",
"seed": 42,
"constraint_handling": "deb_feasibility_rules"
}
},
"budget": {
"min_trials": 60,
"max_trials": 100,
"adaptive": true
},
"convergence": {
"stall_window": 20,
"stall_threshold_pct": 1.0,
"min_trials_before_check": 60
},
"purpose": "Directed optimization to converge on minimum-mass feasible design"
}
],
"total_budget": {
"min": 114,
"max": 156,
"estimated_hours": "4-5"
},
"baseline_trial": {
"enqueue": true,
"values": {
"beam_half_core_thickness": 20,
"beam_face_thickness": 20,
"holes_diameter": 300,
"hole_count": 10
},
"expected_results": {
"mass_kg": 974,
"tip_displacement_mm": 22,
"max_von_mises_mpa": "UNKNOWN — must measure"
}
}
},
"error_handling": {
"trial_timeout_seconds": 600,
"on_nx_rebuild_failure": "record_infeasible_max_violation",
"on_solver_failure": "record_infeasible_max_violation",
"on_extraction_failure": "record_infeasible_max_violation",
"max_consecutive_failures": 5,
"max_failure_rate_pct": 30,
"nx_process_management": "NEVER kill NX directly. Use NXSessionManager.close_nx_if_allowed() only."
},
"pre_flight_checks": [
{
"id": "pf_001",
"name": "Baseline validation",
"description": "Run Trial 0 with baseline parameters, verify mass ≈ 974 kg and displacement ≈ 22 mm"
},
{
"id": "pf_002",
"name": "Corner tests",
"description": "Test 16 corner combinations (min/max for each DV). Verify NX rebuilds and solves at all corners."
},
{
"id": "pf_003",
"name": "Mesh convergence",
"description": "Run baseline at 3 mesh densities. Verify stress convergence within 10%."
},
{
"id": "pf_004",
"name": "Extractor validation",
"description": "Confirm mass, displacement, and stress extractors return correct values at baseline."
},
{
"id": "pf_005",
"name": "Geometric feasibility",
"description": "Determine beam web length. Verify max(hole_count) × max(holes_diameter) fits. Add ligament constraint if needed."
}
],
"open_items": [
"Beam web length needed for geometric feasibility validation (holes_diameter × hole_count vs available length)",
"Displacement extraction method: result sensor in .sim or .op2 node ID parsing?",
"Stress extraction scope: whole model or specific element group?",
"Verify NX expression name 'p173' maps to mass",
"Benchmark single SOL 101 runtime to refine compute estimates",
"Confirm baseline stress value (currently unknown)",
"Clarify relationship between core/face thickness DVs and web height where holes are placed"
]
}