Skip to content

triet228/Propulsion-Arch-Optimization

Repository files navigation

Propulsion-Arch-Optimization

This project builds a surrogate model that can inputs Top Level Aircraft Design Requirements (TLADRs) and outputs the optimal propulsion architecture. Four chosen representative propulsion architectures are Conventional (C), Fully Electric (E), Distributed Turboelectric (DTE), Hybrid Turboelectric (HTE). After having all four mini surrogate models for each propulsion architecture, the final model will loop through each propulsion architecture, predict the total energy through the mini surrogates, and make the final decision to decide the optimal propulsion architecture for the given TLADRs.

Required Packages

This project is created with Python 3.12.7 and at minimum the following libraries:

numpy
pandas
joblib
matplotlib
tensorflow
scipy
scikit-learn

A more comprehensive requirement list with exact version can be found at requirements.txt

Help page

Run this command for help page

python main.py --h 2>/dev/null

Output:

usage: main.py [-h] [--TLADRS Range[nmi] Payload[kg] Mach[1] Altitude[ft]]

Optimal Propulsion Architecture for Total Energy

options:
  -h, --help            show this help message and exit
  --TLADRS Range[nmi] Payload[kg] Mach[1] Altitude[ft]

Examples:
  python main.py --h 2>/dev/null
  python main.py --TLADRS 600 15000 0.5 30000 2>/dev/null
  python main.py --TLADRS 100 2500 0.35 5000 2>/dev/null
  python main.py --TLADRS 400 8000 0.5 24000 2>/dev/null
  python main.py --TLADRS 250 1000 0.3 25000 2>/dev/null

Example Run

Run main.py with flag --TLADRS for 400 nmi range, 8000 kg payload, 0.5 Mach cruise speed, and 24,000 ft altitude

python main.py --TLADRS 400 8000 0.5 24000 2>/dev/null

Output:

Input Mission: [400.0, 8000.0, 0.5, 24000.0]
Optimal Architecture: HTE

TLADRS.png TLADRS.png

Developer Note

If you are interested in future development of the project, you can add more propulsion architecture in the data directory and use train_model.py and train_constraints.py to create new weights in models_weights directory

Replace these lines with the propulsion architecture of your choice.

df = pd.read_csv('data/C.csv').dropna()
# Save Model and Scalers
print("Saving model and scalers...")
model.save('models_weights/c_model.keras')
joblib.dump(x_scaler, 'models_weights/c_x_scaler.pkl')
joblib.dump(y_scaler, 'models_weights/c_y_scaler.pkl')
print("Saved successfully!")
df = pd.read_csv('data/PHE.csv')
joblib.dump(clf, 'models_weights/PHE_constraints.pkl')

About

Explore design space to find the optimal propulsion architecture.

Resources

License

Stars

Watchers

Forks

Contributors

Languages