**Validation Changes (simulation_validator.py)**: - Removed arbitrary aspect ratio limits (5.0-50.0) for circular_plate model - User requirement: validation rules must be proposed, not automatic - Validator now returns empty rules for circular_plate - Relies solely on Optuna parameter bounds (user-defined feasibility) - Fixed Unicode encoding issues in pruning_logger.py **Root Cause Analysis**: - 18-20% pruning in Protocol 10 tests was NOT validation failures - All pruned trials had valid aspect ratios within bounds - Root cause: pyNastran FATAL flag false positives - Simulations succeeded but pyNastran rejected OP2 files **New Modules**: - pruning_logger.py: Comprehensive trial failure tracking - Logs validation, simulation, and OP2 extraction failures - Analyzes F06 files to detect false positives - Generates pruning_history.json and pruning_summary.json - op2_extractor.py: Robust multi-strategy OP2 extraction - Standard OP2 read - Lenient read (debug=False) - F06 fallback parsing - Handles pyNastran FATAL flag issues **Documentation**: - SESSION_SUMMARY_NOV20.md: Complete session documentation - FIX_VALIDATOR_PRUNING.md: Deprecated, retained for historical reference - PRUNING_DIAGNOSTICS.md: Usage guide for pruning diagnostics - STUDY_CONTINUATION_STANDARD.md: API documentation **Impact**: - Clean separation: parameter bounds = feasibility, validator = genuine failures - Expected pruning reduction from 18% to <2% with robust extraction - ~4-5 minutes saved per 50-trial study - All optimization trials contribute valid data **User Requirements Established**: 1. No arbitrary checks without user approval 2. Validation rules must be visible in optimization_config.json 3. Parameter bounds already define feasibility constraints 4. Physics-based constraints need clear justification
3.9 KiB
Validator Pruning Investigation - November 20, 2025
DEPRECATED - This document is retained for historical reference only.
Status: Investigation completed. Aspect ratio validation approach was abandoned.
Original Problem
The v2.1 and v2.2 tests showed 18-20% pruning rate. Investigation revealed two separate issues:
Issue 1: Validator Not Enforcing Rules (FIXED, then REMOVED)
The _validate_circular_plate_aspect_ratio() method initially returned only warnings, not rejections.
Fix Applied: Changed to return hard rejections for aspect ratio violations.
Result: All pruned trials in v2.2 still had VALID aspect ratios (5.0-50.0 range).
Conclusion: Aspect ratio violations were NOT the cause of pruning.
Issue 2: pyNastran False Positives (ROOT CAUSE)
All pruned trials failed due to pyNastran FATAL flag sensitivity:
- ✅ Nastran simulations succeeded (F06 files have no errors)
- ⚠️ FATAL flag in OP2 header (benign warning)
- ❌ pyNastran throws exception when reading OP2
- ❌ Valid trials incorrectly marked as failed
Evidence: All 9 pruned trials in v2.2 had:
is_pynastran_fatal_flag: truef06_has_fatal_errors: false- Valid aspect ratios within bounds
Final Solution (Post-v2.3)
Aspect Ratio Validation REMOVED
After deploying v2.3 with aspect ratio validation, user feedback revealed:
User Requirement: "I never asked for this check, where does that come from?"
Issue: Arbitrary aspect ratio limits (5.0-50.0) without:
- User approval
- Physical justification for circular plate modal analysis
- Visibility in optimization_config.json
Fix Applied:
- Removed ALL aspect ratio validation from circular_plate model type
- Validator now returns empty rules
{} - Relies solely on Optuna parameter bounds (50-150mm diameter, 2-10mm thickness)
User Requirements Established:
- No arbitrary checks - validation rules must be proposed, not automatic
- Configurable validation - rules should be visible in optimization_config.json
- Parameter bounds suffice - ranges already define feasibility
- Physical justification required - any constraint needs clear reasoning
Real Solution: Robust OP2 Extraction
Module: optimization_engine/op2_extractor.py
Multi-strategy extraction that handles pyNastran issues:
- Standard OP2 read
- Lenient read (debug=False, skip benign flags)
- F06 fallback parsing
See PRUNING_DIAGNOSTICS.md for details.
Lessons Learned
-
Validator is for simulation failures, not arbitrary physics assumptions
- Parameter bounds already define feasible ranges
- Don't add validation rules without user approval
-
18% pruning was pyNastran false positives, not validation issues
- All pruned trials had valid parameters
- Robust extraction eliminates these false positives
-
Transparency is critical
- Validation rules must be visible in optimization_config.json
- Arbitrary constraints confuse users and reject valid designs
Current State
File: simulation_validator.py
if model_type == 'circular_plate':
# NOTE: Only use parameter bounds for validation
# No arbitrary aspect ratio checks - let Optuna explore the full parameter space
# Modal analysis is robust and doesn't need strict aspect ratio limits
return {}
Impact: Clean separation of concerns
- Parameter bounds = Feasibility (user-defined ranges)
- Validator = Genuine simulation failures (e.g., mesh errors, solver crashes)
References
- SESSION_SUMMARY_NOV20.md - Complete session documentation
- PRUNING_DIAGNOSTICS.md - Robust extraction solution
- optimization_engine/simulation_validator.py - Current validator implementation