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"))