Note
Click here to download the full example code
Parametric scalable MDO problem - MDF¶
We define a scalable problem based on two strongly coupled disciplines and a weakly one, with the following properties:
3 shared design parameters,
2 local design parameters for the first strongly coupled discipline,
2 coupling variables for the first strongly coupled discipline,
4 local design parameters for the second strongly coupled discipline,
3 coupling variables for the second strongly coupled discipline.
We would like to solve this MDO problem by means of an MDF formulation.
from __future__ import annotations
from gemseo.api import configure_logger
from gemseo.api import create_scenario
from gemseo.api import generate_n2_plot
from gemseo.problems.scalable.parametric.problem import TMScalableProblem
configure_logger()
<RootLogger root (INFO)>
Instantiation of the scalable problem¶
n_shared = 3
n_local = [2, 4]
n_coupling = [2, 3]
problem = TMScalableProblem(n_shared, n_local, n_coupling)
Display the coupling structure¶
generate_n2_plot(problem.disciplines, save=False, show=True)

Solve the MDO using an MDF formulation¶
scenario = create_scenario(problem.disciplines, "MDF", "obj", problem.design_space)
scenario.add_constraint("cstr_0", "ineq")
scenario.add_constraint("cstr_1", "ineq")
scenario.execute({"algo": "NLOPT_SLSQP", "max_iter": 100})
INFO - 17:20:44:
INFO - 17:20:44: *** Start MDOScenario execution ***
INFO - 17:20:44: MDOScenario
INFO - 17:20:44: Disciplines: MainModel SubModel_0 SubModel_1
INFO - 17:20:44: MDO formulation: MDF
INFO - 17:20:44: Optimization problem:
INFO - 17:20:44: minimize obj(x_local_0, x_local_1, x_shared)
INFO - 17:20:44: with respect to x_local_0, x_local_1, x_shared
INFO - 17:20:44: subject to constraints:
INFO - 17:20:44: cstr_0(x_local_0, x_local_1, x_shared) <= 0.0
INFO - 17:20:44: cstr_1(x_local_0, x_local_1, x_shared) <= 0.0
INFO - 17:20:44: over the design space:
INFO - 17:20:44: | Parameter space |
INFO - 17:20:44: +-----------+-------------+-------+-------------+-------+----------------------+
INFO - 17:20:44: | name | lower_bound | value | upper_bound | type | Initial distribution |
INFO - 17:20:44: +-----------+-------------+-------+-------------+-------+----------------------+
INFO - 17:20:44: | x_local_0 | 0 | 0.5 | 1 | float | |
INFO - 17:20:44: | x_local_0 | 0 | 0.5 | 1 | float | |
INFO - 17:20:44: | x_local_1 | 0 | 0.5 | 1 | float | |
INFO - 17:20:44: | x_local_1 | 0 | 0.5 | 1 | float | |
INFO - 17:20:44: | x_local_1 | 0 | 0.5 | 1 | float | |
INFO - 17:20:44: | x_local_1 | 0 | 0.5 | 1 | float | |
INFO - 17:20:44: | x_shared | 0 | 0.5 | 1 | float | |
INFO - 17:20:44: | x_shared | 0 | 0.5 | 1 | float | |
INFO - 17:20:44: | x_shared | 0 | 0.5 | 1 | float | |
INFO - 17:20:44: +-----------+-------------+-------+-------------+-------+----------------------+
INFO - 17:20:44: Solving optimization problem with algorithm NLOPT_SLSQP:
INFO - 17:20:44: ... 0%| | 0/100 [00:00<?, ?it]
INFO - 17:20:44: ... 1%| | 1/100 [00:00<00:04, 21.74 it/sec, obj=0.5]
WARNING - 17:20:44: MDAJacobi has reached its maximum number of iterations but the normed residual 628.5348041278223 is still above the tolerance 1e-06.
WARNING - 17:20:44: MDAJacobi has reached its maximum number of iterations but the normed residual 855.939250180759 is still above the tolerance 1e-06.
INFO - 17:20:44: ... 2%|▏ | 2/100 [00:00<00:19, 5.03 it/sec, obj=0.761]
WARNING - 17:20:44: MDAJacobi has reached its maximum number of iterations but the normed residual 1222.112924405924 is still above the tolerance 1e-06.
INFO - 17:20:44: ... 3%|▎ | 3/100 [00:00<00:17, 5.59 it/sec, obj=0.735]
WARNING - 17:20:45: MDAJacobi has reached its maximum number of iterations but the normed residual 1385.5049620986567 is still above the tolerance 1e-06.
INFO - 17:20:45: ... 4%|▍ | 4/100 [00:00<00:16, 5.91 it/sec, obj=0.691]
WARNING - 17:20:45: MDAJacobi has reached its maximum number of iterations but the normed residual 1733.2178166635606 is still above the tolerance 1e-06.
INFO - 17:20:45: ... 5%|▌ | 5/100 [00:00<00:15, 6.14 it/sec, obj=0.682]
WARNING - 17:20:45: MDAJacobi has reached its maximum number of iterations but the normed residual 1809.1058564937541 is still above the tolerance 1e-06.
INFO - 17:20:45: ... 6%|▌ | 6/100 [00:00<00:14, 6.28 it/sec, obj=0.672]
WARNING - 17:20:45: MDAJacobi has reached its maximum number of iterations but the normed residual 1810.0817661089236 is still above the tolerance 1e-06.
INFO - 17:20:45: ... 7%|▋ | 7/100 [00:01<00:14, 6.40 it/sec, obj=0.671]
WARNING - 17:20:45: MDAJacobi has reached its maximum number of iterations but the normed residual 1804.117512802312 is still above the tolerance 1e-06.
INFO - 17:20:45: ... 8%|▊ | 8/100 [00:01<00:14, 6.49 it/sec, obj=0.671]
WARNING - 17:20:45: MDAJacobi has reached its maximum number of iterations but the normed residual 1781.4230266840048 is still above the tolerance 1e-06.
INFO - 17:20:45: ... 9%|▉ | 9/100 [00:01<00:13, 6.57 it/sec, obj=0.671]
WARNING - 17:20:45: MDAJacobi has reached its maximum number of iterations but the normed residual 1646.1968290578134 is still above the tolerance 1e-06.
INFO - 17:20:45: ... 10%|█ | 10/100 [00:01<00:13, 6.63 it/sec, obj=0.671]
WARNING - 17:20:45: MDAJacobi has reached its maximum number of iterations but the normed residual 909.2480409657202 is still above the tolerance 1e-06.
INFO - 17:20:46: ... 11%|█ | 11/100 [00:01<00:13, 6.68 it/sec, obj=0.671]
WARNING - 17:20:46: MDAJacobi has reached its maximum number of iterations but the normed residual 725.9807159973328 is still above the tolerance 1e-06.
INFO - 17:20:46: ... 12%|█▏ | 12/100 [00:01<00:13, 6.73 it/sec, obj=0.67]
WARNING - 17:20:46: MDAJacobi has reached its maximum number of iterations but the normed residual 724.9413769402323 is still above the tolerance 1e-06.
INFO - 17:20:46: ... 13%|█▎ | 13/100 [00:01<00:12, 6.76 it/sec, obj=0.67]
WARNING - 17:20:46: MDAJacobi has reached its maximum number of iterations but the normed residual 726.784699893992 is still above the tolerance 1e-06.
INFO - 17:20:46: ... 14%|█▍ | 14/100 [00:02<00:12, 6.79 it/sec, obj=0.67]
INFO - 17:20:46: ... 15%|█▌ | 15/100 [00:02<00:11, 7.27 it/sec, obj=Not evaluated]
INFO - 17:20:46: Optimization result:
INFO - 17:20:46: Optimizer info:
INFO - 17:20:46: Status: None
INFO - 17:20:46: Message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO Stopped the driver
INFO - 17:20:46: Number of calls to the objective function by the optimizer: 15
INFO - 17:20:46: Solution:
INFO - 17:20:46: The solution is feasible.
INFO - 17:20:46: Objective: 0.670463878639397
INFO - 17:20:46: Standardized constraints:
INFO - 17:20:46: cstr_0 = [-0.01693211 -5.62972098]
INFO - 17:20:46: cstr_1 = [-1.05472950e+00 2.22044605e-16 -1.81142650e+00]
INFO - 17:20:46: +----------------------------------------------------------------------------------------------+
INFO - 17:20:46: | Parameter space |
INFO - 17:20:46: +-----------+-------------+-----------------------+-------------+-------+----------------------+
INFO - 17:20:46: | name | lower_bound | value | upper_bound | type | Initial distribution |
INFO - 17:20:46: +-----------+-------------+-----------------------+-------------+-------+----------------------+
INFO - 17:20:46: | x_local_0 | 0 | 0.5931064439648591 | 1 | float | |
INFO - 17:20:46: | x_local_0 | 0 | 1 | 1 | float | |
INFO - 17:20:46: | x_local_1 | 0 | 0 | 1 | float | |
INFO - 17:20:46: | x_local_1 | 0 | 0.9546530639347032 | 1 | float | |
INFO - 17:20:46: | x_local_1 | 0 | 0 | 1 | float | |
INFO - 17:20:46: | x_local_1 | 0 | 4.985109760672119e-16 | 1 | float | |
INFO - 17:20:46: | x_shared | 0 | 5.297941653541373e-17 | 1 | float | |
INFO - 17:20:46: | x_shared | 0 | 0 | 1 | float | |
INFO - 17:20:46: | x_shared | 0 | 2.001779104424825e-16 | 1 | float | |
INFO - 17:20:46: +-----------+-------------+-----------------------+-------------+-------+----------------------+
INFO - 17:20:46: *** End MDOScenario execution (time: 0:00:02.096441) ***
{'max_iter': 100, 'algo': 'NLOPT_SLSQP'}
Post-process the results¶
scenario.post_process("OptHistoryView", save=False, show=True)
<gemseo.post.opt_history_view.OptHistoryView object at 0x7fcd1b589d00>
Total running time of the script: ( 0 minutes 4.138 seconds)