Note
Go to the end to download the full example code.
Post-processing#
In this example, we will discover the different functions of the API related to graphical post-processing of scenarios.
from __future__ import annotations
from gemseo import configure_logger
from gemseo import create_discipline
from gemseo import create_scenario
from gemseo import execute_post
from gemseo import get_available_post_processings
from gemseo.problems.mdo.sellar.sellar_design_space import SellarDesignSpace
configure_logger()
<RootLogger root (INFO)>
Get available post-processors#
The get_available_post_processings()
function returns the list
of post-processing algorithms available in GEMSEO or in external modules
get_available_post_processings()
['Animation', 'BasicHistory', 'ConstraintsHistory', 'Correlations', 'GradientSensitivity', 'HessianHistory', 'ObjConstrHist', 'OptHistoryView', 'ParallelCoordinates', 'ParetoFront', 'QuadApprox', 'RadarChart', 'Robustness', 'SOM', 'ScatterPlotMatrix', 'TopologyView', 'VariableInfluence']
Post-process a scenario#
The API function execute_post()
can generate visualizations
of the optimization or DOE results. For that, it considers the object to
post-process to_post_proc
, the post-processor post_name
with its **settings
. E.g.
disciplines = create_discipline(["Sellar1", "Sellar2", "SellarSystem"])
design_space = SellarDesignSpace()
scenario = create_scenario(
disciplines, "obj", design_space, name="SellarMDFScenario", formulation_name="MDF"
)
scenario.add_constraint("c_1", constraint_type="ineq")
scenario.add_constraint("c_2", constraint_type="ineq")
scenario.execute(algo_name="NLOPT_SLSQP", max_iter=100)
execute_post(scenario, post_name="OptHistoryView", save=False, show=False)
/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/stable/lib/python3.9/site-packages/gemseo/algos/design_space.py:424: ComplexWarning: Casting complex values to real discards the imaginary part
self.__current_value[name] = array_value.astype(
INFO - 08:36:37:
INFO - 08:36:37: *** Start SellarMDFScenario execution ***
INFO - 08:36:37: SellarMDFScenario
INFO - 08:36:37: Disciplines: Sellar1 Sellar2 SellarSystem
INFO - 08:36:37: MDO formulation: MDF
INFO - 08:36:37: Optimization problem:
INFO - 08:36:37: minimize obj(x_1, x_2, x_shared)
INFO - 08:36:37: with respect to x_1, x_2, x_shared
INFO - 08:36:37: subject to constraints:
INFO - 08:36:37: c_1(x_1, x_2, x_shared) <= 0
INFO - 08:36:37: c_2(x_1, x_2, x_shared) <= 0
INFO - 08:36:37: over the design space:
INFO - 08:36:37: +-------------+-------------+-------+-------------+-------+
INFO - 08:36:37: | Name | Lower bound | Value | Upper bound | Type |
INFO - 08:36:37: +-------------+-------------+-------+-------------+-------+
INFO - 08:36:37: | x_1 | 0 | 1 | 10 | float |
INFO - 08:36:37: | x_2 | 0 | 1 | 10 | float |
INFO - 08:36:37: | x_shared[0] | -10 | 4 | 10 | float |
INFO - 08:36:37: | x_shared[1] | 0 | 3 | 10 | float |
INFO - 08:36:37: +-------------+-------------+-------+-------------+-------+
INFO - 08:36:37: Solving optimization problem with algorithm NLOPT_SLSQP:
INFO - 08:36:37: 1%| | 1/100 [00:00<00:01, 61.88 it/sec, obj=23]
INFO - 08:36:37: 2%|▏ | 2/100 [00:00<00:03, 26.77 it/sec, obj=5.39]
INFO - 08:36:37: 3%|▎ | 3/100 [00:00<00:03, 31.17 it/sec, obj=3.41]
INFO - 08:36:37: 4%|▍ | 4/100 [00:00<00:02, 34.00 it/sec, obj=3.19]
INFO - 08:36:37: 5%|▌ | 5/100 [00:00<00:02, 35.96 it/sec, obj=3.18]
INFO - 08:36:37: 6%|▌ | 6/100 [00:00<00:02, 37.39 it/sec, obj=3.18]
ERROR - 08:36:37: NLopt run failed: NLopt roundoff-limited, RoundoffLimited
Traceback (most recent call last):
File "/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/stable/lib/python3.9/site-packages/gemseo/algos/opt/nlopt/nlopt.py", line 384, in _run
nlopt_problem.optimize(x_0.real)
File "/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/stable/lib/python3.9/site-packages/nlopt/nlopt.py", line 335, in optimize
return _nlopt.opt_optimize(self, *args)
nlopt.RoundoffLimited: NLopt roundoff-limited
INFO - 08:36:37: 7%|▋ | 7/100 [00:00<00:02, 42.86 it/sec, obj=3.18]
INFO - 08:36:37: Optimization result:
INFO - 08:36:37: Optimizer info:
INFO - 08:36:37: Status: None
INFO - 08:36:37: Message: GEMSEO stopped the driver.
INFO - 08:36:37: Number of calls to the objective function by the optimizer: 8
INFO - 08:36:37: Solution:
INFO - 08:36:37: The solution is feasible.
INFO - 08:36:37: Objective: 3.1833939621753298
INFO - 08:36:37: Standardized constraints:
INFO - 08:36:37: c_1 = 1.6424639426304566e-11
INFO - 08:36:37: c_2 = -20.244722684036216
INFO - 08:36:37: Design space:
INFO - 08:36:37: +-------------+-------------+-----------------------+-------------+-------+
INFO - 08:36:37: | Name | Lower bound | Value | Upper bound | Type |
INFO - 08:36:37: +-------------+-------------+-----------------------+-------------+-------+
INFO - 08:36:37: | x_1 | 0 | 5.024971568646571e-12 | 10 | float |
INFO - 08:36:37: | x_2 | 0 | 0 | 10 | float |
INFO - 08:36:37: | x_shared[0] | -10 | 1.977638860654281 | 10 | float |
INFO - 08:36:37: | x_shared[1] | 0 | 1.344468165645798e-12 | 10 | float |
INFO - 08:36:37: +-------------+-------------+-----------------------+-------------+-------+
INFO - 08:36:37: *** End SellarMDFScenario execution (time: 0:00:00.169279) ***
<gemseo.post.opt_history_view.OptHistoryView object at 0x7f2522792550>
It is also possible to pass a settings model to execute_post()
with the keyword
settings_model
, as shown below. See Post-processor Settings for more
information.
from gemseo.settings.post import ConstraintsHistory_Settings # noqa: E402
execute_post(
scenario,
settings_model=ConstraintsHistory_Settings(
constraint_names=["c_1", "c_2"],
save=False,
show=True,
),
)

<gemseo.post.constraints_history.ConstraintsHistory object at 0x7f2522661580>
Total running time of the script: (0 minutes 1.803 seconds)