ML Surrogate for Full Aircraft Analysis

Generate thousands of aircraft configurations in OpenVSP and train a neural network for rapid preliminary design

Advanced Aircraft Design 6–9 weeks
Last reviewed: March 2026

Overview

OpenVSP (Open Vehicle Sketch Pad) is NASA's open-source parametric aircraft geometry tool, used throughout the aerospace industry for preliminary design. Combined with its built-in vortex lattice method (VLM) aerodynamic solver, OpenVSP can analyze a complete aircraft configuration — wing, fuselage, tail, nacelles — in seconds. But optimizing a full aircraft requires thousands to millions of evaluations.

In this project, you'll use OpenVSP's Python API to define a parametric aircraft model with ~15 design variables (wing span, aspect ratio, sweep, taper, fuselage length, tail volume coefficients, etc.), generate a 2,000-point Latin Hypercube Sampling dataset, run VLM aerodynamic analysis on each configuration, and train a deep neural network surrogate that predicts lift, drag, pitching moment, and static margin for any configuration in the design space.

The resulting surrogate is fast enough to use inside a genetic algorithm or gradient-based optimizer — enabling multi-objective conceptual design exploration that considers aerodynamic efficiency, stability, and structural weight simultaneously. This workflow is the core of industry MDO (Multidisciplinary Design Optimization) practice and is directly applicable to aircraft design contests (AIAA DBF, SAE Aero Design) and preliminary design study roles at aerospace companies.

What You'll Learn

  • Define and manipulate parametric aircraft geometries using the OpenVSP Python API (vsp module)
  • Run OpenVSP VLM aerodynamic analysis programmatically and parse DegenGeom results
  • Design a space-filling experiment using Latin Hypercube Sampling across a multi-dimensional aircraft design space
  • Train a multi-output neural network surrogate for aircraft aerodynamic coefficients and stability derivatives
  • Embed the surrogate in a multi-objective optimization loop to find Pareto-optimal aircraft configurations

Step-by-Step Guide

1

Define the Aircraft Parameterization

Using the vsp Python module (installed with OpenVSP), construct a transport aircraft model: wing (semi-span, aspect ratio, taper ratio, sweep at quarter-chord, dihedral, incidence), horizontal tail (span, aspect ratio, sweep), vertical tail (height, sweep), and fuselage (length, max diameter, nose/tail fineness). Parameterize 12–15 design variables total.

Validate the parametric model visually in the OpenVSP GUI for a few representative configurations — check that extreme parameter values produce geometrically valid (non-intersecting) configurations. Add geometric constraints in your sampling to avoid degenerate designs (aspect ratio < 4, tail volume coefficients below stability limits).

2

Script VLM Analysis

Write a Python function analyze_config(params) -> results_dict that: sets all geometric parameters, triggers an OpenVSP geometry export, runs the built-in VSPAERO VLM solver via subprocess, parses the output files (*.stab, *.polar), and returns CL, CD (induced), CM, neutral point location, and static margin.

Test the analysis function on the baseline configuration and validate against known results for a similar aircraft (e.g., compare static margin against a published transport aircraft). Test robustness: what happens with extreme parameter values that create non-physical geometries? Add try/except handling and mark failed runs.

3

Generate the Dataset

Generate a 2,000-point Latin Hypercube Sampling dataset using scipy.stats.qmc.LatinHypercube. Run all 2,000 configurations, logging inputs and outputs. Use Python's multiprocessing.Pool to parallelize across all CPU cores — 2,000 VSPAERO runs take ~2 hours single-core but ~15 minutes on an 8-core machine.

Expect 5–15% failure rate from non-physical configurations (intersecting surfaces, zero-volume components). Remove these from the dataset and flag which parameter combinations cause failures — these are the implicit geometric constraints of your parameterization.

4

Train the Surrogate Network

Split the dataset 80/10/10 and train a multi-output neural network with 5 outputs (CL_alpha, CD_induced, CM_alpha, neutral point %, static margin). Use 6 hidden layers of 128 neurons with ReLU activations. Normalize all inputs and outputs using training set statistics.

Monitor validation loss across all 5 outputs simultaneously. Some outputs (CL_alpha) are smooth functions that are easy to learn; others (CM_alpha, static margin) are more sensitive to geometry and require more capacity. If static margin prediction is poor, add more training data in regions where the output varies rapidly.

5

Multi-Objective Optimization with the Surrogate

Use the trained surrogate inside a NSGA-II multi-objective genetic algorithm (pymoo library) to simultaneously optimize: maximize CL/CD at cruise (aerodynamic efficiency), minimize CL/CD at approach (low minimum speed), and constrain static margin to 5–15% (stability requirement).

Run for 1,000 generations with population size 100 — the surrogate evaluates in microseconds, so this completes in seconds. Extract the Pareto front and visualize the trade-off between cruise efficiency and low-speed performance. Validate the top 5 Pareto-optimal designs with full OpenVSP analysis to verify the surrogate's predictions.

6

Sensitivity Analysis and Design Insights

Use the trained surrogate for global sensitivity analysis (Sobol indices via SALib): which design parameters have the largest influence on aerodynamic performance? This analysis reveals the most important design variables and can reduce the design space for subsequent higher-fidelity studies.

Create a design report: parameter ranges explored, Pareto front visualization, top 3 recommended configurations with their geometric descriptions and predicted performance, and Sobol sensitivity indices for all design variables. This is the format used in actual conceptual design trade studies.

Go Further

Extend toward full MDO with higher fidelity:

  • Structural weight model — add a wing structural weight estimate (using FLOPS-style regression or a simple beam model) as a third objective, enabling true MDO that balances aerodynamics and structural weight
  • OpenVSP + OpenFOAM — use OpenVSP for geometry generation and OpenFOAM for RANS CFD instead of VLM, trading speed for accuracy in the training dataset
  • Mission performance — add a Breguet range equation model that converts aerodynamic coefficients to range and fuel burn, enabling range maximization as a top-level objective
  • AIAA DBF competition — apply this optimization workflow to the AIAA Design/Build/Fly competition aircraft design problem, using the surrogate to explore the entire conceptual design space before committing to a configuration