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 division, unicode_literals
from matplotlib import pyplot as plt
from gemseo.api import configure_logger, create_scenario, generate_n2_plot
from gemseo.problems.scalable.parametric.problem import TMScalableProblem
configure_logger()
Out:
<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})
Out:
INFO - 12:58:27:
INFO - 12:58:27: *** Start MDO Scenario execution ***
INFO - 12:58:27: MDOScenario
INFO - 12:58:27: Disciplines: MainModel SubModel_0 SubModel_1
INFO - 12:58:27: MDOFormulation: MDF
INFO - 12:58:27: Algorithm: NLOPT_SLSQP
INFO - 12:58:27: Optimization problem:
INFO - 12:58:27: Minimize: obj(x_local_0, x_local_1, x_shared)
INFO - 12:58:27: With respect to: x_local_0, x_local_1, x_shared
INFO - 12:58:27: Subject to constraints:
INFO - 12:58:27: cstr_0(x_local_0, x_local_1, x_shared) <= 0.0
INFO - 12:58:27: cstr_1(x_local_0, x_local_1, x_shared) <= 0.0
INFO - 12:58:27: +------------------------------------------------------------------------------+
INFO - 12:58:27: | Parameter space |
INFO - 12:58:27: +-----------+-------------+-------+-------------+-------+----------------------+
INFO - 12:58:27: | name | lower_bound | value | upper_bound | type | Initial distribution |
INFO - 12:58:27: +-----------+-------------+-------+-------------+-------+----------------------+
INFO - 12:58:27: | x_local_0 | 0 | 0.5 | 1 | float | |
INFO - 12:58:27: | x_local_0 | 0 | 0.5 | 1 | float | |
INFO - 12:58:27: | x_local_1 | 0 | 0.5 | 1 | float | |
INFO - 12:58:27: | x_local_1 | 0 | 0.5 | 1 | float | |
INFO - 12:58:27: | x_local_1 | 0 | 0.5 | 1 | float | |
INFO - 12:58:27: | x_local_1 | 0 | 0.5 | 1 | float | |
INFO - 12:58:27: | x_shared | 0 | 0.5 | 1 | float | |
INFO - 12:58:27: | x_shared | 0 | 0.5 | 1 | float | |
INFO - 12:58:27: | x_shared | 0 | 0.5 | 1 | float | |
INFO - 12:58:27: +-----------+-------------+-------+-------------+-------+----------------------+
INFO - 12:58:27: Optimization: 0%| | 0/100 [00:00<?, ?it]
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.06535831 -0.1012953 -0.15365405 -0.04796975 -0.03817772 -0.09325931].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.06535831 -0.1012953 -0.15365405 -0.04796975 -0.03817772 -0.09325931].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 624.0608944646348 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.11021098 -0.17164181 -0.27147077 -0.0834051 -0.06725633 -0.16440469
WARNING - 12:58:27: -0.2374275 -0.41605455 -0.19216792].
INFO - 12:58:27: Optimization: 2%|▏ | 2/100 [00:00<00:00, 974.16 it/sec]
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 857.0227534902443 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.10676616 -0.16636559 -0.26721994 -0.08208378 -0.06636862 -0.16217295
WARNING - 12:58:27: -0.18820449 -0.38824109 -0.1892308 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 1222.5268913197779 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.09997637 -0.1561866 -0.25926184 -0.07957677 -0.06476275 -0.1581117
WARNING - 12:58:27: -0.12069412 -0.38099617 -0.18369013].
INFO - 12:58:27: Optimization: 4%|▍ | 4/100 [00:00<00:00, 470.23 it/sec]
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 1384.6328033092384 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.09887809 -0.15463781 -0.2588136 -0.07924044 -0.06457881 -0.15769541
WARNING - 12:58:27: -0.14366232 -0.39044485 -0.18296192].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 1732.8716051687154 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.09765871 -0.15296585 -0.25910732 -0.07894811 -0.06443323 -0.15743311
WARNING - 12:58:27: -0.22542896 -0.38987695 -0.18230891].
INFO - 12:58:27: Optimization: 6%|▌ | 6/100 [00:00<00:00, 307.84 it/sec]
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 1806.9144971470012 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.09736863 -0.15256742 -0.25917601 -0.07887843 -0.06439823 -0.15736984
WARNING - 12:58:27: -0.24490951 -0.38973614 -0.18215301].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 1808.313025999647 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.09736908 -0.15256735 -0.25917469 -0.07887842 -0.06439792 -0.15736906
WARNING - 12:58:27: -0.24490739 -0.38973054 -0.18215271].
INFO - 12:58:27: Optimization: 8%|▊ | 8/100 [00:00<00:00, 228.37 it/sec]
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 1803.8470001638166 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.09737789 -0.15258012 -0.25917314 -0.07887164 -0.06439523 -0.15736355
WARNING - 12:58:27: -0.2449149 -0.38973511 -0.18214681].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 1780.6369646842672 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.09742174 -0.15264383 -0.25916558 -0.07883787 -0.0643819 -0.1573362
WARNING - 12:58:27: -0.24495263 -0.38975866 -0.18211746].
INFO - 12:58:27: Optimization: 10%|█ | 10/100 [00:00<00:00, 182.08 it/sec]
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 1646.953551257594 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.09763371 -0.15295179 -0.25912905 -0.07867458 -0.06431742 -0.15720398
WARNING - 12:58:27: -0.24513503 -0.3898725 -0.18197561].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 910.1384510062192 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.09851788 -0.15423633 -0.25897667 -0.07799349 -0.06404848 -0.15665247
WARNING - 12:58:27: -0.24589585 -0.39034734 -0.1813839 ].
INFO - 12:58:27: Optimization: 12%|█▏ | 12/100 [00:00<00:00, 151.65 it/sec]
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 726.622322806009 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.0987004 -0.1545015 -0.25894521 -0.07785289 -0.06399296 -0.15653862
WARNING - 12:58:27: -0.24605291 -0.39044536 -0.18126175].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 725.8264255316143 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.0987004 -0.1545015 -0.25894521 -0.07785289 -0.06399296 -0.15653862
WARNING - 12:58:27: -0.24605291 -0.39044536 -0.18126175].
INFO - 12:58:27: Optimization: 14%|█▍ | 14/100 [00:00<00:00, 129.93 it/sec]
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Upper bounds violated: [1.35778211 1.8801818 1.13744624 1.68888531 1.6401472 ].
WARNING - 12:58:27: MDAJacobi has reached its maximum number of iterations but the normed residual 726.0716218115125 is still above the tolerance 1e-06.
WARNING - 12:58:27: All components of the normalized vector should be between 0 and 1. Lower bounds violated: [-0.0987004 -0.1545015 -0.25894521 -0.07785289 -0.06399296 -0.15653862
WARNING - 12:58:27: -0.24605291 -0.39044536 -0.18126175].
INFO - 12:58:27: Optimization: 15%|█▌ | 15/100 [00:00<00:00, 121.11 it/sec]
INFO - 12:58:27: Optimization result:
INFO - 12:58:27: Objective value = 0.6704638786393982
INFO - 12:58:27: The result is feasible.
INFO - 12:58:27: Status: None
INFO - 12:58:27: Optimizer message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO Stopped the driver
INFO - 12:58:27: Number of calls to the objective function by the optimizer: 15
INFO - 12:58:27: Constraints values:
INFO - 12:58:27: cstr_0 = [-0.01693211 -5.62972098]
INFO - 12:58:27: cstr_1 = [-1.05472950e+00 -2.22044605e-16 -1.81142650e+00]
INFO - 12:58:27: +----------------------------------------------------------------------------------------------+
INFO - 12:58:27: | Parameter space |
INFO - 12:58:27: +-----------+-------------+-----------------------+-------------+-------+----------------------+
INFO - 12:58:27: | name | lower_bound | value | upper_bound | type | Initial distribution |
INFO - 12:58:27: +-----------+-------------+-----------------------+-------------+-------+----------------------+
INFO - 12:58:27: | x_local_0 | 0 | 0.5931064439648573 | 1 | float | |
INFO - 12:58:27: | x_local_0 | 0 | 0.9999999999999986 | 1 | float | |
INFO - 12:58:27: | x_local_1 | 0 | 0 | 1 | float | |
INFO - 12:58:27: | x_local_1 | 0 | 0.9546530639346952 | 1 | float | |
INFO - 12:58:27: | x_local_1 | 0 | 2.595010559315549e-16 | 1 | float | |
INFO - 12:58:27: | x_local_1 | 0 | 0 | 1 | float | |
INFO - 12:58:27: | x_shared | 0 | 1.867903458855938e-16 | 1 | float | |
INFO - 12:58:27: | x_shared | 0 | 0 | 1 | float | |
INFO - 12:58:27: | x_shared | 0 | 0 | 1 | float | |
INFO - 12:58:27: +-----------+-------------+-----------------------+-------------+-------+----------------------+
INFO - 12:58:27: *** MDO Scenario run terminated in 0:00:00.836668 ***
{'algo': 'NLOPT_SLSQP', 'max_iter': 100}
Post-process the results¶
scenario.post_process("OptHistoryView", save=False, show=False)
# Workaround for HTML rendering, instead of ``show=True``
plt.show()
Total running time of the script: ( 0 minutes 2.258 seconds)