# Study Organization Guide **Date**: 2025-11-17 **Purpose**: Document recommended study directory structure and organization principles --- ## Current Organization Analysis ### Study Directory: `studies/simple_beam_optimization/` **Current Structure**: ``` studies/simple_beam_optimization/ ├── model/ # Base CAD/FEM model (reference) │ ├── Beam.prt │ ├── Beam_sim1.sim │ ├── beam_sim1-solution_1.op2 │ ├── beam_sim1-solution_1.f06 │ └── comprehensive_results_analysis.json │ ├── substudies/ # All optimization runs │ ├── benchmarking/ │ │ ├── benchmark_results.json │ │ └── BENCHMARK_REPORT.md │ ├── initial_exploration/ │ │ ├── config.json │ │ └── optimization_config.json │ ├── validation_3trials/ │ │ ├── trial_000/ │ │ ├── trial_001/ │ │ ├── trial_002/ │ │ ├── best_trial.json │ │ └── optuna_study.pkl │ ├── validation_4d_3trials/ │ │ └── [similar structure] │ └── full_optimization_50trials/ │ ├── trial_000/ │ ├── ... trial_049/ │ ├── plots/ # NEW: Auto-generated plots │ ├── history.json │ ├── best_trial.json │ └── optuna_study.pkl │ ├── README.md # Study overview ├── study_metadata.json # Study metadata ├── beam_optimization_config.json # Main configuration ├── baseline_validation.json # Baseline results ├── COMPREHENSIVE_BENCHMARK_RESULTS.md ├── OPTIMIZATION_RESULTS_50TRIALS.md └── run_optimization.py # Study-specific runner ``` --- ## Assessment ### ✅ What's Working Well 1. **Substudy Isolation**: Each optimization run (substudy) is self-contained with its own trial directories, making it easy to compare different optimization strategies. 2. **Centralized Model**: The `model/` directory serves as a reference CAD/FEM model, which all substudies copy from. 3. **Configuration at Study Level**: `beam_optimization_config.json` provides the main configuration that substudies inherit from. 4. **Study-Level Documentation**: `README.md` and results markdown files at the study level provide high-level overviews. 5. **Clear Hierarchy**: - Study = Overall project (e.g., "optimize this beam") - Substudy = Specific optimization run (e.g., "50 trials with TPE sampler") - Trial = Individual design evaluation ### ⚠️ Issues Found 1. **Documentation Scattered**: Results documentation is at the study level (`OPTIMIZATION_RESULTS_50TRIALS.md`) but describes a specific substudy (`full_optimization_50trials`). 2. **Benchmarking Placement**: `substudies/benchmarking/` is not really a "substudy" - it's a validation step that should happen before optimization. 3. **Missing Substudy Metadata**: Some substudies lack their own README or summary files to explain what they tested. 4. **Inconsistent Naming**: `validation_3trials` vs `validation_4d_3trials` - unclear what distinguishes them without investigation. 5. **Study Metadata Incomplete**: `study_metadata.json` lists only "initial_exploration" substudy, but there are 5 substudies present. --- ## Recommended Organization ### Proposed Structure ``` studies/simple_beam_optimization/ │ ├── 1_setup/ # NEW: Pre-optimization setup │ ├── model/ # Reference CAD/FEM model │ │ ├── Beam.prt │ │ ├── Beam_sim1.sim │ │ └── ... │ ├── benchmarking/ # Baseline validation │ │ ├── benchmark_results.json │ │ └── BENCHMARK_REPORT.md │ └── baseline_validation.json │ ├── 2_substudies/ # Optimization runs │ ├── 01_initial_exploration/ │ │ ├── README.md # What was tested, why │ │ ├── config.json │ │ ├── trial_000/ │ │ ├── ... │ │ └── results_summary.md # Substudy-specific results │ ├── 02_validation_3d_3trials/ │ │ └── [similar structure] │ ├── 03_validation_4d_3trials/ │ │ └── [similar structure] │ └── 04_full_optimization_50trials/ │ ├── README.md │ ├── trial_000/ │ ├── ... trial_049/ │ ├── plots/ │ ├── history.json │ ├── best_trial.json │ ├── OPTIMIZATION_RESULTS.md # Moved from study level │ └── cleanup_log.json │ ├── 3_reports/ # NEW: Study-level analysis │ ├── COMPREHENSIVE_BENCHMARK_RESULTS.md │ ├── COMPARISON_ALL_SUBSTUDIES.md # NEW: Compare substudies │ └── final_recommendations.md # NEW: Engineering insights │ ├── README.md # Study overview ├── study_metadata.json # Updated with all substudies ├── beam_optimization_config.json # Main configuration └── run_optimization.py # Study-specific runner ``` ### Key Changes 1. **Numbered Directories**: Indicate workflow sequence (setup → substudies → reports) 2. **Numbered Substudies**: Chronological naming (01_, 02_, 03_) makes progression clear 3. **Moved Benchmarking**: From `substudies/` to `1_setup/` (it's pre-optimization) 4. **Substudy-Level Documentation**: Each substudy has: - `README.md` - What was tested, parameters, hypothesis - `OPTIMIZATION_RESULTS.md` - Results and analysis 5. **Centralized Reports**: All comparative analysis and final recommendations in `3_reports/` 6. **Updated Metadata**: `study_metadata.json` tracks all substudies with status --- ## Comparison: Current vs Proposed | Aspect | Current | Proposed | Benefit | |--------|---------|----------|---------| | **Substudy naming** | Descriptive only | Numbered + descriptive | Chronological clarity | | **Documentation** | Mixed levels | Clear hierarchy | Easier to find results | | **Benchmarking** | In substudies/ | In 1_setup/ | Reflects true purpose | | **Model location** | study root | 1_setup/model/ | Grouped with setup | | **Reports** | Study root | 3_reports/ | Centralized analysis | | **Substudy docs** | Minimal | README + results | Self-documenting | | **Metadata** | Incomplete | All substudies tracked | Accurate status | --- ## Migration Guide ### Option 1: Reorganize Existing Study (Recommended) **Steps**: 1. Create new directory structure 2. Move files to new locations 3. Update `study_metadata.json` 4. Update file references in documentation 5. Create missing substudy READMEs **Commands**: ```bash # Create new structure mkdir -p studies/simple_beam_optimization/1_setup/model mkdir -p studies/simple_beam_optimization/1_setup/benchmarking mkdir -p studies/simple_beam_optimization/2_substudies mkdir -p studies/simple_beam_optimization/3_reports # Move model mv studies/simple_beam_optimization/model/* studies/simple_beam_optimization/1_setup/model/ # Move benchmarking mv studies/simple_beam_optimization/substudies/benchmarking/* studies/simple_beam_optimization/1_setup/benchmarking/ # Rename and move substudies mv studies/simple_beam_optimization/substudies/initial_exploration studies/simple_beam_optimization/2_substudies/01_initial_exploration mv studies/simple_beam_optimization/substudies/validation_3trials studies/simple_beam_optimization/2_substudies/02_validation_3d_3trials mv studies/simple_beam_optimization/substudies/validation_4d_3trials studies/simple_beam_optimization/2_substudies/03_validation_4d_3trials mv studies/simple_beam_optimization/substudies/full_optimization_50trials studies/simple_beam_optimization/2_substudies/04_full_optimization_50trials # Move reports mv studies/simple_beam_optimization/COMPREHENSIVE_BENCHMARK_RESULTS.md studies/simple_beam_optimization/3_reports/ mv studies/simple_beam_optimization/OPTIMIZATION_RESULTS_50TRIALS.md studies/simple_beam_optimization/2_substudies/04_full_optimization_50trials/ # Clean up rm -rf studies/simple_beam_optimization/substudies/ rm -rf studies/simple_beam_optimization/model/ ``` ### Option 2: Apply to Future Studies Only Keep existing study as-is, apply new organization to future studies. **When to Use**: - Current study is complete and well-understood - Reorganization would break existing scripts/references - Want to test new organization before migrating --- ## Best Practices ### Study-Level Files **Required**: - `README.md` - High-level overview, purpose, design variables, objectives - `study_metadata.json` - Metadata, status, substudy registry - `beam_optimization_config.json` - Main configuration (inheritable) - `run_optimization.py` - Study-specific runner script **Optional**: - `CHANGELOG.md` - Track configuration changes across substudies - `LESSONS_LEARNED.md` - Engineering insights, dead ends avoided ### Substudy-Level Files **Required** (Generated by Runner): - `trial_XXX/` - Trial directories with CAD/FEM files and results.json - `history.json` - Full optimization history - `best_trial.json` - Best trial metadata - `optuna_study.pkl` - Optuna study object - `config.json` - Substudy-specific configuration **Required** (User-Created): - `README.md` - Purpose, hypothesis, parameter choices **Optional** (Auto-Generated): - `plots/` - Visualization plots (if post_processing.generate_plots = true) - `cleanup_log.json` - Model cleanup statistics (if post_processing.cleanup_models = true) **Optional** (User-Created): - `OPTIMIZATION_RESULTS.md` - Detailed analysis and interpretation ### Trial-Level Files **Always Kept** (Small, Critical): - `results.json` - Extracted objectives, constraints, design variables **Kept for Top-N Trials** (Large, Useful): - `Beam.prt` - CAD model - `Beam_sim1.sim` - Simulation setup - `beam_sim1-solution_1.op2` - FEA results (binary) - `beam_sim1-solution_1.f06` - FEA results (text) **Cleaned for Poor Trials** (Large, Less Useful): - All `.prt`, `.sim`, `.fem`, `.op2`, `.f06` files deleted - Only `results.json` preserved --- ## Naming Conventions ### Substudy Names **Format**: `NN_descriptive_name` **Examples**: - `01_initial_exploration` - First exploration of design space - `02_validation_3d_3trials` - Validate 3 design variables work - `03_validation_4d_3trials` - Validate 4 design variables work - `04_full_optimization_50trials` - Full optimization run - `05_refined_search_30trials` - Refined search in promising region - `06_sensitivity_analysis` - Parameter sensitivity study **Guidelines**: - Start with two-digit number (01, 02, ..., 99) - Use underscores for spaces - Be concise but descriptive - Include trial count if relevant ### Study Names **Format**: `descriptive_name` (no numbering) **Examples**: - `simple_beam_optimization` - Optimize simple beam - `bracket_displacement_maximizing` - Maximize bracket displacement - `engine_mount_fatigue` - Engine mount fatigue optimization **Guidelines**: - Use underscores for spaces - Include part name and optimization goal - Avoid dates (use substudy numbering for chronology) --- ## Metadata Format ### study_metadata.json **Recommended Format**: ```json { "study_name": "simple_beam_optimization", "description": "Minimize displacement and weight of beam with existing loadcases", "created": "2025-11-17T10:24:09.613688", "status": "active", "design_variables": ["beam_half_core_thickness", "beam_face_thickness", "holes_diameter", "hole_count"], "objectives": ["minimize_displacement", "minimize_stress", "minimize_mass"], "constraints": ["displacement_limit"], "substudies": [ { "name": "01_initial_exploration", "created": "2025-11-17T10:30:00", "status": "completed", "trials": 10, "purpose": "Explore design space boundaries" }, { "name": "02_validation_3d_3trials", "created": "2025-11-17T11:00:00", "status": "completed", "trials": 3, "purpose": "Validate 3D parameter updates (without hole_count)" }, { "name": "03_validation_4d_3trials", "created": "2025-11-17T12:00:00", "status": "completed", "trials": 3, "purpose": "Validate 4D parameter updates (with hole_count)" }, { "name": "04_full_optimization_50trials", "created": "2025-11-17T13:00:00", "status": "completed", "trials": 50, "purpose": "Full optimization with all 4 design variables" } ], "last_modified": "2025-11-17T15:30:00" } ``` ### Substudy README.md Template ```markdown # [Substudy Name] **Date**: YYYY-MM-DD **Status**: [planned | running | completed | failed] **Trials**: N ## Purpose [Why this substudy was created, what hypothesis is being tested] ## Configuration Changes [Compared to previous substudy or baseline config, what changed?] - Design variable bounds: [if changed] - Objective weights: [if changed] - Sampler settings: [if changed] ## Expected Outcome [What do you hope to learn or achieve?] ## Actual Results [Fill in after completion] - Best objective: X.XX - Feasible designs: N / N_total - Key findings: [summary] ## Next Steps [What substudy should follow based on these results?] ``` --- ## Workflow Integration ### Creating a New Substudy **Steps**: 1. Determine substudy number (next in sequence) 2. Create substudy README.md with purpose and changes 3. Update configuration if needed 4. Run optimization: ```bash python run_optimization.py --substudy-name "05_refined_search_30trials" ``` 5. After completion: - Review results - Update substudy README.md with findings - Create OPTIMIZATION_RESULTS.md if significant - Update study_metadata.json ### Comparing Substudies **Create Comparison Report**: ```markdown # Substudy Comparison | Substudy | Trials | Best Obj | Feasible | Key Finding | |----------|--------|----------|----------|-------------| | 01_initial_exploration | 10 | 1250.3 | 0/10 | Design space too large | | 02_validation_3d_3trials | 3 | 1180.5 | 0/3 | 3D updates work | | 03_validation_4d_3trials | 3 | 1120.2 | 0/3 | hole_count updates work | | 04_full_optimization_50trials | 50 | 842.6 | 0/50 | No feasible designs found | **Conclusion**: Constraint appears infeasible. Recommend relaxing displacement limit. ``` --- ## Benefits of Proposed Organization ### For Users 1. **Clarity**: Numbered substudies show chronological progression 2. **Self-Documenting**: Each substudy explains its purpose 3. **Easy Comparison**: All results in one place (3_reports/) 4. **Less Clutter**: Study root only has essential files ### For Developers 1. **Predictable Structure**: Scripts can rely on consistent paths 2. **Automated Discovery**: Easy to find all substudies programmatically 3. **Version Control**: Clear history through numbered substudies 4. **Scalability**: Works for 5 substudies or 50 ### For Collaboration 1. **Onboarding**: New team members can understand study progression quickly 2. **Documentation**: Substudy READMEs explain decisions made 3. **Reproducibility**: Clear configuration history 4. **Communication**: Easy to reference specific substudies in discussions --- ## FAQ ### Q: Should I reorganize my existing study? **A**: Only if: - Study is still active (more substudies planned) - Current organization is causing confusion - You have time to update documentation references Otherwise, apply to future studies only. ### Q: What if my substudy doesn't have a fixed trial count? **A**: Use descriptive name instead: - `05_refined_search_until_feasible` - `06_sensitivity_sweep` - `07_validation_run` ### Q: Can I delete old substudies? **A**: Generally no. Keep for: - Historical record - Lessons learned - Reproducibility If disk space is critical: - Use model cleanup to delete CAD/FEM files - Archive old substudies to external storage - Keep metadata and results.json files ### Q: Should benchmarking be a substudy? **A**: No. Benchmarking validates the baseline model before optimization. It belongs in `1_setup/benchmarking/`. ### Q: How do I handle multi-stage optimizations? **A**: Create separate substudies: - `05_stage1_meet_constraint_20trials` - `06_stage2_minimize_mass_30trials` Document the relationship in substudy READMEs. --- ## Summary **Current Organization**: Functional but has room for improvement - ✅ Substudy isolation works well - ⚠️ Documentation scattered across levels - ⚠️ Chronology unclear from names alone **Proposed Organization**: Clearer hierarchy and progression - 📁 `1_setup/` - Pre-optimization (model, benchmarking) - 📁 `2_substudies/` - Numbered optimization runs - 📁 `3_reports/` - Comparative analysis **Next Steps**: 1. Decide: Reorganize existing study or apply to future only 2. If reorganizing: Follow migration guide 3. Update `study_metadata.json` with all substudies 4. Create substudy README templates 5. Document lessons learned in study-level docs **Bottom Line**: The proposed organization makes it easier to understand what was done, why it was done, and what was learned.