Note
Click here to download the full example code
Scalable study¶
We want to compare IDF
and MDF
formulations
with respect to the problem dimension for the aerostructure problem.
For that,
we use the ScalabilityStudy
and PostScalabilityStudy
classes.
from gemseo.api import configure_logger
from gemseo.api import create_discipline
from gemseo.api import create_scenario
from gemseo.problems.aerostructure.aerostructure_design_space import (
AerostructureDesignSpace,
)
from gemseo.problems.scalable.data_driven.api import create_scalability_study
from gemseo.problems.scalable.data_driven.api import plot_scalability_results
configure_logger()
Out:
<RootLogger root (INFO)>
Create the disciplinary datasets¶
First of all, we create the disciplinary Dataset
datasets
based on a DiagonalDOE
.
datasets = {}
disciplines = create_discipline(["Aerodynamics", "Structure", "Mission"])
for discipline in disciplines:
design_space = AerostructureDesignSpace()
design_space.filter(discipline.get_input_data_names())
output_names = iter(discipline.get_output_data_names())
scenario = create_scenario(
discipline,
"DisciplinaryOpt",
next(output_names),
design_space,
scenario_type="DOE",
)
for output_name in output_names:
scenario.add_observable(output_name)
scenario.execute({"algo": "DiagonalDOE", "n_samples": 10})
datasets[discipline.name] = scenario.export_to_dataset(
name=discipline.name, opt_naming=False
)
Out:
/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/4.0.1/lib/python3.9/site-packages/gemseo/algos/design_space.py:448: ComplexWarning: Casting complex values to real discards the imaginary part
self.__current_value[name] = array_value.astype(
INFO - 10:04:37:
INFO - 10:04:37: *** Start DOEScenario execution ***
INFO - 10:04:37: DOEScenario
INFO - 10:04:37: Disciplines: Aerodynamics
INFO - 10:04:37: MDO formulation: DisciplinaryOpt
INFO - 10:04:37: Optimization problem:
INFO - 10:04:37: minimize drag(thick_airfoils, sweep, displ)
INFO - 10:04:37: with respect to displ, sweep, thick_airfoils
INFO - 10:04:37: over the design space:
INFO - 10:04:37: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:37: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:37: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:37: | thick_airfoils | 5 | 15 | 25 | float |
INFO - 10:04:37: | sweep | 10 | 25 | 35 | float |
INFO - 10:04:37: | displ | -1000 | -700 | 1000 | float |
INFO - 10:04:37: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:37: Solving optimization problem with algorithm DiagonalDOE:
INFO - 10:04:37: ... 0%| | 0/10 [00:00<?, ?it]
INFO - 10:04:37: ... 100%|██████████| 10/10 [00:00<00:00, 780.48 it/sec, obj=-320]
INFO - 10:04:37: Optimization result:
INFO - 10:04:37: Optimizer info:
INFO - 10:04:37: Status: None
INFO - 10:04:37: Message: None
INFO - 10:04:37: Number of calls to the objective function by the optimizer: 10
INFO - 10:04:37: Solution:
INFO - 10:04:37: Objective: -319.99905478395067
INFO - 10:04:37: Design space:
INFO - 10:04:37: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:37: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:37: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:37: | thick_airfoils | 5 | 25 | 25 | float |
INFO - 10:04:37: | sweep | 10 | 35 | 35 | float |
INFO - 10:04:37: | displ | -1000 | 1000 | 1000 | float |
INFO - 10:04:37: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:37: *** End DOEScenario execution (time: 0:00:00.021679) ***
INFO - 10:04:37:
INFO - 10:04:37: *** Start DOEScenario execution ***
INFO - 10:04:37: DOEScenario
INFO - 10:04:37: Disciplines: Structure
INFO - 10:04:37: MDO formulation: DisciplinaryOpt
INFO - 10:04:37: Optimization problem:
INFO - 10:04:37: minimize mass(thick_panels, sweep, forces)
INFO - 10:04:37: with respect to forces, sweep, thick_panels
INFO - 10:04:37: over the design space:
INFO - 10:04:37: +--------------+-------------+-------+-------------+-------+
INFO - 10:04:37: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:37: +--------------+-------------+-------+-------------+-------+
INFO - 10:04:37: | thick_panels | 1 | 3 | 20 | float |
INFO - 10:04:37: | sweep | 10 | 25 | 35 | float |
INFO - 10:04:37: | forces | -1000 | 400 | 1000 | float |
INFO - 10:04:37: +--------------+-------------+-------+-------------+-------+
INFO - 10:04:37: Solving optimization problem with algorithm DiagonalDOE:
INFO - 10:04:37: ... 0%| | 0/10 [00:00<?, ?it]
INFO - 10:04:37: ... 100%|██████████| 10/10 [00:00<00:00, 793.89 it/sec, obj=4.02e+5]
INFO - 10:04:37: Optimization result:
INFO - 10:04:37: Optimizer info:
INFO - 10:04:37: Status: None
INFO - 10:04:37: Message: None
INFO - 10:04:37: Number of calls to the objective function by the optimizer: 10
INFO - 10:04:37: Solution:
INFO - 10:04:37: Objective: 100.08573388203513
INFO - 10:04:37: Design space:
INFO - 10:04:37: +--------------+-------------+-------+-------------+-------+
INFO - 10:04:37: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:37: +--------------+-------------+-------+-------------+-------+
INFO - 10:04:37: | thick_panels | 1 | 1 | 20 | float |
INFO - 10:04:37: | sweep | 10 | 10 | 35 | float |
INFO - 10:04:37: | forces | -1000 | -1000 | 1000 | float |
INFO - 10:04:37: +--------------+-------------+-------+-------------+-------+
INFO - 10:04:37: *** End DOEScenario execution (time: 0:00:00.021486) ***
INFO - 10:04:37:
INFO - 10:04:37: *** Start DOEScenario execution ***
INFO - 10:04:37: DOEScenario
INFO - 10:04:37: Disciplines: Mission
INFO - 10:04:37: MDO formulation: DisciplinaryOpt
INFO - 10:04:37: Optimization problem:
INFO - 10:04:37: minimize range(drag, lift, mass, reserve_fact)
INFO - 10:04:37: with respect to drag, lift, mass, reserve_fact
INFO - 10:04:37: over the design space:
INFO - 10:04:37: +--------------+-------------+--------+-------------+-------+
INFO - 10:04:37: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:37: +--------------+-------------+--------+-------------+-------+
INFO - 10:04:37: | drag | 100 | 340 | 1000 | float |
INFO - 10:04:37: | lift | 0.1 | 0.5 | 1 | float |
INFO - 10:04:37: | mass | 100000 | 100000 | 500000 | float |
INFO - 10:04:37: | reserve_fact | -1000 | 0 | 1000 | float |
INFO - 10:04:37: +--------------+-------------+--------+-------------+-------+
INFO - 10:04:37: Solving optimization problem with algorithm DiagonalDOE:
INFO - 10:04:37: ... 0%| | 0/10 [00:00<?, ?it]
INFO - 10:04:37: ... 100%|██████████| 10/10 [00:00<00:00, 754.86 it/sec, obj=1.6e+3+j]
INFO - 10:04:37: Optimization result:
INFO - 10:04:37: Optimizer info:
INFO - 10:04:37: Status: None
INFO - 10:04:37: Message: None
INFO - 10:04:37: Number of calls to the objective function by the optimizer: 10
INFO - 10:04:37: Solution:
INFO - 10:04:37: Objective: (1600+0j)
INFO - 10:04:37: Design space:
INFO - 10:04:37: +--------------+-------------+--------+-------------+-------+
INFO - 10:04:37: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:37: +--------------+-------------+--------+-------------+-------+
INFO - 10:04:37: | drag | 100 | 1000 | 1000 | float |
INFO - 10:04:37: | lift | 0.1 | 1 | 1 | float |
INFO - 10:04:37: | mass | 100000 | 500000 | 500000 | float |
INFO - 10:04:37: | reserve_fact | -1000 | 1000 | 1000 | float |
INFO - 10:04:37: +--------------+-------------+--------+-------------+-------+
INFO - 10:04:37: *** End DOEScenario execution (time: 0:00:00.022460) ***
Define the design problem¶
Then, we instantiate a ScalabilityStudy
from the definition of the design problem, expressed in terms of
objective function (to maximize or minimize),
design variables (local and global)
and constraints (equality and inequality).
We can also specify the coupling variables that we could scale.
Note that this information is only required by the scaling stage.
Indeed, MDO formulations know perfectly
how to automatically recognize the coupling variables.
Lastly, we can specify some properties of the scalable methodology
such as the fill factor
describing the level of dependence between inputs and outputs.
study = create_scalability_study(
objective="range",
design_variables=["thick_airfoils", "thick_panels", "sweep"],
eq_constraints=["c_rf"],
ineq_constraints=["c_lift"],
maximize_objective=True,
coupling_variables=["forces", "displ"],
fill_factor=-1,
)
Out:
INFO - 10:04:37: Initialize the scalability study
INFO - 10:04:37: Create directories
INFO - 10:04:37: Working directory: study
INFO - 10:04:37: Post-processing: study/visualization
INFO - 10:04:37: Optimization history view: study/visualization/optimization_history
INFO - 10:04:37: Scalability views: study/visualization/scalability_study
INFO - 10:04:37: Dependency matrices: study/visualization/dependency_matrix
INFO - 10:04:37: Results: study/results
INFO - 10:04:37: Optimization problem
INFO - 10:04:37: Objective: maximize range
INFO - 10:04:37: Design variables: ['thick_airfoils', 'thick_panels', 'sweep']
INFO - 10:04:37: Equality constraints: ['c_rf']
INFO - 10:04:37: Inequality constraints: ['c_lift']
INFO - 10:04:37: Study properties
INFO - 10:04:37: Default fill factor: -1
INFO - 10:04:37: Active probability: 0.1
INFO - 10:04:37: Feasibility level: 0.8
INFO - 10:04:37: Start at equilibrium: True
INFO - 10:04:37: Early stopping: True
Add the disciplinary datasets¶
study.add_discipline(datasets["Aerodynamics"])
study.add_discipline(datasets["Structure"])
study.add_discipline(datasets["Mission"])
Out:
INFO - 10:04:37: Add scalable discipline # 1
INFO - 10:04:37: Name: Aerodynamics
INFO - 10:04:37: Inputs: displ(1), sweep(1), thick_airfoils(1)
INFO - 10:04:37: Outputs: drag(1), forces(1), lift(1)
INFO - 10:04:37: Built from 10
INFO - 10:04:37: Add scalable discipline # 2
INFO - 10:04:37: Name: Structure
INFO - 10:04:37: Inputs: forces(1), sweep(1), thick_panels(1)
INFO - 10:04:37: Outputs: displ(1), mass(1), reserve_fact(1)
INFO - 10:04:37: Built from 10
INFO - 10:04:37: Add scalable discipline # 3
INFO - 10:04:37: Name: Mission
INFO - 10:04:37: Inputs: drag(1), lift(1), mass(1), reserve_fact(1)
INFO - 10:04:37: Outputs: c_lift(1), c_rf(1), range(1)
INFO - 10:04:37: Built from 10
Add the optimization strategies¶
Then, we define the different optimization strategies we want to compare: In this case, the strategies are:
MDF
formulation with the"NLOPT_SLSQP"
optimization algorithm and no more than 100 iterations,IDF
formulation with the"NLOPT_SLSQP"
optimization algorithm and no more than 100 iterations,
Note that in this case, we compare MDO formulations but we could easily compare optimization algorithms.
study.add_optimization_strategy("NLOPT_SLSQP", 100, "MDF")
study.add_optimization_strategy("NLOPT_SLSQP", 100, "IDF")
Out:
INFO - 10:04:37: Add optimization strategy # 1
INFO - 10:04:37: Algorithm: NLOPT_SLSQP
INFO - 10:04:37: Algorithm options: max_iter(100)
INFO - 10:04:37: Formulation: MDF
INFO - 10:04:37: Formulation options: None
INFO - 10:04:37: Add optimization strategy # 2
INFO - 10:04:37: Algorithm: NLOPT_SLSQP
INFO - 10:04:37: Algorithm options: max_iter(100)
INFO - 10:04:37: Formulation: IDF
INFO - 10:04:37: Formulation options: None
Add the scaling strategy¶
After that, we define the different scaling strategies for which we want to compare the optimization strategies. In this case, the strategies are:
All design parameters have a size equal to 1,
All design parameters have a size equal to 20.
To do that, we pass design_size=[1, 20]
to the ScalabilityStudy.add_scaling_strategies()
method.
design_size
expects either:
a list of integer where the ith component is the size for the ith scaling strategy,
an integer changing the fixed size (if
None
, use the original size).
Note that we could also compare the optimization strategies while
varying the size of the different coupling variables (use
coupling_size
),varying the size of the different equality constraints (use
eq_size
),varying the size of the different inequality constraints (use
ineq_size
),varying the size of any variable (use
variables
),
where the corresponding arguments works in the same way as design_size
,
except for variables
which expects a list of dictionary
whose keys are variables names and values are variables sizes.
In this way, we can use this argument to fine-tune a scaling strategy
to very specific variables, e.g. local variables.
study.add_scaling_strategies(design_size=[1, 20])
Out:
INFO - 10:04:37: Add scaling strategies
INFO - 10:04:37: Number of strategies: 2
INFO - 10:04:37: Strategy # 1
INFO - 10:04:37: Design variables: 1
INFO - 10:04:37: Coupling variables: None
INFO - 10:04:37: Equality constraints: None
INFO - 10:04:37: Inequality constraints: None
INFO - 10:04:37: Variables: None
INFO - 10:04:37: Strategy # 2
INFO - 10:04:37: Design variables: 20
INFO - 10:04:37: Coupling variables: None
INFO - 10:04:37: Equality constraints: None
INFO - 10:04:37: Inequality constraints: None
INFO - 10:04:37: Variables: None
Execute the scalable study¶
Then, we execute the scalability study,
i.e. to build and execute a ScalableProblem
for each optimization strategy and each scaling strategy,
and repeat it 2 times in order to get statistics on the results
(because the ScalableDiagonalModel
relies on stochastic features.
study.execute(n_replicates=2)
Out:
INFO - 10:04:37: Execute scalability study 2 times
INFO - 10:04:37: Formulation: MDF - Algo: NLOPT_SLSQP - Scaling: 1/2 - Replicate: 1/2
/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/4.0.1/lib/python3.9/site-packages/gemseo/problems/scalable/data_driven/model.py:147: ComplexWarning: Casting complex values to real discards the imaginary part
data[:, indices] = (value - lower_bound) / (upper_bound - lower_bound)
INFO - 10:04:37: Build a preliminary MDA to start at equilibrium
INFO - 10:04:38:
INFO - 10:04:38: *** Start MDOScenario execution ***
INFO - 10:04:38: MDOScenario
INFO - 10:04:38: Disciplines: sdm_Aerodynamics sdm_Structure sdm_Mission
INFO - 10:04:38: MDO formulation: MDF
INFO - 10:04:38: Optimization problem:
INFO - 10:04:38: minimize -range(thick_airfoils, thick_panels, sweep)
INFO - 10:04:38: with respect to sweep, thick_airfoils, thick_panels
INFO - 10:04:38: subject to constraints:
INFO - 10:04:38: c_lift(thick_airfoils, thick_panels, sweep) <= [0.89921929]
INFO - 10:04:38: c_rf(thick_airfoils, thick_panels, sweep) == 0.4974338463722028
INFO - 10:04:38: over the design space:
INFO - 10:04:38: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:38: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:38: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:38: | thick_airfoils | 0 | 0.5 | 1 | float |
INFO - 10:04:38: | thick_panels | 0 | 0.5 | 1 | float |
INFO - 10:04:38: | sweep | 0 | 0.5 | 1 | float |
INFO - 10:04:38: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:38: Solving optimization problem with algorithm NLOPT_SLSQP:
INFO - 10:04:38: ... 0%| | 0/100 [00:00<?, ?it]
INFO - 10:04:38: ... 3%|▎ | 3/100 [00:00<00:00, 836.89 it/sec]
INFO - 10:04:38: ... 6%|▌ | 6/100 [00:00<00:00, 411.09 it/sec]
WARNING - 10:04:38: MDAJacobi has reached its maximum number of iterations but the normed residual 0.5590169943749475 is still above the tolerance 1e-06.
INFO - 10:04:38: ... 9%|▉ | 9/100 [00:00<00:00, 249.41 it/sec]
INFO - 10:04:38: ... 9%|▉ | 9/100 [00:00<00:00, 248.82 it/sec]
INFO - 10:04:38: Optimization result:
INFO - 10:04:38: Optimizer info:
INFO - 10:04:38: Status: None
INFO - 10:04:38: Message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO Stopped the driver
INFO - 10:04:38: Number of calls to the objective function by the optimizer: 9
INFO - 10:04:38: Solution:
INFO - 10:04:38: The solution is feasible.
INFO - 10:04:38: Objective: -0.2601666720067595
INFO - 10:04:38: Standardized constraints:
INFO - 10:04:38: c_lift + offset = [-0.60364682]
INFO - 10:04:38: c_rf - 0.4974338463722028 = -5.551115123125783e-17
INFO - 10:04:38: Design space:
INFO - 10:04:38: +----------------+-------------+--------------------+-------------+-------+
INFO - 10:04:38: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:38: +----------------+-------------+--------------------+-------------+-------+
INFO - 10:04:38: | thick_airfoils | 0 | 0.9999999999996533 | 1 | float |
INFO - 10:04:38: | thick_panels | 0 | 0.3912634521674405 | 1 | float |
INFO - 10:04:38: | sweep | 0 | 0.9999999999980954 | 1 | float |
INFO - 10:04:38: +----------------+-------------+--------------------+-------------+-------+
INFO - 10:04:38: *** End MDOScenario execution (time: 0:00:00.412528) ***
INFO - 10:04:40: Formulation: MDF - Algo: NLOPT_SLSQP - Scaling: 1/2 - Replicate: 2/2
/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/4.0.1/lib/python3.9/site-packages/gemseo/problems/scalable/data_driven/model.py:147: ComplexWarning: Casting complex values to real discards the imaginary part
data[:, indices] = (value - lower_bound) / (upper_bound - lower_bound)
INFO - 10:04:41: Build a preliminary MDA to start at equilibrium
INFO - 10:04:41:
INFO - 10:04:41: *** Start MDOScenario execution ***
INFO - 10:04:41: MDOScenario
INFO - 10:04:41: Disciplines: sdm_Aerodynamics sdm_Structure sdm_Mission
INFO - 10:04:41: MDO formulation: MDF
INFO - 10:04:41: Optimization problem:
INFO - 10:04:41: minimize -range(thick_airfoils, thick_panels, sweep)
INFO - 10:04:41: with respect to sweep, thick_airfoils, thick_panels
INFO - 10:04:41: subject to constraints:
INFO - 10:04:41: c_lift(thick_airfoils, thick_panels, sweep) <= [0.89918761]
INFO - 10:04:41: c_rf(thick_airfoils, thick_panels, sweep) == 0.49640175939595016
INFO - 10:04:41: over the design space:
INFO - 10:04:41: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:41: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:41: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:41: | thick_airfoils | 0 | 0.5 | 1 | float |
INFO - 10:04:41: | thick_panels | 0 | 0.5 | 1 | float |
INFO - 10:04:41: | sweep | 0 | 0.5 | 1 | float |
INFO - 10:04:41: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:41: Solving optimization problem with algorithm NLOPT_SLSQP:
INFO - 10:04:41: ... 0%| | 0/100 [00:00<?, ?it]
INFO - 10:04:41: ... 3%|▎ | 3/100 [00:00<00:00, 882.01 it/sec]
INFO - 10:04:41: ... 6%|▌ | 6/100 [00:00<00:00, 451.78 it/sec]
INFO - 10:04:41: ... 8%|▊ | 8/100 [00:00<00:00, 339.81 it/sec]
INFO - 10:04:41: Optimization result:
INFO - 10:04:41: Optimizer info:
INFO - 10:04:41: Status: None
INFO - 10:04:41: Message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO Stopped the driver
INFO - 10:04:41: Number of calls to the objective function by the optimizer: 8
INFO - 10:04:41: Solution:
INFO - 10:04:41: The solution is feasible.
INFO - 10:04:41: Objective: -0.2696970985756206
INFO - 10:04:41: Standardized constraints:
INFO - 10:04:41: c_lift + offset = [-0.48406661]
INFO - 10:04:41: c_rf - 0.49640175939595016 = 2.7755575615628914e-16
INFO - 10:04:41: Design space:
INFO - 10:04:41: +----------------+-------------+-----------------------+-------------+-------+
INFO - 10:04:41: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:41: +----------------+-------------+-----------------------+-------------+-------+
INFO - 10:04:41: | thick_airfoils | 0 | 7.858468983373231e-17 | 1 | float |
INFO - 10:04:41: | thick_panels | 0 | 0.1305332770797188 | 1 | float |
INFO - 10:04:41: | sweep | 0 | 3.077348745177621e-17 | 1 | float |
INFO - 10:04:41: +----------------+-------------+-----------------------+-------------+-------+
INFO - 10:04:41: *** End MDOScenario execution (time: 0:00:00.304753) ***
INFO - 10:04:43: Formulation: MDF - Algo: NLOPT_SLSQP - Scaling: 2/2 - Replicate: 1/2
/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/4.0.1/lib/python3.9/site-packages/gemseo/problems/scalable/data_driven/model.py:147: ComplexWarning: Casting complex values to real discards the imaginary part
data[:, indices] = (value - lower_bound) / (upper_bound - lower_bound)
INFO - 10:04:44: Build a preliminary MDA to start at equilibrium
INFO - 10:04:44:
INFO - 10:04:44: *** Start MDOScenario execution ***
INFO - 10:04:44: MDOScenario
INFO - 10:04:44: Disciplines: sdm_Aerodynamics sdm_Structure sdm_Mission
INFO - 10:04:44: MDO formulation: MDF
INFO - 10:04:44: Optimization problem:
INFO - 10:04:44: minimize -range(thick_airfoils, thick_panels, sweep)
INFO - 10:04:44: with respect to sweep, thick_airfoils, thick_panels
INFO - 10:04:44: subject to constraints:
INFO - 10:04:44: c_lift(thick_airfoils, thick_panels, sweep) <= [0.89921929]
INFO - 10:04:44: c_rf(thick_airfoils, thick_panels, sweep) == 0.4974338463722027
INFO - 10:04:44: Solving optimization problem with algorithm NLOPT_SLSQP:
INFO - 10:04:44: ... 0%| | 0/100 [00:00<?, ?it]
INFO - 10:04:44: ... 2%|▏ | 2/100 [00:00<00:00, 974.79 it/sec]
INFO - 10:04:45: ... 5%|▌ | 5/100 [00:00<00:00, 395.23 it/sec]
INFO - 10:04:45: ... 7%|▋ | 7/100 [00:00<00:00, 281.44 it/sec]
INFO - 10:04:45: ... 9%|▉ | 9/100 [00:00<00:00, 215.70 it/sec]
INFO - 10:04:45: ... 11%|█ | 11/100 [00:00<00:00, 175.57 it/sec]
INFO - 10:04:45: ... 13%|█▎ | 13/100 [00:00<00:00, 147.92 it/sec]
INFO - 10:04:45: ... 15%|█▌ | 15/100 [00:00<00:00, 127.82 it/sec]
INFO - 10:04:45: ... 17%|█▋ | 17/100 [00:00<00:00, 112.29 it/sec]
INFO - 10:04:45: ... 19%|█▉ | 19/100 [00:01<00:00, 99.99 it/sec]
INFO - 10:04:45: ... 21%|██ | 21/100 [00:01<00:00, 90.85 it/sec]
INFO - 10:04:46: ... 23%|██▎ | 23/100 [00:01<00:00, 82.63 it/sec]
INFO - 10:04:46: ... 25%|██▌ | 25/100 [00:01<00:00, 75.73 it/sec]
INFO - 10:04:46: ... 27%|██▋ | 27/100 [00:01<00:01, 69.69 it/sec]
INFO - 10:04:46: ... 29%|██▉ | 29/100 [00:01<00:01, 64.78 it/sec]
INFO - 10:04:46: ... 31%|███ | 31/100 [00:01<00:01, 60.09 it/sec]
INFO - 10:04:46: ... 33%|███▎ | 33/100 [00:01<00:01, 55.99 it/sec]
INFO - 10:04:46: ... 35%|███▌ | 35/100 [00:01<00:01, 52.95 it/sec]
INFO - 10:04:46: ... 37%|███▋ | 37/100 [00:01<00:01, 50.06 it/sec]
INFO - 10:04:46: ... 39%|███▉ | 39/100 [00:02<00:01, 47.42 it/sec]
INFO - 10:04:47: ... 41%|████ | 41/100 [00:02<00:01, 45.10 it/sec]
INFO - 10:04:47: ... 43%|████▎ | 43/100 [00:02<00:01, 42.99 it/sec]
INFO - 10:04:47: ... 45%|████▌ | 45/100 [00:02<00:01, 41.03 it/sec]
INFO - 10:04:47: ... 47%|████▋ | 47/100 [00:02<00:01, 39.28 it/sec]
INFO - 10:04:47: ... 49%|████▉ | 49/100 [00:02<00:01, 37.68 it/sec]
INFO - 10:04:47: ... 51%|█████ | 51/100 [00:02<00:01, 36.23 it/sec]
INFO - 10:04:47: ... 53%|█████▎ | 53/100 [00:02<00:01, 34.83 it/sec]
INFO - 10:04:47: ... 55%|█████▌ | 55/100 [00:02<00:01, 33.49 it/sec]
INFO - 10:04:47: ... 57%|█████▋ | 57/100 [00:03<00:01, 32.34 it/sec]
INFO - 10:04:48: ... 59%|█████▉ | 59/100 [00:03<00:01, 31.27 it/sec]
INFO - 10:04:48: ... 61%|██████ | 61/100 [00:03<00:01, 30.24 it/sec]
INFO - 10:04:48: ... 63%|██████▎ | 63/100 [00:03<00:01, 29.27 it/sec]
INFO - 10:04:48: ... 65%|██████▌ | 65/100 [00:03<00:01, 28.36 it/sec]
INFO - 10:04:48: ... 67%|██████▋ | 67/100 [00:03<00:01, 27.50 it/sec]
INFO - 10:04:48: ... 69%|██████▉ | 69/100 [00:03<00:01, 26.66 it/sec]
INFO - 10:04:48: ... 71%|███████ | 71/100 [00:03<00:01, 25.92 it/sec]
INFO - 10:04:48: ... 73%|███████▎ | 73/100 [00:03<00:01, 25.19 it/sec]
INFO - 10:04:48: ... 75%|███████▌ | 75/100 [00:04<00:01, 24.50 it/sec]
INFO - 10:04:49: ... 77%|███████▋ | 77/100 [00:04<00:00, 23.87 it/sec]
INFO - 10:04:49: ... 77%|███████▋ | 77/100 [00:04<00:00, 23.85 it/sec]
INFO - 10:04:49: Optimization result:
INFO - 10:04:49: Optimizer info:
INFO - 10:04:49: Status: None
INFO - 10:04:49: Message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO Stopped the driver
INFO - 10:04:49: Number of calls to the objective function by the optimizer: 77
INFO - 10:04:49: Solution:
INFO - 10:04:49: The solution is feasible.
INFO - 10:04:49: Objective: -0.47216032578366923
INFO - 10:04:49: Standardized constraints:
INFO - 10:04:49: c_lift + offset = [-0.72037473]
INFO - 10:04:49: c_rf - 0.4974338463722027 = 4.84604467665406e-10
INFO - 10:04:49: *** End MDOScenario execution (time: 0:00:04.200570) ***
INFO - 10:04:51: Formulation: MDF - Algo: NLOPT_SLSQP - Scaling: 2/2 - Replicate: 2/2
/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/4.0.1/lib/python3.9/site-packages/gemseo/problems/scalable/data_driven/model.py:147: ComplexWarning: Casting complex values to real discards the imaginary part
data[:, indices] = (value - lower_bound) / (upper_bound - lower_bound)
INFO - 10:04:53: Build a preliminary MDA to start at equilibrium
INFO - 10:04:53:
INFO - 10:04:53: *** Start MDOScenario execution ***
INFO - 10:04:53: MDOScenario
INFO - 10:04:53: Disciplines: sdm_Aerodynamics sdm_Structure sdm_Mission
INFO - 10:04:53: MDO formulation: MDF
INFO - 10:04:53: Optimization problem:
INFO - 10:04:53: minimize -range(thick_airfoils, thick_panels, sweep)
INFO - 10:04:53: with respect to sweep, thick_airfoils, thick_panels
INFO - 10:04:53: subject to constraints:
INFO - 10:04:53: c_lift(thick_airfoils, thick_panels, sweep) <= [0.89918761]
INFO - 10:04:53: c_rf(thick_airfoils, thick_panels, sweep) == 0.49640175939595016
INFO - 10:04:53: Solving optimization problem with algorithm NLOPT_SLSQP:
INFO - 10:04:53: ... 0%| | 0/100 [00:00<?, ?it]
INFO - 10:04:53: ... 3%|▎ | 3/100 [00:00<00:00, 668.50 it/sec]
INFO - 10:04:53: ... 6%|▌ | 6/100 [00:00<00:00, 331.43 it/sec]
INFO - 10:04:53: ... 8%|▊ | 8/100 [00:00<00:00, 247.90 it/sec]
INFO - 10:04:53: ... 11%|█ | 11/100 [00:00<00:00, 180.95 it/sec]
INFO - 10:04:53: ... 13%|█▎ | 13/100 [00:00<00:00, 152.53 it/sec]
INFO - 10:04:54: ... 15%|█▌ | 15/100 [00:00<00:00, 131.07 it/sec]
INFO - 10:04:54: ... 17%|█▋ | 17/100 [00:00<00:00, 114.90 it/sec]
INFO - 10:04:54: ... 19%|█▉ | 19/100 [00:00<00:00, 102.28 it/sec]
INFO - 10:04:54: ... 21%|██ | 21/100 [00:01<00:00, 92.25 it/sec]
INFO - 10:04:54: ... 23%|██▎ | 23/100 [00:01<00:00, 83.83 it/sec]
INFO - 10:04:54: ... 25%|██▌ | 25/100 [00:01<00:00, 76.77 it/sec]
INFO - 10:04:54: ... 27%|██▋ | 27/100 [00:01<00:01, 71.09 it/sec]
INFO - 10:04:54: ... 29%|██▉ | 29/100 [00:01<00:01, 66.12 it/sec]
INFO - 10:04:54: ... 31%|███ | 31/100 [00:01<00:01, 61.75 it/sec]
INFO - 10:04:55: ... 33%|███▎ | 33/100 [00:01<00:01, 57.84 it/sec]
INFO - 10:04:55: ... 35%|███▌ | 35/100 [00:01<00:01, 54.25 it/sec]
INFO - 10:04:55: ... 37%|███▋ | 37/100 [00:01<00:01, 51.14 it/sec]
INFO - 10:04:55: ... 39%|███▉ | 39/100 [00:02<00:01, 48.39 it/sec]
INFO - 10:04:55: ... 39%|███▉ | 39/100 [00:02<00:01, 48.34 it/sec]
INFO - 10:04:55: Optimization result:
INFO - 10:04:55: Optimizer info:
INFO - 10:04:55: Status: None
INFO - 10:04:55: Message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO Stopped the driver
INFO - 10:04:55: Number of calls to the objective function by the optimizer: 39
INFO - 10:04:55: Solution:
INFO - 10:04:55: The solution is feasible.
INFO - 10:04:55: Objective: -0.5465979730661812
INFO - 10:04:55: Standardized constraints:
INFO - 10:04:55: c_lift + offset = [-0.55583389]
INFO - 10:04:55: c_rf - 0.49640175939595016 = -3.4138469828803863e-10
INFO - 10:04:55: *** End MDOScenario execution (time: 0:00:02.076949) ***
INFO - 10:04:58: Formulation: IDF - Algo: NLOPT_SLSQP - Scaling: 1/2 - Replicate: 1/2
/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/4.0.1/lib/python3.9/site-packages/gemseo/problems/scalable/data_driven/model.py:147: ComplexWarning: Casting complex values to real discards the imaginary part
data[:, indices] = (value - lower_bound) / (upper_bound - lower_bound)
INFO - 10:04:58: Build a preliminary MDA to start at equilibrium
INFO - 10:04:59:
INFO - 10:04:59: *** Start MDOScenario execution ***
INFO - 10:04:59: MDOScenario
INFO - 10:04:59: Disciplines: sdm_Aerodynamics sdm_Structure sdm_Mission
INFO - 10:04:59: MDO formulation: IDF
INFO - 10:04:59: Optimization problem:
INFO - 10:04:59: minimize -range(lift, mass, reserve_fact, drag)
INFO - 10:04:59: with respect to displ, drag, forces, lift, mass, reserve_fact, sweep, thick_airfoils, thick_panels
INFO - 10:04:59: subject to constraints:
INFO - 10:04:59: c_lift(lift, mass, reserve_fact, drag) <= [0.89921929]
INFO - 10:04:59: drag_forces_lift: drag#forces#lift(thick_airfoils, sweep, displ): drag(thick_airfoils, sweep, displ) - drag == 0.0
INFO - 10:04:59: forces(thick_airfoils, sweep, displ) - forces == 0.0
INFO - 10:04:59: lift(thick_airfoils, sweep, displ) - lift == 0.0
INFO - 10:04:59: displ_mass_reserve_fact: displ#mass#reserve_fact(thick_panels, sweep, forces): displ(thick_panels, sweep, forces) - displ == 0.0
INFO - 10:04:59: mass(thick_panels, sweep, forces) - mass == 0.0
INFO - 10:04:59: reserve_fact(thick_panels, sweep, forces) - reserve_fact == 0.0
INFO - 10:04:59: c_rf(lift, mass, reserve_fact, drag) == 0.4974338463722028
INFO - 10:04:59: over the design space:
INFO - 10:04:59: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:59: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:59: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:59: | thick_airfoils | 0 | 0.5 | 1 | float |
INFO - 10:04:59: | thick_panels | 0 | 0.5 | 1 | float |
INFO - 10:04:59: | sweep | 0 | 0.5 | 1 | float |
INFO - 10:04:59: | lift | 0 | 0.5 | 1 | float |
INFO - 10:04:59: | displ | 0 | 0.5 | 1 | float |
INFO - 10:04:59: | mass | 0 | 0.5 | 1 | float |
INFO - 10:04:59: | reserve_fact | 0 | 0.5 | 1 | float |
INFO - 10:04:59: | drag | 0 | 0.5 | 1 | float |
INFO - 10:04:59: | forces | 0 | 0.5 | 1 | float |
INFO - 10:04:59: +----------------+-------------+-------+-------------+-------+
INFO - 10:04:59: Solving optimization problem with algorithm NLOPT_SLSQP:
INFO - 10:04:59: ... 0%| | 0/100 [00:00<?, ?it]
INFO - 10:04:59: ... 9%|▉ | 9/100 [00:00<00:00, 1623.56 it/sec]
INFO - 10:04:59: Optimization result:
INFO - 10:04:59: Optimizer info:
INFO - 10:04:59: Status: None
INFO - 10:04:59: Message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO Stopped the driver
INFO - 10:04:59: Number of calls to the objective function by the optimizer: 9
INFO - 10:04:59: Solution:
INFO - 10:04:59: The solution is feasible.
INFO - 10:04:59: Objective: -0.2602798816865293
INFO - 10:04:59: Standardized constraints:
INFO - 10:04:59: c_lift + offset = [-0.60380946]
INFO - 10:04:59: c_rf - 0.4974338463722028 = 1.1102230246251565e-16
INFO - 10:04:59: displ_mass_reserve_fact = [1.11022302e-16 7.49533020e-08 0.00000000e+00]
INFO - 10:04:59: drag_forces_lift = [7.52224839e-04 9.43689571e-16 1.85962357e-15]
INFO - 10:04:59: Design space:
INFO - 10:04:59: +----------------+-------------+--------------------+-------------+-------+
INFO - 10:04:59: | name | lower_bound | value | upper_bound | type |
INFO - 10:04:59: +----------------+-------------+--------------------+-------------+-------+
INFO - 10:04:59: | thick_airfoils | 0 | 1 | 1 | float |
INFO - 10:04:59: | thick_panels | 0 | 0.3918787447278465 | 1 | float |
INFO - 10:04:59: | sweep | 0 | 1 | 1 | float |
INFO - 10:04:59: | lift | 0 | 0.1597339997710884 | 1 | float |
INFO - 10:04:59: | displ | 0 | 0.2036563246825801 | 1 | float |
INFO - 10:04:59: | mass | 0 | 0.586193716821707 | 1 | float |
INFO - 10:04:59: | reserve_fact | 0 | 0.6287729345538414 | 1 | float |
INFO - 10:04:59: | drag | 0 | 0.2880021596911273 | 1 | float |
INFO - 10:04:59: | forces | 0 | 0.4446778719377943 | 1 | float |
INFO - 10:04:59: +----------------+-------------+--------------------+-------------+-------+
INFO - 10:04:59: *** End MDOScenario execution (time: 0:00:00.076080) ***
INFO - 10:05:01: Formulation: IDF - Algo: NLOPT_SLSQP - Scaling: 1/2 - Replicate: 2/2
/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/4.0.1/lib/python3.9/site-packages/gemseo/problems/scalable/data_driven/model.py:147: ComplexWarning: Casting complex values to real discards the imaginary part
data[:, indices] = (value - lower_bound) / (upper_bound - lower_bound)
INFO - 10:05:01: Build a preliminary MDA to start at equilibrium
INFO - 10:05:01:
INFO - 10:05:01: *** Start MDOScenario execution ***
INFO - 10:05:01: MDOScenario
INFO - 10:05:01: Disciplines: sdm_Aerodynamics sdm_Structure sdm_Mission
INFO - 10:05:01: MDO formulation: IDF
INFO - 10:05:01: Optimization problem:
INFO - 10:05:01: minimize -range(lift, mass, reserve_fact, drag)
INFO - 10:05:01: with respect to displ, drag, forces, lift, mass, reserve_fact, sweep, thick_airfoils, thick_panels
INFO - 10:05:01: subject to constraints:
INFO - 10:05:01: c_lift(lift, mass, reserve_fact, drag) <= [0.89918761]
INFO - 10:05:01: drag_forces_lift: drag#forces#lift(thick_airfoils, sweep, displ): drag(thick_airfoils, sweep, displ) - drag == 0.0
INFO - 10:05:01: forces(thick_airfoils, sweep, displ) - forces == 0.0
INFO - 10:05:01: lift(thick_airfoils, sweep, displ) - lift == 0.0
INFO - 10:05:01: displ_mass_reserve_fact: displ#mass#reserve_fact(thick_panels, sweep, forces): displ(thick_panels, sweep, forces) - displ == 0.0
INFO - 10:05:01: mass(thick_panels, sweep, forces) - mass == 0.0
INFO - 10:05:01: reserve_fact(thick_panels, sweep, forces) - reserve_fact == 0.0
INFO - 10:05:01: c_rf(lift, mass, reserve_fact, drag) == 0.49640175939595016
INFO - 10:05:02: over the design space:
INFO - 10:05:02: +----------------+-------------+-------+-------------+-------+
INFO - 10:05:02: | name | lower_bound | value | upper_bound | type |
INFO - 10:05:02: +----------------+-------------+-------+-------------+-------+
INFO - 10:05:02: | thick_airfoils | 0 | 0.5 | 1 | float |
INFO - 10:05:02: | thick_panels | 0 | 0.5 | 1 | float |
INFO - 10:05:02: | sweep | 0 | 0.5 | 1 | float |
INFO - 10:05:02: | lift | 0 | 0.5 | 1 | float |
INFO - 10:05:02: | displ | 0 | 0.5 | 1 | float |
INFO - 10:05:02: | mass | 0 | 0.5 | 1 | float |
INFO - 10:05:02: | reserve_fact | 0 | 0.5 | 1 | float |
INFO - 10:05:02: | drag | 0 | 0.5 | 1 | float |
INFO - 10:05:02: | forces | 0 | 0.5 | 1 | float |
INFO - 10:05:02: +----------------+-------------+-------+-------------+-------+
INFO - 10:05:02: Solving optimization problem with algorithm NLOPT_SLSQP:
INFO - 10:05:02: ... 0%| | 0/100 [00:00<?, ?it]
INFO - 10:05:02: ... 8%|▊ | 8/100 [00:00<00:00, 1846.10 it/sec]
INFO - 10:05:02: Optimization result:
INFO - 10:05:02: Optimizer info:
INFO - 10:05:02: Status: None
INFO - 10:05:02: Message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO Stopped the driver
INFO - 10:05:02: Number of calls to the objective function by the optimizer: 8
INFO - 10:05:02: Solution:
INFO - 10:05:02: The solution is feasible.
INFO - 10:05:02: Objective: -0.2696970985756207
INFO - 10:05:02: Standardized constraints:
INFO - 10:05:02: c_lift + offset = [-0.48406661]
INFO - 10:05:02: c_rf - 0.49640175939595016 = 0.0
INFO - 10:05:02: displ_mass_reserve_fact = [ 0.00000000e+00 0.00000000e+00 -2.77555756e-17]
INFO - 10:05:02: drag_forces_lift = [-1.11022302e-16 0.00000000e+00 1.11022302e-16]
INFO - 10:05:02: Design space:
INFO - 10:05:02: +----------------+-------------+-----------------------+-------------+-------+
INFO - 10:05:02: | name | lower_bound | value | upper_bound | type |
INFO - 10:05:02: +----------------+-------------+-----------------------+-------------+-------+
INFO - 10:05:02: | thick_airfoils | 0 | 1.600564755384918e-16 | 1 | float |
INFO - 10:05:02: | thick_panels | 0 | 0.1305332770797183 | 1 | float |
INFO - 10:05:02: | sweep | 0 | 0 | 1 | float |
INFO - 10:05:02: | lift | 0 | 0.8922327706542336 | 1 | float |
INFO - 10:05:02: | displ | 0 | 0.5916701425799068 | 1 | float |
INFO - 10:05:02: | mass | 0 | 0.3236885735428515 | 1 | float |
INFO - 10:05:02: | reserve_fact | 0 | 0.1773984242002992 | 1 | float |
INFO - 10:05:02: | drag | 0 | 0.7393753041390633 | 1 | float |
INFO - 10:05:02: | forces | 0 | 0.7828315097092865 | 1 | float |
INFO - 10:05:02: +----------------+-------------+-----------------------+-------------+-------+
INFO - 10:05:02: *** End MDOScenario execution (time: 0:00:00.068797) ***
INFO - 10:05:04: Formulation: IDF - Algo: NLOPT_SLSQP - Scaling: 2/2 - Replicate: 1/2
/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/4.0.1/lib/python3.9/site-packages/gemseo/problems/scalable/data_driven/model.py:147: ComplexWarning: Casting complex values to real discards the imaginary part
data[:, indices] = (value - lower_bound) / (upper_bound - lower_bound)
INFO - 10:05:05: Build a preliminary MDA to start at equilibrium
INFO - 10:05:05:
INFO - 10:05:05: *** Start MDOScenario execution ***
INFO - 10:05:05: MDOScenario
INFO - 10:05:05: Disciplines: sdm_Aerodynamics sdm_Structure sdm_Mission
INFO - 10:05:05: MDO formulation: IDF
INFO - 10:05:05: Optimization problem:
INFO - 10:05:05: minimize -range(lift, mass, reserve_fact, drag)
INFO - 10:05:05: with respect to displ, drag, forces, lift, mass, reserve_fact, sweep, thick_airfoils, thick_panels
INFO - 10:05:05: subject to constraints:
INFO - 10:05:05: c_lift(lift, mass, reserve_fact, drag) <= [0.89921929]
INFO - 10:05:05: drag_forces_lift: drag#forces#lift(thick_airfoils, sweep, displ): drag(thick_airfoils, sweep, displ) - drag == 0.0
INFO - 10:05:05: forces(thick_airfoils, sweep, displ) - forces == 0.0
INFO - 10:05:05: lift(thick_airfoils, sweep, displ) - lift == 0.0
INFO - 10:05:05: displ_mass_reserve_fact: displ#mass#reserve_fact(thick_panels, sweep, forces): displ(thick_panels, sweep, forces) - displ == 0.0
INFO - 10:05:05: mass(thick_panels, sweep, forces) - mass == 0.0
INFO - 10:05:05: reserve_fact(thick_panels, sweep, forces) - reserve_fact == 0.0
INFO - 10:05:05: c_rf(lift, mass, reserve_fact, drag) == 0.4974338463722027
INFO - 10:05:05: Solving optimization problem with algorithm NLOPT_SLSQP:
INFO - 10:05:05: ... 0%| | 0/100 [00:00<?, ?it]
INFO - 10:05:05: ... 9%|▉ | 9/100 [00:00<00:00, 869.06 it/sec]
INFO - 10:05:05: ... 17%|█▋ | 17/100 [00:00<00:00, 414.85 it/sec]
INFO - 10:05:05: ... 24%|██▍ | 24/100 [00:00<00:00, 282.74 it/sec]
INFO - 10:05:06: ... 31%|███ | 31/100 [00:00<00:00, 214.38 it/sec]
INFO - 10:05:06: ... 38%|███▊ | 38/100 [00:00<00:00, 172.47 it/sec]
INFO - 10:05:06: ... 45%|████▌ | 45/100 [00:00<00:00, 144.16 it/sec]
INFO - 10:05:06: ... 52%|█████▏ | 52/100 [00:00<00:00, 123.94 it/sec]
INFO - 10:05:06: ... 59%|█████▉ | 59/100 [00:00<00:00, 108.53 it/sec]
INFO - 10:05:06: ... 66%|██████▌ | 66/100 [00:01<00:00, 96.53 it/sec]
INFO - 10:05:06: ... 73%|███████▎ | 73/100 [00:01<00:00, 86.89 it/sec]
INFO - 10:05:06: ... 78%|███████▊ | 78/100 [00:01<00:00, 80.91 it/sec]
INFO - 10:05:06: Optimization result:
INFO - 10:05:06: Optimizer info:
INFO - 10:05:06: Status: None
INFO - 10:05:06: Message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO Stopped the driver
INFO - 10:05:06: Number of calls to the objective function by the optimizer: 78
INFO - 10:05:06: Solution:
INFO - 10:05:06: The solution is feasible.
INFO - 10:05:06: Objective: -0.4721603268164957
INFO - 10:05:06: Standardized constraints:
INFO - 10:05:06: c_lift + offset = [-0.72037473]
INFO - 10:05:06: c_rf - 0.4974338463722027 = 5.551115123125783e-17
INFO - 10:05:06: displ_mass_reserve_fact = [-2.15885904e-09 1.64748681e-09 -9.69851754e-10]
INFO - 10:05:06: drag_forces_lift = [5.64415060e-10 9.02571455e-10 2.11442742e-10]
INFO - 10:05:06: *** End MDOScenario execution (time: 0:00:01.246025) ***
INFO - 10:05:09: Formulation: IDF - Algo: NLOPT_SLSQP - Scaling: 2/2 - Replicate: 2/2
/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/4.0.1/lib/python3.9/site-packages/gemseo/problems/scalable/data_driven/model.py:147: ComplexWarning: Casting complex values to real discards the imaginary part
data[:, indices] = (value - lower_bound) / (upper_bound - lower_bound)
INFO - 10:05:11: Build a preliminary MDA to start at equilibrium
INFO - 10:05:11:
INFO - 10:05:11: *** Start MDOScenario execution ***
INFO - 10:05:11: MDOScenario
INFO - 10:05:11: Disciplines: sdm_Aerodynamics sdm_Structure sdm_Mission
INFO - 10:05:11: MDO formulation: IDF
INFO - 10:05:11: Optimization problem:
INFO - 10:05:11: minimize -range(lift, mass, reserve_fact, drag)
INFO - 10:05:11: with respect to displ, drag, forces, lift, mass, reserve_fact, sweep, thick_airfoils, thick_panels
INFO - 10:05:11: subject to constraints:
INFO - 10:05:11: c_lift(lift, mass, reserve_fact, drag) <= [0.89918761]
INFO - 10:05:11: drag_forces_lift: drag#forces#lift(thick_airfoils, sweep, displ): drag(thick_airfoils, sweep, displ) - drag == 0.0
INFO - 10:05:11: forces(thick_airfoils, sweep, displ) - forces == 0.0
INFO - 10:05:11: lift(thick_airfoils, sweep, displ) - lift == 0.0
INFO - 10:05:11: displ_mass_reserve_fact: displ#mass#reserve_fact(thick_panels, sweep, forces): displ(thick_panels, sweep, forces) - displ == 0.0
INFO - 10:05:11: mass(thick_panels, sweep, forces) - mass == 0.0
INFO - 10:05:11: reserve_fact(thick_panels, sweep, forces) - reserve_fact == 0.0
INFO - 10:05:11: c_rf(lift, mass, reserve_fact, drag) == 0.49640175939595016
INFO - 10:05:11: Solving optimization problem with algorithm NLOPT_SLSQP:
INFO - 10:05:11: ... 0%| | 0/100 [00:00<?, ?it]
INFO - 10:05:11: ... 9%|▉ | 9/100 [00:00<00:00, 872.91 it/sec]
INFO - 10:05:11: ... 17%|█▋ | 17/100 [00:00<00:00, 414.37 it/sec]
INFO - 10:05:11: ... 24%|██▍ | 24/100 [00:00<00:00, 281.34 it/sec]
INFO - 10:05:11: ... 31%|███ | 31/100 [00:00<00:00, 212.76 it/sec]
INFO - 10:05:11: ... 38%|███▊ | 38/100 [00:00<00:00, 170.76 it/sec]
INFO - 10:05:11: ... 39%|███▉ | 39/100 [00:00<00:00, 165.42 it/sec]
INFO - 10:05:11: Optimization result:
INFO - 10:05:11: Optimizer info:
INFO - 10:05:11: Status: None
INFO - 10:05:11: Message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO Stopped the driver
INFO - 10:05:11: Number of calls to the objective function by the optimizer: 39
INFO - 10:05:11: Solution:
INFO - 10:05:11: The solution is feasible.
INFO - 10:05:11: Objective: -0.5465979624197809
INFO - 10:05:11: Standardized constraints:
INFO - 10:05:11: c_lift + offset = [-0.55583389]
INFO - 10:05:11: c_rf - 0.49640175939595016 = 0.0
INFO - 10:05:11: displ_mass_reserve_fact = [ 1.11022302e-16 -1.04083409e-17 1.38777878e-17]
INFO - 10:05:11: drag_forces_lift = [0.0000000e+00 4.4408921e-16 0.0000000e+00]
INFO - 10:05:11: *** End MDOScenario execution (time: 0:00:00.614326) ***
[<gemseo.problems.scalable.data_driven.study.result.ScalabilityResult object at 0x7fdbf857cbb0>, <gemseo.problems.scalable.data_driven.study.result.ScalabilityResult object at 0x7fdbf81192e0>, <gemseo.problems.scalable.data_driven.study.result.ScalabilityResult object at 0x7fdbf84a45b0>, <gemseo.problems.scalable.data_driven.study.result.ScalabilityResult object at 0x7fdbfa5a3b20>, <gemseo.problems.scalable.data_driven.study.result.ScalabilityResult object at 0x7fdbfb368be0>, <gemseo.problems.scalable.data_driven.study.result.ScalabilityResult object at 0x7fdbfa7c9e50>, <gemseo.problems.scalable.data_driven.study.result.ScalabilityResult object at 0x7fdbf81220d0>, <gemseo.problems.scalable.data_driven.study.result.ScalabilityResult object at 0x7fdbe15ccc40>]
Look at the dependency matrices¶
Here are the dependency matrices obtained with the 1st replicate when
design_size=10
.
Aerodynamics¶

Structure¶

Mission¶

Look at optimization histories¶
Here are the optimization histories obtained with the 1st replicate when
design_size=10
, where the left side represents the MDF
formulation
while the right one represents the IDF
formulation.
Objective function¶


Design variables¶


Equality constraints¶


Inequality constraints¶


Post-process the results¶
Lastly, we plot the results.
Because of the replicates,
the latter are not displayed as one line per optimization strategy
w.r.t. scaling strategy,
but as one series of boxplots per optimization strategy w.r.t. scaling strategy,
where the boxplots represents the variability due to the 10 replicates.
In this case, it seems that
the MDF
formulation is more expensive than the IDF
one
when the design space dimension increases
while they seems to be the same when each design parameter has a size equal to 1.
post = plot_scalability_results("study")
post.labelize_scaling_strategy("Number of design parameters per type.")
post.plot(xmargin=3.0, xticks=[1.0, 20.0], xticks_labels=["1", "20"], widths=1.0)
Out:
INFO - 10:05:14: Post-process for scalability study
INFO - 10:05:14: Working directory: study
INFO - 10:05:14: Save exec_time plot in study/visualization/scalability_study/exec_time.png
INFO - 10:05:14: Save n_calls plot in study/visualization/scalability_study/n_calls.png
INFO - 10:05:15: Save n_calls_linearize plot in study/visualization/scalability_study/n_calls_linearize.png
INFO - 10:05:15: Save total_calls plot in study/visualization/scalability_study/total_calls.png
INFO - 10:05:15: Save is_feasible plot in study/visualization/scalability_study/is_feasible.png
INFO - 10:05:15: Execute post-processing
INFO - 10:05:15: Type: replicate

Total running time of the script: ( 0 minutes 38.518 seconds)