Coupled Aircraft-Mission Optimization#
One of the most exciting features of Aviary is the ability to formulate and solve coupled aircraft-mission design optimization problems. Here, we mean that we are finding the optimal aircraft design parameters while simultaneously finding the optimal mission trajectory. The reason why this is so valuable is that it enables exploration of a larger design space much more efficiently.
Solving coupled design-mission problems leads to optimal designs that would not be findable without simultaneously designing the aircraft and the trajectory. This is especially useful for unconventional aircraft designs, operations with complex missions, and many more future-focused studies than what is commonly flying today.
This doc page builds up a coupled design problem and explains what we’re doing along the way. This process is relatively straightforward in Aviary. We will briefly discuss the optimal results, but that is not necessarily the focus here. Instead, we want to showcase how to do a simple coupled design study in Aviary.
You can use this as a starting point for your own exciting aircraft and mission design studies.
Problem Definition and Explanation#
We will use a conventional single-aisle commercial aircraft design as our starting point. For all of these examples we allow the aircraft to be sized by the optimizer. This means the gross takeoff weight is controlled to meet a mass balance.
We will perform four different optimization cases as part of this study:
fixed mission profile, fixed aircraft wing aspect ratio
fixed mission profile, optimized aircraft wing aspect ratio
optimized mission profile, fixed aircraft wing aspect ratio
optimized mission profile, optimized aircraft wing aspect ratio
We’ll provide more detail individually for each case.
When we call Aviary, we will use a common phase_info
object that we modify for each optimization case shown here:
phase_info = {
"pre_mission": {"include_takeoff": False, "optimize_mass": True},
"climb_1": {
"subsystem_options": {"core_aerodynamics": {"method": "computed"}},
"user_options": {
"optimize_mach": False,
"optimize_altitude": False,
"polynomial_control_order": 1,
"num_segments": 5,
"order": 3,
"solve_for_distance": False,
"initial_mach": (0.2, "unitless"),
"final_mach": (0.72, "unitless"),
"mach_bounds": ((0.18, 0.84), "unitless"),
"initial_altitude": (0.0, "ft"),
"final_altitude": (32500.0, "ft"),
"altitude_bounds": ((0.0, 33000.0), "ft"),
"throttle_enforcement": "path_constraint",
"fix_initial": True,
"constrain_final": False,
"fix_duration": False,
"initial_bounds": ((0.0, 0.0), "min"),
"duration_bounds": ((35.0, 105.0), "min"),
},
"initial_guesses": {"time": ([0, 70], "min")},
},
"cruise": {
"subsystem_options": {"core_aerodynamics": {"method": "computed"}},
"user_options": {
"optimize_mach": False,
"optimize_altitude": False,
"polynomial_control_order": 1,
"num_segments": 5,
"order": 3,
"solve_for_distance": False,
"initial_mach": (0.72, "unitless"),
"final_mach": (0.80, "unitless"),
"mach_bounds": ((0.7, 0.84), "unitless"),
"initial_altitude": (32500.0, "ft"),
"final_altitude": (36000.0, "ft"),
"altitude_bounds": ((32000.0, 36500.0), "ft"),
"throttle_enforcement": "boundary_constraint",
"fix_initial": False,
"constrain_final": False,
"fix_duration": False,
"initial_bounds": ((35.0, 105.0), "min"),
"duration_bounds": ((91.5, 274.5), "min"),
},
"initial_guesses": {"time": ([70, 183], "min")},
},
"descent_1": {
"subsystem_options": {"core_aerodynamics": {"method": "computed"}},
"user_options": {
"optimize_mach": False,
"optimize_altitude": False,
"polynomial_control_order": 1,
"num_segments": 5,
"order": 3,
"solve_for_distance": False,
"initial_mach": (0.72, "unitless"),
"final_mach": (0.21, "unitless"),
"mach_bounds": ((0.19, 0.84), "unitless"),
"initial_altitude": (36000.0, "ft"),
"final_altitude": (0.0, "ft"),
"altitude_bounds": ((0.0, 36500.0), "ft"),
"throttle_enforcement": "path_constraint",
"fix_initial": False,
"constrain_final": True,
"fix_duration": False,
"initial_bounds": ((126.5, 379.5), "min"),
"duration_bounds": ((25.0, 75.0), "min"),
},
"initial_guesses": {"time": ([253, 50], "min")},
},
"post_mission": {
"include_landing": False,
"constrain_range": True,
"target_range": (2080, "nmi"),
},
}
Now, let us explain each case, formulate the Aviary problem, and optimize. We’ll discuss the results from each case and explain why they vary.
Fixed Mission Profile, Fixed Aircraft Wing Aspect Ratio#
First, let us run Aviary with a simple setup: fly a prescribed mission profile with an unchanged wing design.
Here we are varying the durations of each of the phases (climb, cruise, and descent) to minimize fuel burn across the mission.
The altitude and Mach profiles of the mission are fixed because optimize_altitude = False
and optimize_mach = False
for each of the phases in the phase_info
object.
import aviary.api as av
aircraft_filename = 'models/test_aircraft/aircraft_for_bench_FwFm.csv'
optimizer = "IPOPT"
make_plots = True
max_iter = 200
prob = av.run_aviary(aircraft_filename, phase_info, optimizer=optimizer,
make_plots=make_plots, max_iter=max_iter)
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/pyoptsparse/pyOpt_MPI.py:68: UserWarning: mpi4py could not be imported. mpi4py is required to use the parallel gradient analysis and parallel objective analysis for non-gradient based optimizers. Continuing using a dummy MPI module from pyOptSparse.
warnings.warn(warn)
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:897: OMDeprecationWarning:None: The method `add_polynomial_control` is deprecated and will be removed in Dymos 2.1. Please use `add_control` with the appropriate options to define a polynomial control.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'mach' in phase 'climb_1': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'altitude' in phase 'climb_1': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'mach' in phase 'cruise': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'altitude' in phase 'cruise': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'mach' in phase 'descent_1': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'altitude' in phase 'descent_1': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
The following variables have been overridden:
'aircraft:design:touchdown_mass 152800 lbm
'aircraft:engine:mass [7400.] lbm
'aircraft:fins:mass 0 lbm
'aircraft:fuel:auxiliary_fuel_capacity 0 lbm
'aircraft:fuel:fuselage_fuel_capacity 0 lbm
'aircraft:fuel:total_capacity 45694 lbm
'aircraft:fuselage:planform_area 1578.24 ft**2
'aircraft:fuselage:wetted_area 4158.62 ft**2
'aircraft:horizontal_tail:wetted_area 592.65 ft**2
'aircraft:landing_gear:main_gear_oleo_length 102 inch
'aircraft:landing_gear:nose_gear_oleo_length 67 inch
'aircraft:vertical_tail:wetted_area 581.13 ft**2
'aircraft:wing:aspect_ratio 11.22091 unitless
'aircraft:wing:control_surface_area 137 ft**2
'aircraft:wing:wetted_area 2396.56 ft**2
--- Constraint Report [traj] ---
--- climb_1 ---
[path] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
--- cruise ---
[initial] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
[final] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
--- descent_1 ---
[path] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/solvers/linear/linear_rhs_checker.py:178: SolverWarning:DirectSolver in 'traj.phases.cruise.indep_states' <class StateIndependentsComp>: 'rhs_checking' is active but no redundant adjoint dependencies were found, so caching has been disabled.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/solvers/linear/linear_rhs_checker.py:178: SolverWarning:DirectSolver in 'traj.phases.descent_1.indep_states' <class StateIndependentsComp>: 'rhs_checking' is active but no redundant adjoint dependencies were found, so caching has been disabled.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/recorders/sqlite_recorder.py:226: UserWarning:The existing case recorder file, problem_history.db, is being overwritten.
Model viewer data has already been recorded for Driver.
Model viewer data has already been recorded for Driver.
Full total jacobian for problem 'aircraft_for_bench_FwFm' was computed 3 times, taking 0.6451665410000373 seconds.
Total jacobian shape: (137, 96)
Jacobian shape: (137, 96) (7.93% nonzero)
FWD solves: 12 REV solves: 0
Total colors vs. total size: 12 vs 96 (87.50% improvement)
Sparsity computed using tolerance: 1e-25
Time to compute sparsity: 0.6452 sec
Time to compute coloring: 0.0528 sec
Memory to compute coloring: 0.0000 MB
Coloring created on: 2024-11-04 17:13:41
This is Ipopt version 3.14.16, running with linear solver MUMPS 5.7.3.
Number of nonzeros in equality constraint Jacobian...: 672
Number of nonzeros in inequality constraint Jacobian.: 369
Number of nonzeros in Lagrangian Hessian.............: 0
Total number of variables............................: 96
variables with only lower bounds: 2
variables with lower and upper bounds: 94
variables with only upper bounds: 0
Total number of equality constraints.................: 94
Total number of inequality constraints...............: 42
inequality constraints with only lower bounds: 0
inequality constraints with lower and upper bounds: 42
inequality constraints with only upper bounds: 0
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
0 3.0000000e-01 2.07e+02 3.34e-02 -5.0 0.00e+00 - 0.00e+00 0.00e+00 0
10 2.6750522e+00 7.93e-13 4.42e-02 -5.0 4.18e-04 - 6.61e-01 1.00e+00h 1
Number of Iterations....: 18
(scaled) (unscaled)
Objective...............: 2.6162332481284074e+00 2.6162332481284074e+00
Dual infeasibility......: 5.3420717009427399e-07 5.3420717009427399e-07
Constraint violation....: 9.6633174143543590e-16 9.6633174143543590e-16
Variable bound violation: 0.0000000000000000e+00 0.0000000000000000e+00
Complementarity.........: 9.5920737410860056e-08 9.5920737410860056e-08
Overall NLP error.......: 5.3420717009427399e-07 5.3420717009427399e-07
Number of objective function evaluations = 27
Number of objective gradient evaluations = 19
Number of equality constraint evaluations = 27
Number of inequality constraint evaluations = 27
Number of equality constraint Jacobian evaluations = 20
Number of inequality constraint Jacobian evaluations = 20
Number of Lagrangian Hessian evaluations = 0
Total seconds in IPOPT = 11.165
EXIT: Optimal Solution Found.
minimal_print is not available for this solution
Optimization Problem -- Optimization using pyOpt_sparse
================================================================================
Objective Function: _objfunc
Solution:
--------------------------------------------------------------------------------
Total Time: 11.1659
User Objective Time : 9.2774
User Sensitivity Time : 1.7680
Interface Time : 0.0544
Opt Solver Time: 0.0661
Calls to Objective Function : 28
Calls to Sens Function : 21
Objectives
Index Name Value
0 mission:objectives:fuel 2.616233E+00
Variables (c - continuous, i - integer, d - discrete)
Index Name Type Lower Bound Value Upper Bound Status
0 mission:design:gross_mass_0 c 5.714286E-05 9.144013E-01 1.000000E+30
1 mission:summary:gross_mass_0 c 5.714286E-05 9.144013E-01 1.000000E+30
2 traj.climb_1.t_duration_0 c 5.000000E-01 6.105531E-01 1.500000E+00
3 traj.climb_1.states:mass_0 c 0.000000E+00 7.258396E+00 1.000000E+17
4 traj.climb_1.states:mass_1 c 0.000000E+00 7.245468E+00 1.000000E+17
5 traj.climb_1.states:mass_2 c 0.000000E+00 7.229700E+00 1.000000E+17
6 traj.climb_1.states:mass_3 c 0.000000E+00 7.225045E+00 1.000000E+17
7 traj.climb_1.states:mass_4 c 0.000000E+00 7.204817E+00 1.000000E+17
8 traj.climb_1.states:mass_5 c 0.000000E+00 7.179560E+00 1.000000E+17
9 traj.climb_1.states:mass_6 c 0.000000E+00 7.171877E+00 1.000000E+17
10 traj.climb_1.states:mass_7 c 0.000000E+00 7.151413E+00 1.000000E+17
11 traj.climb_1.states:mass_8 c 0.000000E+00 7.123555E+00 1.000000E+17
12 traj.climb_1.states:mass_9 c 0.000000E+00 7.114702E+00 1.000000E+17
13 traj.climb_1.states:mass_10 c 0.000000E+00 7.097651E+00 1.000000E+17
14 traj.climb_1.states:mass_11 c 0.000000E+00 7.073993E+00 1.000000E+17
15 traj.climb_1.states:mass_12 c 0.000000E+00 7.066448E+00 1.000000E+17
16 traj.climb_1.states:mass_13 c 0.000000E+00 7.057965E+00 1.000000E+17
17 traj.climb_1.states:mass_14 c 0.000000E+00 7.046182E+00 1.000000E+17
18 traj.climb_1.states:mass_15 c 0.000000E+00 7.042429E+00 1.000000E+17
19 traj.climb_1.states:distance_0 c 0.000000E+00 7.645341E-03 1.000000E+15
20 traj.climb_1.states:distance_1 c 0.000000E+00 1.942090E-02 1.000000E+15
21 traj.climb_1.states:distance_2 c 0.000000E+00 2.344157E-02 1.000000E+15
22 traj.climb_1.states:distance_3 c 0.000000E+00 4.409419E-02 1.000000E+15
23 traj.climb_1.states:distance_4 c 0.000000E+00 7.749856E-02 1.000000E+15
24 traj.climb_1.states:distance_5 c 0.000000E+00 8.923161E-02 1.000000E+15
25 traj.climb_1.states:distance_6 c 0.000000E+00 1.239359E-01 1.000000E+15
26 traj.climb_1.states:distance_7 c 0.000000E+00 1.782763E-01 1.000000E+15
27 traj.climb_1.states:distance_8 c 0.000000E+00 1.969907E-01 1.000000E+15
28 traj.climb_1.states:distance_9 c 0.000000E+00 2.350312E-01 1.000000E+15
29 traj.climb_1.states:distance_10 c 0.000000E+00 2.917168E-01 1.000000E+15
30 traj.climb_1.states:distance_11 c 0.000000E+00 3.106441E-01 1.000000E+15
31 traj.climb_1.states:distance_12 c 0.000000E+00 3.324169E-01 1.000000E+15
32 traj.climb_1.states:distance_13 c 0.000000E+00 3.633989E-01 1.000000E+15
33 traj.climb_1.states:distance_14 c 0.000000E+00 3.734283E-01 1.000000E+15
34 traj.cruise.t_duration_0 c 5.000000E-01 1.268901E+00 1.500000E+00
35 traj.cruise.states:mass_0 c 0.000000E+00 7.009305E+00 1.000000E+17
36 traj.cruise.states:mass_1 c 0.000000E+00 6.963675E+00 1.000000E+17
37 traj.cruise.states:mass_2 c 0.000000E+00 6.949250E+00 1.000000E+17
38 traj.cruise.states:mass_3 c 0.000000E+00 6.881883E+00 1.000000E+17
39 traj.cruise.states:mass_4 c 0.000000E+00 6.789145E+00 1.000000E+17
40 traj.cruise.states:mass_5 c 0.000000E+00 6.759835E+00 1.000000E+17
41 traj.cruise.states:mass_6 c 0.000000E+00 6.680108E+00 1.000000E+17
42 traj.cruise.states:mass_7 c 0.000000E+00 6.570188E+00 1.000000E+17
43 traj.cruise.states:mass_8 c 0.000000E+00 6.535402E+00 1.000000E+17
44 traj.cruise.states:mass_9 c 0.000000E+00 6.468326E+00 1.000000E+17
45 traj.cruise.states:mass_10 c 0.000000E+00 6.375513E+00 1.000000E+17
46 traj.cruise.states:mass_11 c 0.000000E+00 6.346049E+00 1.000000E+17
47 traj.cruise.states:mass_12 c 0.000000E+00 6.312915E+00 1.000000E+17
48 traj.cruise.states:mass_13 c 0.000000E+00 6.267000E+00 1.000000E+17
49 traj.cruise.states:mass_14 c 0.000000E+00 6.252413E+00 1.000000E+17
50 traj.cruise.states:distance_0 c 0.000000E+00 4.991418E-01 1.000000E+15
51 traj.cruise.states:distance_1 c 0.000000E+00 6.734207E-01 1.000000E+15
52 traj.cruise.states:distance_2 c 0.000000E+00 7.287772E-01 1.000000E+15
53 traj.cruise.states:distance_3 c 0.000000E+00 9.889184E-01 1.000000E+15
54 traj.cruise.states:distance_4 c 0.000000E+00 1.351258E+00 1.000000E+15
55 traj.cruise.states:distance_5 c 0.000000E+00 1.466756E+00 1.000000E+15
56 traj.cruise.states:distance_6 c 0.000000E+00 1.783181E+00 1.000000E+15
57 traj.cruise.states:distance_7 c 0.000000E+00 2.224538E+00 1.000000E+15
58 traj.cruise.states:distance_8 c 0.000000E+00 2.365370E+00 1.000000E+15
59 traj.cruise.states:distance_9 c 0.000000E+00 2.638166E+00 1.000000E+15
60 traj.cruise.states:distance_10 c 0.000000E+00 3.017897E+00 1.000000E+15
61 traj.cruise.states:distance_11 c 0.000000E+00 3.138882E+00 1.000000E+15
62 traj.cruise.states:distance_12 c 0.000000E+00 3.274992E+00 1.000000E+15
63 traj.cruise.states:distance_13 c 0.000000E+00 3.463589E+00 1.000000E+15
64 traj.cruise.states:distance_14 c 0.000000E+00 3.523470E+00 1.000000E+15
65 traj.descent_1.t_duration_0 c 5.000000E-01 7.504809E-01 1.500000E+00
66 traj.descent_1.states:mass_0 c 0.000000E+00 6.250000E+00 1.000000E+17
67 traj.descent_1.states:mass_1 c 0.000000E+00 6.246737E+00 1.000000E+17
68 traj.descent_1.states:mass_2 c 0.000000E+00 6.245719E+00 1.000000E+17
69 traj.descent_1.states:mass_3 c 0.000000E+00 6.241087E+00 1.000000E+17
70 traj.descent_1.states:mass_4 c 0.000000E+00 6.235070E+00 1.000000E+17
71 traj.descent_1.states:mass_5 c 0.000000E+00 6.233268E+00 1.000000E+17
72 traj.descent_1.states:mass_6 c 0.000000E+00 6.228618E+00 1.000000E+17
73 traj.descent_1.states:mass_7 c 0.000000E+00 6.223037E+00 1.000000E+17
74 traj.descent_1.states:mass_8 c 0.000000E+00 6.221508E+00 1.000000E+17
75 traj.descent_1.states:mass_9 c 0.000000E+00 6.218581E+00 1.000000E+17
76 traj.descent_1.states:mass_10 c 0.000000E+00 6.214388E+00 1.000000E+17
77 traj.descent_1.states:mass_11 c 0.000000E+00 6.212942E+00 1.000000E+17
78 traj.descent_1.states:mass_12 c 0.000000E+00 6.211227E+00 1.000000E+17
79 traj.descent_1.states:mass_13 c 0.000000E+00 6.208648E+00 1.000000E+17
80 traj.descent_1.states:mass_14 c 0.000000E+00 6.207770E+00 1.000000E+17
81 traj.descent_1.states:distance_0 c 0.000000E+00 3.543194E+00 1.000000E+15
82 traj.descent_1.states:distance_1 c 0.000000E+00 3.569650E+00 1.000000E+15
83 traj.descent_1.states:distance_2 c 0.000000E+00 3.577836E+00 1.000000E+15
84 traj.descent_1.states:distance_3 c 0.000000E+00 3.614899E+00 1.000000E+15
85 traj.descent_1.states:distance_4 c 0.000000E+00 3.662629E+00 1.000000E+15
86 traj.descent_1.states:distance_5 c 0.000000E+00 3.676885E+00 1.000000E+15
87 traj.descent_1.states:distance_6 c 0.000000E+00 3.713556E+00 1.000000E+15
88 traj.descent_1.states:distance_7 c 0.000000E+00 3.758840E+00 1.000000E+15
89 traj.descent_1.states:distance_8 c 0.000000E+00 3.771846E+00 1.000000E+15
90 traj.descent_1.states:distance_9 c 0.000000E+00 3.795045E+00 1.000000E+15
91 traj.descent_1.states:distance_10 c 0.000000E+00 3.822951E+00 1.000000E+15
92 traj.descent_1.states:distance_11 c 0.000000E+00 3.830767E+00 1.000000E+15
93 traj.descent_1.states:distance_12 c 0.000000E+00 3.838940E+00 1.000000E+15
94 traj.descent_1.states:distance_13 c 0.000000E+00 3.849175E+00 1.000000E+15
95 traj.descent_1.states:distance_14 c 0.000000E+00 3.852160E+00 1.000000E+15
Constraints (i - inequality, e - equality)
Index Name Type Lower Value Upper Status Lagrange Multiplier (N/A)
0 mission:constraints:range_residual e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
1 gtow_constraint.GTOW e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
2 link_climb_1_mass.mass e 0.000000E+00 -2.910383E-16 0.000000E+00 9.00000E+100
3 mission:constraints:mass_residual e 0.000000E+00 -5.820766E-16 0.000000E+00 9.00000E+100
4 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 9.663317E-16 0.000000E+00 9.00000E+100
5 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 6.101528E-16 0.000000E+00 9.00000E+100
6 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 4.400565E-16 0.000000E+00 9.00000E+100
7 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 6.603116E-16 0.000000E+00 9.00000E+100
8 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 2.006377E-16 0.000000E+00 9.00000E+100
9 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -7.479092E-18 0.000000E+00 9.00000E+100
10 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -1.496600E-16 0.000000E+00 9.00000E+100
11 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -3.208799E-16 0.000000E+00 9.00000E+100
12 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -4.789852E-16 0.000000E+00 9.00000E+100
13 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -5.257563E-16 0.000000E+00 9.00000E+100
14 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -6.488369E-16 0.000000E+00 9.00000E+100
15 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -8.129671E-16 0.000000E+00 9.00000E+100
16 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -5.046369E-16 0.000000E+00 9.00000E+100
17 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -4.862093E-16 0.000000E+00 9.00000E+100
18 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -5.235830E-16 0.000000E+00 9.00000E+100
19 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.011347E-16 0.000000E+00 9.00000E+100
20 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 9.180252E-17 0.000000E+00 9.00000E+100
21 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 8.120745E-17 0.000000E+00 9.00000E+100
22 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.608654E-16 0.000000E+00 9.00000E+100
23 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.377847E-16 0.000000E+00 9.00000E+100
24 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.169334E-16 0.000000E+00 9.00000E+100
25 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.326298E-16 0.000000E+00 9.00000E+100
26 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.177661E-16 0.000000E+00 9.00000E+100
27 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.032143E-16 0.000000E+00 9.00000E+100
28 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 8.218122E-17 0.000000E+00 9.00000E+100
29 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 7.789731E-17 0.000000E+00 9.00000E+100
30 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 7.265170E-17 0.000000E+00 9.00000E+100
31 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 3.548813E-17 0.000000E+00 9.00000E+100
32 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 3.321928E-17 0.000000E+00 9.00000E+100
33 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 3.107887E-17 0.000000E+00 9.00000E+100
34 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 2.550283E-16 0.000000E+00 9.00000E+100
35 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 2.901890E-16 0.000000E+00 9.00000E+100
36 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 2.755614E-16 0.000000E+00 9.00000E+100
37 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 4.753804E-16 0.000000E+00 9.00000E+100
38 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 4.852146E-16 0.000000E+00 9.00000E+100
39 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 3.653490E-16 0.000000E+00 9.00000E+100
40 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 5.515030E-16 0.000000E+00 9.00000E+100
41 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 3.359756E-16 0.000000E+00 9.00000E+100
42 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 3.064151E-16 0.000000E+00 9.00000E+100
43 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 2.397313E-16 0.000000E+00 9.00000E+100
44 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 1.647689E-16 0.000000E+00 9.00000E+100
45 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 1.063204E-16 0.000000E+00 9.00000E+100
46 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 3.443382E-17 0.000000E+00 9.00000E+100
47 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 2.362215E-17 0.000000E+00 9.00000E+100
48 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 2.970939E-17 0.000000E+00 9.00000E+100
49 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 2.093286E-18 0.000000E+00 9.00000E+100
50 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -2.093286E-18 0.000000E+00 9.00000E+100
51 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.628111E-18 0.000000E+00 9.00000E+100
52 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -5.700112E-18 0.000000E+00 9.00000E+100
53 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
54 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 9.500187E-19 0.000000E+00 9.00000E+100
55 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.242426E-17 0.000000E+00 9.00000E+100
56 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -5.647391E-19 0.000000E+00 9.00000E+100
57 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -2.258956E-18 0.000000E+00 9.00000E+100
58 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.282525E-17 0.000000E+00 9.00000E+100
59 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -5.225103E-18 0.000000E+00 9.00000E+100
60 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 9.500187E-18 0.000000E+00 9.00000E+100
61 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -6.977618E-19 0.000000E+00 9.00000E+100
62 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 9.070904E-18 0.000000E+00 9.00000E+100
63 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 8.838317E-18 0.000000E+00 9.00000E+100
64 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -2.340265E-17 0.000000E+00 9.00000E+100
65 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 6.680180E-19 0.000000E+00 9.00000E+100
66 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -3.890654E-19 0.000000E+00 9.00000E+100
67 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.521700E-18 0.000000E+00 9.00000E+100
68 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.170135E-17 0.000000E+00 9.00000E+100
69 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -2.751053E-18 0.000000E+00 9.00000E+100
70 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.492772E-17 0.000000E+00 9.00000E+100
71 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.043604E-17 0.000000E+00 9.00000E+100
72 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -7.619821E-18 0.000000E+00 9.00000E+100
73 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 3.104118E-17 0.000000E+00 9.00000E+100
74 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -5.097319E-18 0.000000E+00 9.00000E+100
75 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -1.135653E-17 0.000000E+00 9.00000E+100
76 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -2.558289E-18 0.000000E+00 9.00000E+100
77 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -1.648756E-17 0.000000E+00 9.00000E+100
78 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 4.129232E-18 0.000000E+00 9.00000E+100
79 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -2.330282E-18 0.000000E+00 9.00000E+100
80 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -5.449852E-18 0.000000E+00 9.00000E+100
81 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.089970E-17 0.000000E+00 9.00000E+100
82 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -2.233705E-17 0.000000E+00 9.00000E+100
83 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 1.826879E-17 0.000000E+00 9.00000E+100
84 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -8.290040E-18 0.000000E+00 9.00000E+100
85 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.186375E-17 0.000000E+00 9.00000E+100
86 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 1.186375E-17 0.000000E+00 9.00000E+100
87 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -6.661951E-18 0.000000E+00 9.00000E+100
88 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 1.116853E-17 0.000000E+00 9.00000E+100
89 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 4.490439E-18 0.000000E+00 9.00000E+100
90 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.765472E-18 0.000000E+00 9.00000E+100
91 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 5.374682E-18 0.000000E+00 9.00000E+100
92 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.259104E-18 0.000000E+00 9.00000E+100
93 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -3.439045E-18 0.000000E+00 9.00000E+100
94 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.506694E-01 1.000000E+00 9.00000E+100
95 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.160099E-01 1.000000E+00 9.00000E+100
96 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.876026E-01 1.000000E+00 9.00000E+100
97 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.818771E-01 1.000000E+00 9.00000E+100
98 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.818771E-01 1.000000E+00 9.00000E+100
99 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.714830E-01 1.000000E+00 9.00000E+100
100 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.904548E-01 1.000000E+00 9.00000E+100
101 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.011426E-01 1.000000E+00 9.00000E+100
102 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.011426E-01 1.000000E+00 9.00000E+100
103 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.463805E-01 1.000000E+00 9.00000E+100
104 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.293791E-01 1.000000E+00 9.00000E+100
105 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.598083E-01 1.000000E+00 9.00000E+100
106 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.598083E-01 1.000000E+00 9.00000E+100
107 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 7.241270E-01 1.000000E+00 9.00000E+100
108 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.303171E-01 1.000000E+00 9.00000E+100
109 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.689060E-01 1.000000E+00 9.00000E+100
110 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.689060E-01 1.000000E+00 9.00000E+100
111 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.168215E-01 1.000000E+00 9.00000E+100
112 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.784879E-01 1.000000E+00 9.00000E+100
113 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.999997E-01 1.000000E+00 u 9.00000E+100
114 traj.phases.cruise->initial_boundary_constraint->throttle i 0.000000E+00 7.118051E-01 1.000000E+00 9.00000E+100
115 traj.phases.cruise->final_boundary_constraint->throttle i 0.000000E+00 7.962235E-01 1.000000E+00 9.00000E+100
116 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.601038E-01 1.000000E+00 9.00000E+100
117 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.306614E-01 1.000000E+00 9.00000E+100
118 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.931038E-01 1.000000E+00 9.00000E+100
119 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.824289E-01 1.000000E+00 9.00000E+100
120 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.824289E-01 1.000000E+00 9.00000E+100
121 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.348545E-01 1.000000E+00 9.00000E+100
122 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.759962E-01 1.000000E+00 9.00000E+100
123 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.602818E-01 1.000000E+00 9.00000E+100
124 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.602818E-01 1.000000E+00 9.00000E+100
125 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.226105E-01 1.000000E+00 9.00000E+100
126 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 6.863037E-02 1.000000E+00 9.00000E+100
127 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 4.865030E-02 1.000000E+00 9.00000E+100
128 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 4.865030E-02 1.000000E+00 9.00000E+100
129 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.897675E-02 1.000000E+00 9.00000E+100
130 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.141109E-06 1.000000E+00 9.00000E+100
131 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 8.335781E-04 1.000000E+00 9.00000E+100
132 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 8.335781E-04 1.000000E+00 9.00000E+100
133 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 6.848460E-03 1.000000E+00 9.00000E+100
134 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.643340E-02 1.000000E+00 9.00000E+100
135 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.615133E-02 1.000000E+00 9.00000E+100
--------------------------------------------------------------------------------
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/core/driver.py:143: OMDeprecationWarning:boolean evaluation of DriverResult is temporarily implemented to mimick the previous `failed` return behavior of run_driver.
Use the `success` attribute of the returned DriverResult object to test for successful driver completion.
Now that we’ve run the case successfully, let’s save and print out the fuel burn value:
fixed_mission_fixed_wing_fuel_burn = prob.get_val(av.Mission.Summary.FUEL_BURNED, units='kg')[0]
fixed_mission_fixed_wing_aspect_ratio = prob.get_val(av.Aircraft.Wing.ASPECT_RATIO)[0]
print('Mission fuel burn, kg:', fixed_mission_fixed_wing_fuel_burn)
print('Aspect ratio:', fixed_mission_fixed_wing_aspect_ratio)
Mission fuel burn, kg: 10506.257284913623
Aspect ratio: 11.22091
Fixed Mission Profile, Optimized Aircraft Wing Aspect Ratio#
Now we will use the exact same phase_info
object but set up our Aviary problem such that the aspect ratio of the wing is a design variable.
This means that Aviary is optimizing the wing aspect ratio while flying the same mission profile as above.
We would expect that by varying the wing aspect ratio, Aviary could find a lower fuel burn value.
Note
All of the realistic design tradeoffs associated with varying the wing aspect ratio are not necessarily captured in this problem, e.g. the wing structure would need to change. We are simply using this as an example of an aircraft design variable available in Aviary.
When we want to add an aircraft design variable to the Aviary problem, we need to use the Level 2 interface for Aviary.
This means we can no longer use the all-inclusive run_aviary
function and instead need to call its constituent methods individually.
This allows us to insert a line adding the wing aspect ratio as a design variable as shown below.
This line is highlighted with an in-line comment.
prob = av.AviaryProblem(av.AnalysisScheme.COLLOCATION)
# Load aircraft and options data from user
# Allow for user overrides here
prob.load_inputs(aircraft_filename, phase_info)
prob.check_and_preprocess_inputs()
prob.add_pre_mission_systems()
prob.add_phases()
prob.add_post_mission_systems()
# Link phases and variables
prob.link_phases()
prob.add_driver(optimizer, max_iter=max_iter)
prob.add_design_variables()
# The following line is an example of how to add a design variable for the aspect ratio of the wing
prob.model.add_design_var(av.Aircraft.Wing.ASPECT_RATIO, lower=10., upper=14., ref=12.)
# Load optimization problem formulation
# Detail which variables the optimizer can control
prob.add_objective()
prob.setup()
prob.set_initial_guesses()
prob.run_aviary_problem(make_plots=make_plots)
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:897: OMDeprecationWarning:None: The method `add_polynomial_control` is deprecated and will be removed in Dymos 2.1. Please use `add_control` with the appropriate options to define a polynomial control.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'mach' in phase 'climb_1': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'altitude' in phase 'climb_1': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'mach' in phase 'cruise': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'altitude' in phase 'cruise': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'mach' in phase 'descent_1': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:2323: RuntimeWarning: Invalid options for non-optimal control 'altitude' in phase 'descent_1': lower, upper, ref
warnings.warn(f"Invalid options for non-optimal control '{name}' in phase "
The following variables have been overridden:
'aircraft:design:touchdown_mass 152800 lbm
'aircraft:engine:mass [7400.] lbm
'aircraft:fins:mass 0 lbm
'aircraft:fuel:auxiliary_fuel_capacity 0 lbm
'aircraft:fuel:fuselage_fuel_capacity 0 lbm
'aircraft:fuel:total_capacity 45694 lbm
'aircraft:fuselage:planform_area 1578.24 ft**2
'aircraft:fuselage:wetted_area 4158.62 ft**2
'aircraft:horizontal_tail:wetted_area 592.65 ft**2
'aircraft:landing_gear:main_gear_oleo_length 102 inch
'aircraft:landing_gear:nose_gear_oleo_length 67 inch
'aircraft:vertical_tail:wetted_area 581.13 ft**2
'aircraft:wing:aspect_ratio 11.22091 unitless
'aircraft:wing:control_surface_area 137 ft**2
'aircraft:wing:wetted_area 2396.56 ft**2
--- Constraint Report [traj] ---
--- climb_1 ---
[path] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
--- cruise ---
[initial] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
[final] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
--- descent_1 ---
[path] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/solvers/linear/linear_rhs_checker.py:178: SolverWarning:DirectSolver in 'traj.phases.cruise.indep_states' <class StateIndependentsComp>: 'rhs_checking' is active but no redundant adjoint dependencies were found, so caching has been disabled.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/solvers/linear/linear_rhs_checker.py:178: SolverWarning:DirectSolver in 'traj.phases.descent_1.indep_states' <class StateIndependentsComp>: 'rhs_checking' is active but no redundant adjoint dependencies were found, so caching has been disabled.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/recorders/sqlite_recorder.py:226: UserWarning:The existing case recorder file, problem_history.db, is being overwritten.
Model viewer data has already been recorded for Driver.
Model viewer data has already been recorded for Driver.
Full total jacobian for problem 'problem' was computed 3 times, taking 0.6663620669999659 seconds.
Total jacobian shape: (137, 97)
Jacobian shape: (137, 97) (9.59% nonzero)
FWD solves: 15 REV solves: 0
Total colors vs. total size: 15 vs 97 (84.54% improvement)
Sparsity computed using tolerance: 1e-25
Time to compute sparsity: 0.6664 sec
Time to compute coloring: 0.0608 sec
Memory to compute coloring: 0.0000 MB
Coloring created on: 2024-11-04 17:13:59
This is Ipopt version 3.14.16, running with linear solver MUMPS 5.7.3.
Number of nonzeros in equality constraint Jacobian...: 772
Number of nonzeros in inequality constraint Jacobian.: 501
Number of nonzeros in Lagrangian Hessian.............: 0
Total number of variables............................: 97
variables with only lower bounds: 2
variables with lower and upper bounds: 95
variables with only upper bounds: 0
Total number of equality constraints.................: 94
Total number of inequality constraints...............: 42
inequality constraints with only lower bounds: 0
inequality constraints with lower and upper bounds: 42
inequality constraints with only upper bounds: 0
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
0 3.0000000e-01 2.07e+02 7.44e-02 -5.0 0.00e+00 - 0.00e+00 0.00e+00 0
10 2.4659635e+00 3.42e-03 2.43e-01 -5.0 9.97e-02 - 8.57e-02 6.34e-01h 1
20 2.4573099e+00 6.69e-15 1.08e-06 -7.0 8.32e-06 - 1.00e+00 1.00e+00f 1
Number of Iterations....: 21
(scaled) (unscaled)
Objective...............: 2.4573098852226862e+00 2.4573098852226862e+00
Dual infeasibility......: 3.4981989527338442e-10 3.4981989527338442e-10
Constraint violation....: 3.3870757766702815e-13 3.3870757766702815e-13
Variable bound violation: 0.0000000000000000e+00 0.0000000000000000e+00
Complementarity.........: 9.0909093189540712e-08 9.0909093189540712e-08
Overall NLP error.......: 9.0909093189540712e-08 9.0909093189540712e-08
Number of objective function evaluations = 39
Number of objective gradient evaluations = 22
Number of equality constraint evaluations = 39
Number of inequality constraint evaluations = 39
Number of equality constraint Jacobian evaluations = 23
Number of inequality constraint Jacobian evaluations = 23
Number of Lagrangian Hessian evaluations = 0
Total seconds in IPOPT = 13.507
EXIT: Optimal Solution Found.
minimal_print is not available for this solution
Optimization Problem -- Optimization using pyOpt_sparse
================================================================================
Objective Function: _objfunc
Solution:
--------------------------------------------------------------------------------
Total Time: 13.5088
User Objective Time : 11.1997
User Sensitivity Time : 2.1614
Interface Time : 0.0655
Opt Solver Time: 0.0821
Calls to Objective Function : 40
Calls to Sens Function : 24
Objectives
Index Name Value
0 mission:objectives:fuel 2.457310E+00
Variables (c - continuous, i - integer, d - discrete)
Index Name Type Lower Bound Value Upper Bound Status
0 mission:design:gross_mass_0 c 5.714286E-05 9.031997E-01 1.000000E+30
1 mission:summary:gross_mass_0 c 5.714286E-05 9.031997E-01 1.000000E+30
2 aircraft:wing:aspect_ratio_0 c 8.333333E-01 1.166666E+00 1.166667E+00 u
3 traj.climb_1.t_duration_0 c 5.000000E-01 5.126794E-01 1.500000E+00
4 traj.climb_1.states:mass_0 c 0.000000E+00 7.169479E+00 1.000000E+17
5 traj.climb_1.states:mass_1 c 0.000000E+00 7.159980E+00 1.000000E+17
6 traj.climb_1.states:mass_2 c 0.000000E+00 7.148042E+00 1.000000E+17
7 traj.climb_1.states:mass_3 c 0.000000E+00 7.144452E+00 1.000000E+17
8 traj.climb_1.states:mass_4 c 0.000000E+00 7.128518E+00 1.000000E+17
9 traj.climb_1.states:mass_5 c 0.000000E+00 7.107971E+00 1.000000E+17
10 traj.climb_1.states:mass_6 c 0.000000E+00 7.101628E+00 1.000000E+17
11 traj.climb_1.states:mass_7 c 0.000000E+00 7.084560E+00 1.000000E+17
12 traj.climb_1.states:mass_8 c 0.000000E+00 7.061161E+00 1.000000E+17
13 traj.climb_1.states:mass_9 c 0.000000E+00 7.053737E+00 1.000000E+17
14 traj.climb_1.states:mass_10 c 0.000000E+00 7.039412E+00 1.000000E+17
15 traj.climb_1.states:mass_11 c 0.000000E+00 7.019502E+00 1.000000E+17
16 traj.climb_1.states:mass_12 c 0.000000E+00 7.013149E+00 1.000000E+17
17 traj.climb_1.states:mass_13 c 0.000000E+00 7.006011E+00 1.000000E+17
18 traj.climb_1.states:mass_14 c 0.000000E+00 6.996103E+00 1.000000E+17
19 traj.climb_1.states:mass_15 c 0.000000E+00 6.992949E+00 1.000000E+17
20 traj.climb_1.states:distance_0 c 0.000000E+00 6.416001E-03 1.000000E+15
21 traj.climb_1.states:distance_1 c 0.000000E+00 1.629904E-02 1.000000E+15
22 traj.climb_1.states:distance_2 c 0.000000E+00 1.967377E-02 1.000000E+15
23 traj.climb_1.states:distance_3 c 0.000000E+00 3.700963E-02 1.000000E+15
24 traj.climb_1.states:distance_4 c 0.000000E+00 6.505203E-02 1.000000E+15
25 traj.climb_1.states:distance_5 c 0.000000E+00 7.490220E-02 1.000000E+15
26 traj.climb_1.states:distance_6 c 0.000000E+00 1.040382E-01 1.000000E+15
27 traj.climb_1.states:distance_7 c 0.000000E+00 1.496615E-01 1.000000E+15
28 traj.climb_1.states:distance_8 c 0.000000E+00 1.653740E-01 1.000000E+15
29 traj.climb_1.states:distance_9 c 0.000000E+00 1.973133E-01 1.000000E+15
30 traj.climb_1.states:distance_10 c 0.000000E+00 2.449077E-01 1.000000E+15
31 traj.climb_1.states:distance_11 c 0.000000E+00 2.607997E-01 1.000000E+15
32 traj.climb_1.states:distance_12 c 0.000000E+00 2.790809E-01 1.000000E+15
33 traj.climb_1.states:distance_13 c 0.000000E+00 3.050945E-01 1.000000E+15
34 traj.climb_1.states:distance_14 c 0.000000E+00 3.135156E-01 1.000000E+15
35 traj.cruise.t_duration_0 c 5.000000E-01 1.255492E+00 1.500000E+00
36 traj.cruise.states:mass_0 c 0.000000E+00 6.962491E+00 1.000000E+17
37 traj.cruise.states:mass_1 c 0.000000E+00 6.920442E+00 1.000000E+17
38 traj.cruise.states:mass_2 c 0.000000E+00 6.907127E+00 1.000000E+17
39 traj.cruise.states:mass_3 c 0.000000E+00 6.844803E+00 1.000000E+17
40 traj.cruise.states:mass_4 c 0.000000E+00 6.758644E+00 1.000000E+17
41 traj.cruise.states:mass_5 c 0.000000E+00 6.731332E+00 1.000000E+17
42 traj.cruise.states:mass_6 c 0.000000E+00 6.656891E+00 1.000000E+17
43 traj.cruise.states:mass_7 c 0.000000E+00 6.553856E+00 1.000000E+17
44 traj.cruise.states:mass_8 c 0.000000E+00 6.521129E+00 1.000000E+17
45 traj.cruise.states:mass_9 c 0.000000E+00 6.457897E+00 1.000000E+17
46 traj.cruise.states:mass_10 c 0.000000E+00 6.369995E+00 1.000000E+17
47 traj.cruise.states:mass_11 c 0.000000E+00 6.341959E+00 1.000000E+17
48 traj.cruise.states:mass_12 c 0.000000E+00 6.310447E+00 1.000000E+17
49 traj.cruise.states:mass_13 c 0.000000E+00 6.266762E+00 1.000000E+17
50 traj.cruise.states:mass_14 c 0.000000E+00 6.252868E+00 1.000000E+17
51 traj.cruise.states:distance_0 c 0.000000E+00 4.379005E-01 1.000000E+15
52 traj.cruise.states:distance_1 c 0.000000E+00 6.103378E-01 1.000000E+15
53 traj.cruise.states:distance_2 c 0.000000E+00 6.651093E-01 1.000000E+15
54 traj.cruise.states:distance_3 c 0.000000E+00 9.225014E-01 1.000000E+15
55 traj.cruise.states:distance_4 c 0.000000E+00 1.281012E+00 1.000000E+15
56 traj.cruise.states:distance_5 c 0.000000E+00 1.395289E+00 1.000000E+15
57 traj.cruise.states:distance_6 c 0.000000E+00 1.708371E+00 1.000000E+15
58 traj.cruise.states:distance_7 c 0.000000E+00 2.145063E+00 1.000000E+15
59 traj.cruise.states:distance_8 c 0.000000E+00 2.284407E+00 1.000000E+15
60 traj.cruise.states:distance_9 c 0.000000E+00 2.554321E+00 1.000000E+15
61 traj.cruise.states:distance_10 c 0.000000E+00 2.930039E+00 1.000000E+15
62 traj.cruise.states:distance_11 c 0.000000E+00 3.049745E+00 1.000000E+15
63 traj.cruise.states:distance_12 c 0.000000E+00 3.184417E+00 1.000000E+15
64 traj.cruise.states:distance_13 c 0.000000E+00 3.371020E+00 1.000000E+15
65 traj.cruise.states:distance_14 c 0.000000E+00 3.430269E+00 1.000000E+15
66 traj.descent_1.t_duration_0 c 5.000000E-01 9.630513E-01 1.500000E+00
67 traj.descent_1.states:mass_0 c 0.000000E+00 6.249590E+00 1.000000E+17
68 traj.descent_1.states:mass_1 c 0.000000E+00 6.245120E+00 1.000000E+17
69 traj.descent_1.states:mass_2 c 0.000000E+00 6.243715E+00 1.000000E+17
70 traj.descent_1.states:mass_3 c 0.000000E+00 6.237279E+00 1.000000E+17
71 traj.descent_1.states:mass_4 c 0.000000E+00 6.228816E+00 1.000000E+17
72 traj.descent_1.states:mass_5 c 0.000000E+00 6.226264E+00 1.000000E+17
73 traj.descent_1.states:mass_6 c 0.000000E+00 6.219617E+00 1.000000E+17
74 traj.descent_1.states:mass_7 c 0.000000E+00 6.211444E+00 1.000000E+17
75 traj.descent_1.states:mass_8 c 0.000000E+00 6.209154E+00 1.000000E+17
76 traj.descent_1.states:mass_9 c 0.000000E+00 6.205000E+00 1.000000E+17
77 traj.descent_1.states:mass_10 c 0.000000E+00 6.199325E+00 1.000000E+17
78 traj.descent_1.states:mass_11 c 0.000000E+00 6.197443E+00 1.000000E+17
79 traj.descent_1.states:mass_12 c 0.000000E+00 6.195249E+00 1.000000E+17
80 traj.descent_1.states:mass_13 c 0.000000E+00 6.192021E+00 1.000000E+17
81 traj.descent_1.states:mass_14 c 0.000000E+00 6.190939E+00 1.000000E+17
82 traj.descent_1.states:distance_0 c 0.000000E+00 3.455583E+00 1.000000E+15
83 traj.descent_1.states:distance_1 c 0.000000E+00 3.489536E+00 1.000000E+15
84 traj.descent_1.states:distance_2 c 0.000000E+00 3.500042E+00 1.000000E+15
85 traj.descent_1.states:distance_3 c 0.000000E+00 3.547608E+00 1.000000E+15
86 traj.descent_1.states:distance_4 c 0.000000E+00 3.608867E+00 1.000000E+15
87 traj.descent_1.states:distance_5 c 0.000000E+00 3.627164E+00 1.000000E+15
88 traj.descent_1.states:distance_6 c 0.000000E+00 3.674230E+00 1.000000E+15
89 traj.descent_1.states:distance_7 c 0.000000E+00 3.732354E+00 1.000000E+15
90 traj.descent_1.states:distance_8 c 0.000000E+00 3.749048E+00 1.000000E+15
91 traj.descent_1.states:distance_9 c 0.000000E+00 3.778827E+00 1.000000E+15
92 traj.descent_1.states:distance_10 c 0.000000E+00 3.814653E+00 1.000000E+15
93 traj.descent_1.states:distance_11 c 0.000000E+00 3.824688E+00 1.000000E+15
94 traj.descent_1.states:distance_12 c 0.000000E+00 3.835182E+00 1.000000E+15
95 traj.descent_1.states:distance_13 c 0.000000E+00 3.848326E+00 1.000000E+15
96 traj.descent_1.states:distance_14 c 0.000000E+00 3.852160E+00 1.000000E+15
Constraints (i - inequality, e - equality)
Index Name Type Lower Value Upper Status Lagrange Multiplier (N/A)
0 mission:constraints:range_residual e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
1 gtow_constraint.GTOW e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
2 link_climb_1_mass.mass e 0.000000E+00 2.910383E-16 0.000000E+00 9.00000E+100
3 mission:constraints:mass_residual e 0.000000E+00 2.910383E-16 0.000000E+00 9.00000E+100
4 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.931217E-13 0.000000E+00 9.00000E+100
5 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.818018E-13 0.000000E+00 9.00000E+100
6 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.692483E-13 0.000000E+00 9.00000E+100
7 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 3.387076E-13 0.000000E+00 9.00000E+100
8 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 3.113620E-13 0.000000E+00 9.00000E+100
9 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 2.835493E-13 0.000000E+00 9.00000E+100
10 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 3.289106E-13 0.000000E+00 9.00000E+100
11 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 3.170949E-13 0.000000E+00 9.00000E+100
12 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 3.037991E-13 0.000000E+00 9.00000E+100
13 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 2.496105E-13 0.000000E+00 9.00000E+100
14 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 2.398795E-13 0.000000E+00 9.00000E+100
15 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 2.394847E-13 0.000000E+00 9.00000E+100
16 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.155822E-13 0.000000E+00 9.00000E+100
17 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.212088E-13 0.000000E+00 9.00000E+100
18 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.192846E-13 0.000000E+00 9.00000E+100
19 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -1.078381E-19 0.000000E+00 9.00000E+100
20 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 8.986508E-20 0.000000E+00 9.00000E+100
21 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -1.078381E-19 0.000000E+00 9.00000E+100
22 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 3.303541E-19 0.000000E+00 9.00000E+100
23 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -1.468240E-19 0.000000E+00 9.00000E+100
24 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -7.341201E-20 0.000000E+00 9.00000E+100
25 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -1.221915E-18 0.000000E+00 9.00000E+100
26 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -1.745592E-19 0.000000E+00 9.00000E+100
27 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -7.855166E-19 0.000000E+00 9.00000E+100
28 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -2.202360E-19 0.000000E+00 9.00000E+100
29 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -1.468240E-19 0.000000E+00 9.00000E+100
30 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -1.174592E-18 0.000000E+00 9.00000E+100
31 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 2.480276E-18 0.000000E+00 9.00000E+100
32 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -1.365949E-18 0.000000E+00 9.00000E+100
33 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 2.120816E-18 0.000000E+00 9.00000E+100
34 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 -7.062455E-15 0.000000E+00 9.00000E+100
35 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 -6.625839E-15 0.000000E+00 9.00000E+100
36 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 -5.943811E-15 0.000000E+00 9.00000E+100
37 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 -1.176333E-14 0.000000E+00 9.00000E+100
38 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 -9.689313E-15 0.000000E+00 9.00000E+100
39 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 -8.236935E-15 0.000000E+00 9.00000E+100
40 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 -8.773580E-15 0.000000E+00 9.00000E+100
41 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 -6.573637E-15 0.000000E+00 9.00000E+100
42 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 -3.551253E-15 0.000000E+00 9.00000E+100
43 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 -2.225841E-15 0.000000E+00 9.00000E+100
44 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 -8.329464E-16 0.000000E+00 9.00000E+100
45 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 1.052153E-15 0.000000E+00 9.00000E+100
46 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 7.570897E-16 0.000000E+00 9.00000E+100
47 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 1.162423E-15 0.000000E+00 9.00000E+100
48 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 1.585106E-15 0.000000E+00 9.00000E+100
49 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -3.221811E-18 0.000000E+00 9.00000E+100
50 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 2.301294E-19 0.000000E+00 9.00000E+100
51 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 2.301294E-19 0.000000E+00 9.00000E+100
52 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.879958E-18 0.000000E+00 9.00000E+100
53 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 4.699896E-19 0.000000E+00 9.00000E+100
54 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 4.699896E-19 0.000000E+00 9.00000E+100
55 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.117542E-18 0.000000E+00 9.00000E+100
56 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -5.587712E-19 0.000000E+00 9.00000E+100
57 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -1.117542E-18 0.000000E+00 9.00000E+100
58 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 9.399792E-19 0.000000E+00 9.00000E+100
59 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -1.409969E-18 0.000000E+00 9.00000E+100
60 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 5.639875E-18 0.000000E+00 9.00000E+100
61 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -2.048152E-17 0.000000E+00 9.00000E+100
62 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -1.058595E-17 0.000000E+00 9.00000E+100
63 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -2.071164E-18 0.000000E+00 9.00000E+100
64 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -4.204201E-17 0.000000E+00 9.00000E+100
65 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -7.441897E-18 0.000000E+00 9.00000E+100
66 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -1.526060E-17 0.000000E+00 9.00000E+100
67 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -6.993219E-17 0.000000E+00 9.00000E+100
68 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -9.030584E-17 0.000000E+00 9.00000E+100
69 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -7.929176E-17 0.000000E+00 9.00000E+100
70 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -1.710539E-16 0.000000E+00 9.00000E+100
71 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -8.904363E-17 0.000000E+00 9.00000E+100
72 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -1.663192E-16 0.000000E+00 9.00000E+100
73 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -9.387459E-17 0.000000E+00 9.00000E+100
74 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -5.463753E-17 0.000000E+00 9.00000E+100
75 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -6.367966E-18 0.000000E+00 9.00000E+100
76 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -4.078442E-17 0.000000E+00 9.00000E+100
77 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.336715E-17 0.000000E+00 9.00000E+100
78 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 2.551440E-17 0.000000E+00 9.00000E+100
79 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.118960E-17 0.000000E+00 9.00000E+100
80 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -8.392199E-18 0.000000E+00 9.00000E+100
81 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 6.366496E-18 0.000000E+00 9.00000E+100
82 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.507072E-17 0.000000E+00 9.00000E+100
83 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 9.062135E-18 0.000000E+00 9.00000E+100
84 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -6.895103E-19 0.000000E+00 9.00000E+100
85 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 2.002555E-17 0.000000E+00 9.00000E+100
86 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -3.747472E-18 0.000000E+00 9.00000E+100
87 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 1.194507E-17 0.000000E+00 9.00000E+100
88 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -2.782666E-17 0.000000E+00 9.00000E+100
89 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -3.989309E-18 0.000000E+00 9.00000E+100
90 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 3.102796E-18 0.000000E+00 9.00000E+100
91 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -4.967796E-18 0.000000E+00 9.00000E+100
92 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.157545E-18 0.000000E+00 9.00000E+100
93 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 7.331116E-18 0.000000E+00 9.00000E+100
94 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.814478E-01 1.000000E+00 9.00000E+100
95 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.617117E-01 1.000000E+00 9.00000E+100
96 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.483926E-01 1.000000E+00 9.00000E+100
97 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.465226E-01 1.000000E+00 9.00000E+100
98 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.465226E-01 1.000000E+00 9.00000E+100
99 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.501055E-01 1.000000E+00 9.00000E+100
100 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.813669E-01 1.000000E+00 9.00000E+100
101 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.948198E-01 1.000000E+00 9.00000E+100
102 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.948198E-01 1.000000E+00 9.00000E+100
103 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.453131E-01 1.000000E+00 9.00000E+100
104 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.293177E-01 1.000000E+00 9.00000E+100
105 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.595185E-01 1.000000E+00 9.00000E+100
106 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.595185E-01 1.000000E+00 9.00000E+100
107 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 7.251680E-01 1.000000E+00 9.00000E+100
108 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.325402E-01 1.000000E+00 9.00000E+100
109 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.710209E-01 1.000000E+00 9.00000E+100
110 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.710209E-01 1.000000E+00 9.00000E+100
111 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.184425E-01 1.000000E+00 9.00000E+100
112 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.793290E-01 1.000000E+00 9.00000E+100
113 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.999994E-01 1.000000E+00 u 9.00000E+100
114 traj.phases.cruise->initial_boundary_constraint->throttle i 0.000000E+00 6.580383E-01 1.000000E+00 9.00000E+100
115 traj.phases.cruise->final_boundary_constraint->throttle i 0.000000E+00 7.661868E-01 1.000000E+00 9.00000E+100
116 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.846426E-01 1.000000E+00 9.00000E+100
117 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.568024E-01 1.000000E+00 9.00000E+100
118 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.203738E-01 1.000000E+00 9.00000E+100
119 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.099545E-01 1.000000E+00 9.00000E+100
120 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.099545E-01 1.000000E+00 9.00000E+100
121 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.637136E-01 1.000000E+00 9.00000E+100
122 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.037196E-01 1.000000E+00 9.00000E+100
123 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.868159E-01 1.000000E+00 9.00000E+100
124 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.868159E-01 1.000000E+00 9.00000E+100
125 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.467619E-01 1.000000E+00 9.00000E+100
126 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.010225E-01 1.000000E+00 9.00000E+100
127 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 8.438774E-02 1.000000E+00 9.00000E+100
128 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 8.438774E-02 1.000000E+00 9.00000E+100
129 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 4.668807E-02 1.000000E+00 9.00000E+100
130 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.031891E-02 1.000000E+00 9.00000E+100
131 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.793792E-03 1.000000E+00 9.00000E+100
132 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.793792E-03 1.000000E+00 9.00000E+100
133 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 7.653828E-07 1.000000E+00 l 9.00000E+100
134 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.232907E-03 1.000000E+00 9.00000E+100
135 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 5.171007E-03 1.000000E+00 9.00000E+100
--------------------------------------------------------------------------------
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/core/driver.py:143: OMDeprecationWarning:boolean evaluation of DriverResult is temporarily implemented to mimick the previous `failed` return behavior of run_driver.
Use the `success` attribute of the returned DriverResult object to test for successful driver completion.
fixed_mission_optimized_wing_fuel_burn = prob.get_val(av.Mission.Summary.FUEL_BURNED, units='kg')[0]
fixed_mission_optimized_wing_aspect_ratio = prob.get_val(av.Aircraft.Wing.ASPECT_RATIO)[0]
print('Mission fuel burn, kg:', fixed_mission_optimized_wing_fuel_burn)
print('Aspect ratio:', fixed_mission_optimized_wing_aspect_ratio)
Mission fuel burn, kg: 9785.393036625861
Aspect ratio: 13.99999759096459
As expected, the optimal fuel burn value is lower for this case. We’ll discuss this in more detail after running two more cases.
Optimized Mission Profile, Fixed Aircraft Wing Aspect Ratio#
We just investigated giving the optimizer flexibility with the aircraft design while not varying the mission. Let’s now look at the results when we optimize the mission but keep the wing aspect ratio unchanged.
To do this, we will allow the optimizer to control the Mach and altitude profiles by modifying the phase_info
object:
phase_info['climb_1']['user_options']['optimize_mach'] = True
phase_info['climb_1']['user_options']['optimize_altitude'] = True
phase_info['cruise']['user_options']['optimize_mach'] = True
phase_info['cruise']['user_options']['optimize_altitude'] = True
phase_info['descent_1']['user_options']['optimize_mach'] = True
phase_info['descent_1']['user_options']['optimize_altitude'] = True
prob = av.run_aviary(aircraft_filename, phase_info, optimizer=optimizer,
make_plots=make_plots, max_iter=max_iter)
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:897: OMDeprecationWarning:None: The method `add_polynomial_control` is deprecated and will be removed in Dymos 2.1. Please use `add_control` with the appropriate options to define a polynomial control.
The following variables have been overridden:
'aircraft:design:touchdown_mass 152800 lbm
'aircraft:engine:mass [7400.] lbm
'aircraft:fins:mass 0 lbm
'aircraft:fuel:auxiliary_fuel_capacity 0 lbm
'aircraft:fuel:fuselage_fuel_capacity 0 lbm
'aircraft:fuel:total_capacity 45694 lbm
'aircraft:fuselage:planform_area 1578.24 ft**2
'aircraft:fuselage:wetted_area 4158.62 ft**2
'aircraft:horizontal_tail:wetted_area 592.65 ft**2
'aircraft:landing_gear:main_gear_oleo_length 102 inch
'aircraft:landing_gear:nose_gear_oleo_length 67 inch
'aircraft:vertical_tail:wetted_area 581.13 ft**2
'aircraft:wing:aspect_ratio 11.22091 unitless
'aircraft:wing:control_surface_area 137 ft**2
'aircraft:wing:wetted_area 2396.56 ft**2
--- Constraint Report [traj] ---
--- climb_1 ---
[initial] 2.0000e-01 == mach [unitless]
[initial] 0.0000e+00 == altitude [ft]
[path] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
--- cruise ---
[initial] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
[final] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
--- descent_1 ---
[final] 2.1000e-01 == mach [unitless]
[final] 0.0000e+00 == altitude [ft]
[path] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/solvers/linear/linear_rhs_checker.py:178: SolverWarning:DirectSolver in 'traj.phases.cruise.indep_states' <class StateIndependentsComp>: 'rhs_checking' is active but no redundant adjoint dependencies were found, so caching has been disabled.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/solvers/linear/linear_rhs_checker.py:178: SolverWarning:DirectSolver in 'traj.phases.descent_1.indep_states' <class StateIndependentsComp>: 'rhs_checking' is active but no redundant adjoint dependencies were found, so caching has been disabled.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/recorders/sqlite_recorder.py:226: UserWarning:The existing case recorder file, problem_history.db, is being overwritten.
Model viewer data has already been recorded for Driver.
Model viewer data has already been recorded for Driver.
Full total jacobian for problem 'aircraft_for_bench_FwFm' was computed 3 times, taking 0.7076579010000046 seconds.
Total jacobian shape: (145, 108)
Jacobian shape: (145, 108) (9.30% nonzero)
FWD solves: 16 REV solves: 0
Total colors vs. total size: 16 vs 108 (85.19% improvement)
Sparsity computed using tolerance: 1e-25
Time to compute sparsity: 0.7077 sec
Time to compute coloring: 0.0608 sec
Memory to compute coloring: 0.0000 MB
Coloring created on: 2024-11-04 17:14:19
This is Ipopt version 3.14.16, running with linear solver MUMPS 5.7.3.
Number of nonzeros in equality constraint Jacobian...: 920
Number of nonzeros in inequality constraint Jacobian.: 534
Number of nonzeros in Lagrangian Hessian.............: 0
Total number of variables............................: 108
variables with only lower bounds: 2
variables with lower and upper bounds: 106
variables with only upper bounds: 0
Total number of equality constraints.................: 102
Total number of inequality constraints...............: 42
inequality constraints with only lower bounds: 0
inequality constraints with lower and upper bounds: 42
inequality constraints with only upper bounds: 0
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
0 3.0000000e-01 2.07e+02 9.94e-02 -5.0 0.00e+00 - 0.00e+00 0.00e+00 0
10 5.8268604e-01 1.91e+02 1.39e+00 -5.0 4.55e+00 - 7.94e-04 4.93e-03h 1
20 8.7109150e-01 1.64e+02 1.13e+00 -5.0 3.46e+00 - 2.08e-03 1.19e-01h 1
30 2.6914441e+00 5.55e-06 4.40e-01 -5.0 5.72e-02 - 1.27e-01 1.00e+00h 1
40 2.5836129e+00 2.32e-03 9.57e-03 -5.0 7.57e-02 - 1.00e+00 1.00e+00h 1
50 2.5836614e+00 2.94e-08 2.81e-03 -5.0 6.54e-04 - 1.00e+00 5.00e-01h 2
60 2.5837304e+00 4.17e-13 2.19e-03 -5.0 2.48e-03 - 1.00e+00 1.00e+00H 1
70 2.5837800e+00 2.36e-13 4.06e-03 -5.0 1.96e-03 - 1.00e+00 7.63e-06h 18
80 2.5836511e+00 1.68e-07 1.20e-02 -5.0 4.02e-03 - 1.00e+00 1.00e+00h 1
90 2.5836923e+00 6.08e-12 1.09e-03 -5.0 1.10e-03 - 1.00e+00 1.00e+00H 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
100 2.5836610e+00 1.59e-07 1.31e-02 -5.0 2.04e-03 - 1.00e+00 6.25e-02h 5
110 2.5836777e+00 3.60e-09 1.02e-02 -5.0 1.57e-04 - 1.00e+00 1.00e+00h 1
120 2.5836780e+00 2.56e-09 2.32e-03 -5.0 1.73e-04 - 1.00e+00 1.00e+00h 1
130 2.5836896e+00 1.21e-12 1.03e-03 -5.0 4.81e-04 - 1.00e+00 1.00e+00H 1
140 2.5836536e+00 2.54e-08 9.14e-03 -5.0 3.18e-04 - 1.00e+00 1.25e-01h 4
150 2.5836599e+00 1.34e-08 9.80e-03 -5.0 7.46e-04 - 1.00e+00 1.00e+00h 1
160 2.5836727e+00 1.37e-08 2.16e-03 -5.0 8.52e-04 - 1.00e+00 1.00e+00h 1
170 2.5836320e+00 7.26e-08 4.76e-03 -5.0 3.28e-03 - 1.00e+00 1.00e+00h 1
180 2.5836093e+00 3.52e-08 1.63e-03 -5.0 7.78e-04 - 1.00e+00 1.95e-03h 10
190 2.5836823e+00 2.49e-09 9.78e-03 -5.0 1.61e-04 - 1.00e+00 1.00e+00h 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
200 2.5836630e+00 1.82e-08 1.10e-02 -5.0 1.10e-03 - 1.00e+00 5.00e-01h 2
Number of Iterations....: 200
(scaled) (unscaled)
Objective...............: 2.5836629839380709e+00 2.5836629839380709e+00
Dual infeasibility......: 1.0970096173293170e-02 1.0970096173293170e-02
Constraint violation....: 1.8161019338755411e-08 1.8161019338755411e-08
Variable bound violation: 0.0000000000000000e+00 0.0000000000000000e+00
Complementarity.........: 1.0047919043607404e-05 1.0047919043607404e-05
Overall NLP error.......: 1.0970096173293170e-02 1.0970096173293170e-02
Number of objective function evaluations = 511
Number of objective gradient evaluations = 201
Number of equality constraint evaluations = 511
Number of inequality constraint evaluations = 511
Number of equality constraint Jacobian evaluations = 201
Number of inequality constraint Jacobian evaluations = 201
Number of Lagrangian Hessian evaluations = 0
Total seconds in IPOPT = 172.692
EXIT: Maximum Number of Iterations Exceeded.
minimal_print is not available for this solution
Optimization Problem -- Optimization using pyOpt_sparse
================================================================================
Objective Function: _objfunc
Solution:
--------------------------------------------------------------------------------
Total Time: 172.6925
User Objective Time : 152.2141
User Sensitivity Time : 18.7996
Interface Time : 0.6766
Opt Solver Time: 1.0023
Calls to Objective Function : 512
Calls to Sens Function : 202
Objectives
Index Name Value
0 mission:objectives:fuel 2.583663E+00
Variables (c - continuous, i - integer, d - discrete)
Index Name Type Lower Bound Value Upper Bound Status
0 mission:design:gross_mass_0 c 5.714286E-05 9.123645E-01 1.000000E+30
1 mission:summary:gross_mass_0 c 5.714286E-05 9.123645E-01 1.000000E+30
2 traj.climb_1.t_duration_0 c 5.000000E-01 5.976008E-01 1.500000E+00
3 traj.climb_1.states:mass_0 c 0.000000E+00 7.242228E+00 1.000000E+17
4 traj.climb_1.states:mass_1 c 0.000000E+00 7.229541E+00 1.000000E+17
5 traj.climb_1.states:mass_2 c 0.000000E+00 7.214117E+00 1.000000E+17
6 traj.climb_1.states:mass_3 c 0.000000E+00 7.209568E+00 1.000000E+17
7 traj.climb_1.states:mass_4 c 0.000000E+00 7.189805E+00 1.000000E+17
8 traj.climb_1.states:mass_5 c 0.000000E+00 7.165085E+00 1.000000E+17
9 traj.climb_1.states:mass_6 c 0.000000E+00 7.157541E+00 1.000000E+17
10 traj.climb_1.states:mass_7 c 0.000000E+00 7.137379E+00 1.000000E+17
11 traj.climb_1.states:mass_8 c 0.000000E+00 7.109794E+00 1.000000E+17
12 traj.climb_1.states:mass_9 c 0.000000E+00 7.101008E+00 1.000000E+17
13 traj.climb_1.states:mass_10 c 0.000000E+00 7.084077E+00 1.000000E+17
14 traj.climb_1.states:mass_11 c 0.000000E+00 7.060515E+00 1.000000E+17
15 traj.climb_1.states:mass_12 c 0.000000E+00 7.052983E+00 1.000000E+17
16 traj.climb_1.states:mass_13 c 0.000000E+00 7.044509E+00 1.000000E+17
17 traj.climb_1.states:mass_14 c 0.000000E+00 7.032728E+00 1.000000E+17
18 traj.climb_1.states:mass_15 c 0.000000E+00 7.028971E+00 1.000000E+17
19 traj.climb_1.states:distance_0 c 0.000000E+00 7.495405E-03 1.000000E+15
20 traj.climb_1.states:distance_1 c 0.000000E+00 1.907927E-02 1.000000E+15
21 traj.climb_1.states:distance_2 c 0.000000E+00 2.304293E-02 1.000000E+15
22 traj.climb_1.states:distance_3 c 0.000000E+00 4.345200E-02 1.000000E+15
23 traj.climb_1.states:distance_4 c 0.000000E+00 7.658218E-02 1.000000E+15
24 traj.climb_1.states:distance_5 c 0.000000E+00 8.824324E-02 1.000000E+15
25 traj.climb_1.states:distance_6 c 0.000000E+00 1.227871E-01 1.000000E+15
26 traj.climb_1.states:distance_7 c 0.000000E+00 1.769906E-01 1.000000E+15
27 traj.climb_1.states:distance_8 c 0.000000E+00 1.956817E-01 1.000000E+15
28 traj.climb_1.states:distance_9 c 0.000000E+00 2.337045E-01 1.000000E+15
29 traj.climb_1.states:distance_10 c 0.000000E+00 2.904230E-01 1.000000E+15
30 traj.climb_1.states:distance_11 c 0.000000E+00 3.093745E-01 1.000000E+15
31 traj.climb_1.states:distance_12 c 0.000000E+00 3.311822E-01 1.000000E+15
32 traj.climb_1.states:distance_13 c 0.000000E+00 3.622257E-01 1.000000E+15
33 traj.climb_1.states:distance_14 c 0.000000E+00 3.722778E-01 1.000000E+15
34 traj.climb_1.controls:mach_0 c 3.600000E-01 4.000000E-01 1.680000E+00
35 traj.climb_1.controls:mach_1 c 3.600000E-01 1.473893E+00 1.680000E+00
36 traj.climb_1.controls:altitude_0 c 0.000000E+00 9.946794E-36 1.000000E+00 l
37 traj.climb_1.controls:altitude_1 c 0.000000E+00 9.814110E-01 1.000000E+00
38 traj.cruise.t_duration_0 c 5.000000E-01 1.304779E+00 1.500000E+00
39 traj.cruise.states:mass_0 c 0.000000E+00 6.994260E+00 1.000000E+17
40 traj.cruise.states:mass_1 c 0.000000E+00 6.946719E+00 1.000000E+17
41 traj.cruise.states:mass_2 c 0.000000E+00 6.931756E+00 1.000000E+17
42 traj.cruise.states:mass_3 c 0.000000E+00 6.862322E+00 1.000000E+17
43 traj.cruise.states:mass_4 c 0.000000E+00 6.767958E+00 1.000000E+17
44 traj.cruise.states:mass_5 c 0.000000E+00 6.738438E+00 1.000000E+17
45 traj.cruise.states:mass_6 c 0.000000E+00 6.658903E+00 1.000000E+17
46 traj.cruise.states:mass_7 c 0.000000E+00 6.551145E+00 1.000000E+17
47 traj.cruise.states:mass_8 c 0.000000E+00 6.517513E+00 1.000000E+17
48 traj.cruise.states:mass_9 c 0.000000E+00 6.453310E+00 1.000000E+17
49 traj.cruise.states:mass_10 c 0.000000E+00 6.365892E+00 1.000000E+17
50 traj.cruise.states:mass_11 c 0.000000E+00 6.338499E+00 1.000000E+17
51 traj.cruise.states:mass_12 c 0.000000E+00 6.307943E+00 1.000000E+17
52 traj.cruise.states:mass_13 c 0.000000E+00 6.266042E+00 1.000000E+17
53 traj.cruise.states:mass_14 c 0.000000E+00 6.252840E+00 1.000000E+17
54 traj.cruise.states:distance_0 c 0.000000E+00 5.043423E-01 1.000000E+15
55 traj.cruise.states:distance_1 c 0.000000E+00 6.864025E-01 1.000000E+15
56 traj.cruise.states:distance_2 c 0.000000E+00 7.439848E-01 1.000000E+15
57 traj.cruise.states:distance_3 c 0.000000E+00 1.013026E+00 1.000000E+15
58 traj.cruise.states:distance_4 c 0.000000E+00 1.383570E+00 1.000000E+15
59 traj.cruise.states:distance_5 c 0.000000E+00 1.500682E+00 1.000000E+15
60 traj.cruise.states:distance_6 c 0.000000E+00 1.819116E+00 1.000000E+15
61 traj.cruise.states:distance_7 c 0.000000E+00 2.257528E+00 1.000000E+15
62 traj.cruise.states:distance_8 c 0.000000E+00 2.396051E+00 1.000000E+15
63 traj.cruise.states:distance_9 c 0.000000E+00 2.662539E+00 1.000000E+15
64 traj.cruise.states:distance_10 c 0.000000E+00 3.029554E+00 1.000000E+15
65 traj.cruise.states:distance_11 c 0.000000E+00 3.145547E+00 1.000000E+15
66 traj.cruise.states:distance_12 c 0.000000E+00 3.275522E+00 1.000000E+15
67 traj.cruise.states:distance_13 c 0.000000E+00 3.454794E+00 1.000000E+15
68 traj.cruise.states:distance_14 c 0.000000E+00 3.511533E+00 1.000000E+15
69 traj.cruise.controls:mach_0 c 1.400000E+00 1.473893E+00 1.680000E+00
70 traj.cruise.controls:mach_1 c 1.400000E+00 1.474356E+00 1.680000E+00
71 traj.cruise.controls:altitude_0 c 8.767123E-01 8.873031E-01 1.000000E+00
72 traj.cruise.controls:altitude_1 c 8.767123E-01 9.999473E-01 1.000000E+00
73 traj.descent_1.t_duration_0 c 5.000000E-01 7.646693E-01 1.500000E+00
74 traj.descent_1.states:mass_0 c 0.000000E+00 6.250309E+00 1.000000E+17
75 traj.descent_1.states:mass_1 c 0.000000E+00 6.246886E+00 1.000000E+17
76 traj.descent_1.states:mass_2 c 0.000000E+00 6.245815E+00 1.000000E+17
77 traj.descent_1.states:mass_3 c 0.000000E+00 6.240944E+00 1.000000E+17
78 traj.descent_1.states:mass_4 c 0.000000E+00 6.234627E+00 1.000000E+17
79 traj.descent_1.states:mass_5 c 0.000000E+00 6.232737E+00 1.000000E+17
80 traj.descent_1.states:mass_6 c 0.000000E+00 6.227853E+00 1.000000E+17
81 traj.descent_1.states:mass_7 c 0.000000E+00 6.221992E+00 1.000000E+17
82 traj.descent_1.states:mass_8 c 0.000000E+00 6.220401E+00 1.000000E+17
83 traj.descent_1.states:mass_9 c 0.000000E+00 6.217387E+00 1.000000E+17
84 traj.descent_1.states:mass_10 c 0.000000E+00 6.213112E+00 1.000000E+17
85 traj.descent_1.states:mass_11 c 0.000000E+00 6.211641E+00 1.000000E+17
86 traj.descent_1.states:mass_12 c 0.000000E+00 6.209898E+00 1.000000E+17
87 traj.descent_1.states:mass_13 c 0.000000E+00 6.207271E+00 1.000000E+17
88 traj.descent_1.states:mass_14 c 0.000000E+00 6.206376E+00 1.000000E+17
89 traj.descent_1.states:distance_0 c 0.000000E+00 3.532075E+00 1.000000E+15
90 traj.descent_1.states:distance_1 c 0.000000E+00 3.559598E+00 1.000000E+15
91 traj.descent_1.states:distance_2 c 0.000000E+00 3.568117E+00 1.000000E+15
92 traj.descent_1.states:distance_3 c 0.000000E+00 3.606664E+00 1.000000E+15
93 traj.descent_1.states:distance_4 c 0.000000E+00 3.656272E+00 1.000000E+15
94 traj.descent_1.states:distance_5 c 0.000000E+00 3.671079E+00 1.000000E+15
95 traj.descent_1.states:distance_6 c 0.000000E+00 3.709141E+00 1.000000E+15
96 traj.descent_1.states:distance_7 c 0.000000E+00 3.756069E+00 1.000000E+15
97 traj.descent_1.states:distance_8 c 0.000000E+00 3.769525E+00 1.000000E+15
98 traj.descent_1.states:distance_9 c 0.000000E+00 3.793494E+00 1.000000E+15
99 traj.descent_1.states:distance_10 c 0.000000E+00 3.822244E+00 1.000000E+15
100 traj.descent_1.states:distance_11 c 0.000000E+00 3.830273E+00 1.000000E+15
101 traj.descent_1.states:distance_12 c 0.000000E+00 3.838652E+00 1.000000E+15
102 traj.descent_1.states:distance_13 c 0.000000E+00 3.849116E+00 1.000000E+15
103 traj.descent_1.states:distance_14 c 0.000000E+00 3.852160E+00 1.000000E+15
104 traj.descent_1.controls:mach_0 c 3.800000E-01 1.474356E+00 1.680000E+00
105 traj.descent_1.controls:mach_1 c 3.800000E-01 4.200000E-01 1.680000E+00
106 traj.descent_1.controls:altitude_0 c 0.000000E+00 9.999473E-01 1.000000E+00
107 traj.descent_1.controls:altitude_1 c 0.000000E+00 1.138882E-37 1.000000E+00 l
Constraints (i - inequality, e - equality)
Index Name Type Lower Value Upper Status Lagrange Multiplier (N/A)
0 mission:constraints:range_residual e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
1 gtow_constraint.GTOW e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
2 link_climb_1_mass.mass e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
3 mission:constraints:mass_residual e 0.000000E+00 -1.254375E-13 0.000000E+00 9.00000E+100
4 traj.linkages.climb_1:altitude_final|cruise:altitude_initial e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
5 traj.linkages.climb_1:mach_final|cruise:mach_initial e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
6 traj.linkages.cruise:altitude_final|descent_1:altitude_initial e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
7 traj.linkages.cruise:mach_final|descent_1:mach_initial e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
8 traj.phases.climb_1->initial_boundary_constraint->mach e 2.000000E-01 2.000000E-01 2.000000E-01 9.00000E+100
9 traj.phases.climb_1->initial_boundary_constraint->altitude e 0.000000E+00 3.282442E-35 0.000000E+00 9.00000E+100
10 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -3.872688E-13 0.000000E+00 9.00000E+100
11 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -2.501109E-12 0.000000E+00 9.00000E+100
12 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -1.066950E-12 0.000000E+00 9.00000E+100
13 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 -5.547756E-14 0.000000E+00 9.00000E+100
14 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.423546E-11 0.000000E+00 9.00000E+100
15 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 4.235356E-11 0.000000E+00 9.00000E+100
16 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 6.402065E-11 0.000000E+00 9.00000E+100
17 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.026078E-10 0.000000E+00 9.00000E+100
18 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.445239E-10 0.000000E+00 9.00000E+100
19 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.367993E-10 0.000000E+00 9.00000E+100
20 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.850982E-10 0.000000E+00 9.00000E+100
21 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 2.453178E-10 0.000000E+00 9.00000E+100
22 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.280561E-10 0.000000E+00 9.00000E+100
23 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.482791E-10 0.000000E+00 9.00000E+100
24 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.719929E-10 0.000000E+00 9.00000E+100
25 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 4.414862E-14 0.000000E+00 9.00000E+100
26 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -2.344211E-12 0.000000E+00 9.00000E+100
27 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -5.585368E-12 0.000000E+00 9.00000E+100
28 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -1.347509E-11 0.000000E+00 9.00000E+100
29 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -2.297285E-11 0.000000E+00 9.00000E+100
30 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -3.559919E-11 0.000000E+00 9.00000E+100
31 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -4.693487E-11 0.000000E+00 9.00000E+100
32 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -5.913922E-11 0.000000E+00 9.00000E+100
33 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -7.512049E-11 0.000000E+00 9.00000E+100
34 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -6.726030E-11 0.000000E+00 9.00000E+100
35 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -7.486133E-11 0.000000E+00 9.00000E+100
36 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -8.479904E-11 0.000000E+00 9.00000E+100
37 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -4.299505E-11 0.000000E+00 9.00000E+100
38 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -4.460812E-11 0.000000E+00 9.00000E+100
39 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 -4.676538E-11 0.000000E+00 9.00000E+100
40 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 9.027010E-10 0.000000E+00 9.00000E+100
41 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 8.967860E-10 0.000000E+00 9.00000E+100
42 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 9.210970E-10 0.000000E+00 9.00000E+100
43 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 1.912623E-09 0.000000E+00 9.00000E+100
44 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 2.158112E-09 0.000000E+00 9.00000E+100
45 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 2.754156E-09 0.000000E+00 9.00000E+100
46 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 3.569662E-09 0.000000E+00 9.00000E+100
47 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 4.538619E-09 0.000000E+00 9.00000E+100
48 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 6.249684E-09 0.000000E+00 9.00000E+100
49 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 5.783728E-09 0.000000E+00 9.00000E+100
50 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 7.213419E-09 0.000000E+00 9.00000E+100
51 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 9.019695E-09 0.000000E+00 9.00000E+100
52 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 4.715675E-09 0.000000E+00 9.00000E+100
53 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 1.816102E-08 0.000000E+00 9.00000E+100
54 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 3.251033E-09 0.000000E+00 9.00000E+100
55 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -2.746789E-10 0.000000E+00 9.00000E+100
56 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -2.007807E-10 0.000000E+00 9.00000E+100
57 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -9.877807E-11 0.000000E+00 9.00000E+100
58 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 -1.357818E-10 0.000000E+00 9.00000E+100
59 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.727689E-10 0.000000E+00 9.00000E+100
60 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 5.988419E-10 0.000000E+00 9.00000E+100
61 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 8.723859E-10 0.000000E+00 9.00000E+100
62 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.309391E-09 0.000000E+00 9.00000E+100
63 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.912907E-09 0.000000E+00 9.00000E+100
64 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.769809E-09 0.000000E+00 9.00000E+100
65 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 2.079615E-09 0.000000E+00 9.00000E+100
66 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 2.507531E-09 0.000000E+00 9.00000E+100
67 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.292332E-09 0.000000E+00 9.00000E+100
68 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.369024E-09 0.000000E+00 9.00000E+100
69 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.473374E-09 0.000000E+00 9.00000E+100
70 traj.phases.descent_1->final_boundary_constraint->mach e 2.100000E-01 2.100000E-01 2.100000E-01 9.00000E+100
71 traj.phases.descent_1->final_boundary_constraint->altitude e 0.000000E+00 4.156920E-37 0.000000E+00 9.00000E+100
72 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 5.308415E-10 0.000000E+00 9.00000E+100
73 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 6.559527E-10 0.000000E+00 9.00000E+100
74 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 5.736689E-10 0.000000E+00 9.00000E+100
75 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.082402E-09 0.000000E+00 9.00000E+100
76 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 2.569144E-09 0.000000E+00 9.00000E+100
77 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 6.906196E-10 0.000000E+00 9.00000E+100
78 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 6.537094E-10 0.000000E+00 9.00000E+100
79 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 2.105988E-10 0.000000E+00 9.00000E+100
80 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 4.376311E-10 0.000000E+00 9.00000E+100
81 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 2.899310E-10 0.000000E+00 9.00000E+100
82 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.428909E-10 0.000000E+00 9.00000E+100
83 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 3.093618E-11 0.000000E+00 9.00000E+100
84 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 7.364742E-12 0.000000E+00 9.00000E+100
85 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 5.215960E-11 0.000000E+00 9.00000E+100
86 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 -3.081102E-13 0.000000E+00 9.00000E+100
87 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.750848E-10 0.000000E+00 9.00000E+100
88 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.687009E-10 0.000000E+00 9.00000E+100
89 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.600590E-10 0.000000E+00 9.00000E+100
90 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -3.212125E-10 0.000000E+00 9.00000E+100
91 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -2.941299E-10 0.000000E+00 9.00000E+100
92 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -2.553025E-10 0.000000E+00 9.00000E+100
93 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -2.885085E-10 0.000000E+00 9.00000E+100
94 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -2.466360E-10 0.000000E+00 9.00000E+100
95 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.865643E-10 0.000000E+00 9.00000E+100
96 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.404749E-10 0.000000E+00 9.00000E+100
97 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.081960E-10 0.000000E+00 9.00000E+100
98 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -6.238807E-11 0.000000E+00 9.00000E+100
99 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -2.330222E-11 0.000000E+00 9.00000E+100
100 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.509451E-11 0.000000E+00 9.00000E+100
101 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -3.623208E-12 0.000000E+00 9.00000E+100
102 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.528490E-01 1.000000E+00 9.00000E+100
103 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.161514E-01 1.000000E+00 9.00000E+100
104 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.862080E-01 1.000000E+00 9.00000E+100
105 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.802220E-01 1.000000E+00 9.00000E+100
106 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.802220E-01 1.000000E+00 9.00000E+100
107 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.693322E-01 1.000000E+00 9.00000E+100
108 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.890391E-01 1.000000E+00 9.00000E+100
109 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.002307E-01 1.000000E+00 9.00000E+100
110 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.002307E-01 1.000000E+00 9.00000E+100
111 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.468525E-01 1.000000E+00 9.00000E+100
112 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.302411E-01 1.000000E+00 9.00000E+100
113 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.605143E-01 1.000000E+00 9.00000E+100
114 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.605143E-01 1.000000E+00 9.00000E+100
115 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 7.248795E-01 1.000000E+00 9.00000E+100
116 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.316905E-01 1.000000E+00 9.00000E+100
117 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.695791E-01 1.000000E+00 9.00000E+100
118 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.695791E-01 1.000000E+00 9.00000E+100
119 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.176228E-01 1.000000E+00 9.00000E+100
120 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.785432E-01 1.000000E+00 9.00000E+100
121 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.999688E-01 1.000000E+00 9.00000E+100
122 traj.phases.cruise->initial_boundary_constraint->throttle i 0.000000E+00 7.105312E-01 1.000000E+00 9.00000E+100
123 traj.phases.cruise->final_boundary_constraint->throttle i 0.000000E+00 7.657332E-01 1.000000E+00 9.00000E+100
124 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.766304E-01 1.000000E+00 9.00000E+100
125 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.459401E-01 1.000000E+00 9.00000E+100
126 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.064431E-01 1.000000E+00 9.00000E+100
127 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.952536E-01 1.000000E+00 9.00000E+100
128 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.952536E-01 1.000000E+00 9.00000E+100
129 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.471150E-01 1.000000E+00 9.00000E+100
130 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.841893E-01 1.000000E+00 9.00000E+100
131 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.673682E-01 1.000000E+00 9.00000E+100
132 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.673682E-01 1.000000E+00 9.00000E+100
133 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.283474E-01 1.000000E+00 9.00000E+100
134 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 7.516258E-02 1.000000E+00 9.00000E+100
135 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 5.365967E-02 1.000000E+00 9.00000E+100
136 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 5.365967E-02 1.000000E+00 9.00000E+100
137 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.144768E-02 1.000000E+00 9.00000E+100
138 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.590185E-04 1.000000E+00 9.00000E+100
139 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 6.578323E-04 1.000000E+00 9.00000E+100
140 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 6.578323E-04 1.000000E+00 9.00000E+100
141 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 6.617511E-03 1.000000E+00 9.00000E+100
142 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.691017E-02 1.000000E+00 9.00000E+100
143 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.712307E-02 1.000000E+00 9.00000E+100
--------------------------------------------------------------------------------
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/core/driver.py:143: OMDeprecationWarning:boolean evaluation of DriverResult is temporarily implemented to mimick the previous `failed` return behavior of run_driver.
Use the `success` attribute of the returned DriverResult object to test for successful driver completion.
Now, let’s see the fuel burn:
optimized_mission_fixed_wing_fuel_burn = prob.get_val(av.Mission.Summary.FUEL_BURNED, units='kg')[0]
optimized_mission_fixed_wing_aspect_ratio = prob.get_val(av.Aircraft.Wing.ASPECT_RATIO)[0]
print('Mission fuel burn, kg:', optimized_mission_fixed_wing_fuel_burn)
print('Aspect ratio:', optimized_mission_fixed_wing_aspect_ratio)
Mission fuel burn, kg: 10358.521051657415
Aspect ratio: 11.22091
Optimizing the mission did not have nearly as large of an impact on the fuel burn as optimizing the aspect ratio did. However, the fuel burn still decreased. Let us now look at the fully coupled case.
Optimized Mission Profile, Optimized Aircraft Wing Aspect Ratio#
Remember we have already modified the phase_info
object so that the Mach and altitude profiles are optimized.
Now we return to the Level 2 way of running the problem with the wing aspect ratio as a design variable.
prob = av.AviaryProblem(av.AnalysisScheme.COLLOCATION)
# Load aircraft and options data from user
# Allow for user overrides here
prob.load_inputs(aircraft_filename, phase_info)
prob.check_and_preprocess_inputs()
# Preprocess inputs
prob.add_pre_mission_systems()
prob.add_phases()
prob.add_post_mission_systems()
# Link phases and variables
prob.link_phases()
prob.add_driver(optimizer, max_iter=max_iter)
prob.add_design_variables()
# prob.model.add_design_var(av.Aircraft.Engine.SCALED_SLS_THRUST, lower=25.e3, upper=30.e3, units='lbf', ref=28.e3)
prob.model.add_design_var(av.Aircraft.Wing.ASPECT_RATIO, lower=10., upper=14., ref=12.)
# Load optimization problem formulation
# Detail which variables the optimizer can control
prob.add_objective()
prob.setup()
prob.set_initial_guesses()
prob.run_aviary_problem(make_plots=make_plots)
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/dymos/phase/phase.py:897: OMDeprecationWarning:None: The method `add_polynomial_control` is deprecated and will be removed in Dymos 2.1. Please use `add_control` with the appropriate options to define a polynomial control.
The following variables have been overridden:
'aircraft:design:touchdown_mass 152800 lbm
'aircraft:engine:mass [7400.] lbm
'aircraft:fins:mass 0 lbm
'aircraft:fuel:auxiliary_fuel_capacity 0 lbm
'aircraft:fuel:fuselage_fuel_capacity 0 lbm
'aircraft:fuel:total_capacity 45694 lbm
'aircraft:fuselage:planform_area 1578.24 ft**2
'aircraft:fuselage:wetted_area 4158.62 ft**2
'aircraft:horizontal_tail:wetted_area 592.65 ft**2
'aircraft:landing_gear:main_gear_oleo_length 102 inch
'aircraft:landing_gear:nose_gear_oleo_length 67 inch
'aircraft:vertical_tail:wetted_area 581.13 ft**2
'aircraft:wing:aspect_ratio 11.22091 unitless
'aircraft:wing:control_surface_area 137 ft**2
'aircraft:wing:wetted_area 2396.56 ft**2
--- Constraint Report [traj] ---
--- climb_1 ---
[initial] 2.0000e-01 == mach [unitless]
[initial] 0.0000e+00 == altitude [ft]
[path] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
--- cruise ---
[initial] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
[final] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
--- descent_1 ---
[final] 2.1000e-01 == mach [unitless]
[final] 0.0000e+00 == altitude [ft]
[path] 0.0000e+00 <= throttle <= 1.0000e+00 [unitless]
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/solvers/linear/linear_rhs_checker.py:178: SolverWarning:DirectSolver in 'traj.phases.cruise.indep_states' <class StateIndependentsComp>: 'rhs_checking' is active but no redundant adjoint dependencies were found, so caching has been disabled.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/solvers/linear/linear_rhs_checker.py:178: SolverWarning:DirectSolver in 'traj.phases.descent_1.indep_states' <class StateIndependentsComp>: 'rhs_checking' is active but no redundant adjoint dependencies were found, so caching has been disabled.
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/recorders/sqlite_recorder.py:226: UserWarning:The existing case recorder file, problem_history.db, is being overwritten.
Model viewer data has already been recorded for Driver.
Model viewer data has already been recorded for Driver.
Full total jacobian for problem 'problem' was computed 3 times, taking 0.717394344000013 seconds.
Total jacobian shape: (145, 109)
Jacobian shape: (145, 109) (10.08% nonzero)
FWD solves: 18 REV solves: 0
Total colors vs. total size: 18 vs 109 (83.49% improvement)
Sparsity computed using tolerance: 1e-25
Time to compute sparsity: 0.7174 sec
Time to compute coloring: 0.0689 sec
Memory to compute coloring: 0.0000 MB
Coloring created on: 2024-11-04 17:17:18
This is Ipopt version 3.14.16, running with linear solver MUMPS 5.7.3.
Number of nonzeros in equality constraint Jacobian...: 962
Number of nonzeros in inequality constraint Jacobian.: 629
Number of nonzeros in Lagrangian Hessian.............: 0
Total number of variables............................: 109
variables with only lower bounds: 2
variables with lower and upper bounds: 107
variables with only upper bounds: 0
Total number of equality constraints.................: 102
Total number of inequality constraints...............: 42
inequality constraints with only lower bounds: 0
inequality constraints with lower and upper bounds: 42
inequality constraints with only upper bounds: 0
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
0 3.0000000e-01 2.07e+02 8.69e-02 -5.0 0.00e+00 - 0.00e+00 0.00e+00 0
10 4.7414344e-01 1.91e+02 1.06e+00 -5.0 8.86e+00 - 7.01e-05 9.22e-05h 1
20 9.2165448e-01 1.58e+02 1.23e+00 -5.0 2.96e+00 - 8.64e-02 1.33e-02h 1
30 2.5234578e+00 2.72e-01 3.10e-01 -5.0 1.06e+00 - 7.92e-02 1.15e-01f 1
40 2.3796601e+00 4.21e-02 7.96e-02 -5.0 6.65e-01 - 5.48e-01 7.02e-01h 1
Number of Iterations....: 49
(scaled) (unscaled)
Objective...............: 2.3887855407823286e+00 2.3887855407823286e+00
Dual infeasibility......: 5.0964944842135651e-07 5.0964944842135651e-07
Constraint violation....: 9.4142373270468412e-12 9.4142373270468412e-12
Variable bound violation: 4.3247145469229573e-41 4.3247145469229573e-41
Complementarity.........: 9.0909677431568982e-08 9.0909677431568982e-08
Overall NLP error.......: 5.0964944842135651e-07 5.0964944842135651e-07
Number of objective function evaluations = 50
Number of objective gradient evaluations = 50
Number of equality constraint evaluations = 50
Number of inequality constraint evaluations = 50
Number of equality constraint Jacobian evaluations = 50
Number of inequality constraint Jacobian evaluations = 50
Number of Lagrangian Hessian evaluations = 0
Total seconds in IPOPT = 20.438
EXIT: Optimal Solution Found.
minimal_print is not available for this solution
Optimization Problem -- Optimization using pyOpt_sparse
================================================================================
Objective Function: _objfunc
Solution:
--------------------------------------------------------------------------------
Total Time: 20.4394
User Objective Time : 14.9890
User Sensitivity Time : 5.1380
Interface Time : 0.1487
Opt Solver Time: 0.1636
Calls to Objective Function : 51
Calls to Sens Function : 51
Objectives
Index Name Value
0 mission:objectives:fuel 2.388786E+00
Variables (c - continuous, i - integer, d - discrete)
Index Name Type Lower Bound Value Upper Bound Status
0 mission:design:gross_mass_0 c 5.714286E-05 8.989198E-01 1.000000E+30
1 mission:summary:gross_mass_0 c 5.714286E-05 8.989198E-01 1.000000E+30
2 aircraft:wing:aspect_ratio_0 c 8.333333E-01 1.166667E+00 1.166667E+00 u
3 traj.climb_1.t_duration_0 c 5.000000E-01 5.379544E-01 1.500000E+00
4 traj.climb_1.states:mass_0 c 0.000000E+00 7.135505E+00 1.000000E+17
5 traj.climb_1.states:mass_1 c 0.000000E+00 7.125765E+00 1.000000E+17
6 traj.climb_1.states:mass_2 c 0.000000E+00 7.113500E+00 1.000000E+17
7 traj.climb_1.states:mass_3 c 0.000000E+00 7.109809E+00 1.000000E+17
8 traj.climb_1.states:mass_4 c 0.000000E+00 7.093420E+00 1.000000E+17
9 traj.climb_1.states:mass_5 c 0.000000E+00 7.072301E+00 1.000000E+17
10 traj.climb_1.states:mass_6 c 0.000000E+00 7.065792E+00 1.000000E+17
11 traj.climb_1.states:mass_7 c 0.000000E+00 7.048319E+00 1.000000E+17
12 traj.climb_1.states:mass_8 c 0.000000E+00 7.024422E+00 1.000000E+17
13 traj.climb_1.states:mass_9 c 0.000000E+00 7.016838E+00 1.000000E+17
14 traj.climb_1.states:mass_10 c 0.000000E+00 7.002252E+00 1.000000E+17
15 traj.climb_1.states:mass_11 c 0.000000E+00 6.982045E+00 1.000000E+17
16 traj.climb_1.states:mass_12 c 0.000000E+00 6.975608E+00 1.000000E+17
17 traj.climb_1.states:mass_13 c 0.000000E+00 6.968383E+00 1.000000E+17
18 traj.climb_1.states:mass_14 c 0.000000E+00 6.958362E+00 1.000000E+17
19 traj.climb_1.states:mass_15 c 0.000000E+00 6.955177E+00 1.000000E+17
20 traj.climb_1.states:distance_0 c 0.000000E+00 6.724829E-03 1.000000E+15
21 traj.climb_1.states:distance_1 c 0.000000E+00 1.705748E-02 1.000000E+15
22 traj.climb_1.states:distance_2 c 0.000000E+00 2.058008E-02 1.000000E+15
23 traj.climb_1.states:distance_3 c 0.000000E+00 3.864228E-02 1.000000E+15
24 traj.climb_1.states:distance_4 c 0.000000E+00 6.777764E-02 1.000000E+15
25 traj.climb_1.states:distance_5 c 0.000000E+00 7.799478E-02 1.000000E+15
26 traj.climb_1.states:distance_6 c 0.000000E+00 1.081787E-01 1.000000E+15
27 traj.climb_1.states:distance_7 c 0.000000E+00 1.553593E-01 1.000000E+15
28 traj.climb_1.states:distance_8 c 0.000000E+00 1.715900E-01 1.000000E+15
29 traj.climb_1.states:distance_9 c 0.000000E+00 2.045594E-01 1.000000E+15
30 traj.climb_1.states:distance_10 c 0.000000E+00 2.536404E-01 1.000000E+15
31 traj.climb_1.states:distance_11 c 0.000000E+00 2.700175E-01 1.000000E+15
32 traj.climb_1.states:distance_12 c 0.000000E+00 2.888507E-01 1.000000E+15
33 traj.climb_1.states:distance_13 c 0.000000E+00 3.156390E-01 1.000000E+15
34 traj.climb_1.states:distance_14 c 0.000000E+00 3.243083E-01 1.000000E+15
35 traj.climb_1.controls:mach_0 c 3.600000E-01 4.000000E-01 1.680000E+00
36 traj.climb_1.controls:mach_1 c 3.600000E-01 1.415829E+00 1.680000E+00
37 traj.climb_1.controls:altitude_0 c 0.000000E+00 4.719363E-38 1.000000E+00 l
38 traj.climb_1.controls:altitude_1 c 0.000000E+00 9.999994E-01 1.000000E+00 u
39 traj.cruise.t_duration_0 c 5.000000E-01 1.356620E+00 1.500000E+00
40 traj.cruise.states:mass_0 c 0.000000E+00 6.923592E+00 1.000000E+17
41 traj.cruise.states:mass_1 c 0.000000E+00 6.880326E+00 1.000000E+17
42 traj.cruise.states:mass_2 c 0.000000E+00 6.866708E+00 1.000000E+17
43 traj.cruise.states:mass_3 c 0.000000E+00 6.803500E+00 1.000000E+17
44 traj.cruise.states:mass_4 c 0.000000E+00 6.717569E+00 1.000000E+17
45 traj.cruise.states:mass_5 c 0.000000E+00 6.690679E+00 1.000000E+17
46 traj.cruise.states:mass_6 c 0.000000E+00 6.618213E+00 1.000000E+17
47 traj.cruise.states:mass_7 c 0.000000E+00 6.519962E+00 1.000000E+17
48 traj.cruise.states:mass_8 c 0.000000E+00 6.489273E+00 1.000000E+17
49 traj.cruise.states:mass_9 c 0.000000E+00 6.430647E+00 1.000000E+17
50 traj.cruise.states:mass_10 c 0.000000E+00 6.350815E+00 1.000000E+17
51 traj.cruise.states:mass_11 c 0.000000E+00 6.325802E+00 1.000000E+17
52 traj.cruise.states:mass_12 c 0.000000E+00 6.297898E+00 1.000000E+17
53 traj.cruise.states:mass_13 c 0.000000E+00 6.259640E+00 1.000000E+17
54 traj.cruise.states:mass_14 c 0.000000E+00 6.247589E+00 1.000000E+17
55 traj.cruise.states:distance_0 c 0.000000E+00 4.558279E-01 1.000000E+15
56 traj.cruise.states:distance_1 c 0.000000E+00 6.370571E-01 1.000000E+15
57 traj.cruise.states:distance_2 c 0.000000E+00 6.943573E-01 1.000000E+15
58 traj.cruise.states:distance_3 c 0.000000E+00 9.619575E-01 1.000000E+15
59 traj.cruise.states:distance_4 c 0.000000E+00 1.330187E+00 1.000000E+15
60 traj.cruise.states:distance_5 c 0.000000E+00 1.446488E+00 1.000000E+15
61 traj.cruise.states:distance_6 c 0.000000E+00 1.762522E+00 1.000000E+15
62 traj.cruise.states:distance_7 c 0.000000E+00 2.197166E+00 1.000000E+15
63 traj.cruise.states:distance_8 c 0.000000E+00 2.334387E+00 1.000000E+15
64 traj.cruise.states:distance_9 c 0.000000E+00 2.598218E+00 1.000000E+15
65 traj.cruise.states:distance_10 c 0.000000E+00 2.961250E+00 1.000000E+15
66 traj.cruise.states:distance_11 c 0.000000E+00 3.075907E+00 1.000000E+15
67 traj.cruise.states:distance_12 c 0.000000E+00 3.204353E+00 1.000000E+15
68 traj.cruise.states:distance_13 c 0.000000E+00 3.381440E+00 1.000000E+15
69 traj.cruise.states:distance_14 c 0.000000E+00 3.437464E+00 1.000000E+15
70 traj.cruise.controls:mach_0 c 1.400000E+00 1.415829E+00 1.680000E+00
71 traj.cruise.controls:mach_1 c 1.400000E+00 1.400004E+00 1.680000E+00
72 traj.cruise.controls:altitude_0 c 8.767123E-01 9.041090E-01 1.000000E+00
73 traj.cruise.controls:altitude_1 c 8.767123E-01 9.999996E-01 1.000000E+00 u
74 traj.descent_1.t_duration_0 c 5.000000E-01 9.683688E-01 1.500000E+00
75 traj.descent_1.states:mass_0 c 0.000000E+00 6.244497E+00 1.000000E+17
76 traj.descent_1.states:mass_1 c 0.000000E+00 6.240291E+00 1.000000E+17
77 traj.descent_1.states:mass_2 c 0.000000E+00 6.238969E+00 1.000000E+17
78 traj.descent_1.states:mass_3 c 0.000000E+00 6.232912E+00 1.000000E+17
79 traj.descent_1.states:mass_4 c 0.000000E+00 6.224925E+00 1.000000E+17
80 traj.descent_1.states:mass_5 c 0.000000E+00 6.222500E+00 1.000000E+17
81 traj.descent_1.states:mass_6 c 0.000000E+00 6.216155E+00 1.000000E+17
82 traj.descent_1.states:mass_7 c 0.000000E+00 6.208340E+00 1.000000E+17
83 traj.descent_1.states:mass_8 c 0.000000E+00 6.206164E+00 1.000000E+17
84 traj.descent_1.states:mass_9 c 0.000000E+00 6.202098E+00 1.000000E+17
85 traj.descent_1.states:mass_10 c 0.000000E+00 6.196460E+00 1.000000E+17
86 traj.descent_1.states:mass_11 c 0.000000E+00 6.194576E+00 1.000000E+17
87 traj.descent_1.states:mass_12 c 0.000000E+00 6.192376E+00 1.000000E+17
88 traj.descent_1.states:mass_13 c 0.000000E+00 6.189134E+00 1.000000E+17
89 traj.descent_1.states:mass_14 c 0.000000E+00 6.188048E+00 1.000000E+17
90 traj.descent_1.states:distance_0 c 0.000000E+00 3.462176E+00 1.000000E+15
91 traj.descent_1.states:distance_1 c 0.000000E+00 3.495312E+00 1.000000E+15
92 traj.descent_1.states:distance_2 c 0.000000E+00 3.505575E+00 1.000000E+15
93 traj.descent_1.states:distance_3 c 0.000000E+00 3.552060E+00 1.000000E+15
94 traj.descent_1.states:distance_4 c 0.000000E+00 3.612012E+00 1.000000E+15
95 traj.descent_1.states:distance_5 c 0.000000E+00 3.629940E+00 1.000000E+15
96 traj.descent_1.states:distance_6 c 0.000000E+00 3.676116E+00 1.000000E+15
97 traj.descent_1.states:distance_7 c 0.000000E+00 3.733284E+00 1.000000E+15
98 traj.descent_1.states:distance_8 c 0.000000E+00 3.749742E+00 1.000000E+15
99 traj.descent_1.states:distance_9 c 0.000000E+00 3.779159E+00 1.000000E+15
100 traj.descent_1.states:distance_10 c 0.000000E+00 3.814685E+00 1.000000E+15
101 traj.descent_1.states:distance_11 c 0.000000E+00 3.824675E+00 1.000000E+15
102 traj.descent_1.states:distance_12 c 0.000000E+00 3.835146E+00 1.000000E+15
103 traj.descent_1.states:distance_13 c 0.000000E+00 3.848308E+00 1.000000E+15
104 traj.descent_1.states:distance_14 c 0.000000E+00 3.852160E+00 1.000000E+15
105 traj.descent_1.controls:mach_0 c 3.800000E-01 1.400004E+00 1.680000E+00
106 traj.descent_1.controls:mach_1 c 3.800000E-01 4.200000E-01 1.680000E+00
107 traj.descent_1.controls:altitude_0 c 0.000000E+00 9.999996E-01 1.000000E+00 u
108 traj.descent_1.controls:altitude_1 c 0.000000E+00 -4.324715E-41 1.000000E+00 l
Constraints (i - inequality, e - equality)
Index Name Type Lower Value Upper Status Lagrange Multiplier (N/A)
0 mission:constraints:range_residual e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
1 gtow_constraint.GTOW e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
2 link_climb_1_mass.mass e 0.000000E+00 2.910383E-16 0.000000E+00 9.00000E+100
3 mission:constraints:mass_residual e 0.000000E+00 2.910383E-16 0.000000E+00 9.00000E+100
4 traj.linkages.climb_1:altitude_final|cruise:altitude_initial e 0.000000E+00 -7.275958E-16 0.000000E+00 9.00000E+100
5 traj.linkages.climb_1:mach_final|cruise:mach_initial e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
6 traj.linkages.cruise:altitude_final|descent_1:altitude_initial e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
7 traj.linkages.cruise:mach_final|descent_1:mach_initial e 0.000000E+00 0.000000E+00 0.000000E+00 9.00000E+100
8 traj.phases.climb_1->initial_boundary_constraint->mach e 2.000000E-01 2.000000E-01 2.000000E-01 9.00000E+100
9 traj.phases.climb_1->initial_boundary_constraint->altitude e 0.000000E+00 1.557390E-37 0.000000E+00 9.00000E+100
10 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 6.146882E-17 0.000000E+00 9.00000E+100
11 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 2.787019E-15 0.000000E+00 9.00000E+100
12 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 9.305277E-15 0.000000E+00 9.00000E+100
13 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 2.460970E-14 0.000000E+00 9.00000E+100
14 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 6.284913E-14 0.000000E+00 9.00000E+100
15 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.527985E-13 0.000000E+00 9.00000E+100
16 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 2.277577E-13 0.000000E+00 9.00000E+100
17 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 3.933563E-13 0.000000E+00 9.00000E+100
18 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 7.158159E-13 0.000000E+00 9.00000E+100
19 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 6.966970E-13 0.000000E+00 9.00000E+100
20 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 8.932838E-13 0.000000E+00 9.00000E+100
21 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 1.249643E-12 0.000000E+00 9.00000E+100
22 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 6.617063E-13 0.000000E+00 9.00000E+100
23 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 7.668682E-13 0.000000E+00 9.00000E+100
24 traj.climb_1.collocation_constraint.defects:mass e 0.000000E+00 8.546614E-13 0.000000E+00 9.00000E+100
25 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 4.903361E-19 0.000000E+00 9.00000E+100
26 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 8.882627E-18 0.000000E+00 9.00000E+100
27 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 2.049982E-17 0.000000E+00 9.00000E+100
28 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 4.841411E-17 0.000000E+00 9.00000E+100
29 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 8.330925E-17 0.000000E+00 9.00000E+100
30 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.288347E-16 0.000000E+00 9.00000E+100
31 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.694276E-16 0.000000E+00 9.00000E+100
32 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 2.161347E-16 0.000000E+00 9.00000E+100
33 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 2.756633E-16 0.000000E+00 9.00000E+100
34 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 2.468080E-16 0.000000E+00 9.00000E+100
35 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 2.766961E-16 0.000000E+00 9.00000E+100
36 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 3.152887E-16 0.000000E+00 9.00000E+100
37 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.613206E-16 0.000000E+00 9.00000E+100
38 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.682230E-16 0.000000E+00 9.00000E+100
39 traj.climb_1.collocation_constraint.defects:distance e 0.000000E+00 1.761438E-16 0.000000E+00 9.00000E+100
40 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 5.190511E-12 0.000000E+00 9.00000E+100
41 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 4.981413E-12 0.000000E+00 9.00000E+100
42 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 4.698026E-12 0.000000E+00 9.00000E+100
43 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 9.414237E-12 0.000000E+00 9.00000E+100
44 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 8.585516E-12 0.000000E+00 9.00000E+100
45 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 7.484989E-12 0.000000E+00 9.00000E+100
46 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 8.496761E-12 0.000000E+00 9.00000E+100
47 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 7.431045E-12 0.000000E+00 9.00000E+100
48 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 6.031319E-12 0.000000E+00 9.00000E+100
49 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 4.716778E-12 0.000000E+00 9.00000E+100
50 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 4.047150E-12 0.000000E+00 9.00000E+100
51 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 3.158192E-12 0.000000E+00 9.00000E+100
52 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 1.397751E-12 0.000000E+00 9.00000E+100
53 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 1.217706E-12 0.000000E+00 9.00000E+100
54 traj.cruise.collocation_constraint.defects:mass e 0.000000E+00 9.668024E-13 0.000000E+00 9.00000E+100
55 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 9.424438E-17 0.000000E+00 9.00000E+100
56 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 9.349838E-17 0.000000E+00 9.00000E+100
57 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 8.976839E-17 0.000000E+00 9.00000E+100
58 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.675893E-16 0.000000E+00 9.00000E+100
59 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.630187E-16 0.000000E+00 9.00000E+100
60 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.477833E-16 0.000000E+00 9.00000E+100
61 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.575864E-16 0.000000E+00 9.00000E+100
62 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.461146E-16 0.000000E+00 9.00000E+100
63 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.207558E-16 0.000000E+00 9.00000E+100
64 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 6.246511E-17 0.000000E+00 9.00000E+100
65 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 9.141236E-17 0.000000E+00 9.00000E+100
66 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 6.652789E-17 0.000000E+00 9.00000E+100
67 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.516862E-17 0.000000E+00 9.00000E+100
68 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 3.406723E-17 0.000000E+00 9.00000E+100
69 traj.cruise.collocation_constraint.defects:distance e 0.000000E+00 1.914727E-17 0.000000E+00 9.00000E+100
70 traj.phases.descent_1->final_boundary_constraint->mach e 2.100000E-01 2.100000E-01 2.100000E-01 9.00000E+100
71 traj.phases.descent_1->final_boundary_constraint->altitude e 0.000000E+00 -1.578521E-40 0.000000E+00 9.00000E+100
72 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.654946E-13 0.000000E+00 9.00000E+100
73 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.673942E-13 0.000000E+00 9.00000E+100
74 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.538074E-13 0.000000E+00 9.00000E+100
75 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 3.044488E-13 0.000000E+00 9.00000E+100
76 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 2.585604E-13 0.000000E+00 9.00000E+100
77 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.941322E-13 0.000000E+00 9.00000E+100
78 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 2.039258E-13 0.000000E+00 9.00000E+100
79 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.541733E-13 0.000000E+00 9.00000E+100
80 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 9.211030E-14 0.000000E+00 9.00000E+100
81 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 4.125271E-14 0.000000E+00 9.00000E+100
82 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.991489E-14 0.000000E+00 9.00000E+100
83 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 5.319702E-15 0.000000E+00 9.00000E+100
84 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.544072E-15 0.000000E+00 9.00000E+100
85 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 7.168181E-16 0.000000E+00 9.00000E+100
86 traj.descent_1.collocation_constraint.defects:mass e 0.000000E+00 1.003147E-16 0.000000E+00 9.00000E+100
87 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 3.831289E-18 0.000000E+00 9.00000E+100
88 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -7.905066E-18 0.000000E+00 9.00000E+100
89 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -2.861343E-18 0.000000E+00 9.00000E+100
90 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.723389E-17 0.000000E+00 9.00000E+100
91 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 4.952267E-18 0.000000E+00 9.00000E+100
92 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -2.872315E-18 0.000000E+00 9.00000E+100
93 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 5.416735E-18 0.000000E+00 9.00000E+100
94 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -8.478368E-18 0.000000E+00 9.00000E+100
95 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 2.355102E-17 0.000000E+00 9.00000E+100
96 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -3.243735E-17 0.000000E+00 9.00000E+100
97 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.188544E-18 0.000000E+00 9.00000E+100
98 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.495585E-17 0.000000E+00 9.00000E+100
99 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 2.427292E-17 0.000000E+00 9.00000E+100
100 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 1.770153E-18 0.000000E+00 9.00000E+100
101 traj.descent_1.collocation_constraint.defects:distance e 0.000000E+00 -1.602837E-17 0.000000E+00 9.00000E+100
102 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.708302E-01 1.000000E+00 9.00000E+100
103 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.528271E-01 1.000000E+00 9.00000E+100
104 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.410077E-01 1.000000E+00 9.00000E+100
105 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.394710E-01 1.000000E+00 9.00000E+100
106 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.394710E-01 1.000000E+00 9.00000E+100
107 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.439610E-01 1.000000E+00 9.00000E+100
108 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.753405E-01 1.000000E+00 9.00000E+100
109 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.887876E-01 1.000000E+00 9.00000E+100
110 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 4.887876E-01 1.000000E+00 9.00000E+100
111 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 5.388265E-01 1.000000E+00 9.00000E+100
112 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.256268E-01 1.000000E+00 9.00000E+100
113 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.543322E-01 1.000000E+00 9.00000E+100
114 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 6.543322E-01 1.000000E+00 9.00000E+100
115 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 7.209206E-01 1.000000E+00 9.00000E+100
116 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.284828E-01 1.000000E+00 9.00000E+100
117 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.686014E-01 1.000000E+00 9.00000E+100
118 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 8.686014E-01 1.000000E+00 9.00000E+100
119 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.143822E-01 1.000000E+00 9.00000E+100
120 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.779896E-01 1.000000E+00 9.00000E+100
121 traj.phases.climb_1->path_constraint->throttle i 0.000000E+00 9.999995E-01 1.000000E+00 u 9.00000E+100
122 traj.phases.cruise->initial_boundary_constraint->throttle i 0.000000E+00 6.581805E-01 1.000000E+00 9.00000E+100
123 traj.phases.cruise->final_boundary_constraint->throttle i 0.000000E+00 6.950000E-01 1.000000E+00 9.00000E+100
124 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.776298E-01 1.000000E+00 9.00000E+100
125 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.485058E-01 1.000000E+00 9.00000E+100
126 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.111974E-01 1.000000E+00 9.00000E+100
127 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.004591E-01 1.000000E+00 9.00000E+100
128 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.004591E-01 1.000000E+00 9.00000E+100
129 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 2.548713E-01 1.000000E+00 9.00000E+100
130 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.965564E-01 1.000000E+00 9.00000E+100
131 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.802329E-01 1.000000E+00 9.00000E+100
132 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.802329E-01 1.000000E+00 9.00000E+100
133 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.423170E-01 1.000000E+00 9.00000E+100
134 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 9.653949E-02 1.000000E+00 9.00000E+100
135 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 7.867897E-02 1.000000E+00 9.00000E+100
136 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 7.867897E-02 1.000000E+00 9.00000E+100
137 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 4.357953E-02 1.000000E+00 9.00000E+100
138 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 9.726228E-03 1.000000E+00 9.00000E+100
139 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.631670E-03 1.000000E+00 9.00000E+100
140 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 3.631670E-03 1.000000E+00 9.00000E+100
141 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 5.466826E-07 1.000000E+00 l 9.00000E+100
142 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 1.725778E-03 1.000000E+00 9.00000E+100
143 traj.phases.descent_1->path_constraint->throttle i 0.000000E+00 4.265474E-03 1.000000E+00 9.00000E+100
--------------------------------------------------------------------------------
/usr/share/miniconda/envs/test/lib/python3.12/site-packages/openmdao/core/driver.py:143: OMDeprecationWarning:boolean evaluation of DriverResult is temporarily implemented to mimick the previous `failed` return behavior of run_driver.
Use the `success` attribute of the returned DriverResult object to test for successful driver completion.
All right, let’s check out this final case’s fuel burn value:
optimized_mission_optimized_wing_fuel_burn = prob.get_val(av.Mission.Summary.FUEL_BURNED, units='kg')[0]
optimized_mission_optimized_wing_aspect_ratio = prob.get_val(av.Aircraft.Wing.ASPECT_RATIO)[0]
print('Mission fuel burn, kg:', optimized_mission_optimized_wing_fuel_burn)
print('Aspect ratio:', optimized_mission_optimized_wing_aspect_ratio)
Mission fuel burn, kg: 9474.57183865188
Aspect ratio: 13.999998491340742
Cool, it’s the lowest yet! Let’s discuss these results in more detail now.
Summary and Takeaways#
We have showcased one of Aviary’s most powerful capabilities here – the ability to simultaneously design an aircraft and optimal trajectory. By building up problem complexity, we can see how optimizing different parts of the problem lead to optimization objective improvements.
Here is a summary table of the results:
Show code cell source
import pandas as pd
# Create a dictionary with the data
data = {
'Case': ['Fixed Mission, Fixed Wing', 'Fixed Mission, Optimized Wing', 'Optimized Mission, Fixed Wing', 'Optimized Mission, Optimized Wing'],
'Optimize Mission': ['-', '-', '✓', '✓'],
'Optimize Wing': ['-', '✓', '-', '✓'],
'Aspect Ratio': [fixed_mission_fixed_wing_aspect_ratio, fixed_mission_optimized_wing_aspect_ratio, optimized_mission_fixed_wing_aspect_ratio, optimized_mission_optimized_wing_aspect_ratio],
'Fuel Burn Value': [fixed_mission_fixed_wing_fuel_burn, fixed_mission_optimized_wing_fuel_burn, optimized_mission_fixed_wing_fuel_burn, optimized_mission_optimized_wing_fuel_burn]
}
# Create a DataFrame from the dictionary
df = pd.DataFrame(data).round(2)
# Display the DataFrame
df
Case | Optimize Mission | Optimize Wing | Aspect Ratio | Fuel Burn Value | |
---|---|---|---|---|---|
0 | Fixed Mission, Fixed Wing | - | - | 11.22 | 10506.26 |
1 | Fixed Mission, Optimized Wing | - | ✓ | 14.00 | 9785.39 |
2 | Optimized Mission, Fixed Wing | ✓ | - | 11.22 | 10358.52 |
3 | Optimized Mission, Optimized Wing | ✓ | ✓ | 14.00 | 9474.57 |
We see that the fully coupled case finds the lowest fuel burn value, as expected. In both cases where the wing aspect ratio is optimized, it moves to the higher bound.
If we didn’t simultaneously design the aircraft and the mission, you would have to manually iterate by first optimizing the aircraft, then the mission, then the aircraft again, etc. This cumbersome process is known as sequential optimization and can lead to non-optimal results for coupled systems, as detailed in Section 13.1 of the Engineering Design Optimization textbook (available for free).
Aviary is unique in its ability to solve these coupled systems using efficient gradient-based optimization.
This doc page contains a simple example, but the true power of coupled multidisciplinary optimization lies in solving more complex design problems. We hope that you can effectively use Aviary to optimally design the next generation of exciting aircraft!