Commit Graph

5 Commits

Author SHA1 Message Date
be3b9ee5d5 feat: Add complete optimization runner pipeline
Implement core optimization engine with:
- OptimizationRunner class with Optuna integration
- NXParameterUpdater for updating .prt file expressions
- Result extractor wrappers for OP2 files
- Complete end-to-end example workflow

Features:
- runner.py: Main optimization loop, multi-objective support, constraint handling
- nx_updater.py: Binary .prt file parameter updates (tested successfully)
- extractors.py: Wrappers for mass/stress/displacement extraction
- run_optimization.py: Complete example showing full workflow

NX Updater tested with bracket example:
- Successfully found 4 expressions (support_angle, tip_thickness, p3, support_blend_radius)
- Updated support_angle 30.0 -> 33.0 and verified

Next steps:
- Install pyNastran for OP2 extraction
- Integrate NX solver execution
- Replace dummy extractors with real OP2 readers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 10:29:33 -05:00
Claude
6c30b91a82 feat: Add optimization configuration builder with multi-objective support
Created interactive configuration builder that discovers available
options and helps users set up multi-objective optimization with constraints.

Features:
- Lists all available design variables from discovered model
- Provides catalog of objectives (minimize mass, stress, displacement, volume)
- Provides catalog of constraints (max stress, max displacement, mass limits)
- Suggests reasonable bounds for design variables based on type
- Supports multi-objective optimization with configurable weights
- Validates and builds complete optimization_config.json

Available Objectives:
- minimize_mass: Weight reduction (weight: 5.0)
- minimize_max_stress: Failure prevention (weight: 10.0)
- minimize_max_displacement: Stiffness (weight: 3.0)
- minimize_volume: Material usage (weight: 4.0)

Available Constraints:
- max_stress_limit: Stress <= limit (typical: 200 MPa)
- max_displacement_limit: Displacement <= limit (typical: 1.0 mm)
- min_mass_limit: Mass >= limit (structural integrity)
- max_mass_limit: Mass <= limit (weight budget)

Example Configuration:
- Design Variables: tip_thickness, support_angle, support_blend_radius
- Objectives: Minimize mass (5.0) + Minimize stress (10.0)
- Constraints: max_displacement <= 1.0 mm, max_stress <= 200 MPa
- Settings: 150 trials, TPE sampler

Usage:
  python optimization_engine/optimization_config_builder.py

Output: optimization_config.json with complete multi-objective setup

Integration:
- Works with discover_fea_model() to find design variables
- Links to result extractors (stress, displacement, mass)
- Ready for MCP build_optimization_config tool
- Supports LLM-driven configuration building

This enables the workflow:
1. User: "Minimize weight and stress with max displacement < 1mm"
2. LLM discovers model → lists options → builds config
3. Optimization engine executes with multi-objective + constraints
2025-11-15 13:56:41 +00:00
Claude
16cddd5243 feat: Comprehensive expression extraction and OP2 result extractor example
Enhanced expression extraction to find ALL named expressions in .prt files,
not just specific format. Added pyNastran-based result extraction example.

Expression Extraction Improvements:
- Updated regex to handle all NX expression format variations:
  * #(Type [units]) name: value;
  * (Type [units]) name: value;
  * *(Type [units]) name: value;
  * ((Type [units]) name: value;
- Added Root:expression_name: pattern detection
- Finds expressions even when value is not immediately available
- Deduplication to avoid duplicates
- Filters out NX internal names

Test Results with Bracket.prt:
- Previously: 1 expression (tip_thickness only)
- Now: 5 expressions found:
  * support_angle = 30.0 degrees
  * tip_thickness = 20.0 mm
  * p3 = 10.0 mm
  * support_blend_radius = 10.0 mm
  * p11 (reference found, value unknown)

OP2 Result Extraction (pyNastran):
- Created example extractor: op2_extractor_example.py
- Functions for common optimization metrics:
  * extract_max_displacement() - max displacement magnitude on any node
  * extract_max_stress() - von Mises or max principal stress
  * extract_mass() - total mass and center of gravity
- Handles multiple element types (CQUAD4, CTRIA3, CTETRA, etc.)
- Returns structured JSON for optimization engine integration
- Command-line tool for testing with real OP2 files

Usage:
  python optimization_engine/result_extractors/op2_extractor_example.py <file.op2>

Integration Ready:
- pyNastran already in requirements.txt
- Result extractor pattern established
- Can be used as template for custom metrics

Next Steps:
- Integrate result extractors into MCP tool framework
- Add safety factor calculations
- Support for thermal, modal results
2025-11-15 13:49:16 +00:00
d1cbeb75a5 Rebrand project from nx-optimaster to Atomizer
- Update project name in all documentation files
- Update GitHub repository references to Anto01/Atomizer
- Update Python package name to 'atomizer'
- Update conda environment name references
- Update all module docstrings with new branding

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 08:05:19 -05:00
aa3dafbe4b Initial commit: NX OptiMaster project structure
- Set up Python package structure with pyproject.toml
- Created MCP server, optimization engine, and NX journals modules
- Added configuration templates
- Implemented pluggable result extractor architecture
- Comprehensive README with architecture overview
- Project ready for GitHub push

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 07:56:35 -05:00