Major additions: - Training data export system for AtomizerField neural network training - Bracket stiffness optimization study with 50+ training samples - Intelligent NX model discovery (auto-detect solutions, expressions, mesh) - Result extractors module for displacement, stress, frequency, mass - User-generated NX journals for advanced workflows - Archive structure for legacy scripts and test outputs - Protocol documentation and dashboard launcher 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
140 lines
3.7 KiB
Python
140 lines
3.7 KiB
Python
"""
|
|
Test script for training data export functionality.
|
|
|
|
Creates a simple beam optimization study with training data export enabled
|
|
to verify end-to-end functionality of AtomizerField training data collection.
|
|
"""
|
|
|
|
import json
|
|
import shutil
|
|
from pathlib import Path
|
|
|
|
# Configuration for test study with training data export
|
|
test_config = {
|
|
"study_name": "training_data_export_test",
|
|
"sim_file": "examples/Models/Circular Plate/Circular_Plate.sim",
|
|
"fem_file": "examples/Models/Circular Plate/Circular_Plate_fem1.fem",
|
|
|
|
"design_variables": [
|
|
{
|
|
"name": "thickness",
|
|
"expression_name": "thickness",
|
|
"min": 2.0,
|
|
"max": 8.0
|
|
},
|
|
{
|
|
"name": "radius",
|
|
"expression_name": "radius",
|
|
"min": 80.0,
|
|
"max": 120.0
|
|
}
|
|
],
|
|
|
|
"objectives": [
|
|
{
|
|
"name": "max_stress",
|
|
"type": "minimize",
|
|
"extractor": {
|
|
"type": "result_parameter",
|
|
"parameter_name": "Max Von Mises Stress"
|
|
}
|
|
},
|
|
{
|
|
"name": "mass",
|
|
"type": "minimize",
|
|
"extractor": {
|
|
"type": "expression",
|
|
"expression_name": "mass"
|
|
}
|
|
}
|
|
],
|
|
|
|
"constraints": [
|
|
{
|
|
"name": "stress_limit",
|
|
"type": "less_than",
|
|
"value": 300.0,
|
|
"extractor": {
|
|
"type": "result_parameter",
|
|
"parameter_name": "Max Von Mises Stress"
|
|
}
|
|
}
|
|
],
|
|
|
|
"optimization": {
|
|
"algorithm": "NSGA-II",
|
|
"n_trials": 10,
|
|
"population_size": 4
|
|
},
|
|
|
|
# Enable training data export
|
|
"training_data_export": {
|
|
"enabled": True,
|
|
"export_dir": "atomizer_field_training_data/test_study_001"
|
|
},
|
|
|
|
"version": "1.0"
|
|
}
|
|
|
|
def main():
|
|
"""Run test study with training data export."""
|
|
|
|
# Create study directory
|
|
study_dir = Path("studies/training_data_export_test")
|
|
study_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
setup_dir = study_dir / "1_setup"
|
|
setup_dir.mkdir(exist_ok=True)
|
|
|
|
results_dir = study_dir / "2_results"
|
|
results_dir.mkdir(exist_ok=True)
|
|
|
|
# Save workflow config
|
|
config_path = setup_dir / "workflow_config.json"
|
|
with open(config_path, 'w') as f:
|
|
json.dump(test_config, f, indent=2)
|
|
|
|
print("=" * 80)
|
|
print("TRAINING DATA EXPORT TEST STUDY")
|
|
print("=" * 80)
|
|
print(f"\nStudy created: {study_dir}")
|
|
print(f"Config saved: {config_path}")
|
|
print(f"\nTraining data will be exported to:")
|
|
print(f" {test_config['training_data_export']['export_dir']}")
|
|
print(f"\nNumber of trials: {test_config['optimization']['n_trials']}")
|
|
print("\n" + "=" * 80)
|
|
print("To run the test:")
|
|
print(f" cd {study_dir}")
|
|
print(" python run_optimization.py")
|
|
print("=" * 80)
|
|
|
|
# Create run_optimization.py in study directory
|
|
run_script = study_dir / "run_optimization.py"
|
|
run_script_content = '''"""Run optimization for training data export test."""
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Add parent directory to path
|
|
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
|
|
|
|
from optimization_engine.runner import OptimizationRunner
|
|
|
|
def main():
|
|
"""Run the optimization."""
|
|
config_path = Path(__file__).parent / "1_setup" / "workflow_config.json"
|
|
runner = OptimizationRunner(config_path)
|
|
runner.run()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
'''
|
|
|
|
with open(run_script, 'w') as f:
|
|
f.write(run_script_content)
|
|
|
|
print(f"\nRun script created: {run_script}")
|
|
print("\nTest study setup complete!")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|