Note
Click here 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 division, unicode_literals
from matplotlib import pyplot as plt
from gemseo.api import (
configure_logger,
create_discipline,
create_scenario,
execute_post,
get_available_post_processings,
get_post_processing_options_schema,
)
from gemseo.problems.sellar.sellar_design_space import SellarDesignSpace
configure_logger()
Out:
<RootLogger root (INFO)>
Get available DOE algorithms¶
The get_available_post_processings()
function returns the list
of post-processing algorithms available in GEMSEO or in external modules
print(get_available_post_processings())
Out:
['BasicHistory', 'ConstraintsHistory', 'Correlations', 'GradientSensitivity', 'KMeans', 'ObjConstrHist', 'OptHistoryView', 'ParallelCoordinates', 'ParetoFront', 'QuadApprox', 'RadarChart', 'Robustness', 'SOM', 'ScatterPlotMatrix', 'VariableInfluence']
Get options schema¶
For a given post-processing algorithm, e.g. "RadarChart"
,
we can get the options; e.g.
print(get_post_processing_options_schema("RadarChart"))
Out:
{'$schema': 'http://json-schema.org/draft-04/schema', 'additionalProperties': False, 'type': 'object', 'properties': {'save': {'description': 'If True, save the figure.', 'type': 'boolean'}, 'show': {'description': 'If True, display the figure.', 'type': 'boolean'}, 'file_path': {'anyOf': [{'description': 'The path of the file to save the figures. If the extension is missing, use ``file_extension``. If None, create a file path from ``directory_path``, ``file_name`` and ``file_extension``.', 'type': 'string'}, {'description': 'The path of the file to save the figures. If the extension is missing, use ``file_extension``. If None, create a file path from ``directory_path``, ``file_name`` and ``file_extension``.', 'type': 'null'}]}, 'file_extension': {'anyOf': [{'description': "A file extension, e.g. 'png', 'pdf', 'svg', ... If None, use a default file extension.", 'type': 'string'}, {'description': "A file extension, e.g. 'png', 'pdf', 'svg', ... If None, use a default file extension.", 'type': 'null'}]}, 'file_name': {'anyOf': [{'description': 'The name of the file to save the figures. If None, use a default one generated by the post-processing.', 'type': 'string'}, {'description': 'The name of the file to save the figures. If None, use a default one generated by the post-processing.', 'type': 'null'}]}, 'directory_path': {'anyOf': [{'description': 'The path of the directory to save the figures. If None, use the current working directory.', 'type': 'string'}, {'description': 'The path of the directory to save the figures. If None, use the current working directory.', 'type': 'null'}]}, 'fig_size': {'anyOf': [{'description': 'The width and height of the figure in inches, e.g. `(w, h)`. If None, use the :attr:`DEFAULT_FIG_SIZE` of the post-processor.', 'type': 'null'}, {'minItems': 2, 'maxItems': 2, 'description': 'The width and height of the figure in inches, e.g. `(w, h)`. If None, use the :attr:`DEFAULT_FIG_SIZE` of the post-processor.', 'type': 'array', 'items': {'type': 'number'}}]}, 'iteration': {'description': 'The number of iteration to post-process.', 'type': 'integer'}, 'constraints_list': {'description': 'The names of the constraints.', 'type': 'array', 'items': {'minItems': 1, 'type': 'string'}}}, 'required': ['constraints_list']}
Post-process a scenario¶
The API function execute_post()
can generate visualizations
of the optimization or DOE results. For that, it consider the object to
post-process to_post_proc
, the post processing post_name
with its **options
. E.g.
disciplines = create_discipline(["Sellar1", "Sellar2", "SellarSystem"])
design_space = SellarDesignSpace()
scenario = create_scenario(
disciplines, "MDF", "obj", design_space, "SellarMDFScenario", "MDO"
)
scenario.execute({"algo": "NLOPT_SLSQP", "max_iter": 100})
execute_post(scenario, "OptHistoryView", show=False, save=False)
# Workaround for HTML rendering, instead of ``show=True``
plt.show()
Out:
INFO - 21:51:56:
INFO - 21:51:56: *** Start MDO Scenario execution ***
INFO - 21:51:56: SellarMDFScenario
INFO - 21:51:56: Disciplines: Sellar1 Sellar2 SellarSystem
INFO - 21:51:56: MDOFormulation: MDF
INFO - 21:51:56: Algorithm: NLOPT_SLSQP
INFO - 21:51:56: Optimization problem:
INFO - 21:51:56: Minimize: obj(x_local, x_shared)
INFO - 21:51:56: With respect to: x_local, x_shared
INFO - 21:51:56: Design space:
INFO - 21:51:56: +----------+-------------+--------+-------------+-------+
INFO - 21:51:56: | name | lower_bound | value | upper_bound | type |
INFO - 21:51:56: +----------+-------------+--------+-------------+-------+
INFO - 21:51:56: | x_local | 0 | (1+0j) | 10 | float |
INFO - 21:51:56: | x_shared | -10 | (4+0j) | 10 | float |
INFO - 21:51:56: | x_shared | 0 | (3+0j) | 10 | float |
INFO - 21:51:56: +----------+-------------+--------+-------------+-------+
INFO - 21:51:56: Optimization: 0%| | 0/100 [00:00<?, ?it]
/home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.2.0/lib/python3.8/site-packages/gemseo/algos/opt/lib_nlopt.py:278: ComplexWarning: Casting complex values to real discards the imaginary part
grad[:] = obj_func.jac(xn_vect)
WARNING - 21:51:56: MDAJacobi has reached its maximum number of iterations but the normed residual 0.004375511330941651 is still above the tolerance 1e-06.
INFO - 21:51:56: Optimization: 7%|▋ | 7/100 [00:00<00:00, 839.49 it/sec, obj=0.601]
INFO - 21:51:56: Optimization: 15%|█▌ | 15/100 [00:00<00:00, 455.32 it/sec, obj=0.527]
INFO - 21:51:56: Optimization: 22%|██▏ | 22/100 [00:00<00:00, 346.50 it/sec, obj=0.527]
INFO - 21:51:56: Optimization result:
INFO - 21:51:56: Objective value = 0.5272838459352873
INFO - 21:51:56: The result is feasible.
INFO - 21:51:56: Status: None
INFO - 21:51:56: Optimizer message: Successive iterates of the design variables are closer than xtol_rel or xtol_abs. GEMSEO Stopped the driver
INFO - 21:51:56: Number of calls to the objective function by the optimizer: 27
INFO - 21:51:56: Design space:
INFO - 21:51:56: +----------+-------------+----------------------------+-------------+-------+
INFO - 21:51:56: | name | lower_bound | value | upper_bound | type |
INFO - 21:51:56: +----------+-------------+----------------------------+-------------+-------+
INFO - 21:51:56: | x_local | 0 | 0j | 10 | float |
INFO - 21:51:56: | x_shared | -10 | (0.5816394514711316+0j) | 10 | float |
INFO - 21:51:56: | x_shared | 0 | (3.771450297014549e-13+0j) | 10 | float |
INFO - 21:51:56: +----------+-------------+----------------------------+-------------+-------+
INFO - 21:51:56: *** MDO Scenario run terminated in 0:00:00.295630 ***
Total running time of the script: ( 0 minutes 1.236 seconds)