Skip to content

IDEALLab/airfoil-opt-gan

Repository files navigation

airfoil-opt-gan

Please check our latest code and paper for Bézier Generative Adversarial Networks (Bézier-GAN).

Latent space exploration for the airfoil shape design.

License

This code is licensed under the MIT license. Feel free to use all or portions for your research or related projects so long as you provide the following citation information:

Wei Chen, Kevin Chiu, and Mark Fuge. "Aerodynamic Design Optimization and Shape Exploration using Generative Adversarial Networks", AIAA Scitech 2019 Forum, AIAA SciTech Forum, (AIAA 2019-2351) https://doi.org/10.2514/6.2019-2351

@inproceedings{chen2019aerodynamic,
    author={Chen, Wei and Chiu, Kevin and Fuge, Mark},
    title={Aerodynamic Design Optimization and Shape Exploration using Generative Adversarial Networks},
    booktitle={AIAA SciTech Forum},
    year={2019},
    month={Jan},
    publisher={AIAA},
    address={San Diego, USA}
}

Required packages

  • tensorflow 1.6.0
  • sklearn
  • numpy
  • matplotlib

Usage

Train/evaluate BezierGAN

python train.py

positional arguments:

mode	startover, continue, or evaluate

optional arguments:

-h, --help            	show this help message and exit
--save_interval 	number of intervals for saving the trained model and plotting results

Run optimization

Note:

  • When optimizing using BezierGAN + EGO or BezierGAN + EGO + GA refining, BezierGAN has to be trained first. It takes about one hour on a Nvidia Titan X GPU. If you don't want to train it yourself, send an email to wchen459@umd.edu, and I'll send you a copy of my trained model.
  • You can modify the airfoil operating conditions (i.e., Reynolds number, Mach number, angle of attack, and number of iterations) in the file op_conditions.ini.

BezierGAN + EGO

python optimize_gan_bo.py

optional arguments:

--n_runs		number of runs
--n_eval		number of evaluations per run
-h, --help            	show this help message and exit

BezierGAN + EGO + GA refining

python optimize_gan_2_ga.py

optional arguments:

--n_runs		number of runs
--n_eval		number of evaluations per run
-h, --help            	show this help message and exit

PCA + EGO

python optimize_pca_bo.py

optional arguments:

--n_runs		number of runs
--n_eval		number of evaluations per run
-h, --help            	show this help message and exit

NURBS + EGO

python optimize_nurbs_bo.py

optional arguments:

--n_runs		number of runs
--n_eval		number of evaluations per run
-h, --help            	show this help message and exit

NURBS + GA

python optimize_nurbs_ga.py

optional arguments:

--n_runs		number of runs
--n_eval		number of evaluations per run
-h, --help            	show this help message and exit

PARSEC + EGO

python optimize_parsec_bo.py

optional arguments:

--n_runs		number of runs
--n_eval		number of evaluations per run
-h, --help            	show this help message and exit

PARSEC + GA

python optimize_parsec_ga.py

optional arguments:

--n_runs		number of runs
--n_eval		number of evaluations per run
-h, --help            	show this help message and exit

Dataset

Our airfoil designs come from UIUC airfoil coordinates database.

The raw data contains variable number of points along airfoil curves. We created the training data by applying B-spline interpolation on these designs.

Alt text

Results

Latent space learned by BezierGAN

c3 = 0.00 c3 = 0.50 c3 = 1.00
Alt text Alt text Alt text

Optimization

Optimization history:

Alt text

Optimal arifoils:

Alt text

About

Experiment code associated with our paper: "Aerodynamic Design Optimization and Shape Exploration using Generative Adversarial Networks"

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages