diff --git a/docs/OPTIMIZATION_WORKFLOW.md b/docs/OPTIMIZATION_WORKFLOW.md new file mode 100644 index 00000000..c9b71784 Binary files /dev/null and b/docs/OPTIMIZATION_WORKFLOW.md differ diff --git a/docs/QUICK_CONFIG_REFERENCE.md b/docs/QUICK_CONFIG_REFERENCE.md new file mode 100644 index 00000000..810b1a9e --- /dev/null +++ b/docs/QUICK_CONFIG_REFERENCE.md @@ -0,0 +1,81 @@ +# Quick Configuration Reference + +## Change NX Version (e.g., when NX 2506 is released) + +**Edit ONE file**: [`config.py`](../config.py) + +```python +# Line 14-15 +NX_VERSION = "2506" # ← Change this +NX_INSTALLATION_DIR = Path(f"C:/Program Files/Siemens/NX{NX_VERSION}") +``` + +**That's it!** All modules automatically use new paths. + +--- + +## Change Python Environment + +**Edit ONE file**: [`config.py`](../config.py) + +```python +# Line 49 +PYTHON_ENV_NAME = "my_new_env" # ← Change this +``` + +--- + +## Verify Configuration + +```bash +python config.py +``` + +Output shows all paths and validates they exist. + +--- + +## Using Config in Your Code + +```python +from config import ( + NX_RUN_JOURNAL, # Path to run_journal.exe + NX_MATERIAL_LIBRARY, # Path to material library XML + PYTHON_ENV_NAME, # Current environment name + get_nx_journal_command, # Helper function +) + +# Generate journal command +cmd = get_nx_journal_command( + journal_script, + arg1, + arg2 +) +``` + +--- + +## What Changed? + +**OLD** (hardcoded paths in multiple files): +- `optimization_engine/nx_updater.py`: Line 66 +- `dashboard/api/app.py`: Line 598 +- `README.md`: Line 92 +- `docs/NXOPEN_INTELLISENSE_SETUP.md`: Line 269 +- ...and more + +**NEW** (all use `config.py`): +- Edit `config.py` once +- All files automatically updated + +--- + +## Files Using Config + +- ✅ `optimization_engine/nx_updater.py` +- ✅ `dashboard/api/app.py` +- Future: All NX-related modules will use config + +--- + +**See also**: [SYSTEM_CONFIGURATION.md](SYSTEM_CONFIGURATION.md) for full documentation diff --git a/nx_journals/user_generated_journals/expressions_from_journal.exp b/nx_journals/user_generated_journals/expressions_from_journal.exp new file mode 100644 index 00000000..01a5d7fd --- /dev/null +++ b/nx_journals/user_generated_journals/expressions_from_journal.exp @@ -0,0 +1,31 @@ +// Version: 3 +Pattern_p7=hole_count +[MilliMeter]Pattern_p8=444.444444444444 +[MilliMeter]Pattern_p9=p6 +Pattern_p10=1 +[MilliMeter]Pattern_p11=10 +[MilliMeter]Pattern_p12=0 +[MilliMeter]beam_face_thickness=20 +[MilliMeter]beam_half_core_thickness=20 +[MilliMeter]beam_half_height=250 +[MilliMeter]beam_half_width=150 +[MilliMeter]beam_lenght=5000 +hole_count=10 +[MilliMeter]holes_diameter=400 +[MilliMeter]p4=beam_lenght +[MilliMeter]p5=0 +[MilliMeter]p6=4000 +[Degrees]p13=0 +[MilliMeter]p19=4000 +[MilliMeter]p34=4000 +[MilliMeter]p50=4000 +[MilliMeter]p119=4000 +p130=10 +[MilliMeter]p132=444.444444444444 +[MilliMeter]p134=4000 +[MilliMeter]p135=4000 +p137=1 +[MilliMeter]p139=10 +[MilliMeter]p141=0 +[Degrees]p143=0 +[Kilogram]p173=973.968443678471 diff --git a/nx_journals/user_generated_journals/journal_export_part_expressions.py b/nx_journals/user_generated_journals/journal_export_part_expressions.py new file mode 100644 index 00000000..4d4840ac --- /dev/null +++ b/nx_journals/user_generated_journals/journal_export_part_expressions.py @@ -0,0 +1,45 @@ +# NX 2412 +# Journal created by antoi on Mon Nov 17 11:00:55 2025 Eastern Standard Time +# +import math +import NXOpen +def main(args) : + + theSession = NXOpen.Session.GetSession() #type: NXOpen.Session + workPart = theSession.Parts.Work + displayPart = theSession.Parts.Display + # ---------------------------------------------- + # Menu: Tools->Utilities->Expressions... + # ---------------------------------------------- + markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start") + + theSession.SetUndoMarkName(markId1, "Expressions Dialog") + + workPart.Expressions.ExportToFile(NXOpen.ExpressionCollection.ExportMode.WorkPart, "C:\\Users\\antoi\\Documents\\Atomaste\\Atomizer\\nx_journals\\user_generated_journals\\expressions_from_journal", NXOpen.ExpressionCollection.SortType.AlphaNum) + + markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Expressions") + + theSession.DeleteUndoMark(markId2, None) + + markId3 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Expressions") + + markId4 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Make Up to Date") + + markId5 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "NX update") + + nErrs1 = theSession.UpdateManager.DoUpdate(markId5) + + theSession.DeleteUndoMark(markId5, "NX update") + + theSession.DeleteUndoMark(markId4, None) + + theSession.DeleteUndoMark(markId3, None) + + theSession.SetUndoMarkName(markId1, "Expressions") + + # ---------------------------------------------- + # Menu: Tools->Automation->Journal->Stop Recording + # ---------------------------------------------- + +if __name__ == '__main__': + main(sys.argv[1:]) \ No newline at end of file diff --git a/nx_journals/user_generated_journals/journal_import_part_expressions.py b/nx_journals/user_generated_journals/journal_import_part_expressions.py new file mode 100644 index 00000000..d70c3431 --- /dev/null +++ b/nx_journals/user_generated_journals/journal_import_part_expressions.py @@ -0,0 +1,49 @@ +# NX 2412 +# Journal created by antoi on Mon Nov 17 12:16:50 2025 Eastern Standard Time +# +import math +import NXOpen +def main(args) : + + theSession = NXOpen.Session.GetSession() #type: NXOpen.Session + workPart = theSession.Parts.Work + displayPart = theSession.Parts.Display + # ---------------------------------------------- + # Menu: Tools->Utilities->Expressions... + # ---------------------------------------------- + markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start") + + theSession.SetUndoMarkName(markId1, "Expressions Dialog") + + markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Import Expressions") + + expModified1, errorMessages1 = workPart.Expressions.ImportFromFile("C:\\Users\\antoi\\Documents\\Atomaste\\Atomizer\\nx_journals\\user_generated_journals\\study_variables_expressions_from_journal.exp", NXOpen.ExpressionCollection.ImportMode.Replace) + + markId3 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Expressions") + + theSession.DeleteUndoMark(markId3, None) + + markId4 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Expressions") + + markId5 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Make Up to Date") + + markId6 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "NX update") + + nErrs1 = theSession.UpdateManager.DoUpdate(markId6) + + theSession.DeleteUndoMark(markId6, "NX update") + + theSession.DeleteUndoMark(markId5, None) + + theSession.DeleteUndoMark(markId4, None) + + theSession.SetUndoMarkName(markId1, "Expressions") + + theSession.DeleteUndoMark(markId2, None) + + # ---------------------------------------------- + # Menu: Tools->Automation->Journal->Stop Recording + # ---------------------------------------------- + +if __name__ == '__main__': + main(sys.argv[1:]) \ No newline at end of file diff --git a/nx_journals/user_generated_journals/journal_load_from_folder.py b/nx_journals/user_generated_journals/journal_load_from_folder.py new file mode 100644 index 00000000..b6f54f45 --- /dev/null +++ b/nx_journals/user_generated_journals/journal_load_from_folder.py @@ -0,0 +1,74 @@ +# NX 2412 +# Journal created by antoi on Mon Nov 17 10:26:53 2025 Eastern Standard Time +# +import math +import NXOpen +import NXOpen.CAE +def main(args) : + + theSession = NXOpen.Session.GetSession() #type: NXOpen.Session + workSimPart = theSession.Parts.BaseWork + displaySimPart = theSession.Parts.BaseDisplay + # ---------------------------------------------- + # Menu: File->Options->Assembly Load Options... + # ---------------------------------------------- + markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Start") + + theSession.SetUndoMarkName(markId1, "Assembly Load Options Dialog") + + markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Assembly Load Options") + + theSession.DeleteUndoMark(markId2, None) + + markId3 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Assembly Load Options") + + theSession.Parts.LoadOptions.LoadLatest = False + + theSession.Parts.LoadOptions.ComponentLoadMethod = NXOpen.LoadOptions.LoadMethod.FromDirectory + + searchDirectories1 = [None] * 1 + searchDirectories1[0] = "C:\\ProgramData" + searchSubDirs1 = [None] * 1 + searchSubDirs1[0] = True + theSession.Parts.LoadOptions.SetSearchDirectories(searchDirectories1, searchSubDirs1) + + theSession.Parts.LoadOptions.ComponentsToLoad = NXOpen.LoadOptions.LoadComponents.All + + theSession.Parts.LoadOptions.PartLoadOption = NXOpen.LoadOptions.LoadOption.FullyLoad + + theSession.Parts.LoadOptions.SetInterpartData(True, NXOpen.LoadOptions.Parent.All) + + theSession.Parts.LoadOptions.AllowSubstitution = False + + theSession.Parts.LoadOptions.GenerateMissingPartFamilyMembers = True + + theSession.Parts.LoadOptions.AbortOnFailure = False + + theSession.Parts.LoadOptions.OptionUpdateSubsetOnLoad = NXOpen.LoadOptions.UpdateSubsetOnLoad.NotSet + + referenceSets1 = [None] * 5 + referenceSets1[0] = "As Saved" + referenceSets1[1] = "Use Simplified" + referenceSets1[2] = "Use Model" + referenceSets1[3] = "Entire Part" + referenceSets1[4] = "Empty" + theSession.Parts.LoadOptions.SetDefaultReferenceSets(referenceSets1) + + theSession.Parts.LoadOptions.ReferenceSetOverride = False + + theSession.Parts.LoadOptions.SetBookmarkComponentsToLoad(True, False, NXOpen.LoadOptions.BookmarkComponents.LoadVisible) + + theSession.Parts.LoadOptions.BookmarkRefsetLoadBehavior = NXOpen.LoadOptions.BookmarkRefsets.ImportData + + theSession.DeleteUndoMark(markId3, None) + + theSession.SetUndoMarkName(markId1, "Assembly Load Options") + + theSession.DeleteUndoMark(markId1, None) + + # ---------------------------------------------- + # Menu: Tools->Automation->Journal->Stop Recording + # ---------------------------------------------- + +if __name__ == '__main__': + main(sys.argv[1:]) \ No newline at end of file diff --git a/nx_journals/user_generated_journals/study_variables_expressions_from_journal.exp b/nx_journals/user_generated_journals/study_variables_expressions_from_journal.exp new file mode 100644 index 00000000..68adbf3f --- /dev/null +++ b/nx_journals/user_generated_journals/study_variables_expressions_from_journal.exp @@ -0,0 +1,6 @@ +[MilliMeter]beam_face_thickness=20 +[MilliMeter]beam_half_core_thickness=20 +hole_count=10 +[MilliMeter]holes_diameter=400 + + diff --git a/optimization_engine/benchmarking_substudy.py b/optimization_engine/benchmarking_substudy.py new file mode 100644 index 00000000..34ea176e --- /dev/null +++ b/optimization_engine/benchmarking_substudy.py @@ -0,0 +1,472 @@ +""" +Benchmarking Substudy - Mandatory Discovery & Validation System + +The benchmarking substudy is a mandatory first step for all optimization studies. +It performs model introspection, validation, and configuration proposal before +any optimization trials are run. + +Purpose: +- Discover available expressions, OP2 contents, baseline performance +- Validate that model can be simulated and results extracted +- Propose initial optimization configuration +- Act as gatekeeper before full optimization + +This substudy ALWAYS runs before any other substudy and auto-updates when +new substudies are created. + +Author: Antoine Letarte +Date: 2025-11-17 +Version: 1.0.0 +""" + +import json +import logging +from pathlib import Path +from typing import Dict, Any, List, Optional +from dataclasses import dataclass, asdict +from datetime import datetime + +from optimization_engine.optimization_setup_wizard import OptimizationSetupWizard, ModelIntrospection, OP2Introspection + +logger = logging.getLogger(__name__) + + +@dataclass +class BenchmarkResults: + """Results from benchmarking analysis.""" + timestamp: str + + # Model introspection + expressions: Dict[str, Dict[str, Any]] # name -> {value, units, formula} + expression_count: int + + # OP2 introspection + element_types: List[str] + result_types: List[str] + subcases: List[int] + node_count: int + element_count: int + + # Baseline simulation results + baseline_op2_path: str + baseline_results: Dict[str, float] # e.g., max_stress, max_displacement, mass + + # Validation status + simulation_works: bool + extraction_works: bool + validation_passed: bool + + # Proposals + proposed_design_variables: List[Dict[str, Any]] + proposed_extractors: List[Dict[str, Any]] + proposed_objectives: List[str] + + # Issues found + warnings: List[str] + errors: List[str] + + +class BenchmarkingSubstudy: + """ + Mandatory benchmarking substudy for discovery and validation. + + This runs before any optimization to: + 1. Discover what's in the model + 2. Validate the pipeline works + 3. Propose configuration + 4. Gate-keep before optimization + """ + + def __init__(self, study_dir: Path, prt_file: Path, sim_file: Path): + """ + Initialize benchmarking substudy. + + Args: + study_dir: Root study directory + prt_file: Path to NX part file + sim_file: Path to NX simulation file + """ + self.study_dir = Path(study_dir) + self.prt_file = Path(prt_file) + self.sim_file = Path(sim_file) + + # Benchmarking substudy directory + self.benchmark_dir = self.study_dir / "substudies" / "benchmarking" + self.benchmark_dir.mkdir(parents=True, exist_ok=True) + + # Results file + self.results_file = self.benchmark_dir / "benchmark_results.json" + + # Use Phase 3.3 wizard for introspection + self.wizard = OptimizationSetupWizard(prt_file, sim_file) + + logger.info(f"Benchmarking substudy initialized for: {study_dir.name}") + + def run_discovery(self) -> BenchmarkResults: + """ + Run complete discovery and validation. + + Returns: + BenchmarkResults with all discovery information + """ + logger.info("=" * 80) + logger.info("BENCHMARKING SUBSTUDY - Discovery & Validation") + logger.info("=" * 80) + logger.info("") + + results = BenchmarkResults( + timestamp=datetime.now().isoformat(), + expressions={}, + expression_count=0, + element_types=[], + result_types=[], + subcases=[], + node_count=0, + element_count=0, + baseline_op2_path="", + baseline_results={}, + simulation_works=False, + extraction_works=False, + validation_passed=False, + proposed_design_variables=[], + proposed_extractors=[], + proposed_objectives=[], + warnings=[], + errors=[] + ) + + # Step 1: Model Introspection + logger.info("Step 1: Model Introspection") + logger.info("-" * 40) + try: + model_info = self.wizard.introspect_model() + results.expressions = model_info.expressions + results.expression_count = len(model_info.expressions) + + logger.info(f"Found {results.expression_count} expressions:") + for name, info in model_info.expressions.items(): + logger.info(f" - {name}: {info['value']} {info['units']}") + logger.info("") + except Exception as e: + error_msg = f"Model introspection failed: {e}" + logger.error(error_msg) + results.errors.append(error_msg) + results.validation_passed = False + return results + + # Step 2: Baseline Simulation + logger.info("Step 2: Baseline Simulation") + logger.info("-" * 40) + try: + baseline_op2 = self.wizard.run_baseline_simulation() + if baseline_op2: + results.baseline_op2_path = str(baseline_op2) + results.simulation_works = True + logger.info(f"Baseline simulation complete: {baseline_op2.name}") + logger.info("") + else: + warning_msg = "Baseline simulation returned no OP2 file" + logger.warning(warning_msg) + results.warnings.append(warning_msg) + logger.info("") + except Exception as e: + error_msg = f"Baseline simulation failed: {e}" + logger.error(error_msg) + results.errors.append(error_msg) + logger.info("Continuing with available information...") + logger.info("") + + # Step 3: OP2 Introspection + logger.info("Step 3: OP2 Introspection") + logger.info("-" * 40) + try: + op2_info = self.wizard.introspect_op2() + results.element_types = op2_info.element_types + results.result_types = op2_info.result_types + results.subcases = op2_info.subcases + results.node_count = op2_info.node_count + results.element_count = op2_info.element_count + + logger.info(f"OP2 Analysis:") + logger.info(f" - Element types: {', '.join(results.element_types)}") + logger.info(f" - Result types: {', '.join(results.result_types)}") + logger.info(f" - Subcases: {results.subcases}") + logger.info(f" - Nodes: {results.node_count}") + logger.info(f" - Elements: {results.element_count}") + logger.info("") + except Exception as e: + error_msg = f"OP2 introspection failed: {e}" + logger.error(error_msg) + results.errors.append(error_msg) + results.validation_passed = False + return results + + # Step 4: Extract Baseline Results + logger.info("Step 4: Extract Baseline Results") + logger.info("-" * 40) + try: + # Try to extract common results + baseline_results = self._extract_baseline_results(Path(results.baseline_op2_path)) + results.baseline_results = baseline_results + results.extraction_works = True + + logger.info("Baseline performance:") + for key, value in baseline_results.items(): + logger.info(f" - {key}: {value}") + logger.info("") + except Exception as e: + warning_msg = f"Baseline extraction partially failed: {e}" + logger.warning(warning_msg) + results.warnings.append(warning_msg) + # Not a hard failure - continue + + # Step 5: Generate Proposals + logger.info("Step 5: Generate Configuration Proposals") + logger.info("-" * 40) + proposals = self._generate_proposals(model_info, op2_info, results.baseline_results) + results.proposed_design_variables = proposals['design_variables'] + results.proposed_extractors = proposals['extractors'] + results.proposed_objectives = proposals['objectives'] + + logger.info(f"Proposed design variables ({len(results.proposed_design_variables)}):") + for var in results.proposed_design_variables: + logger.info(f" - {var['parameter']}: {var.get('suggested_range', 'range needed')}") + + logger.info(f"\nProposed extractors ({len(results.proposed_extractors)}):") + for ext in results.proposed_extractors: + logger.info(f" - {ext['action']}: {ext['description']}") + + logger.info(f"\nProposed objectives ({len(results.proposed_objectives)}):") + for obj in results.proposed_objectives: + logger.info(f" - {obj}") + logger.info("") + + # Validation passed if simulation and basic extraction work + results.validation_passed = results.simulation_works and len(results.element_types) > 0 + + # Save results + self._save_results(results) + + logger.info("=" * 80) + if results.validation_passed: + logger.info("BENCHMARKING COMPLETE - Validation PASSED") + else: + logger.info("BENCHMARKING COMPLETE - Validation FAILED") + logger.info("=" * 80) + logger.info("") + + return results + + def _extract_baseline_results(self, op2_file: Path) -> Dict[str, float]: + """Extract baseline results from OP2 file.""" + from pyNastran.op2.op2 import OP2 + + results = {} + + try: + op2 = OP2() + op2.read_op2(str(op2_file), load_geometry=False) + + # Try to extract displacement + if hasattr(op2, 'displacements') and op2.displacements: + disp_data = list(op2.displacements.values())[0] + if hasattr(disp_data, 'data'): + max_disp = float(abs(disp_data.data).max()) + results['max_displacement'] = round(max_disp, 6) + + # Try to extract stress + if hasattr(op2, 'ctetra_stress') and op2.ctetra_stress: + stress_data = list(op2.ctetra_stress.values())[0] + if hasattr(stress_data, 'data'): + max_stress = float(abs(stress_data.data).max()) + results['max_von_mises'] = round(max_stress, 3) + elif hasattr(op2, 'chexa_stress') and op2.chexa_stress: + stress_data = list(op2.chexa_stress.values())[0] + if hasattr(stress_data, 'data'): + max_stress = float(abs(stress_data.data).max()) + results['max_von_mises'] = round(max_stress, 3) + + except Exception as e: + logger.warning(f"Could not extract all baseline results: {e}") + + return results + + def _generate_proposals(self, model_info: ModelIntrospection, op2_info: OP2Introspection, + baseline_results: Dict[str, float]) -> Dict[str, Any]: + """Generate configuration proposals based on discovery.""" + proposals = { + 'design_variables': [], + 'extractors': [], + 'objectives': [] + } + + # Propose design variables from expressions + # Filter out likely constants (e.g., material properties, loads) + constant_keywords = ['modulus', 'poisson', 'density', 'load', 'force', 'pressure'] + + for name, info in model_info.expressions.items(): + # Skip if likely a constant + if any(keyword in name.lower() for keyword in constant_keywords): + continue + + # Propose as design variable + proposals['design_variables'].append({ + 'parameter': name, + 'current_value': info['value'], + 'units': info['units'], + 'suggested_range': f"±20% of {info['value']} {info['units']}" + }) + + # Propose extractors based on OP2 contents + if 'displacement' in op2_info.result_types or 'DISPLACEMENT' in op2_info.result_types: + proposals['extractors'].append({ + 'action': 'extract_displacement', + 'description': 'Extract displacement results from OP2 file', + 'params': {'result_type': 'displacement'} + }) + proposals['objectives'].append('max_displacement (minimize or maximize)') + + if op2_info.element_types: + element_type = op2_info.element_types[0].lower() + proposals['extractors'].append({ + 'action': 'extract_solid_stress', + 'description': f'Extract stress from {element_type.upper()} elements', + 'params': { + 'result_type': 'stress', + 'element_type': element_type + } + }) + proposals['objectives'].append('max_von_mises (minimize for safety)') + + return proposals + + def _save_results(self, results: BenchmarkResults): + """Save benchmark results to JSON file.""" + import numpy as np + + results_dict = asdict(results) + + # Convert numpy types to native Python types for JSON serialization + def convert_numpy(obj): + if isinstance(obj, np.integer): + return int(obj) + elif isinstance(obj, np.floating): + return float(obj) + elif isinstance(obj, np.ndarray): + return obj.tolist() + elif isinstance(obj, dict): + return {k: convert_numpy(v) for k, v in obj.items()} + elif isinstance(obj, list): + return [convert_numpy(item) for item in obj] + return obj + + results_dict = convert_numpy(results_dict) + + with open(self.results_file, 'w') as f: + json.dump(results_dict, f, indent=2) + + logger.info(f"Benchmark results saved to: {self.results_file}") + + def load_results(self) -> Optional[BenchmarkResults]: + """Load previous benchmark results if they exist.""" + if not self.results_file.exists(): + return None + + with open(self.results_file, 'r') as f: + data = json.load(f) + + return BenchmarkResults(**data) + + def generate_report(self, results: BenchmarkResults) -> str: + """ + Generate human-readable benchmark report. + + Returns: + Markdown formatted report + """ + report = [] + report.append("# Benchmarking Report") + report.append("") + report.append(f"**Study**: {self.study_dir.name}") + report.append(f"**Date**: {results.timestamp}") + report.append(f"**Validation**: {'✅ PASSED' if results.validation_passed else '❌ FAILED'}") + report.append("") + + report.append("## Model Introspection") + report.append("") + report.append(f"**Expressions Found**: {results.expression_count}") + report.append("") + report.append("| Expression | Value | Units |") + report.append("|------------|-------|-------|") + for name, info in results.expressions.items(): + report.append(f"| {name} | {info['value']} | {info['units']} |") + report.append("") + + report.append("## OP2 Analysis") + report.append("") + report.append(f"- **Element Types**: {', '.join(results.element_types)}") + report.append(f"- **Result Types**: {', '.join(results.result_types)}") + report.append(f"- **Subcases**: {results.subcases}") + report.append(f"- **Nodes**: {results.node_count}") + report.append(f"- **Elements**: {results.element_count}") + report.append("") + + report.append("## Baseline Performance") + report.append("") + if results.baseline_results: + for key, value in results.baseline_results.items(): + report.append(f"- **{key}**: {value}") + else: + report.append("*No baseline results extracted*") + report.append("") + + report.append("## Configuration Proposals") + report.append("") + + report.append("### Proposed Design Variables") + report.append("") + for var in results.proposed_design_variables: + report.append(f"- **{var['parameter']}**: {var['suggested_range']}") + report.append("") + + report.append("### Proposed Extractors") + report.append("") + for ext in results.proposed_extractors: + report.append(f"- **{ext['action']}**: {ext['description']}") + report.append("") + + report.append("### Proposed Objectives") + report.append("") + for obj in results.proposed_objectives: + report.append(f"- {obj}") + report.append("") + + if results.warnings: + report.append("## Warnings") + report.append("") + for warning in results.warnings: + report.append(f"⚠️ {warning}") + report.append("") + + if results.errors: + report.append("## Errors") + report.append("") + for error in results.errors: + report.append(f"❌ {error}") + report.append("") + + return "\n".join(report) + + +def main(): + """Test benchmarking substudy.""" + print("Benchmarking Substudy Test") + print("=" * 80) + print() + print("This module provides mandatory discovery and validation for all studies.") + print("Use it via the study setup workflow.") + print() + + +if __name__ == '__main__': + main() diff --git a/optimization_engine/comprehensive_results_analyzer.py b/optimization_engine/comprehensive_results_analyzer.py new file mode 100644 index 00000000..9ad9a817 --- /dev/null +++ b/optimization_engine/comprehensive_results_analyzer.py @@ -0,0 +1,393 @@ +""" +Comprehensive Results Analyzer + +Performs thorough introspection of OP2, F06, and other Nastran output files +to discover ALL available results, not just what we expect. + +This helps ensure we don't miss important data that's actually in the output files. +""" + +from pathlib import Path +from typing import Dict, Any, List, Optional +import json +from dataclasses import dataclass, asdict +from pyNastran.op2.op2 import OP2 + + +@dataclass +class OP2Contents: + """Complete inventory of OP2 file contents.""" + file_path: str + subcases: List[int] + + # Displacement results + displacement_available: bool + displacement_subcases: List[int] + + # Stress results (by element type) + stress_results: Dict[str, List[int]] # element_type -> [subcases] + + # Strain results (by element type) + strain_results: Dict[str, List[int]] + + # Force results + force_results: Dict[str, List[int]] + + # Other results + other_results: Dict[str, Any] + + # Grid point forces/stresses + grid_point_forces: List[int] + spc_forces: List[int] + mpc_forces: List[int] + + # Summary + total_result_types: int + element_types_with_results: List[str] + + +@dataclass +class F06Contents: + """Complete inventory of F06 file contents.""" + file_path: str + has_displacement: bool + has_stress: bool + has_strain: bool + has_forces: bool + element_types_found: List[str] + error_messages: List[str] + warning_messages: List[str] + + +class ComprehensiveResultsAnalyzer: + """ + Analyzes ALL Nastran output files to discover available results. + + This is much more thorough than just checking expected results. + """ + + def __init__(self, output_dir: Path): + """ + Initialize analyzer. + + Args: + output_dir: Directory containing Nastran output files (.op2, .f06, etc.) + """ + self.output_dir = Path(output_dir) + + def analyze_op2(self, op2_file: Path) -> OP2Contents: + """ + Comprehensively analyze OP2 file contents. + + Args: + op2_file: Path to OP2 file + + Returns: + OP2Contents with complete inventory + """ + print(f"\n[OP2 ANALYSIS] Reading: {op2_file.name}") + + model = OP2() + model.read_op2(str(op2_file)) + + # Discover all subcases + all_subcases = set() + + # Check displacement + displacement_available = hasattr(model, 'displacements') and len(model.displacements) > 0 + displacement_subcases = list(model.displacements.keys()) if displacement_available else [] + all_subcases.update(displacement_subcases) + + print(f" Displacement: {'YES' if displacement_available else 'NO'}") + if displacement_subcases: + print(f" Subcases: {displacement_subcases}") + + # Check ALL stress results by scanning attributes + stress_results = {} + element_types_with_stress = [] + + # List of known stress attribute names (safer than scanning all attributes) + stress_attrs = [ + 'cquad4_stress', 'ctria3_stress', 'ctetra_stress', 'chexa_stress', 'cpenta_stress', + 'cbar_stress', 'cbeam_stress', 'crod_stress', 'conrod_stress', 'ctube_stress', + 'cshear_stress', 'cbush_stress', 'cgap_stress', 'celas1_stress', 'celas2_stress', + 'celas3_stress', 'celas4_stress' + ] + + for attr_name in stress_attrs: + if hasattr(model, attr_name): + try: + stress_obj = getattr(model, attr_name) + if isinstance(stress_obj, dict) and len(stress_obj) > 0: + element_type = attr_name.replace('_stress', '') + subcases = list(stress_obj.keys()) + stress_results[element_type] = subcases + element_types_with_stress.append(element_type) + all_subcases.update(subcases) + print(f" Stress [{element_type}]: YES") + print(f" Subcases: {subcases}") + except Exception as e: + # Skip attributes that cause errors + pass + + if not stress_results: + print(f" Stress: NO stress results found") + + # Check ALL strain results + strain_results = {} + strain_attrs = [attr.replace('_stress', '_strain') for attr in stress_attrs] + + for attr_name in strain_attrs: + if hasattr(model, attr_name): + try: + strain_obj = getattr(model, attr_name) + if isinstance(strain_obj, dict) and len(strain_obj) > 0: + element_type = attr_name.replace('_strain', '') + subcases = list(strain_obj.keys()) + strain_results[element_type] = subcases + all_subcases.update(subcases) + print(f" Strain [{element_type}]: YES") + print(f" Subcases: {subcases}") + except Exception as e: + pass + + if not strain_results: + print(f" Strain: NO strain results found") + + # Check ALL force results + force_results = {} + force_attrs = [attr.replace('_stress', '_force') for attr in stress_attrs] + + for attr_name in force_attrs: + if hasattr(model, attr_name): + try: + force_obj = getattr(model, attr_name) + if isinstance(force_obj, dict) and len(force_obj) > 0: + element_type = attr_name.replace('_force', '') + subcases = list(force_obj.keys()) + force_results[element_type] = subcases + all_subcases.update(subcases) + print(f" Force [{element_type}]: YES") + print(f" Subcases: {subcases}") + except Exception as e: + pass + + if not force_results: + print(f" Force: NO force results found") + + # Check grid point forces + grid_point_forces = list(model.grid_point_forces.keys()) if hasattr(model, 'grid_point_forces') else [] + if grid_point_forces: + print(f" Grid Point Forces: YES") + print(f" Subcases: {grid_point_forces}") + all_subcases.update(grid_point_forces) + + # Check SPC/MPC forces + spc_forces = list(model.spc_forces.keys()) if hasattr(model, 'spc_forces') else [] + mpc_forces = list(model.mpc_forces.keys()) if hasattr(model, 'mpc_forces') else [] + + if spc_forces: + print(f" SPC Forces: YES") + print(f" Subcases: {spc_forces}") + all_subcases.update(spc_forces) + + if mpc_forces: + print(f" MPC Forces: YES") + print(f" Subcases: {mpc_forces}") + all_subcases.update(mpc_forces) + + # Check for other interesting results + other_results = {} + interesting_attrs = ['eigenvalues', 'eigenvectors', 'thermal_load_vectors', + 'load_vectors', 'contact', 'glue', 'slide_lines'] + + for attr_name in interesting_attrs: + if hasattr(model, attr_name): + obj = getattr(model, attr_name) + if obj and (isinstance(obj, dict) and len(obj) > 0) or (not isinstance(obj, dict)): + other_results[attr_name] = str(type(obj)) + print(f" {attr_name}: YES") + + # Collect all element types that have any results + all_element_types = set() + all_element_types.update(stress_results.keys()) + all_element_types.update(strain_results.keys()) + all_element_types.update(force_results.keys()) + + total_result_types = ( + len(stress_results) + + len(strain_results) + + len(force_results) + + (1 if displacement_available else 0) + + (1 if grid_point_forces else 0) + + (1 if spc_forces else 0) + + (1 if mpc_forces else 0) + + len(other_results) + ) + + print(f"\n SUMMARY:") + print(f" Total subcases: {len(all_subcases)}") + print(f" Total result types: {total_result_types}") + print(f" Element types with results: {sorted(all_element_types)}") + + return OP2Contents( + file_path=str(op2_file), + subcases=sorted(all_subcases), + displacement_available=displacement_available, + displacement_subcases=displacement_subcases, + stress_results=stress_results, + strain_results=strain_results, + force_results=force_results, + other_results=other_results, + grid_point_forces=grid_point_forces, + spc_forces=spc_forces, + mpc_forces=mpc_forces, + total_result_types=total_result_types, + element_types_with_results=sorted(all_element_types) + ) + + def analyze_f06(self, f06_file: Path) -> F06Contents: + """ + Analyze F06 file for available results. + + Args: + f06_file: Path to F06 file + + Returns: + F06Contents with inventory + """ + print(f"\n[F06 ANALYSIS] Reading: {f06_file.name}") + + if not f06_file.exists(): + print(f" F06 file not found") + return F06Contents( + file_path=str(f06_file), + has_displacement=False, + has_stress=False, + has_strain=False, + has_forces=False, + element_types_found=[], + error_messages=[], + warning_messages=[] + ) + + # Read F06 file + with open(f06_file, 'r', encoding='latin-1', errors='ignore') as f: + content = f.read() + + # Search for key sections + has_displacement = 'D I S P L A C E M E N T' in content + has_stress = 'S T R E S S E S' in content + has_strain = 'S T R A I N S' in content + has_forces = 'F O R C E S' in content + + print(f" Displacement: {'YES' if has_displacement else 'NO'}") + print(f" Stress: {'YES' if has_stress else 'NO'}") + print(f" Strain: {'YES' if has_strain else 'NO'}") + print(f" Forces: {'YES' if has_forces else 'NO'}") + + # Find element types mentioned + element_keywords = ['CQUAD4', 'CTRIA3', 'CTETRA', 'CHEXA', 'CPENTA', 'CBAR', 'CBEAM', 'CROD'] + element_types_found = [] + + for elem_type in element_keywords: + if elem_type in content: + element_types_found.append(elem_type) + + if element_types_found: + print(f" Element types: {element_types_found}") + + # Extract errors and warnings + error_messages = [] + warning_messages = [] + + for line in content.split('\n'): + line_upper = line.upper() + if 'ERROR' in line_upper or 'FATAL' in line_upper: + error_messages.append(line.strip()) + elif 'WARNING' in line_upper or 'WARN' in line_upper: + warning_messages.append(line.strip()) + + if error_messages: + print(f" Errors found: {len(error_messages)}") + for err in error_messages[:5]: # Show first 5 + print(f" {err}") + + if warning_messages: + print(f" Warnings found: {len(warning_messages)}") + for warn in warning_messages[:5]: # Show first 5 + print(f" {warn}") + + return F06Contents( + file_path=str(f06_file), + has_displacement=has_displacement, + has_stress=has_stress, + has_strain=has_strain, + has_forces=has_forces, + element_types_found=element_types_found, + error_messages=error_messages[:20], # Keep first 20 + warning_messages=warning_messages[:20] + ) + + def analyze_all(self, op2_pattern: str = "*.op2", f06_pattern: str = "*.f06") -> Dict[str, Any]: + """ + Analyze all OP2 and F06 files in directory. + + Args: + op2_pattern: Glob pattern for OP2 files + f06_pattern: Glob pattern for F06 files + + Returns: + Dict with complete analysis results + """ + print("="*80) + print("COMPREHENSIVE NASTRAN RESULTS ANALYSIS") + print("="*80) + print(f"\nDirectory: {self.output_dir}") + + results = { + 'directory': str(self.output_dir), + 'op2_files': [], + 'f06_files': [] + } + + # Find and analyze all OP2 files + op2_files = list(self.output_dir.glob(op2_pattern)) + print(f"\nFound {len(op2_files)} OP2 file(s)") + + for op2_file in op2_files: + op2_contents = self.analyze_op2(op2_file) + results['op2_files'].append(asdict(op2_contents)) + + # Find and analyze all F06 files + f06_files = list(self.output_dir.glob(f06_pattern)) + print(f"\nFound {len(f06_files)} F06 file(s)") + + for f06_file in f06_files: + f06_contents = self.analyze_f06(f06_file) + results['f06_files'].append(asdict(f06_contents)) + + print("\n" + "="*80) + print("ANALYSIS COMPLETE") + print("="*80) + + return results + + +if __name__ == '__main__': + import sys + + if len(sys.argv) > 1: + output_dir = Path(sys.argv[1]) + else: + output_dir = Path.cwd() + + analyzer = ComprehensiveResultsAnalyzer(output_dir) + results = analyzer.analyze_all() + + # Save results to JSON + output_file = output_dir / "comprehensive_results_analysis.json" + with open(output_file, 'w', encoding='utf-8') as f: + json.dump(results, f, indent=2) + + print(f"\nResults saved to: {output_file}") diff --git a/optimization_engine/result_extractors/generated/extract_expression.py b/optimization_engine/result_extractors/generated/extract_expression.py new file mode 100644 index 00000000..5e3a4c2a --- /dev/null +++ b/optimization_engine/result_extractors/generated/extract_expression.py @@ -0,0 +1,55 @@ +""" +Extract expression value from NX .prt file +Used for extracting computed values like mass, volume, etc. + +This extractor reads expressions using the .exp export method for accuracy. +""" + +from pathlib import Path +from typing import Dict, Any +from optimization_engine.nx_updater import NXParameterUpdater + + +def extract_expression(prt_file: Path, expression_name: str): + """ + Extract an expression value from NX .prt file. + + Args: + prt_file: Path to .prt file + expression_name: Name of expression to extract (e.g., 'p173' for mass) + + Returns: + Dict with expression value and units + """ + updater = NXParameterUpdater(prt_file, backup=False) + expressions = updater.get_all_expressions(use_exp_export=True) + + if expression_name not in expressions: + raise ValueError(f"Expression '{expression_name}' not found in {prt_file}") + + expr_info = expressions[expression_name] + + # If expression is a formula (value is None), we need to evaluate it + # For now, we'll raise an error if it's a formula - user should use the computed value + if expr_info['value'] is None and expr_info['formula'] is not None: + raise ValueError( + f"Expression '{expression_name}' is a formula: {expr_info['formula']}. " + f"This extractor requires a computed value, not a formula reference." + ) + + return { + expression_name: expr_info['value'], + f'{expression_name}_units': expr_info['units'] + } + + +if __name__ == '__main__': + # Example usage + import sys + if len(sys.argv) > 2: + prt_file = Path(sys.argv[1]) + expression_name = sys.argv[2] + result = extract_expression(prt_file, expression_name) + print(f"Extraction result: {result}") + else: + print(f"Usage: python {sys.argv[0]} ") diff --git a/optimization_engine/solve_simulation_simple.py b/optimization_engine/solve_simulation_simple.py new file mode 100644 index 00000000..98bd12fd --- /dev/null +++ b/optimization_engine/solve_simulation_simple.py @@ -0,0 +1,116 @@ +""" +Simple NX Journal Script to Just Solve Simulation + +This is a simplified version that just opens and solves the simulation +without trying to update linked parts (for simple models). + +Usage: run_journal.exe solve_simulation_simple.py +""" + +import sys +import NXOpen +import NXOpen.CAE + + +def main(args): + """ + Open and solve a simulation file without updates. + + Args: + args: Command line arguments + args[0]: .sim file path + """ + if len(args) < 1: + print("ERROR: No .sim file path provided") + return False + + sim_file_path = args[0] + + print(f"[JOURNAL] Opening simulation: {sim_file_path}") + + try: + theSession = NXOpen.Session.GetSession() + + # Set load options to load linked parts from directory + print("[JOURNAL] Setting load options for linked parts...") + import os + working_dir = os.path.dirname(os.path.abspath(sim_file_path)) + + # Complete load options setup + theSession.Parts.LoadOptions.LoadLatest = False + theSession.Parts.LoadOptions.ComponentLoadMethod = NXOpen.LoadOptions.LoadMethod.FromDirectory + + searchDirectories = [working_dir] + searchSubDirs = [True] + theSession.Parts.LoadOptions.SetSearchDirectories(searchDirectories, searchSubDirs) + + theSession.Parts.LoadOptions.ComponentsToLoad = NXOpen.LoadOptions.LoadComponents.All + theSession.Parts.LoadOptions.PartLoadOption = NXOpen.LoadOptions.LoadOption.FullyLoad + theSession.Parts.LoadOptions.SetInterpartData(True, NXOpen.LoadOptions.Parent.All) + theSession.Parts.LoadOptions.AllowSubstitution = False + theSession.Parts.LoadOptions.GenerateMissingPartFamilyMembers = True + theSession.Parts.LoadOptions.AbortOnFailure = False + + referenceSets = ["As Saved", "Use Simplified", "Use Model", "Entire Part", "Empty"] + theSession.Parts.LoadOptions.SetDefaultReferenceSets(referenceSets) + theSession.Parts.LoadOptions.ReferenceSetOverride = False + + print(f"[JOURNAL] Load directory set to: {working_dir}") + + # Close any currently open parts + print("[JOURNAL] Closing any open parts...") + try: + partCloseResponses1 = [NXOpen.BasePart.CloseWholeTree] + theSession.Parts.CloseAll(partCloseResponses1) + except: + pass + + # Open the .sim file + print(f"[JOURNAL] Opening simulation...") + basePart1, partLoadStatus1 = theSession.Parts.OpenActiveDisplay( + sim_file_path, + NXOpen.DisplayPartOption.AllowAdditional + ) + + workSimPart = theSession.Parts.BaseWork + partLoadStatus1.Dispose() + + # Switch to simulation application + theSession.ApplicationSwitchImmediate("UG_APP_SFEM") + + simPart1 = workSimPart + theSession.Post.UpdateUserGroupsFromSimPart(simPart1) + + # Solve the simulation directly + print("[JOURNAL] Starting solve...") + markId3 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start") + theSession.SetUndoMarkName(markId3, "Solve Dialog") + + markId5 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Solve") + + theCAESimSolveManager = NXOpen.CAE.SimSolveManager.GetSimSolveManager(theSession) + + # Get the first solution from the simulation + simSimulation1 = workSimPart.FindObject("Simulation") + simSolution1 = simSimulation1.FindObject("Solution[Solution 1]") + + solution_solves = [simSolution1] + + print("[JOURNAL] Submitting solve...") + theCAESimSolveManager.SubmitSolves(solution_solves) + + theSession.DeleteUndoMark(markId5, "Solve") + + print("[JOURNAL] Solve submitted successfully!") + return True + + except Exception as e: + print(f"[JOURNAL] ERROR: {e}") + import traceback + traceback.print_exc() + return False + + +if __name__ == '__main__': + success = main(sys.argv[1:]) + sys.exit(0 if success else 1) diff --git a/optimization_engine/study_creator.py b/optimization_engine/study_creator.py new file mode 100644 index 00000000..2e6e6f25 --- /dev/null +++ b/optimization_engine/study_creator.py @@ -0,0 +1,412 @@ +""" +Study Creator - Atomizer Optimization Study Management + +Creates and manages optimization studies with mandatory benchmarking workflow. + +Workflow: +1. Create study structure +2. User provides NX models +3. Run benchmarking (mandatory) +4. Create substudies (substudy_1, substudy_2, etc.) +5. Each substudy validates against benchmarking before running + +Author: Antoine Letarte +Date: 2025-11-17 +Version: 1.0.0 +""" + +import json +import shutil +from pathlib import Path +from typing import Dict, Any, Optional, List +from datetime import datetime +import logging + +from optimization_engine.benchmarking_substudy import BenchmarkingSubstudy, BenchmarkResults + +logger = logging.getLogger(__name__) + + +class StudyCreator: + """ + Creates and manages Atomizer optimization studies. + + Enforces mandatory benchmarking workflow and provides + study structure management. + """ + + def __init__(self, studies_root: Path = None): + """ + Initialize study creator. + + Args: + studies_root: Root directory for all studies (default: ./studies) + """ + if studies_root is None: + studies_root = Path.cwd() / "studies" + + self.studies_root = Path(studies_root) + self.studies_root.mkdir(parents=True, exist_ok=True) + + logger.info(f"StudyCreator initialized: {self.studies_root}") + + def create_study(self, study_name: str, description: str = "") -> Path: + """ + Create a new optimization study with standard structure. + + Args: + study_name: Name of the study (will be folder name) + description: Brief description of the study + + Returns: + Path to created study directory + """ + study_dir = self.studies_root / study_name + + if study_dir.exists(): + logger.warning(f"Study already exists: {study_name}") + return study_dir + + logger.info(f"Creating new study: {study_name}") + + # Create directory structure + (study_dir / "model").mkdir(parents=True) + (study_dir / "substudies" / "benchmarking").mkdir(parents=True) + (study_dir / "config").mkdir(parents=True) + (study_dir / "plugins" / "post_calculation").mkdir(parents=True) + (study_dir / "results").mkdir(parents=True) + + # Create study metadata + metadata = { + "study_name": study_name, + "description": description, + "created": datetime.now().isoformat(), + "status": "created", + "benchmarking_completed": False, + "substudies": [] + } + + metadata_file = study_dir / "study_metadata.json" + with open(metadata_file, 'w') as f: + json.dump(metadata, f, indent=2) + + # Create README + readme_content = self._generate_study_readme(study_name, description) + readme_file = study_dir / "README.md" + with open(readme_file, 'w', encoding='utf-8') as f: + f.write(readme_content) + + logger.info(f"Study created: {study_dir}") + logger.info("") + logger.info("Next steps:") + logger.info(f" 1. Add NX model files to: {study_dir / 'model'}/") + logger.info(f" 2. Run benchmarking: study.run_benchmarking()") + logger.info("") + + return study_dir + + def run_benchmarking(self, study_dir: Path, prt_file: Path, sim_file: Path) -> BenchmarkResults: + """ + Run mandatory benchmarking for a study. + + This MUST be run before any optimization substudies. + + Args: + study_dir: Study directory + prt_file: Path to NX part file + sim_file: Path to NX simulation file + + Returns: + BenchmarkResults + """ + logger.info("=" * 80) + logger.info(f"RUNNING BENCHMARKING FOR STUDY: {study_dir.name}") + logger.info("=" * 80) + logger.info("") + + # Create benchmarking substudy + benchmark = BenchmarkingSubstudy(study_dir, prt_file, sim_file) + + # Run discovery + results = benchmark.run_discovery() + + # Generate report + report_content = benchmark.generate_report(results) + report_file = study_dir / "substudies" / "benchmarking" / "BENCHMARK_REPORT.md" + with open(report_file, 'w', encoding='utf-8') as f: + f.write(report_content) + + logger.info(f"Benchmark report saved to: {report_file}") + logger.info("") + + # Update metadata + self._update_metadata(study_dir, { + "benchmarking_completed": results.validation_passed, + "last_benchmarking": datetime.now().isoformat(), + "status": "benchmarked" if results.validation_passed else "benchmark_failed" + }) + + if not results.validation_passed: + logger.error("Benchmarking validation FAILED!") + logger.error("Fix issues before creating substudies") + else: + logger.info("Benchmarking validation PASSED!") + logger.info("Ready to create substudies") + + logger.info("") + + return results + + def create_substudy(self, study_dir: Path, substudy_name: Optional[str] = None, + config: Optional[Dict[str, Any]] = None) -> Path: + """ + Create a new substudy. + + Automatically validates against benchmarking before proceeding. + + Args: + study_dir: Study directory + substudy_name: Name of substudy (if None, auto-generates substudy_N) + config: Optional configuration dict + + Returns: + Path to substudy directory + """ + # Check benchmarking completed + metadata = self._load_metadata(study_dir) + + if not metadata.get('benchmarking_completed', False): + raise ValueError( + "Benchmarking must be completed before creating substudies!\n" + f"Run: study.run_benchmarking(prt_file, sim_file)" + ) + + # Auto-generate substudy name if not provided + if substudy_name is None: + existing_substudies = metadata.get('substudies', []) + # Filter out benchmarking + non_benchmark = [s for s in existing_substudies if s != 'benchmarking'] + substudy_number = len(non_benchmark) + 1 + substudy_name = f"substudy_{substudy_number}" + + substudy_dir = study_dir / "substudies" / substudy_name + + if substudy_dir.exists(): + logger.warning(f"Substudy already exists: {substudy_name}") + return substudy_dir + + logger.info(f"Creating substudy: {substudy_name}") + + # Create substudy directory + substudy_dir.mkdir(parents=True, exist_ok=True) + + # Create substudy config + if config is None: + # Use template + config = self._create_default_substudy_config(study_dir, substudy_name) + + config_file = substudy_dir / "config.json" + with open(config_file, 'w') as f: + json.dump(config, f, indent=2) + + # Update metadata + substudies = metadata.get('substudies', []) + if substudy_name not in substudies: + substudies.append(substudy_name) + self._update_metadata(study_dir, {'substudies': substudies}) + + logger.info(f"Substudy created: {substudy_dir}") + logger.info(f"Config: {config_file}") + logger.info("") + + return substudy_dir + + def _create_default_substudy_config(self, study_dir: Path, substudy_name: str) -> Dict[str, Any]: + """Create default substudy configuration based on benchmarking.""" + # Load benchmark results + benchmark_file = study_dir / "substudies" / "benchmarking" / "benchmark_results.json" + + if not benchmark_file.exists(): + raise FileNotFoundError(f"Benchmark results not found: {benchmark_file}") + + with open(benchmark_file, 'r') as f: + benchmark_data = json.load(f) + + # Create config from benchmark proposals + config = { + "substudy_name": substudy_name, + "description": f"Substudy {substudy_name}", + "created": datetime.now().isoformat(), + + "optimization": { + "algorithm": "TPE", + "direction": "minimize", + "n_trials": 20, + "n_startup_trials": 10, + "design_variables": [] + }, + + "continuation": { + "enabled": False + }, + + "solver": { + "nastran_version": "2412", + "use_journal": True, + "timeout": 300 + } + } + + # Add proposed design variables + for var in benchmark_data.get('proposed_design_variables', []): + config["optimization"]["design_variables"].append({ + "parameter": var['parameter'], + "min": 0.0, # User must fill + "max": 0.0, # User must fill + "units": var.get('units', ''), + "comment": f"From benchmarking: {var.get('suggested_range', 'define range')}" + }) + + return config + + def _load_metadata(self, study_dir: Path) -> Dict[str, Any]: + """Load study metadata.""" + metadata_file = study_dir / "study_metadata.json" + + if not metadata_file.exists(): + return {} + + with open(metadata_file, 'r') as f: + return json.load(f) + + def _update_metadata(self, study_dir: Path, updates: Dict[str, Any]): + """Update study metadata.""" + metadata = self._load_metadata(study_dir) + metadata.update(updates) + + metadata_file = study_dir / "study_metadata.json" + with open(metadata_file, 'w') as f: + json.dump(metadata, f, indent=2) + + def _generate_study_readme(self, study_name: str, description: str) -> str: + """Generate README for new study.""" + readme = [] + readme.append(f"# {study_name}") + readme.append("") + readme.append(f"**Description**: {description}") + readme.append(f"**Created**: {datetime.now().strftime('%Y-%m-%d')}") + readme.append("") + readme.append("## Study Structure") + readme.append("") + readme.append("```") + readme.append(f"{study_name}/") + readme.append("├── model/ # NX model files (.prt, .sim)") + readme.append("├── substudies/") + readme.append("│ ├── benchmarking/ # Mandatory discovery & validation") + readme.append("│ ├── substudy_1/ # First optimization campaign") + readme.append("│ └── substudy_2/ # Additional campaigns") + readme.append("├── config/ # Configuration templates") + readme.append("├── plugins/ # Study-specific hooks") + readme.append("├── results/ # Optimization results") + readme.append("└── README.md # This file") + readme.append("```") + readme.append("") + readme.append("## Workflow") + readme.append("") + readme.append("### 1. Add NX Models") + readme.append("Place your `.prt` and `.sim` files in the `model/` directory.") + readme.append("") + readme.append("### 2. Run Benchmarking (Mandatory)") + readme.append("```python") + readme.append("from optimization_engine.study_creator import StudyCreator") + readme.append("") + readme.append("creator = StudyCreator()") + readme.append(f"results = creator.run_benchmarking(") + readme.append(f" study_dir=Path('studies/{study_name}'),") + readme.append(" prt_file=Path('studies/{study_name}/model/YourPart.prt'),") + readme.append(" sim_file=Path('studies/{study_name}/model/YourSim.sim')") + readme.append(")") + readme.append("```") + readme.append("") + readme.append("### 3. Review Benchmark Report") + readme.append("Check `substudies/benchmarking/BENCHMARK_REPORT.md` for:") + readme.append("- Discovered expressions") + readme.append("- OP2 contents") + readme.append("- Baseline performance") + readme.append("- Configuration proposals") + readme.append("") + readme.append("### 4. Create Substudies") + readme.append("```python") + readme.append("# Auto-numbered: substudy_1, substudy_2, etc.") + readme.append(f"substudy_dir = creator.create_substudy(Path('studies/{study_name}'))") + readme.append("") + readme.append("# Or custom name:") + readme.append(f"substudy_dir = creator.create_substudy(") + readme.append(f" Path('studies/{study_name}'), ") + readme.append(" substudy_name='coarse_exploration'") + readme.append(")") + readme.append("```") + readme.append("") + readme.append("### 5. Configure & Run Optimization") + readme.append("Edit `substudies/substudy_N/config.json` with:") + readme.append("- Design variable ranges") + readme.append("- Objectives and constraints") + readme.append("- Number of trials") + readme.append("") + readme.append("Then run the optimization!") + readme.append("") + readme.append("## Status") + readme.append("") + readme.append("See `study_metadata.json` for current study status.") + readme.append("") + + return "\n".join(readme) + + def list_studies(self) -> List[Dict[str, Any]]: + """List all studies in the studies root.""" + studies = [] + + for study_dir in self.studies_root.iterdir(): + if not study_dir.is_dir(): + continue + + metadata_file = study_dir / "study_metadata.json" + if metadata_file.exists(): + with open(metadata_file, 'r') as f: + metadata = json.load(f) + studies.append({ + 'name': study_dir.name, + 'path': study_dir, + 'status': metadata.get('status', 'unknown'), + 'created': metadata.get('created', 'unknown'), + 'benchmarking_completed': metadata.get('benchmarking_completed', False), + 'substudies_count': len(metadata.get('substudies', [])) - 1 # Exclude benchmarking + }) + + return studies + + +def main(): + """Example usage of StudyCreator.""" + print("=" * 80) + print("Atomizer Study Creator") + print("=" * 80) + print() + + creator = StudyCreator() + + # List existing studies + studies = creator.list_studies() + print(f"Existing studies: {len(studies)}") + for study in studies: + status_icon = "✅" if study['benchmarking_completed'] else "⚠️" + print(f" {status_icon} {study['name']} ({study['status']}) - {study['substudies_count']} substudies") + print() + + print("To create a new study:") + print(" creator.create_study('my_study_name', 'Brief description')") + print() + + +if __name__ == '__main__': + main() diff --git a/studies/simple_beam_optimization/OPTIMIZATION_RESULTS_50TRIALS.md b/studies/simple_beam_optimization/OPTIMIZATION_RESULTS_50TRIALS.md new file mode 100644 index 00000000..c164cef8 --- /dev/null +++ b/studies/simple_beam_optimization/OPTIMIZATION_RESULTS_50TRIALS.md @@ -0,0 +1,274 @@ +# Simple Beam Optimization - 50 Trials Results + +**Date**: 2025-11-17 +**Study**: simple_beam_optimization +**Substudy**: full_optimization_50trials +**Total Runtime**: ~21 minutes + +--- + +## Executive Summary + +The 50-trial optimization successfully explored the 4D design space but **did not find a feasible design** that meets the displacement constraint (< 10mm). The best design achieved 11.399 mm displacement, which is **14% over the limit**. + +### Key Findings + +- **Total Trials**: 50 +- **Feasible Designs**: 0 (0%) +- **Best Design**: Trial 43 + - Displacement: 11.399 mm (1.399 mm over limit) + - Stress: 70.263 MPa + - Mass: 1987.556 kg + - Objective: 702.717 + +### Design Variables (Best Trial 43) + +``` +beam_half_core_thickness: 39.836 mm (upper bound: 40 mm) ✓ +beam_face_thickness: 39.976 mm (upper bound: 40 mm) ✓ +holes_diameter: 235.738 mm (mid-range) +hole_count: 11 (mid-range) +``` + +**Observation**: The optimizer pushed beam thickness to the **maximum allowed values**, suggesting that the constraint might not be achievable within the current design variable bounds. + +--- + +## Detailed Analysis + +### Performance Statistics + +| Metric | Minimum | Maximum | Range | +|--------|---------|---------|-------| +| Displacement (mm) | 11.399 | 37.075 | 25.676 | +| Stress (MPa) | 70.263 | 418.652 | 348.389 | +| Mass (kg) | 645.90 | 1987.56 | 1341.66 | + +### Constraint Violation Analysis + +- **Minimum Violation**: 1.399 mm (Trial 43) - **Closest to meeting constraint** +- **Maximum Violation**: 27.075 mm (Trial 1) +- **Average Violation**: 5.135 mm across all 50 trials + +### Top 5 Trials (Closest to Feasibility) + +| Trial | Displacement (mm) | Violation (mm) | Stress (MPa) | Mass (kg) | Objective | +|-------|------------------|----------------|--------------|-----------|-----------| +| 43 | 11.399 | 1.399 | 70.263 | 1987.56 | 842.59 | +| 49 | 11.578 | 1.578 | 73.339 | 1974.84 | 857.25 | +| 42 | 11.614 | 1.614 | 71.674 | 1951.52 | 852.44 | +| 47 | 11.643 | 1.643 | 73.596 | 1966.00 | 860.82 | +| 32 | 11.682 | 1.682 | 71.887 | 1930.16 | 852.06 | + +**Pattern**: All top designs cluster around 11.4-11.7 mm displacement with masses near 2000 kg, suggesting this is the **practical limit** for the current design space. + +--- + +## Physical Interpretation + +### Why No Feasible Design Was Found + +1. **Beam Thickness Maxed Out**: Both beam_half_core_thickness (39.836mm) and beam_face_thickness (39.976mm) are at or very near the upper bound (40mm), indicating that **thicker beams are needed** to meet the constraint. + +2. **Moderate Hole Configuration**: hole_count=11 and holes_diameter=235.738mm suggest a balance between: + - Weight reduction (more/larger holes) + - Stiffness maintenance (fewer/smaller holes) + +3. **Trade-off Tension**: The multi-objective formulation (minimize displacement, stress, AND mass) creates competing goals: + - Reducing displacement requires thicker beams → **increases mass** + - Reducing mass requires thinner beams → **increases displacement** + +### Engineering Insights + +The best design (Trial 43) achieved: +- **Low stress**: 70.263 MPa (well within typical aluminum limits ~200-300 MPa) +- **High stiffness**: Displacement only 14% over limit +- **Heavy**: 1987.56 kg (high mass due to thick beams) + +This suggests the design is **structurally sound** but **overweight** for the displacement target. + +--- + +## Recommendations + +### Option 1: Relax Displacement Constraint (Quick Win) + +Change displacement limit from 10mm to **12.5mm** (10% margin above best achieved). + +**Why**: Trial 43 is very close (11.399mm). A slightly relaxed constraint would immediately yield 5+ feasible designs. + +**Implementation**: +```json +// In beam_optimization_config.json +"constraints": [ + { + "name": "displacement_limit", + "type": "less_than", + "value": 12.5, // Changed from 10.0 + "units": "mm" + } +] +``` + +**Expected Outcome**: Feasible designs with good mass/stiffness trade-off. + +--- + +### Option 2: Expand Design Variable Ranges (Engineering Solution) + +Allow thicker beams to meet the original constraint. + +**Why**: The optimizer is already at the upper bounds, indicating it needs more thickness to achieve <10mm displacement. + +**Implementation**: +```json +// In beam_optimization_config.json +"design_variables": { + "beam_half_core_thickness": { + "min": 10.0, + "max": 60.0, // Increased from 40.0 + ... + }, + "beam_face_thickness": { + "min": 10.0, + "max": 60.0, // Increased from 40.0 + ... + } +} +``` + +**Trade-off**: Heavier beams (mass will increase significantly). + +--- + +### Option 3: Adjust Objective Weights (Prioritize Stiffness) + +Give more weight to displacement reduction. + +**Current Weights**: +- minimize_displacement: 33% +- minimize_stress: 33% +- minimize_mass: 34% + +**Recommended Weights**: +```json +"objectives": [ + { + "name": "minimize_displacement", + "weight": 0.50, // Increased from 0.33 + ... + }, + { + "name": "minimize_stress", + "weight": 0.25, // Decreased from 0.33 + ... + }, + { + "name": "minimize_mass", + "weight": 0.25 // Decreased from 0.34 + ... + } +] +``` + +**Expected Outcome**: Optimizer will prioritize meeting displacement constraint even at the cost of higher mass. + +--- + +### Option 4: Run Refined Optimization in Promising Region + +Focus search around the best trial's design space. + +**Strategy**: +1. Use Trial 43 design as baseline +2. Narrow variable ranges around these values: + - beam_half_core_thickness: 35-40 mm (Trial 43: 39.836) + - beam_face_thickness: 35-40 mm (Trial 43: 39.976) + - holes_diameter: 200-270 mm (Trial 43: 235.738) + - hole_count: 9-13 (Trial 43: 11) + +3. Run 30-50 additional trials with tighter bounds + +**Why**: TPE sampler may find feasible designs by exploiting local gradients near Trial 43. + +--- + +### Option 5: Multi-Stage Optimization (Advanced) + +**Stage 1**: Focus solely on meeting displacement constraint +- Objective: minimize displacement only +- Constraint: displacement < 10mm +- Run 20 trials + +**Stage 2**: Optimize mass while maintaining feasibility +- Use Stage 1 best design as starting point +- Objective: minimize mass +- Constraint: displacement < 10mm +- Run 30 trials + +**Why**: Decoupling objectives can help find feasible designs first, then optimize them. + +--- + +## Validation of 4D Expression Updates + +All 50 trials successfully updated all 4 design variables using the new .exp import system: + +- ✅ beam_half_core_thickness: Updated correctly in all trials +- ✅ beam_face_thickness: Updated correctly in all trials +- ✅ holes_diameter: Updated correctly in all trials +- ✅ **hole_count**: Updated correctly in all trials (previously failing!) + +**Verification**: Mesh element counts varied across trials (e.g., Trial 43: 5665 nodes), confirming that hole_count changes are affecting geometry. + +--- + +## Next Steps + +### Immediate Actions + +1. **Choose a strategy** from the 5 options above based on project priorities: + - Need quick results? → Option 1 (relax constraint) + - Engineering rigor? → Option 2 (expand bounds) + - Balanced approach? → Option 3 (adjust weights) + +2. **Update configuration** accordingly + +3. **Run refined optimization** (30-50 trials should suffice) + +### Long-Term Enhancements + +1. **Pareto Front Analysis**: Since this is multi-objective, generate Pareto front to visualize displacement-mass-stress trade-offs + +2. **Sensitivity Analysis**: Identify which design variables have the most impact on displacement + +3. **Constraint Reformulation**: Instead of hard constraint, use soft penalty with higher weight + +--- + +## Conclusion + +The 50-trial optimization was **successful from a technical standpoint**: +- All 4 design variables updated correctly (validation of .exp import system) +- Optimization converged to a consistent region (11.4-11.7mm displacement) +- Multiple trials explored the full design space + +However, the **displacement constraint appears infeasible** with the current design variable bounds. The optimizer is telling us: "To meet <10mm displacement, I need thicker beams than you're allowing me to use." + +**Recommended Action**: Start with **Option 1** (relax constraint to 12.5mm) to validate the workflow, then decide if achieving <10mm is worth the mass penalty of thicker beams (Options 2-5). + +--- + +## Files + +- **Configuration**: [beam_optimization_config.json](beam_optimization_config.json) +- **Best Trial**: [substudies/full_optimization_50trials/best_trial.json](substudies/full_optimization_50trials/best_trial.json) +- **Full Log**: [../../beam_optimization_50trials.log](../../beam_optimization_50trials.log) +- **Analysis Script**: [../../analyze_beam_results.py](../../analyze_beam_results.py) +- **Summary Data**: [../../beam_optimization_summary.json](../../beam_optimization_summary.json) + +--- + +**Generated**: 2025-11-17 +**Analyst**: Claude Code +**Atomizer Version**: Phase 3.2 (NX Expression Import System) diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/best_trial.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/best_trial.json new file mode 100644 index 00000000..8528ca68 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/best_trial.json @@ -0,0 +1,11 @@ +{ + "best_trial_number": 43, + "best_params": { + "beam_half_core_thickness": 39.835977148950434, + "beam_face_thickness": 39.97606330808705, + "holes_diameter": 235.73841184921832, + "hole_count": 11 + }, + "best_value": 842.5871322101043, + "timestamp": "2025-11-17T12:56:49.443658" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/optuna_study.pkl b/studies/simple_beam_optimization/substudies/full_optimization_50trials/optuna_study.pkl new file mode 100644 index 00000000..bba5c361 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/optuna_study.pkl differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam.prt new file mode 100644 index 00000000..be2579b7 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam_fem1.fem new file mode 100644 index 00000000..05ae198f Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam_fem1_i.prt new file mode 100644 index 00000000..7437042c Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam_sim1.sim new file mode 100644 index 00000000..2e0ff5d6 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/results.json new file mode 100644 index 00000000..f8954a27 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_000/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 0, + "design_variables": { + "beam_half_core_thickness": 30.889245901635, + "beam_face_thickness": 25.734879738683965, + "holes_diameter": 196.88120747479843, + "hole_count": 8 + }, + "results": { + "max_displacement": 15.094435691833496, + "max_stress": 94.004625, + "mass": 1579.95831975008 + }, + "objective": 573.1885187433323, + "penalty": 509.44356918334967, + "total_objective": 1082.632087926682, + "timestamp": "2025-11-17T12:35:07.090019" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam.prt new file mode 100644 index 00000000..84877f8d Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam_fem1.fem new file mode 100644 index 00000000..b066eeaa Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam_fem1_i.prt new file mode 100644 index 00000000..daacc540 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam_sim1.sim new file mode 100644 index 00000000..6e470f25 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/results.json new file mode 100644 index 00000000..378811ad --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_001/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 1, + "design_variables": { + "beam_half_core_thickness": 11.303198040010104, + "beam_face_thickness": 16.282803447622868, + "holes_diameter": 429.3010428935242, + "hole_count": 6 + }, + "results": { + "max_displacement": 37.07490158081055, + "max_stress": 341.66096875, + "mass": 645.897660512099 + }, + "objective": 344.58804178328114, + "penalty": 2707.4901580810547, + "total_objective": 3052.078199864336, + "timestamp": "2025-11-17T12:35:32.903554" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam.prt new file mode 100644 index 00000000..ca47976e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam_fem1.fem new file mode 100644 index 00000000..e1cdf99b Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam_fem1_i.prt new file mode 100644 index 00000000..b9ed6f46 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam_sim1.sim new file mode 100644 index 00000000..0d1da694 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/results.json new file mode 100644 index 00000000..9c10b381 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_002/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 2, + "design_variables": { + "beam_half_core_thickness": 22.13055862881592, + "beam_face_thickness": 10.613383555548651, + "holes_diameter": 208.51035503920883, + "hole_count": 15 + }, + "results": { + "max_displacement": 28.803829193115234, + "max_stress": 418.65240625, + "mass": 965.750784009661 + }, + "objective": 476.0158242595128, + "penalty": 1880.3829193115234, + "total_objective": 2356.398743571036, + "timestamp": "2025-11-17T12:35:59.234414" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam.prt new file mode 100644 index 00000000..a7d9beb1 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam_fem1.fem new file mode 100644 index 00000000..28d245e3 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam_fem1_i.prt new file mode 100644 index 00000000..0c997bff Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam_sim1.sim new file mode 100644 index 00000000..20a9cee5 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/results.json new file mode 100644 index 00000000..f391b624 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_003/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 3, + "design_variables": { + "beam_half_core_thickness": 39.78301412313181, + "beam_face_thickness": 30.16401688307248, + "holes_diameter": 226.25741233381117, + "hole_count": 11 + }, + "results": { + "max_displacement": 12.913118362426758, + "max_stress": 79.3666484375, + "mass": 1837.45194552324 + }, + "objective": 655.1859845218776, + "penalty": 291.3118362426758, + "total_objective": 946.4978207645534, + "timestamp": "2025-11-17T12:36:28.057060" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam.prt new file mode 100644 index 00000000..e7671e89 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam_fem1.fem new file mode 100644 index 00000000..7ceb41d6 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam_fem1_i.prt new file mode 100644 index 00000000..5f075310 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam_sim1.sim new file mode 100644 index 00000000..a735f22a Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/results.json new file mode 100644 index 00000000..dd3fdab7 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_004/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 4, + "design_variables": { + "beam_half_core_thickness": 39.70778774581336, + "beam_face_thickness": 24.041841898010958, + "holes_diameter": 166.95548469781374, + "hole_count": 7 + }, + "results": { + "max_displacement": 13.88154411315918, + "max_stress": 86.727765625, + "mass": 1884.56761364204 + }, + "objective": 673.9540608518862, + "penalty": 388.15441131591797, + "total_objective": 1062.1084721678042, + "timestamp": "2025-11-17T12:36:55.243019" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam.prt new file mode 100644 index 00000000..503f7a1b Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam_fem1.fem new file mode 100644 index 00000000..c5d8cfe9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam_fem1_i.prt new file mode 100644 index 00000000..fc2632f4 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam_sim1.sim new file mode 100644 index 00000000..b8da280d Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/results.json new file mode 100644 index 00000000..3fc238dd --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_005/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 5, + "design_variables": { + "beam_half_core_thickness": 24.66688696685749, + "beam_face_thickness": 21.365405059488964, + "holes_diameter": 286.4471575094528, + "hole_count": 12 + }, + "results": { + "max_displacement": 19.82601547241211, + "max_stress": 117.1086640625, + "mass": 1142.21061932314 + }, + "objective": 433.5400548163886, + "penalty": 982.6015472412109, + "total_objective": 1416.1416020575996, + "timestamp": "2025-11-17T12:37:22.635864" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam.prt new file mode 100644 index 00000000..874a5cdd Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam_fem1.fem new file mode 100644 index 00000000..5c87474e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam_fem1_i.prt new file mode 100644 index 00000000..69e6a023 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam_sim1.sim new file mode 100644 index 00000000..2555f7c9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/results.json new file mode 100644 index 00000000..86085a04 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_006/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 6, + "design_variables": { + "beam_half_core_thickness": 39.242879452291646, + "beam_face_thickness": 32.18506500188219, + "holes_diameter": 436.51250169202365, + "hole_count": 13 + }, + "results": { + "max_displacement": 16.844642639160156, + "max_stress": 306.56965625, + "mass": 1914.99718165845 + }, + "objective": 757.8257603972959, + "penalty": 684.4642639160156, + "total_objective": 1442.2900243133115, + "timestamp": "2025-11-17T12:37:50.959376" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam.prt new file mode 100644 index 00000000..6c752265 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam_fem1.fem new file mode 100644 index 00000000..0dd60977 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam_fem1_i.prt new file mode 100644 index 00000000..bd371d58 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam_sim1.sim new file mode 100644 index 00000000..26f1a62e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/results.json new file mode 100644 index 00000000..b31ed704 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_007/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 7, + "design_variables": { + "beam_half_core_thickness": 35.78960605381189, + "beam_face_thickness": 16.179345665594845, + "holes_diameter": 398.22414702490045, + "hole_count": 5 + }, + "results": { + "max_displacement": 21.607704162597656, + "max_stress": 178.53709375, + "mass": 1348.70132255832 + }, + "objective": 524.6062329809861, + "penalty": 1160.7704162597656, + "total_objective": 1685.3766492407517, + "timestamp": "2025-11-17T12:38:18.179861" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam.prt new file mode 100644 index 00000000..0e1e7152 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam_fem1.fem new file mode 100644 index 00000000..a9c16954 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam_fem1_i.prt new file mode 100644 index 00000000..5a0cf9f8 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam_sim1.sim new file mode 100644 index 00000000..1a231850 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/results.json new file mode 100644 index 00000000..12e1ad6d --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_008/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 8, + "design_variables": { + "beam_half_core_thickness": 27.728024240271356, + "beam_face_thickness": 11.090089187753673, + "holes_diameter": 313.9008672451611, + "hole_count": 8 + }, + "results": { + "max_displacement": 26.84396743774414, + "max_stress": 381.82384375, + "mass": 1034.59413235398 + }, + "objective": 486.62238269230886, + "penalty": 1684.396743774414, + "total_objective": 2171.019126466723, + "timestamp": "2025-11-17T12:38:45.087529" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam.prt new file mode 100644 index 00000000..daff0b5a Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam_fem1.fem new file mode 100644 index 00000000..42db31d1 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam_fem1_i.prt new file mode 100644 index 00000000..692eb94f Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam_sim1.sim new file mode 100644 index 00000000..4f5de8c9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/results.json new file mode 100644 index 00000000..216adcd3 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_009/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 9, + "design_variables": { + "beam_half_core_thickness": 18.119343306048837, + "beam_face_thickness": 20.16315997344769, + "holes_diameter": 173.3969994563894, + "hole_count": 8 + }, + "results": { + "max_displacement": 20.827360153198242, + "max_stress": 128.911234375, + "mass": 1077.93936662489 + }, + "objective": 415.9131208467681, + "penalty": 1082.7360153198242, + "total_objective": 1498.6491361665924, + "timestamp": "2025-11-17T12:39:12.237240" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam.prt new file mode 100644 index 00000000..b1d289b4 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam_fem1.fem new file mode 100644 index 00000000..f110e5c9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam_fem1_i.prt new file mode 100644 index 00000000..900d01fb Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam_sim1.sim new file mode 100644 index 00000000..0300c14a Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/results.json new file mode 100644 index 00000000..ad777ebb --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_010/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 10, + "design_variables": { + "beam_half_core_thickness": 33.58715600335504, + "beam_face_thickness": 39.75984124814616, + "holes_diameter": 255.0476456917857, + "hole_count": 11 + }, + "results": { + "max_displacement": 12.266990661621094, + "max_stress": 74.4930625, + "mass": 1780.55048209652 + }, + "objective": 634.0179814561518, + "penalty": 226.69906616210938, + "total_objective": 860.7170476182612, + "timestamp": "2025-11-17T12:39:38.848354" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam.prt new file mode 100644 index 00000000..c0d87aa1 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam_fem1.fem new file mode 100644 index 00000000..ccc7455a Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam_fem1_i.prt new file mode 100644 index 00000000..7c0f3137 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam_sim1.sim new file mode 100644 index 00000000..61fce892 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/results.json new file mode 100644 index 00000000..0807f4f2 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_011/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 11, + "design_variables": { + "beam_half_core_thickness": 32.27331435131255, + "beam_face_thickness": 37.6195284386346, + "holes_diameter": 293.3640949555476, + "hole_count": 11 + }, + "results": { + "max_displacement": 13.364336967468262, + "max_stress": 81.6450546875, + "mass": 1624.10229894857 + }, + "objective": 583.5478808886534, + "penalty": 336.4336967468262, + "total_objective": 919.9815776354795, + "timestamp": "2025-11-17T12:40:05.309424" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam.prt new file mode 100644 index 00000000..fe47910e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam_fem1.fem new file mode 100644 index 00000000..0c23e789 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam_fem1_i.prt new file mode 100644 index 00000000..42f94dc8 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam_sim1.sim new file mode 100644 index 00000000..40bf747a Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/results.json new file mode 100644 index 00000000..c4c18bed --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_012/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 12, + "design_variables": { + "beam_half_core_thickness": 32.942924648842, + "beam_face_thickness": 39.743362881313274, + "holes_diameter": 286.06340726855376, + "hole_count": 10 + }, + "results": { + "max_displacement": 12.673440933227539, + "max_stress": 77.3124296875, + "mass": 1695.73916749434 + }, + "objective": 606.2466542529157, + "penalty": 267.3440933227539, + "total_objective": 873.5907475756696, + "timestamp": "2025-11-17T12:40:31.699172" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam.prt new file mode 100644 index 00000000..d24abc08 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam_fem1.fem new file mode 100644 index 00000000..e77866c4 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam_fem1_i.prt new file mode 100644 index 00000000..05305f36 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam_sim1.sim new file mode 100644 index 00000000..c0076efe Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/results.json new file mode 100644 index 00000000..5615d586 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_013/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 13, + "design_variables": { + "beam_half_core_thickness": 32.97413751120997, + "beam_face_thickness": 39.935536143903136, + "holes_diameter": 349.6362269742979, + "hole_count": 10 + }, + "results": { + "max_displacement": 14.207616806030273, + "max_stress": 92.197078125, + "mass": 1535.21827734665 + }, + "objective": 557.087763625101, + "penalty": 420.76168060302734, + "total_objective": 977.8494442281284, + "timestamp": "2025-11-17T12:40:57.928990" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam.prt new file mode 100644 index 00000000..b19cdd8a Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam_fem1.fem new file mode 100644 index 00000000..56f86b09 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam_fem1_i.prt new file mode 100644 index 00000000..bd2a5e9e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam_sim1.sim new file mode 100644 index 00000000..6258c19d Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/results.json new file mode 100644 index 00000000..9122f64d --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_014/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 14, + "design_variables": { + "beam_half_core_thickness": 29.540902181947992, + "beam_face_thickness": 34.55266304078297, + "holes_diameter": 250.72025705358874, + "hole_count": 14 + }, + "results": { + "max_displacement": 14.019026756286621, + "max_stress": 83.0820703125, + "mass": 1588.40507617186 + }, + "objective": 572.101087931132, + "penalty": 401.9026756286621, + "total_objective": 974.0037635597942, + "timestamp": "2025-11-17T12:41:24.105123" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam.prt new file mode 100644 index 00000000..0761ef6c Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam_fem1.fem new file mode 100644 index 00000000..f8726a3c Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam_fem1_i.prt new file mode 100644 index 00000000..2c281c2c Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam_sim1.sim new file mode 100644 index 00000000..5869fc6e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/results.json new file mode 100644 index 00000000..76f4a652 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_015/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 15, + "design_variables": { + "beam_half_core_thickness": 34.860198550796696, + "beam_face_thickness": 35.33928916461123, + "holes_diameter": 260.87542051756594, + "hole_count": 10 + }, + "results": { + "max_displacement": 12.861929893493652, + "max_stress": 77.8935703125, + "mass": 1719.35411237566 + }, + "objective": 614.5297132757023, + "penalty": 286.19298934936523, + "total_objective": 900.7227026250675, + "timestamp": "2025-11-17T12:41:50.221728" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam.prt new file mode 100644 index 00000000..b0b04897 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam_fem1.fem new file mode 100644 index 00000000..45a5593e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam_fem1_i.prt new file mode 100644 index 00000000..7956536d Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam_sim1.sim new file mode 100644 index 00000000..73345b29 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/results.json new file mode 100644 index 00000000..d69348e6 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_016/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 16, + "design_variables": { + "beam_half_core_thickness": 21.50858482334314, + "beam_face_thickness": 29.036545941104837, + "holes_diameter": 329.2844212138242, + "hole_count": 9 + }, + "results": { + "max_displacement": 17.84798240661621, + "max_stress": 111.860109375, + "mass": 1174.43974312943 + }, + "objective": 442.1131829519396, + "penalty": 784.7982406616211, + "total_objective": 1226.9114236135606, + "timestamp": "2025-11-17T12:42:17.268916" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam.prt new file mode 100644 index 00000000..235fb6ec Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam_fem1.fem new file mode 100644 index 00000000..81346fc7 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam_fem1_i.prt new file mode 100644 index 00000000..b5feb4a5 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam_sim1.sim new file mode 100644 index 00000000..98265cb7 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/results.json new file mode 100644 index 00000000..53f6e045 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_017/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 17, + "design_variables": { + "beam_half_core_thickness": 27.020615513897393, + "beam_face_thickness": 39.66854106341591, + "holes_diameter": 347.6137353421101, + "hole_count": 12 + }, + "results": { + "max_displacement": 20.929889678955078, + "max_stress": 142.83046875, + "mass": 1427.85591027083 + }, + "objective": 539.5119277736375, + "penalty": 1092.9889678955078, + "total_objective": 1632.5008956691454, + "timestamp": "2025-11-17T12:42:43.230566" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam.prt new file mode 100644 index 00000000..e279914d Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam_fem1.fem new file mode 100644 index 00000000..7924d9c5 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam_fem1_i.prt new file mode 100644 index 00000000..48d6df0b Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam_sim1.sim new file mode 100644 index 00000000..2427d058 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/results.json new file mode 100644 index 00000000..e08ac05d --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_018/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 18, + "design_variables": { + "beam_half_core_thickness": 35.67817961473702, + "beam_face_thickness": 35.70524160356021, + "holes_diameter": 256.1571734597351, + "hole_count": 13 + }, + "results": { + "max_displacement": 12.883788108825684, + "max_stress": 76.9096796875, + "mass": 1757.46421023792 + }, + "objective": 627.1696758536802, + "penalty": 288.37881088256836, + "total_objective": 915.5484867362486, + "timestamp": "2025-11-17T12:43:09.457316" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam.prt new file mode 100644 index 00000000..e7a6b9db Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam_fem1.fem new file mode 100644 index 00000000..780b32ff Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam_fem1_i.prt new file mode 100644 index 00000000..981328d9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam_sim1.sim new file mode 100644 index 00000000..6b5be2e7 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/results.json new file mode 100644 index 00000000..8dd41187 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_019/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 19, + "design_variables": { + "beam_half_core_thickness": 14.930821819509193, + "beam_face_thickness": 31.944773906171328, + "holes_diameter": 390.151627594028, + "hole_count": 9 + }, + "results": { + "max_displacement": 21.586999893188477, + "max_stress": 146.021890625, + "mass": 1014.06342034265 + }, + "objective": 400.09249678750325, + "penalty": 1158.6999893188477, + "total_objective": 1558.792486106351, + "timestamp": "2025-11-17T12:43:35.537713" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam.prt new file mode 100644 index 00000000..0c497f37 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam_fem1.fem new file mode 100644 index 00000000..cf053447 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam_fem1_i.prt new file mode 100644 index 00000000..664957e6 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam_sim1.sim new file mode 100644 index 00000000..a902faa6 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/results.json new file mode 100644 index 00000000..b739d8ba --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_020/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 20, + "design_variables": { + "beam_half_core_thickness": 24.49088347038711, + "beam_face_thickness": 27.392169164459492, + "holes_diameter": 234.90058515873818, + "hole_count": 11 + }, + "results": { + "max_displacement": 16.277606964111328, + "max_stress": 99.2812890625, + "mass": 1338.13424326426 + }, + "objective": 493.1000783986302, + "penalty": 627.7606964111328, + "total_objective": 1120.860774809763, + "timestamp": "2025-11-17T12:44:01.998780" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam.prt new file mode 100644 index 00000000..08001960 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam_fem1.fem new file mode 100644 index 00000000..4afc97f1 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam_fem1_i.prt new file mode 100644 index 00000000..ba36bfd0 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam_sim1.sim new file mode 100644 index 00000000..cd9692f1 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/results.json new file mode 100644 index 00000000..caf45986 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_021/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 21, + "design_variables": { + "beam_half_core_thickness": 34.364342546003726, + "beam_face_thickness": 36.02668381246974, + "holes_diameter": 276.6108734017412, + "hole_count": 10 + }, + "results": { + "max_displacement": 13.001296043395996, + "max_stress": 78.40746875, + "mass": 1683.34487633714 + }, + "objective": 602.5021503364483, + "penalty": 300.1296043395996, + "total_objective": 902.6317546760479, + "timestamp": "2025-11-17T12:44:28.606528" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam.prt new file mode 100644 index 00000000..178209da Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam_fem1.fem new file mode 100644 index 00000000..01dd2b92 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam_fem1_i.prt new file mode 100644 index 00000000..abc8abda Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam_sim1.sim new file mode 100644 index 00000000..e8e98b2a Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/results.json new file mode 100644 index 00000000..e801f299 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_022/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 22, + "design_variables": { + "beam_half_core_thickness": 36.8561227126588, + "beam_face_thickness": 37.74516413512155, + "holes_diameter": 266.882495006845, + "hole_count": 9 + }, + "results": { + "max_displacement": 12.205507278442383, + "max_stress": 74.149, + "mass": 1830.88142348264 + }, + "objective": 650.9966713859836, + "penalty": 220.55072784423828, + "total_objective": 871.5473992302219, + "timestamp": "2025-11-17T12:44:55.020568" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam.prt new file mode 100644 index 00000000..0d3d17fe Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam_fem1.fem new file mode 100644 index 00000000..29786c04 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam_fem1_i.prt new file mode 100644 index 00000000..a64527c9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam_sim1.sim new file mode 100644 index 00000000..14150b77 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/results.json new file mode 100644 index 00000000..bbd87444 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_023/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 23, + "design_variables": { + "beam_half_core_thickness": 36.70555753711123, + "beam_face_thickness": 38.38095957551513, + "holes_diameter": 311.7488365886701, + "hole_count": 9 + }, + "results": { + "max_displacement": 12.730676651000977, + "max_stress": 81.0543515625, + "mass": 1732.33627252898 + }, + "objective": 619.9433919703087, + "penalty": 273.06766510009766, + "total_objective": 893.0110570704063, + "timestamp": "2025-11-17T12:45:21.583444" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam.prt new file mode 100644 index 00000000..0e63ee60 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam_fem1.fem new file mode 100644 index 00000000..eba3fa94 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam_fem1_i.prt new file mode 100644 index 00000000..c13372e4 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam_sim1.sim new file mode 100644 index 00000000..e3ff7a2e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/results.json new file mode 100644 index 00000000..9fe546d7 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_024/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 24, + "design_variables": { + "beam_half_core_thickness": 29.900094858608547, + "beam_face_thickness": 37.52497149990325, + "holes_diameter": 224.7256200349278, + "hole_count": 12 + }, + "results": { + "max_displacement": 12.842299461364746, + "max_stress": 79.3090625, + "mass": 1699.69324561564 + }, + "objective": 608.305652956568, + "penalty": 284.2299461364746, + "total_objective": 892.5355990930426, + "timestamp": "2025-11-17T12:45:47.758571" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam.prt new file mode 100644 index 00000000..bb7f72b3 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam_fem1.fem new file mode 100644 index 00000000..171f4450 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam_fem1_i.prt new file mode 100644 index 00000000..1ce2ef1e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam_sim1.sim new file mode 100644 index 00000000..63fc3e86 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/results.json new file mode 100644 index 00000000..3ebc197c --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_025/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 25, + "design_variables": { + "beam_half_core_thickness": 37.56180710231866, + "beam_face_thickness": 34.04835119980132, + "holes_diameter": 275.569171398413, + "hole_count": 9 + }, + "results": { + "max_displacement": 12.844265937805176, + "max_stress": 77.976015625, + "mass": 1763.73050958488 + }, + "objective": 629.6390661745851, + "penalty": 284.4265937805176, + "total_objective": 914.0656599551027, + "timestamp": "2025-11-17T12:46:15.273958" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam.prt new file mode 100644 index 00000000..3e2ea91c Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam_fem1.fem new file mode 100644 index 00000000..562a7b5c Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam_fem1_i.prt new file mode 100644 index 00000000..cf3c5ee6 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam_sim1.sim new file mode 100644 index 00000000..ea9f7542 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/results.json new file mode 100644 index 00000000..1870b29e --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_026/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 26, + "design_variables": { + "beam_half_core_thickness": 33.11314309950726, + "beam_face_thickness": 32.28564119836295, + "holes_diameter": 330.69004511819173, + "hole_count": 7 + }, + "results": { + "max_displacement": 14.373723983764648, + "max_stress": 95.1095390625, + "mass": 1584.04153580709 + }, + "objective": 574.703598979678, + "penalty": 437.37239837646484, + "total_objective": 1012.0759973561428, + "timestamp": "2025-11-17T12:46:42.001371" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam.prt new file mode 100644 index 00000000..e4fbc8c8 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam_fem1.fem new file mode 100644 index 00000000..3182795e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam_fem1_i.prt new file mode 100644 index 00000000..8ae567ac Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam_sim1.sim new file mode 100644 index 00000000..4dd01d6b Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/results.json new file mode 100644 index 00000000..74ceed2a --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_027/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 27, + "design_variables": { + "beam_half_core_thickness": 27.59750765653206, + "beam_face_thickness": 36.867619453214395, + "holes_diameter": 187.63411636475098, + "hole_count": 10 + }, + "results": { + "max_displacement": 13.001590728759766, + "max_stress": 81.88846875, + "mass": 1676.57258959657 + }, + "objective": 601.3484000908246, + "penalty": 300.15907287597656, + "total_objective": 901.5074729668012, + "timestamp": "2025-11-17T12:47:08.646475" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam.prt new file mode 100644 index 00000000..8e9761aa Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam_fem1.fem new file mode 100644 index 00000000..84ec9e84 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam_fem1_i.prt new file mode 100644 index 00000000..d46b312d Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam_sim1.sim new file mode 100644 index 00000000..f8b69761 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/results.json new file mode 100644 index 00000000..258b6b2f --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_028/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 28, + "design_variables": { + "beam_half_core_thickness": 37.37685276461669, + "beam_face_thickness": 38.68289274963675, + "holes_diameter": 244.8348638244415, + "hole_count": 11 + }, + "results": { + "max_displacement": 11.912741661071777, + "max_stress": 72.8907734375, + "mass": 1880.00683133302 + }, + "objective": 667.1874826357555, + "penalty": 191.27416610717773, + "total_objective": 858.4616487429332, + "timestamp": "2025-11-17T12:47:34.936047" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam.prt new file mode 100644 index 00000000..8f5308b9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam_fem1.fem new file mode 100644 index 00000000..49527a79 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam_fem1_i.prt new file mode 100644 index 00000000..b8171e73 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam_sim1.sim new file mode 100644 index 00000000..f18300e9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/results.json new file mode 100644 index 00000000..c8adf6b3 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_029/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 29, + "design_variables": { + "beam_half_core_thickness": 37.67000846305608, + "beam_face_thickness": 25.374369718971856, + "holes_diameter": 209.8921745849604, + "hole_count": 13 + }, + "results": { + "max_displacement": 14.22864818572998, + "max_stress": 87.2349609375, + "mass": 1726.23572187022 + }, + "objective": 620.4031364465407, + "penalty": 422.86481857299805, + "total_objective": 1043.2679550195387, + "timestamp": "2025-11-17T12:48:01.467796" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam.prt new file mode 100644 index 00000000..6053a5c2 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam_fem1.fem new file mode 100644 index 00000000..a945c6d9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam_fem1_i.prt new file mode 100644 index 00000000..3e92f493 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam_sim1.sim new file mode 100644 index 00000000..9b24ae22 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/results.json new file mode 100644 index 00000000..106e6107 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_030/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 30, + "design_variables": { + "beam_half_core_thickness": 30.758115647613806, + "beam_face_thickness": 33.54286782347228, + "holes_diameter": 246.55420010753986, + "hole_count": 11 + }, + "results": { + "max_displacement": 13.663518905639648, + "max_stress": 83.1913515625, + "mass": 1609.15363628645 + }, + "objective": 579.0743435918791, + "penalty": 366.35189056396484, + "total_objective": 945.426234155844, + "timestamp": "2025-11-17T12:48:27.837613" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam.prt new file mode 100644 index 00000000..674249f2 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam_fem1.fem new file mode 100644 index 00000000..4c84a8fb Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam_fem1_i.prt new file mode 100644 index 00000000..a67e4615 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam_sim1.sim new file mode 100644 index 00000000..47c0df18 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/results.json new file mode 100644 index 00000000..bd9d832a --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_031/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 31, + "design_variables": { + "beam_half_core_thickness": 33.51150251653193, + "beam_face_thickness": 38.820236330253266, + "holes_diameter": 271.086892020758, + "hole_count": 11 + }, + "results": { + "max_displacement": 12.626458168029785, + "max_stress": 75.5479609375, + "mass": 1726.45384017945 + }, + "objective": 616.0918639658379, + "penalty": 262.6458168029785, + "total_objective": 878.7376807688164, + "timestamp": "2025-11-17T12:48:53.992070" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam.prt new file mode 100644 index 00000000..be3a7987 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam_fem1.fem new file mode 100644 index 00000000..e4dd06a5 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam_fem1_i.prt new file mode 100644 index 00000000..20f8cbb9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam_sim1.sim new file mode 100644 index 00000000..9ec01774 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/results.json new file mode 100644 index 00000000..512896ff --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_032/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 32, + "design_variables": { + "beam_half_core_thickness": 37.65535287316046, + "beam_face_thickness": 39.62139976122552, + "holes_diameter": 232.9882166401779, + "hole_count": 12 + }, + "results": { + "max_displacement": 11.682304382324219, + "max_stress": 71.8872421875, + "mass": 1930.16492285346 + }, + "objective": 683.8340241382184, + "penalty": 168.23043823242188, + "total_objective": 852.0644623706403, + "timestamp": "2025-11-17T12:49:20.275354" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam.prt new file mode 100644 index 00000000..d15a93f9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam_fem1.fem new file mode 100644 index 00000000..bb22feaf Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam_fem1_i.prt new file mode 100644 index 00000000..42c728c2 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam_sim1.sim new file mode 100644 index 00000000..573796e3 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/results.json new file mode 100644 index 00000000..3d2a2755 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_033/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 33, + "design_variables": { + "beam_half_core_thickness": 38.43930834325607, + "beam_face_thickness": 37.31640727426546, + "holes_diameter": 197.80127159495507, + "hole_count": 12 + }, + "results": { + "max_displacement": 11.693367004394531, + "max_stress": 73.2244140625, + "mass": 1982.4326570189 + }, + "objective": 702.0499711385013, + "penalty": 169.33670043945312, + "total_objective": 871.3866715779544, + "timestamp": "2025-11-17T12:49:47.037699" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam.prt new file mode 100644 index 00000000..040d93b7 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam_fem1.fem new file mode 100644 index 00000000..c5193cb3 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam_fem1_i.prt new file mode 100644 index 00000000..14b2b0df Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam_sim1.sim new file mode 100644 index 00000000..a5489303 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/results.json new file mode 100644 index 00000000..fda29786 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_034/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 34, + "design_variables": { + "beam_half_core_thickness": 38.27657817091853, + "beam_face_thickness": 36.132016898919986, + "holes_diameter": 198.74509494841783, + "hole_count": 14 + }, + "results": { + "max_displacement": 11.940220832824707, + "max_stress": 74.399609375, + "mass": 1955.16639784379 + }, + "objective": 693.2487192354708, + "penalty": 194.0220832824707, + "total_objective": 887.2708025179415, + "timestamp": "2025-11-17T12:50:14.031534" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam.prt new file mode 100644 index 00000000..2c4ceea0 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam_fem1.fem new file mode 100644 index 00000000..6ffcdec8 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam_fem1_i.prt new file mode 100644 index 00000000..225656d1 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam_sim1.sim new file mode 100644 index 00000000..0252a296 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/results.json new file mode 100644 index 00000000..0e7c648b --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_035/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 35, + "design_variables": { + "beam_half_core_thickness": 10.436408192354026, + "beam_face_thickness": 29.547161786000114, + "holes_diameter": 157.1907568187308, + "hole_count": 12 + }, + "results": { + "max_displacement": 18.643985748291016, + "max_stress": 116.786984375, + "mass": 1028.12688485573 + }, + "objective": 394.2553609916343, + "penalty": 864.3985748291016, + "total_objective": 1258.6539358207358, + "timestamp": "2025-11-17T12:50:40.306603" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam.prt new file mode 100644 index 00000000..a8db469a Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam_fem1.fem new file mode 100644 index 00000000..f2126bf6 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam_fem1_i.prt new file mode 100644 index 00000000..830ae570 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam_sim1.sim new file mode 100644 index 00000000..a94a4f9b Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/results.json new file mode 100644 index 00000000..89d58b91 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_036/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 36, + "design_variables": { + "beam_half_core_thickness": 39.85361222875775, + "beam_face_thickness": 33.38877106741237, + "holes_diameter": 217.18368248282152, + "hole_count": 14 + }, + "results": { + "max_displacement": 12.35142993927002, + "max_stress": 75.944734375, + "mass": 1915.19913542537 + }, + "objective": 680.305440268335, + "penalty": 235.14299392700195, + "total_objective": 915.448434195337, + "timestamp": "2025-11-17T12:51:07.139410" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam.prt new file mode 100644 index 00000000..9b8b8b82 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam_fem1.fem new file mode 100644 index 00000000..007ae604 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam_fem1_i.prt new file mode 100644 index 00000000..e35f0f0f Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam_sim1.sim new file mode 100644 index 00000000..53502426 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/results.json new file mode 100644 index 00000000..86c3ecb9 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_037/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 37, + "design_variables": { + "beam_half_core_thickness": 38.45785621868733, + "beam_face_thickness": 30.981598707416904, + "holes_diameter": 185.70453776923588, + "hole_count": 15 + }, + "results": { + "max_displacement": 12.744863510131836, + "max_stress": 79.3854453125, + "mass": 1893.77843699997 + }, + "objective": 674.2876704914584, + "penalty": 274.4863510131836, + "total_objective": 948.774021504642, + "timestamp": "2025-11-17T12:51:33.634674" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam.prt new file mode 100644 index 00000000..fe54d32c Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam_fem1.fem new file mode 100644 index 00000000..aa024df6 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam_fem1_i.prt new file mode 100644 index 00000000..d4c921fa Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam_sim1.sim new file mode 100644 index 00000000..aa45beb8 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/results.json new file mode 100644 index 00000000..049a4dc2 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_038/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 38, + "design_variables": { + "beam_half_core_thickness": 35.893957698112686, + "beam_face_thickness": 37.84391548187554, + "holes_diameter": 239.25918533433673, + "hole_count": 13 + }, + "results": { + "max_displacement": 12.261210441589355, + "max_stress": 74.6166328125, + "mass": 1838.5706962866 + }, + "objective": 653.7837250112935, + "penalty": 226.12104415893555, + "total_objective": 879.9047691702291, + "timestamp": "2025-11-17T12:52:00.120678" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam.prt new file mode 100644 index 00000000..79b472ae Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam_fem1.fem new file mode 100644 index 00000000..10f5c5af Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam_fem1_i.prt new file mode 100644 index 00000000..f6e11448 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam_sim1.sim new file mode 100644 index 00000000..dad871a1 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/results.json new file mode 100644 index 00000000..63914568 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_039/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 39, + "design_variables": { + "beam_half_core_thickness": 31.359026186259637, + "beam_face_thickness": 36.47374273772688, + "holes_diameter": 202.95015696155357, + "hole_count": 12 + }, + "results": { + "max_displacement": 12.689266204833984, + "max_stress": 79.2285078125, + "mass": 1755.86306669611 + }, + "objective": 627.3263081023977, + "penalty": 268.92662048339844, + "total_objective": 896.2529285857961, + "timestamp": "2025-11-17T12:52:26.826927" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam.prt new file mode 100644 index 00000000..dd699e39 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam_fem1.fem new file mode 100644 index 00000000..cb3968e1 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam_fem1_i.prt new file mode 100644 index 00000000..141b6326 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam_sim1.sim new file mode 100644 index 00000000..49232100 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/results.json new file mode 100644 index 00000000..810978bc --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_040/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 40, + "design_variables": { + "beam_half_core_thickness": 34.363454756039545, + "beam_face_thickness": 23.42936757388374, + "holes_diameter": 150.9114047582734, + "hole_count": 12 + }, + "results": { + "max_displacement": 15.010282516479492, + "max_stress": 93.5626953125, + "mass": 1682.32522293858 + }, + "objective": 607.8196584826804, + "penalty": 501.02825164794916, + "total_objective": 1108.8479101306295, + "timestamp": "2025-11-17T12:52:53.416219" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam.prt new file mode 100644 index 00000000..5a00856d Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam_fem1.fem new file mode 100644 index 00000000..44fc26ee Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam_fem1_i.prt new file mode 100644 index 00000000..9fbba431 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam_sim1.sim new file mode 100644 index 00000000..76a1165a Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/results.json new file mode 100644 index 00000000..9584305a --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_041/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 41, + "design_variables": { + "beam_half_core_thickness": 37.203167218983694, + "beam_face_thickness": 38.48292270712572, + "holes_diameter": 229.72013212531252, + "hole_count": 11 + }, + "results": { + "max_displacement": 11.829875946044922, + "max_stress": 73.131625, + "mass": 1904.96134761414 + }, + "objective": 675.7241535010025, + "penalty": 182.9875946044922, + "total_objective": 858.7117481054947, + "timestamp": "2025-11-17T12:53:19.739668" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam.prt new file mode 100644 index 00000000..104c0e8b Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam_fem1.fem new file mode 100644 index 00000000..e2fa5a40 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam_fem1_i.prt new file mode 100644 index 00000000..c3d0f83b Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam_sim1.sim new file mode 100644 index 00000000..bf224738 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/results.json new file mode 100644 index 00000000..89936524 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_042/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 42, + "design_variables": { + "beam_half_core_thickness": 38.94919760244156, + "beam_face_thickness": 38.878154938073905, + "holes_diameter": 232.90823540214237, + "hole_count": 11 + }, + "results": { + "max_displacement": 11.614383697509766, + "max_stress": 71.6739140625, + "mass": 1951.51964565258 + }, + "objective": 691.0018177826804, + "penalty": 161.43836975097656, + "total_objective": 852.440187533657, + "timestamp": "2025-11-17T12:53:46.053082" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam.prt new file mode 100644 index 00000000..24032862 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam_fem1.fem new file mode 100644 index 00000000..3fba7a78 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam_fem1_i.prt new file mode 100644 index 00000000..84fa3d8e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam_sim1.sim new file mode 100644 index 00000000..16139afe Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/results.json new file mode 100644 index 00000000..9c71abc0 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_043/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 43, + "design_variables": { + "beam_half_core_thickness": 39.835977148950434, + "beam_face_thickness": 39.97606330808705, + "holes_diameter": 235.73841184921832, + "hole_count": 11 + }, + "results": { + "max_displacement": 11.398698806762695, + "max_stress": 70.262515625, + "mass": 1987.55603168045 + }, + "objective": 702.7172515338348, + "penalty": 139.86988067626953, + "total_objective": 842.5871322101043, + "timestamp": "2025-11-17T12:54:12.227351" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam.prt new file mode 100644 index 00000000..30a93427 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam_fem1.fem new file mode 100644 index 00000000..b8e97b29 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam_fem1_i.prt new file mode 100644 index 00000000..790bc51b Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam_sim1.sim new file mode 100644 index 00000000..6ab0ca63 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/results.json new file mode 100644 index 00000000..6b40a1f8 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_044/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 44, + "design_variables": { + "beam_half_core_thickness": 38.89914597568401, + "beam_face_thickness": 14.729382431221776, + "holes_diameter": 234.5903592266461, + "hole_count": 11 + }, + "results": { + "max_displacement": 18.120622634887695, + "max_stress": 217.593546875, + "mass": 1524.00564275803 + }, + "objective": 595.9475944759931, + "penalty": 812.0622634887695, + "total_objective": 1408.0098579647627, + "timestamp": "2025-11-17T12:54:38.352455" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam.prt new file mode 100644 index 00000000..89f59e50 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam_fem1.fem new file mode 100644 index 00000000..90778f83 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam_fem1_i.prt new file mode 100644 index 00000000..ba3324f5 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam_sim1.sim new file mode 100644 index 00000000..22f90290 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/results.json new file mode 100644 index 00000000..7bba66a5 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_045/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 45, + "design_variables": { + "beam_half_core_thickness": 36.050381703604316, + "beam_face_thickness": 38.92944420536667, + "holes_diameter": 219.24374541586945, + "hole_count": 11 + }, + "results": { + "max_displacement": 11.814797401428223, + "max_stress": 73.4713984375, + "mass": 1903.07223451087 + }, + "objective": 675.1890043605421, + "penalty": 181.47974014282227, + "total_objective": 856.6687445033643, + "timestamp": "2025-11-17T12:55:04.402683" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam.prt new file mode 100644 index 00000000..181baccc Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam_fem1.fem new file mode 100644 index 00000000..719ab824 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam_fem1_i.prt new file mode 100644 index 00000000..5eccbe7d Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam_sim1.sim new file mode 100644 index 00000000..5bb131d6 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/results.json new file mode 100644 index 00000000..44a32c82 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_046/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 46, + "design_variables": { + "beam_half_core_thickness": 39.75331106111366, + "beam_face_thickness": 35.139582523561266, + "holes_diameter": 216.37269547646386, + "hole_count": 10 + }, + "results": { + "max_displacement": 11.945963859558105, + "max_stress": 74.3103125, + "mass": 1944.48117664703 + }, + "objective": 689.5881712586445, + "penalty": 194.59638595581055, + "total_objective": 884.184557214455, + "timestamp": "2025-11-17T12:55:30.834472" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam.prt new file mode 100644 index 00000000..2f48c0f9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam_fem1.fem new file mode 100644 index 00000000..0a1316ba Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam_fem1_i.prt new file mode 100644 index 00000000..138db3d9 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam_sim1.sim new file mode 100644 index 00000000..46b06159 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/results.json new file mode 100644 index 00000000..c35bf26f --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_047/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 47, + "design_variables": { + "beam_half_core_thickness": 35.74062559578658, + "beam_face_thickness": 38.95947172379116, + "holes_diameter": 178.9938401782168, + "hole_count": 11 + }, + "results": { + "max_displacement": 11.642520904541016, + "max_stress": 73.595921875, + "mass": 1965.99931167886 + }, + "objective": 696.568452088061, + "penalty": 164.25209045410156, + "total_objective": 860.8205425421626, + "timestamp": "2025-11-17T12:55:56.862793" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam.prt new file mode 100644 index 00000000..311832ef Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam_fem1.fem new file mode 100644 index 00000000..af4b3e6e Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam_fem1_i.prt new file mode 100644 index 00000000..3cb85520 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam_sim1.sim new file mode 100644 index 00000000..029cd0ce Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/results.json new file mode 100644 index 00000000..f8443285 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_048/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 48, + "design_variables": { + "beam_half_core_thickness": 36.492800645744865, + "beam_face_thickness": 39.82758070370754, + "holes_diameter": 221.86713778262373, + "hole_count": 13 + }, + "results": { + "max_displacement": 11.724766731262207, + "max_stress": 72.4340234375, + "mass": 1925.97299370716 + }, + "objective": 682.6032186161259, + "penalty": 172.4766731262207, + "total_objective": 855.0798917423466, + "timestamp": "2025-11-17T12:56:23.436440" +} \ No newline at end of file diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam.prt new file mode 100644 index 00000000..3969fe8b Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam_fem1.fem b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam_fem1.fem new file mode 100644 index 00000000..7bb6e99c Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam_fem1.fem differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam_fem1_i.prt b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam_fem1_i.prt new file mode 100644 index 00000000..0d9f5a2b Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam_fem1_i.prt differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam_sim1.sim b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam_sim1.sim new file mode 100644 index 00000000..89f478b6 Binary files /dev/null and b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/Beam_sim1.sim differ diff --git a/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/results.json b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/results.json new file mode 100644 index 00000000..5849bb22 --- /dev/null +++ b/studies/simple_beam_optimization/substudies/full_optimization_50trials/trial_049/results.json @@ -0,0 +1,18 @@ +{ + "trial_number": 49, + "design_variables": { + "beam_half_core_thickness": 34.900827947904915, + "beam_face_thickness": 39.89789174684708, + "holes_diameter": 168.0380849411955, + "hole_count": 13 + }, + "results": { + "max_displacement": 11.57779598236084, + "max_stress": 73.3386875, + "mass": 1974.83622116564 + }, + "objective": 699.4667547454967, + "penalty": 157.77959823608398, + "total_objective": 857.2463529815807, + "timestamp": "2025-11-17T12:56:49.436502" +} \ No newline at end of file