A Bayesian optimization framework for designing efficient gyroid lattice structures through integrated computational geometry, finite element analysis, and machine learning.
This project implements an end-to-end optimization pipeline to identify high-performance gyroid lattice designs by maximizing specific stiffness (Eeff / ρrelative). The framework combines parametric STL generation, automated mesh creation, MOOSE-based finite element simulations, and Bayesian optimization with Latin Hypercube Sampling for efficient design space exploration.
- Parametric Gyroid Generation: Automated creation of functionally graded gyroid lattices with tunable porosity, grading, and periodicity
- Bayesian Optimization: Efficient design space exploration using LogEI acquisition function with periodic random sampling
- Finite Element Validation: MOOSE framework integration for small-strain linear elastic analysis
- Design Space Sampling: Latin Hypercube Sampling for optimal initial dataset generation
- GUI Interface: Interactive tools for design visualization and parameter selection
The optimization considers three primary design variables:
- Porosity: Volume fraction of void space
- Grading: Spatial variation of lattice density
- Periods: Number of unit cells in the structure
- Sample Generation: Latin Hypercube Sampling generates diverse design points across the parameter space
- Geometry Creation: Parametric STL models generated for each design point
- Mesh Generation: Gmsh converts STL geometry to finite element meshes
- FE Simulation: MOOSE performs linear elastic analysis with PLA material properties
- Surrogate Modeling: Bayesian optimization builds a Gaussian process surrogate
- Optimization: LogEI acquisition function identifies promising designs, with exploration enforced through periodic random sampling
- Python 3.8+
- MOOSE framework (for FE simulations)
- Gmsh (for mesh generation)
pip install numpy scipy matplotlib
pip install botorch gpytorch # For Bayesian optimization
pip install trimesh # For STL handlingFollow the MOOSE installation guide for your platform. Ensure the MOOSE executable is in your system PATH.
# 1. Generate initial dataset (default: 200 samples)
python Sample_Gen_Pipeline.py --n_samples 200
# 2. Run Bayesian optimization
python Bayes_Opt.py --n_iterations 50
# 3. Evaluate a specific design
python Determine_Gyroid.py --porosity 0.7 --grading 0.5 --periods 3Generate an initial dataset using Latin Hypercube Sampling:
python Sample_Gen_Pipeline.py --n_samples 200 --output_dir ./dataThis automatically:
- Samples design parameters using LHS
- Generates STL files for each design
- Creates finite element meshes
- Runs MOOSE simulations (~30 min per sample)
- Stores results for model training
Train the surrogate model and perform optimization:
python Bayes_Opt.py --n_iterations 100 --exploration_freq 5Parameters:
n_iterations: Number of BO iterationsexploration_freq: Random sample every N iterations (default: 5)
Query the trained model for instant stiffness predictions:
python Determine_Gyroid.py --porosity 0.65 --grading 0.3 --periods 4 --validateUse --validate flag to run FE simulation for verification (~30 minutes).
Launch the interactive design tool:
python GUI/main_gui.pyGyroid-Lattice-Optimization-/
├── Bayes_Opt.py # Bayesian optimization implementation
├── Gyroid_Generator.py # Parametric gyroid STL generation
├── LHS_function.py # Latin Hypercube Sampling utilities
├── Sample_Gen_Pipeline.py # End-to-end sample generation workflow
├── stl_to_mesh.py # STL to FE mesh conversion (Gmsh)
├── test_gy.i # MOOSE input file template
├── GUI/ # Interactive visualization tools
└── README.md
- Analysis Type: Small strain, linear elastic
- Material Model: PLA (Polylactic Acid)
- Young's Modulus: 3.5 GPa
- Poisson's Ratio: 0.36
- Boundary Conditions: Compression loading with periodic side constraints
- Solver: Newton-Raphson with automatic time stepping
The MOOSE input file (test_gy.i) can be modified for different material properties, loading conditions, or analysis types.
The framework uses the LogEI (Log Expected Improvement) acquisition function, which provides:
- Robust exploration of the design space
- Numerical stability for extreme objective values
- Balance between exploitation and exploration
To prevent premature convergence, the algorithm injects a random sample every 5 iterations, ensuring adequate coverage of the design space while focusing on promising regions.
The optimized surrogate model enables:
- Instant predictions: Query any design in milliseconds
- Efficient optimization: Converge to optimal designs in 50-100 iterations
- Validated accuracy: FE verification confirms model predictions
Typical optimal designs achieve specific stiffness improvements of 20-40% over baseline uniform lattices.
This framework can be applied to:
- Lightweight structural design for aerospace and automotive applications
- Energy absorption systems
- Thermal management structures
- Biomedical scaffolds
- Additive manufacturing optimization
- Extension to nonlinear material models and large deformation analysis
- Multi-objective optimization (stiffness, weight, energy absorption)
- Integration with topology optimization methods
- Manufacturing constraint incorporation
- Experimental validation with 3D-printed specimens
This work builds on research in:
- Bayesian optimization for engineering design
- Triply periodic minimal surfaces in structural mechanics
- Surrogate modeling for expensive simulations
Ryan Lutz
[email protected]
Duke University - Mechanical Engineering and Materials Science
GitHub
For questions or collaboration opportunities, please open an issue or contact via email.