Files
Atomizer/archive/test_scripts/test_parametric_surrogate.py
Anto01 eabcc4c3ca refactor: Major reorganization of optimization_engine module structure
BREAKING CHANGE: Module paths have been reorganized for better maintainability.
Backwards compatibility aliases with deprecation warnings are provided.

New Structure:
- core/           - Optimization runners (runner, intelligent_optimizer, etc.)
- processors/     - Data processing
  - surrogates/   - Neural network surrogates
- nx/             - NX/Nastran integration (solver, updater, session_manager)
- study/          - Study management (creator, wizard, state, reset)
- reporting/      - Reports and analysis (visualizer, report_generator)
- config/         - Configuration management (manager, builder)
- utils/          - Utilities (logger, auto_doc, etc.)
- future/         - Research/experimental code

Migration:
- ~200 import changes across 125 files
- All __init__.py files use lazy loading to avoid circular imports
- Backwards compatibility layer supports old import paths with warnings
- All existing functionality preserved

To migrate existing code:
  OLD: from optimization_engine.nx_solver import NXSolver
  NEW: from optimization_engine.nx.solver import NXSolver

  OLD: from optimization_engine.runner import OptimizationRunner
  NEW: from optimization_engine.core.runner import OptimizationRunner

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 12:30:59 -05:00

62 lines
1.8 KiB
Python

"""Test parametric surrogate integration."""
import time
from optimization_engine.processors.surrogates.neural_surrogate import create_parametric_surrogate_for_study
print("Testing Parametric Neural Surrogate")
print("=" * 60)
# Create surrogate with auto-detection
surrogate = create_parametric_surrogate_for_study()
if surrogate is None:
print("ERROR: Failed to create surrogate")
exit(1)
print(f"Surrogate created successfully!")
print(f" Device: {surrogate.device}")
print(f" Nodes: {surrogate.num_nodes}")
print(f" Model val_loss: {surrogate.best_val_loss:.4f}")
print(f" Design vars: {surrogate.design_var_names}")
# Test prediction with example params
test_params = {
"beam_half_core_thickness": 7.0,
"beam_face_thickness": 2.5,
"holes_diameter": 35.0,
"hole_count": 10.0
}
print(f"\nTest prediction with params: {test_params}")
results = surrogate.predict(test_params)
print(f"\nResults:")
print(f" Mass: {results['mass']:.2f} g")
print(f" Frequency: {results['frequency']:.2f} Hz")
print(f" Max displacement: {results['max_displacement']:.6f} mm")
print(f" Max stress: {results['max_stress']:.2f} MPa")
print(f" Inference time: {results['inference_time_ms']:.2f} ms")
# Speed test
n = 100
start = time.time()
for _ in range(n):
surrogate.predict(test_params)
elapsed = time.time() - start
print(f"\nSpeed test: {n} predictions in {elapsed:.3f}s")
print(f" Average: {elapsed/n*1000:.2f} ms per prediction")
# Compare with training data range
print(f"\nExpected range (from training data):")
print(f" Mass: ~2808 - 5107 g")
print(f" Frequency: ~15.8 - 21.9 Hz")
print(f" Max displacement: ~0.02-0.03 mm")
stats = surrogate.get_statistics()
print(f"\nStatistics:")
print(f" Total predictions: {stats['total_predictions']}")
print(f" Average time: {stats['average_time_ms']:.2f} ms")
print("\nParametric surrogate test PASSED!")