Quick Test¶
A compact end-to-end fuel optimization example.
In [1]:
import time
import warnings
import numpy as np
import opentop as top
warnings.filterwarnings("ignore")
from opentop.plotting import apply_publication_style # noqa: E402
apply_publication_style()
In [2]:
actype = "A320"
origin = "EHAM"
destination = "LGAV"
m0 = 0.85
optimizer = top.CompleteFlight(actype, origin, destination, m0=m0)
# optimizer = top.Cruise(actype, origin, destination, m0=m0)
# optimizer = top.Climb(actype, origin, destination, m0=m0)
# optimizer = top.Descent(actype, origin, destination, m0=m0)
In [3]:
start = time.time()
flight = optimizer.trajectory(objective="fuel")
fuel_cost_val = float(np.sum(flight["fuel_cost"]))
obj = optimizer.stats["iterations"]["obj"][-1]
status = optimizer.success
print(f"Fuel Cost: {fuel_cost_val:.2f} | Objective: {obj:.2f} | Status: {status}")
print(flight)
print(f"\nOptimal trajectory was generated in {round(time.time() - start)} seconds.\n")
Fuel Cost: 7371.20 | Objective: 7371.20 | Status: True
mass ts x y h \
0 66299.999900 0.0000 -652421.018841 840655.020444 30.480000
1 65854.636707 235.2666 -634336.222624 825744.117635 2919.214350
2 65511.444459 470.5333 -608368.403453 797916.695809 5273.813256
3 65219.265885 705.7999 -576552.790911 763822.708076 6965.361273
4 64952.786343 941.0665 -541615.069135 726383.030872 8307.944044
5 64705.697629 1176.3332 -503916.074925 685984.341125 9351.251001
6 64460.417652 1411.5998 -465637.294294 644964.345185 10515.331717
7 64281.274867 1646.8664 -428224.549310 604872.403191 10551.563585
8 64103.393913 1882.1331 -390881.597384 564855.252148 10579.291122
9 63925.918639 2117.3997 -353535.487155 524834.716530 10608.115056
10 63748.970821 2352.6663 -316197.205726 484822.570262 10636.660161
11 63572.531499 2587.9330 -278865.384867 444817.347145 10665.119195
12 63396.601444 2823.1996 -241540.407680 404819.457725 10693.466685
13 63221.178778 3058.4662 -204222.414476 364829.052373 10721.706272
14 63046.261949 3293.7329 -166911.571666 324846.309422 10749.838006
15 62871.849333 3528.9995 -129608.035635 284871.396463 10777.862834
16 62697.939276 3764.2661 -92311.958026 244904.476008 10805.782249
17 62524.530066 3999.5327 -55023.485502 204945.705225 10833.598801
18 62351.619888 4234.7994 -17742.760238 164995.236483 10861.317074
19 62179.206714 4470.0660 19530.079357 125053.218101 10888.946023
20 62007.287939 4705.3326 56794.898012 85119.795040 10916.506244
21 61835.859433 4940.5993 94051.559794 45195.112977 10944.049276
22 61664.906449 5175.8659 131299.989551 5279.252455 10971.832346
23 61494.209504 5411.1325 168539.715640 -34627.281105 11004.266300
24 61324.412046 5646.3992 205733.258360 -74484.324008 11032.926338
25 61155.404195 5881.6658 242891.280449 -114303.302565 11059.106984
26 60986.853144 6116.9324 280057.369170 -154130.925402 11085.528568
27 60818.776925 6352.1991 317230.411098 -193965.999352 11111.909340
28 60651.172414 6587.4657 354410.806098 -233808.952909 11138.238876
29 60484.038358 6822.7323 391598.515927 -273659.745071 11164.505338
30 60317.373840 7057.9990 428793.437892 -313518.265799 11190.694534
31 60151.171046 7293.2656 465995.562526 -353384.504934 11216.925723
32 59985.520424 7528.5322 503203.147888 -393256.595792 11241.442784
33 59819.073299 7763.7989 540439.472250 -433159.483546 11290.069418
34 59656.962889 7999.0655 577312.945551 -472673.535672 11290.069420
35 59493.552801 8234.3321 614607.410202 -512638.727053 11290.069421
36 59330.029328 8469.5988 652000.735434 -552709.858811 11290.069421
37 59242.423243 8704.8654 687603.122592 -590861.801266 9884.169017
38 59177.063779 8940.1320 719750.682395 -625311.509470 8176.220806
39 59119.875934 9175.3987 749008.205148 -656664.219346 6425.844044
40 59067.494437 9410.6653 775884.638083 -685465.324824 4679.164144
41 59018.336836 9645.9319 800781.790317 -712145.409394 2948.547973
42 58971.505265 9881.1986 824019.218376 -737046.913034 1234.163742
43 58928.796474 10116.4652 842394.396919 -752197.235893 30.480000
latitude longitude altitude mach tas vertical_rate \
0 52.316620 4.746300 100.0 0.300000 198.3755 2417.0
1 52.203571 5.036884 9577.0 0.500000 319.6644 1970.0
2 51.982816 5.462651 17303.0 0.627812 389.8006 1415.0
3 51.710300 5.978622 22852.0 0.703303 427.1108 1123.0
4 51.408499 6.538120 27257.0 0.771401 459.9734 873.0
5 51.079932 7.133620 30680.0 0.795763 467.5781 974.0
6 50.743294 7.729697 34499.0 0.784456 453.1996 30.0
7 50.411411 8.304074 34618.0 0.783363 452.3257 23.0
8 50.077399 8.869424 34709.0 0.783757 452.3676 24.0
9 49.740682 9.427015 34804.0 0.783926 452.2719 24.0
10 49.401430 9.976822 34897.0 0.784122 452.1933 24.0
11 49.059697 10.519009 34991.0 0.784309 452.1100 24.0
12 48.715554 11.053715 35084.0 0.784492 452.0250 24.0
13 48.369067 11.581077 35176.0 0.784670 451.9380 24.0
14 48.020301 12.101236 35268.0 0.784844 451.8490 23.0
15 47.669318 12.614327 35360.0 0.785014 451.7582 23.0
16 47.316179 13.120488 35452.0 0.785180 451.6655 23.0
17 46.960944 13.619854 35543.0 0.785341 451.5710 23.0
18 46.603672 14.112557 35634.0 0.785499 451.4747 23.0
19 46.244418 14.598729 35725.0 0.785652 451.3765 23.0
20 45.883238 15.078502 35815.0 0.785801 451.2760 23.0
21 45.520185 15.552004 35906.0 0.785947 451.1734 23.0
22 45.155312 16.019361 35997.0 0.786081 451.0628 27.0
23 44.788672 16.480696 36103.0 0.785264 450.4035 24.0
24 44.420684 16.935677 36197.0 0.784535 449.9855 22.0
25 44.051296 17.384572 36283.0 0.784711 450.0864 22.0
26 43.680120 17.828031 36370.0 0.784860 450.1721 22.0
27 43.307209 18.266152 36456.0 0.785017 450.2620 22.0
28 42.932600 18.699049 36543.0 0.785172 450.3511 22.0
29 42.556333 19.126830 36629.0 0.785325 450.4388 22.0
30 42.178449 19.549599 36715.0 0.785478 450.5263 22.0
31 41.798984 19.967461 36801.0 0.785594 450.5927 21.0
32 41.417995 20.380500 36881.0 0.786201 450.9411 41.0
33 41.035278 20.789070 37041.0 0.778540 446.5468 0.0
34 40.654911 21.189041 37041.0 0.787428 451.6451 0.0
35 40.268840 21.589002 37041.0 0.789516 452.8424 -0.0
36 39.880407 21.985503 37041.0 0.746966 428.4371 -1176.0
37 39.509361 22.358897 32428.0 0.659999 384.8396 -1429.0
38 39.173326 22.692676 26825.0 0.586575 350.4039 -1465.0
39 38.866698 22.993712 21082.0 0.526627 322.1175 -1461.0
40 38.584362 23.267991 15352.0 0.477328 298.6147 -1448.0
41 38.322265 23.520172 9674.0 0.436391 278.8983 -1434.0
42 38.077166 23.753918 4049.0 0.300000 195.6619 -1007.0
43 37.923510 23.943260 100.0 0.300000 198.3755 -1007.0
heading fuel_cost grid_cost fuelflow
0 129.5056 445.363193 NaN 1.872044
1 136.9798 343.192248 NaN 1.482207
2 136.9798 292.178574 NaN 1.277604
3 136.9798 266.479543 NaN 1.165481
4 136.9798 247.088714 NaN 1.078212
5 136.9798 245.279977 NaN 1.062186
6 136.9798 179.142785 NaN 0.757719
7 136.9798 177.880954 NaN 0.752523
8 136.9798 177.475274 NaN 0.750703
9 136.9798 176.947818 NaN 0.748442
10 136.9798 176.439321 NaN 0.746222
11 136.9798 175.930055 NaN 0.743994
12 136.9798 175.422667 NaN 0.741780
13 136.9798 174.916829 NaN 0.739579
14 136.9798 174.412616 NaN 0.737111
15 136.9798 173.910057 NaN 0.734919
16 136.9798 173.409210 NaN 0.732732
17 136.9798 172.910178 NaN 0.730558
18 136.9798 172.413174 NaN 0.728389
19 136.9798 171.918775 NaN 0.726224
20 136.9798 171.428506 NaN 0.724071
21 136.9798 170.952983 NaN 0.721914
22 136.9798 170.696946 NaN 0.720825
23 136.9798 169.797458 NaN 0.717236
24 136.9798 169.007851 NaN 0.714098
25 136.9798 168.551050 NaN 0.712039
26 136.9798 168.076220 NaN 0.709963
27 136.9798 167.604511 NaN 0.707906
28 136.9798 167.134056 NaN 0.705846
29 136.9798 166.664518 NaN 0.703799
30 136.9798 166.202794 NaN 0.701759
31 136.9798 165.650622 NaN 0.699446
32 136.9798 166.447125 NaN 0.702909
33 136.9798 162.110410 NaN 0.685879
34 136.9798 163.410088 NaN 0.688772
35 136.9798 163.523473 NaN 0.688531
36 136.9798 87.606084 NaN 0.352802
37 136.9798 65.359465 NaN 0.258662
38 136.9798 57.187844 NaN 0.226361
39 136.9798 52.381498 NaN 0.208094
40 136.9798 49.157601 NaN 0.195909
41 136.9798 46.831570 NaN 0.187349
42 129.5056 42.708791 NaN 0.182541
43 129.5056 NaN NaN 0.181161
Optimal trajectory was generated in 14 seconds.
Other objective examples:
flight = optimizer.trajectory(objective="ci:30")
flight = optimizer.trajectory(objective="gwp100")
flight = optimizer.trajectory(objective="gtp100")
flight = optimizer.trajectory(objective=("ci:90", "ci:10", "ci:20"))