106 lines
3.1 KiB
Python
106 lines
3.1 KiB
Python
|
|
"""
|
||
|
|
Setup Beam Optimization Study
|
||
|
|
|
||
|
|
This script configures the optimization study based on benchmarking results:
|
||
|
|
- Design variables: beam_half_core_thickness, beam_face_thickness, holes_diameter, hole_count
|
||
|
|
- Objectives: Minimize stress AND minimize weight (p173 mass)
|
||
|
|
- Constraint: max_displacement < 10mm
|
||
|
|
"""
|
||
|
|
|
||
|
|
import sys
|
||
|
|
import json
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||
|
|
|
||
|
|
from optimization_engine.study_creator import StudyCreator
|
||
|
|
|
||
|
|
|
||
|
|
def main():
|
||
|
|
print()
|
||
|
|
print("="*80)
|
||
|
|
print("SIMPLE BEAM OPTIMIZATION - SETUP")
|
||
|
|
print("="*80)
|
||
|
|
print()
|
||
|
|
|
||
|
|
# Load configuration
|
||
|
|
config_file = Path('studies/simple_beam_optimization/beam_optimization_config.json')
|
||
|
|
|
||
|
|
if not config_file.exists():
|
||
|
|
print(f"[ERROR] Configuration file not found: {config_file}")
|
||
|
|
return False
|
||
|
|
|
||
|
|
with open(config_file, 'r') as f:
|
||
|
|
config = json.load(f)
|
||
|
|
|
||
|
|
print("Configuration loaded:")
|
||
|
|
print(f" Study: {config['study_name']}")
|
||
|
|
print(f" Substudy: {config['substudy_name']}")
|
||
|
|
print()
|
||
|
|
|
||
|
|
print("Design Variables:")
|
||
|
|
for name, info in config['design_variables'].items():
|
||
|
|
print(f" - {name}: [{info['min']}, {info['max']}] {info['units']} (baseline: {info['baseline']})")
|
||
|
|
print()
|
||
|
|
|
||
|
|
print("Objectives:")
|
||
|
|
for obj in config['objectives']:
|
||
|
|
print(f" - {obj['name']}: {obj['goal']} (weight: {obj['weight']})")
|
||
|
|
print()
|
||
|
|
|
||
|
|
print("Constraints:")
|
||
|
|
for const in config['constraints']:
|
||
|
|
print(f" - {const['name']}: {const['extractor']} {const['type']} {const['value']} {const['units']}")
|
||
|
|
print()
|
||
|
|
|
||
|
|
# Create substudy
|
||
|
|
creator = StudyCreator()
|
||
|
|
study_dir = Path('studies') / config['study_name']
|
||
|
|
|
||
|
|
print(f"Creating substudy '{config['substudy_name']}'...")
|
||
|
|
|
||
|
|
try:
|
||
|
|
substudy_dir = creator.create_substudy(
|
||
|
|
study_dir=study_dir,
|
||
|
|
substudy_name=config['substudy_name'],
|
||
|
|
config=config
|
||
|
|
)
|
||
|
|
|
||
|
|
print(f"[SUCCESS] Substudy created: {substudy_dir}")
|
||
|
|
print()
|
||
|
|
|
||
|
|
# Save configuration to substudy
|
||
|
|
substudy_config_file = substudy_dir / "optimization_config.json"
|
||
|
|
with open(substudy_config_file, 'w', encoding='utf-8') as f:
|
||
|
|
json.dump(config, f, indent=2)
|
||
|
|
|
||
|
|
print(f"[OK] Configuration saved to: {substudy_config_file}")
|
||
|
|
print()
|
||
|
|
|
||
|
|
print("="*80)
|
||
|
|
print("NEXT STEPS")
|
||
|
|
print("="*80)
|
||
|
|
print()
|
||
|
|
print("1. Review configuration:")
|
||
|
|
print(f" {substudy_config_file}")
|
||
|
|
print()
|
||
|
|
print("2. Run initial trials to validate pipeline:")
|
||
|
|
print(f" python tests/run_initial_trials.py")
|
||
|
|
print()
|
||
|
|
print("3. If validation passes, run full optimization:")
|
||
|
|
print(f" python run_optimization.py studies/{config['study_name']} --substudy {config['substudy_name']}")
|
||
|
|
print()
|
||
|
|
|
||
|
|
return True
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
print(f"[ERROR] Failed to create substudy: {e}")
|
||
|
|
import traceback
|
||
|
|
traceback.print_exc()
|
||
|
|
return False
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
success = main()
|
||
|
|
sys.exit(0 if success else 1)
|