Gradient sensitivity

Preliminaries: instantiation and execution of the MDO scenario

Let’s start with the following code lines which instantiate and execute the MDOScenario :

from gemseo.api import create_discipline, create_scenario

formulation = 'MDF'

disciplines = create_discipline(["SobieskiPropulsion", "SobieskiAerodynamics",
                                 "SobieskiMission", "SobieskiStructure"])

scenario = create_scenario(disciplines,
                           formulation=formulation,
                           objective_name="y_4",
                           maximize_objective=True,
                           design_space="design_space.txt")

scenario.set_differentiation_method("user")

algo_options = {'max_iter': 10, 'algo': "SLSQP"}
for constraint in ["g_1","g_2","g_3"]:
    scenario.add_constraint(constraint, 'ineq')

scenario.execute(algo_options)

GradientSensitivity

Description

The GradientSensitivity post processing builds histograms of derivatives of objective and constraints

The plot method considers the derivatives at the last iteration. The iteration can be changed in options. The x- and y- figure sizes can also be modified in options. It is possible either to save the plot, to show the plot or both.

Options

  • iteration, int - The iteration to plot the sensitivities, if negative, use the optimum.

  • figsize_x, int - The size of the figure in the horizontal direction (inches).

  • figsize_y, int - The size of the figure in the vertical direction (inches).

  • show, bool - If True, display the plot windows.

  • save, bool - If True, export the plot to pdf.

  • file_path, str - The base paths of the files to export. Relative to the working directory.

  • extension, str - The file extension.

  • scale_gradients, bool - If True, normalize each gradient w.r.t. the design variables.

Case of the MDF formulation

To visualize the gradient sensitivity plot of the scenario, we use the execute_post() API method with the keyword "GradientSensitivity" and additional arguments concerning the type of display (file, screen, both):

scenario.post_process("GradientSensitivity", save=True, show=False,file_path=“mdf” )

The figure Gradient sensitivity on the Sobieski use case for the MDF formulation shows the total derivatives of the objective and constraints with respect to the design variables: \(\frac{d f}{d x_i}\):

  • a large value means that the function is sensitive to the variable,

  • a null value means that, at the optimal solution, the function does not depend on the variable,

  • a negative value means that the function decreases when the variable is increased.

../../_images/mdf_gradient_sensitivity.png

Gradient sensitivity on the Sobieski use case for the MDF formulation

\(x_{shared_0}\) (wing-taper ratio) and \(x_{shared_2}\) (Mach number) appear to be the most important for the gradient of the objective function.

The g_1_0 to g_1_4 are very similar, since they all quantify the stress in various sections. g_1_5 and g_1_6 correspond to the lower and upper bounds of the twist , therefore their sensitivities are opposite. g_2 is a function of only \(x_{shared_0}\) ; \(x_{shared_0}\) is the only variable that influences its gradient.