{ "$schema": "http://json-schema.org/draft-07/schema#", "version": "1.0", "description": "Interview questions for Atomizer study creation", "categories": [ { "id": "problem_definition", "name": "Problem Definition", "phase": "problem_definition", "order": 1, "always_ask": true }, { "id": "objectives", "name": "Optimization Objectives", "phase": "objectives", "order": 2, "always_ask": true }, { "id": "constraints", "name": "Constraints & Limits", "phase": "constraints", "order": 3, "always_ask": true }, { "id": "design_variables", "name": "Design Variables", "phase": "design_variables", "order": 4, "always_ask": true }, { "id": "physics_config", "name": "Physics Configuration", "phase": "design_variables", "order": 5, "condition": { "type": "complexity_is", "value": ["moderate", "complex"] } }, { "id": "optimization_settings", "name": "Optimization Settings", "phase": "validation", "order": 6, "condition": { "type": "complexity_is", "value": ["moderate", "complex"] } }, { "id": "validation", "name": "Validation", "phase": "validation", "order": 7, "always_ask": false } ], "questions": [ { "id": "pd_01", "category": "problem_definition", "text": "What engineering problem are you trying to solve with this optimization?", "help_text": "Describe the goal in engineering terms. For example: 'Reduce the weight of a bracket while maintaining structural integrity' or 'Tune the natural frequency to avoid resonance'.", "question_type": "text", "options": null, "default": null, "validation": { "required": true, "min_length": 10 }, "condition": null, "maps_to": "problem_description", "engineering_guidance": "A clear problem statement helps ensure the optimization setup matches your actual goals." }, { "id": "pd_02", "category": "problem_definition", "text": "What is the physical context of this component?", "help_text": "Describe how this part is used. For example: 'Mounting bracket for an aircraft wing' or 'Support structure for a telescope mirror'.", "question_type": "text", "options": null, "default": null, "validation": { "required": false }, "condition": { "type": "complexity_is", "value": ["moderate", "complex"] }, "maps_to": "physical_context", "engineering_guidance": "Understanding the physical context helps validate constraint choices." }, { "id": "pd_03", "category": "problem_definition", "text": "What type of analysis does your model use?", "help_text": "Select all analysis types that are set up in your simulation.", "question_type": "multi_choice", "options": [ {"value": "static", "label": "Static structural analysis"}, {"value": "modal", "label": "Modal/frequency analysis"}, {"value": "thermal", "label": "Thermal analysis"}, {"value": "coupled_thermal_structural", "label": "Coupled thermal-structural"}, {"value": "buckling", "label": "Buckling analysis"}, {"value": "nonlinear", "label": "Nonlinear analysis"} ], "default": ["static"], "validation": { "required": true, "min_selections": 1 }, "condition": null, "maps_to": "analysis_types", "engineering_guidance": "The analysis type determines which extractors and solution strategies are available." }, { "id": "obj_01", "category": "objectives", "text": "What is your primary optimization goal?", "help_text": "Choose the main thing you want to optimize for.", "question_type": "choice", "options": [ {"value": "minimize_mass", "label": "Minimize mass/weight"}, {"value": "minimize_displacement", "label": "Minimize displacement (maximize stiffness)"}, {"value": "maximize_frequency", "label": "Maximize natural frequency"}, {"value": "minimize_stress", "label": "Minimize peak stress"}, {"value": "target_frequency", "label": "Target a specific frequency"}, {"value": "minimize_wavefront_error", "label": "Minimize wavefront error (optical)"}, {"value": "custom", "label": "Custom objective (I'll specify)"} ], "default": null, "validation": { "required": true }, "condition": null, "maps_to": "objectives[0].goal", "engineering_guidance": "Mass minimization requires at least one constraint (stress, displacement, or frequency) to avoid degenerating to zero-thickness designs." }, { "id": "obj_02", "category": "objectives", "text": "Do you have any secondary objectives?", "help_text": "Select additional objectives if this is a multi-objective optimization. Leave empty for single-objective.", "question_type": "multi_choice", "options": [ {"value": "minimize_mass", "label": "Minimize mass/weight"}, {"value": "minimize_displacement", "label": "Minimize displacement"}, {"value": "maximize_frequency", "label": "Maximize frequency"}, {"value": "minimize_stress", "label": "Minimize stress"}, {"value": "none", "label": "No secondary objectives (single-objective)"} ], "default": ["none"], "validation": { "required": true }, "condition": null, "maps_to": "objectives_secondary", "engineering_guidance": "Multi-objective optimization produces a Pareto front of trade-off solutions. More than 3 objectives can make interpretation difficult." }, { "id": "obj_03", "category": "objectives", "text": "I've selected the following extractors for your objectives. Does this look correct?", "help_text": "The extractor is the code that reads the physics results from the simulation. I've automatically selected based on your goals.", "question_type": "confirm", "options": null, "default": true, "validation": { "required": true }, "condition": null, "maps_to": "extractors_confirmed", "engineering_guidance": null, "dynamic_content": { "type": "extractor_summary", "source": "inferred_config.extractors" } }, { "id": "con_01", "category": "constraints", "text": "What is the maximum allowable stress?", "help_text": "Enter the stress limit in MPa. This is typically based on material yield stress with a safety factor.", "question_type": "numeric", "options": null, "default": null, "validation": { "required": true, "min": 1, "max": 10000, "units": "MPa" }, "condition": { "type": "or", "conditions": [ {"type": "contains", "field": "analysis_types", "value": "static"}, {"type": "equals", "field": "objectives[0].goal", "value": "minimize_mass"} ] }, "maps_to": "constraints.max_stress", "engineering_guidance": "For aluminum 6061-T6, yield stress is 276 MPa. A safety factor of 1.5 gives ~180 MPa limit." }, { "id": "con_02", "category": "constraints", "text": "What is the maximum allowable displacement?", "help_text": "Enter the displacement limit. Include units (mm or in).", "question_type": "numeric", "options": null, "default": null, "validation": { "required": false, "min": 0, "units": "mm" }, "condition": { "type": "or", "conditions": [ {"type": "contains", "field": "analysis_types", "value": "static"}, {"type": "equals", "field": "objectives[0].goal", "value": "minimize_mass"} ] }, "maps_to": "constraints.max_displacement", "engineering_guidance": "Displacement limits often come from functional requirements - clearance, alignment, etc." }, { "id": "con_03", "category": "constraints", "text": "What is the minimum acceptable natural frequency?", "help_text": "Enter the frequency limit in Hz.", "question_type": "numeric", "options": null, "default": null, "validation": { "required": true, "min": 0.1, "units": "Hz" }, "condition": { "type": "contains", "field": "analysis_types", "value": "modal" }, "maps_to": "constraints.min_frequency", "engineering_guidance": "Typically set to avoid resonance with known excitation frequencies (motors, vibration sources)." }, { "id": "con_04", "category": "constraints", "text": "Do you have a mass budget (maximum allowed mass)?", "help_text": "Enter the mass limit in kg, or skip if not applicable.", "question_type": "numeric", "options": null, "default": null, "validation": { "required": false, "min": 0, "units": "kg" }, "condition": { "type": "not", "condition": { "type": "equals", "field": "objectives[0].goal", "value": "minimize_mass" } }, "maps_to": "constraints.max_mass", "engineering_guidance": "A mass budget is often required when mass is not the primary objective." }, { "id": "con_05", "category": "constraints", "text": "How should constraints be handled?", "help_text": "Hard constraints reject any design that violates them. Soft constraints allow violations but penalize the objective.", "question_type": "choice", "options": [ {"value": "hard", "label": "Hard constraints (reject violations)"}, {"value": "soft", "label": "Soft constraints (penalize violations)"}, {"value": "mixed", "label": "Mixed (I'll specify per constraint)"} ], "default": "hard", "validation": { "required": true }, "condition": null, "maps_to": "constraint_handling", "engineering_guidance": "Hard constraints are more conservative. Soft constraints allow exploration but may produce infeasible final designs." }, { "id": "dv_01", "category": "design_variables", "text": "Which parameters should be varied during optimization?", "help_text": "Select from the detected expressions in your model, or type custom names.", "question_type": "parameter_select", "options": null, "default": null, "validation": { "required": true, "min_selections": 1, "max_selections": 20 }, "condition": null, "maps_to": "design_variables", "engineering_guidance": "More design variables = larger search space. 3-6 is typical for efficient optimization.", "dynamic_options": { "type": "expressions", "source": "introspection.expressions", "filter": "design_variable_heuristics" } }, { "id": "dv_02", "category": "design_variables", "text": "Please confirm or adjust the bounds for each design variable.", "help_text": "For each parameter, verify the min and max values are appropriate.", "question_type": "bounds", "options": null, "default": null, "validation": { "required": true }, "condition": null, "maps_to": "design_variable_bounds", "engineering_guidance": "Bounds should be physically meaningful. Too wide (>10x range) may slow convergence.", "dynamic_content": { "type": "bounds_table", "source": "answers.design_variables" } }, { "id": "dv_03", "category": "design_variables", "text": "Are there any parameters that should remain fixed (not optimized)?", "help_text": "Select parameters that should keep their current values.", "question_type": "parameter_select", "options": null, "default": null, "validation": { "required": false }, "condition": { "type": "complexity_is", "value": ["complex"] }, "maps_to": "fixed_parameters", "engineering_guidance": "Fix parameters that have regulatory or interface constraints.", "dynamic_options": { "type": "expressions", "source": "introspection.expressions", "filter": "exclude_selected_dvs" } }, { "id": "phys_01", "category": "physics_config", "text": "What element type does your mesh use for stress extraction?", "help_text": "This affects which stress extractor is used.", "question_type": "choice", "options": [ {"value": "solid", "label": "Solid elements (CTETRA, CHEXA, CPENTA)"}, {"value": "shell", "label": "Shell elements (CQUAD4, CTRIA3)"}, {"value": "beam", "label": "Beam elements (CBAR, CBEAM)"}, {"value": "mixed", "label": "Mixed element types"}, {"value": "auto", "label": "Auto-detect from model"} ], "default": "auto", "validation": { "required": true }, "condition": { "type": "or", "conditions": [ {"type": "equals", "field": "objectives[0].goal", "value": "minimize_stress"}, {"type": "exists", "field": "constraints.max_stress"} ] }, "maps_to": "element_type", "engineering_guidance": null }, { "id": "phys_02", "category": "physics_config", "text": "Your model has multiple solution steps. Should all solutions be evaluated?", "help_text": "Some models have static + modal, or multiple load cases.", "question_type": "confirm", "options": null, "default": true, "validation": { "required": true }, "condition": { "type": "introspection_has", "field": "multiple_solutions" }, "maps_to": "solve_all_solutions", "engineering_guidance": "If you have both static and modal analysis, both should typically be solved to get all required outputs." }, { "id": "opt_01", "category": "optimization_settings", "text": "How many trials should be run?", "help_text": "More trials = better exploration but longer runtime.", "question_type": "choice", "options": [ {"value": 50, "label": "50 trials (~quick exploration)"}, {"value": 100, "label": "100 trials (standard)"}, {"value": 200, "label": "200 trials (thorough)"}, {"value": 500, "label": "500 trials (comprehensive)"}, {"value": "custom", "label": "Custom number"} ], "default": 100, "validation": { "required": true }, "condition": { "type": "complexity_is", "value": ["moderate", "complex"] }, "maps_to": "n_trials", "engineering_guidance": "Rule of thumb: 10-20 trials per design variable minimum. Complex multi-objective needs more." }, { "id": "opt_02", "category": "optimization_settings", "text": "Would you like to enable neural acceleration?", "help_text": "Neural surrogates can speed up optimization by reducing FEA calls. Requires initial training trials.", "question_type": "confirm", "options": null, "default": false, "validation": { "required": true }, "condition": { "type": "and", "conditions": [ {"type": "greater_than", "field": "n_trials", "value": 100}, {"type": "complexity_is", "value": ["moderate", "complex"]} ] }, "maps_to": "use_neural_acceleration", "engineering_guidance": "Neural acceleration is most effective for expensive simulations (>30 sec/eval) with 100+ trials." }, { "id": "val_01", "category": "validation", "text": "Would you like to run a baseline validation before starting?", "help_text": "This runs a single FEA solve to verify extractors work correctly with nominal parameters.", "question_type": "confirm", "options": null, "default": true, "validation": { "required": true }, "condition": null, "maps_to": "run_baseline_validation", "engineering_guidance": "Highly recommended. Catches configuration errors before wasting optimization time." } ] }