Study Interview Mode is now the DEFAULT for all study creation requests. This intelligent Q&A system guides users through optimization setup with: - 7-phase interview flow: introspection → objectives → constraints → design_variables → validation → review → complete - Material-aware validation with 12 materials and fuzzy name matching - Anti-pattern detection for 12 common mistakes (mass-no-constraint, stress-over-yield, etc.) - Auto extractor mapping E1-E24 based on goal keywords - State persistence with JSON serialization and backup rotation - StudyBlueprint generation with full validation Triggers: "create a study", "new study", "optimize this", any study creation intent Skip with: "skip interview", "quick setup", "manual config" Components: - StudyInterviewEngine: Main orchestrator - QuestionEngine: Conditional logic evaluation - EngineeringValidator: MaterialsDatabase + AntiPatternDetector - InterviewPresenter: Markdown formatting for Claude - StudyBlueprint: Validated configuration output - InterviewState: Persistent state management All 129 tests passing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
214 lines
8.1 KiB
JSON
214 lines
8.1 KiB
JSON
{
|
|
"version": "1.0",
|
|
"description": "Common optimization setup anti-patterns and their detection",
|
|
"patterns": [
|
|
{
|
|
"id": "mass_no_constraint",
|
|
"name": "Mass Minimization Without Constraints",
|
|
"description": "Minimizing mass without any structural constraints will result in zero-thickness (or zero-size) designs that are physically impossible",
|
|
"severity": "error",
|
|
"condition": {
|
|
"type": "and",
|
|
"conditions": [
|
|
{
|
|
"type": "or",
|
|
"conditions": [
|
|
{"type": "contains", "field": "objectives", "value": "minimize_mass"},
|
|
{"type": "contains", "field": "objectives", "value": "minimize_weight"}
|
|
]
|
|
},
|
|
{"type": "empty", "field": "constraints"}
|
|
]
|
|
},
|
|
"fix_suggestion": "Add at least one constraint: maximum stress, maximum displacement, or minimum frequency",
|
|
"auto_fix": null
|
|
},
|
|
{
|
|
"id": "modal_single_solution",
|
|
"name": "Modal Analysis with Single Solution Step",
|
|
"description": "When both static and modal analysis are needed, using only a single solution may miss computing one type of result",
|
|
"severity": "error",
|
|
"condition": {
|
|
"type": "and",
|
|
"conditions": [
|
|
{"type": "contains", "field": "analysis_types", "value": "modal"},
|
|
{"type": "contains", "field": "analysis_types", "value": "static"},
|
|
{"type": "equals", "field": "solve_all_solutions", "value": false}
|
|
]
|
|
},
|
|
"fix_suggestion": "Enable 'solve all solutions' to ensure both static and modal results are computed",
|
|
"auto_fix": {
|
|
"field": "solve_all_solutions",
|
|
"value": true
|
|
}
|
|
},
|
|
{
|
|
"id": "bounds_too_wide",
|
|
"name": "Design Variable Bounds Too Wide",
|
|
"description": "When bounds span more than 10x the range (max/min > 10), optimization may struggle to converge efficiently",
|
|
"severity": "warning",
|
|
"condition": {
|
|
"type": "any_of",
|
|
"field": "design_variables",
|
|
"check": {
|
|
"type": "ratio_greater_than",
|
|
"field": ["max_value", "min_value"],
|
|
"value": 10
|
|
}
|
|
},
|
|
"fix_suggestion": "Consider narrowing bounds based on engineering knowledge. Very wide bounds increase the search space exponentially.",
|
|
"auto_fix": null
|
|
},
|
|
{
|
|
"id": "stress_over_yield",
|
|
"name": "Stress Limit Exceeds Material Yield",
|
|
"description": "The specified stress constraint exceeds the material yield stress, which could allow plastic deformation",
|
|
"severity": "warning",
|
|
"condition": {
|
|
"type": "and",
|
|
"conditions": [
|
|
{"type": "exists", "field": "constraints.max_stress"},
|
|
{"type": "exists", "field": "introspection.material"},
|
|
{
|
|
"type": "greater_than",
|
|
"field": "constraints.max_stress",
|
|
"compare_to": "material.yield_stress_mpa"
|
|
}
|
|
]
|
|
},
|
|
"fix_suggestion": "The stress limit should typically be the yield stress divided by a safety factor (1.5-2.0 for structural applications)",
|
|
"auto_fix": null
|
|
},
|
|
{
|
|
"id": "conflicting_objectives",
|
|
"name": "Typically Conflicting Objectives",
|
|
"description": "The selected objectives are typically in conflict. This is not an error, but expect a trade-off Pareto front rather than a single optimal solution.",
|
|
"severity": "info",
|
|
"condition": {
|
|
"type": "or",
|
|
"conditions": [
|
|
{
|
|
"type": "and",
|
|
"conditions": [
|
|
{"type": "contains", "field": "objectives", "value": "minimize_mass"},
|
|
{"type": "contains", "field": "objectives", "value": "minimize_displacement"}
|
|
]
|
|
},
|
|
{
|
|
"type": "and",
|
|
"conditions": [
|
|
{"type": "contains", "field": "objectives", "value": "minimize_mass"},
|
|
{"type": "contains", "field": "objectives", "value": "maximize_frequency"}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"fix_suggestion": "Consider which objective is more important, or proceed with multi-objective optimization to explore trade-offs",
|
|
"auto_fix": null
|
|
},
|
|
{
|
|
"id": "too_many_objectives",
|
|
"name": "Too Many Objectives",
|
|
"description": "More than 3 objectives makes interpretation difficult and may not improve the optimization",
|
|
"severity": "warning",
|
|
"condition": {
|
|
"type": "count_greater_than",
|
|
"field": "objectives",
|
|
"value": 3
|
|
},
|
|
"fix_suggestion": "Consider reducing to 2-3 primary objectives. Additional goals can often be handled as constraints.",
|
|
"auto_fix": null
|
|
},
|
|
{
|
|
"id": "missing_stress_constraint",
|
|
"name": "Missing Stress Constraint",
|
|
"description": "Static analysis without a stress constraint may result in designs that fail structurally",
|
|
"severity": "warning",
|
|
"condition": {
|
|
"type": "and",
|
|
"conditions": [
|
|
{"type": "contains", "field": "analysis_types", "value": "static"},
|
|
{"type": "not_exists", "field": "constraints.max_stress"},
|
|
{
|
|
"type": "not",
|
|
"condition": {"type": "contains", "field": "objectives", "value": "minimize_stress"}
|
|
}
|
|
]
|
|
},
|
|
"fix_suggestion": "Add a stress constraint based on material yield stress and appropriate safety factor",
|
|
"auto_fix": null
|
|
},
|
|
{
|
|
"id": "too_few_trials",
|
|
"name": "Insufficient Trials for Design Space",
|
|
"description": "The number of trials may be too low for the number of design variables to adequately explore the design space",
|
|
"severity": "warning",
|
|
"condition": {
|
|
"type": "less_than",
|
|
"field": "n_trials",
|
|
"compare_to": {
|
|
"type": "multiply",
|
|
"field": "design_variable_count",
|
|
"value": 15
|
|
}
|
|
},
|
|
"fix_suggestion": "Rule of thumb: use at least 10-20 trials per design variable. Consider increasing trials.",
|
|
"auto_fix": null
|
|
},
|
|
{
|
|
"id": "infeasible_baseline",
|
|
"name": "Baseline Violates Constraints",
|
|
"description": "The nominal design already violates one or more constraints. The optimizer starts in the infeasible region.",
|
|
"severity": "warning",
|
|
"condition": {
|
|
"type": "exists",
|
|
"field": "baseline_violations"
|
|
},
|
|
"fix_suggestion": "Consider relaxing constraints or modifying the baseline design to start from a feasible point",
|
|
"auto_fix": null
|
|
},
|
|
{
|
|
"id": "no_design_variables",
|
|
"name": "No Design Variables Selected",
|
|
"description": "At least one design variable must be selected for optimization",
|
|
"severity": "error",
|
|
"condition": {
|
|
"type": "empty",
|
|
"field": "design_variables"
|
|
},
|
|
"fix_suggestion": "Select one or more parameters to vary during optimization",
|
|
"auto_fix": null
|
|
},
|
|
{
|
|
"id": "thermal_no_temperature",
|
|
"name": "Thermal Analysis Without Temperature Gradient",
|
|
"description": "Thermal analysis typically requires a temperature boundary condition or thermal load",
|
|
"severity": "warning",
|
|
"condition": {
|
|
"type": "and",
|
|
"conditions": [
|
|
{"type": "contains", "field": "analysis_types", "value": "thermal"},
|
|
{"type": "not_exists", "field": "introspection.thermal_bc"}
|
|
]
|
|
},
|
|
"fix_suggestion": "Verify thermal boundary conditions are defined in the simulation",
|
|
"auto_fix": null
|
|
},
|
|
{
|
|
"id": "single_dv_many_trials",
|
|
"name": "Single Variable with Many Trials",
|
|
"description": "For single-variable optimization, many trials may be inefficient. Consider using gradient-based methods.",
|
|
"severity": "info",
|
|
"condition": {
|
|
"type": "and",
|
|
"conditions": [
|
|
{"type": "count_equals", "field": "design_variables", "value": 1},
|
|
{"type": "greater_than", "field": "n_trials", "value": 50}
|
|
]
|
|
},
|
|
"fix_suggestion": "For single-variable problems, L-BFGS-B or golden section search may converge faster than sampling-based optimization",
|
|
"auto_fix": null
|
|
}
|
|
]
|
|
}
|