.. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_reliability_sensitivity_reliability_plot_strong_maximum_test.py: Strong Maximum Test design point validation =========================================== In this example we are going to validate a FORM estimation using the Strong Maximum Test. The Strong Maximum Test helps to evaluate the quality of the design point resulting from the optimization algorithm. It checks whether the design point computed is: - the **true** design point, which means a global maximum point, - a **strong** design point, which means that there is no other local maximum located on the event boundary and which likelihood is slightly inferior to the design point one. This verification is very important in order to give sense to the FORM and SORM approximations. We briefly recall here the main principles of the test. The objective is to detect all the points :math:`\tilde{P}^*` in the ball of radius :math:`R_{\varepsilon} = \beta(1+\delta_{\varepsilon})` which are potentially the real design point (case of :math:`\tilde{P}_2^*`) or which contribution to :math:`P_f` is not negligeable as regards the approximations Form and Sorm (case of :math:`\tilde{P}_1^*`). The contribution of a point is considered as negligeable when its likelihood in the :math:`U`-space is more than :math:`\varepsilon`-times lesser than the design point one. The radius :math:`R_{\varepsilon}` is the distance to the :math:`U`-space center upon which points are considered as negligeable in the evaluation of :math:`P_f`. .. code-block:: default from __future__ import print_function import openturns as ot import openturns.viewer as viewer from matplotlib import pylab as plt ot.Log.Show(ot.Log.NONE) Create the model Y = x1 + 2*x2 .. code-block:: default model = ot.SymbolicFunction(["x1", "x2"], ["x1+2*x2"]) # Create the input distribution and random vector X inputDist = ot.Normal(2) inputDist.setDescription(['X1', 'X2']) inputVector = ot.RandomVector(inputDist) # Create the output random vector Y=model(X) output = ot.CompositeRandomVector(model, inputVector) output.setName("MyOutputY") Create the physical event Y > 4 .. code-block:: default threshold = 4 myEvent = ot.ThresholdEvent(output, ot.Greater(), threshold) # Create the associated standard event in the standard space myStandardEvent = ot.StandardEvent(myEvent) First : FORM analyses to get the design point .. code-block:: default myCobyla = ot.Cobyla() myStartingPoint = inputDist.getMean() myAlgoFORM = ot.FORM(myCobyla, myEvent, myStartingPoint) myAlgoFORM.run() FORMResult = myAlgoFORM.getResult() standardSpaceDesignPoint = FORMResult.getStandardSpaceDesignPoint() Fix the importance level epsilon of the test Care : 00 # It is recommended that tau <4 accuracyLevel = 3.0 # Fix the confidence level (1-q) of the test confidenceLevel = 0.99 # Create the Strong Maximum Test # CARE : the event must be declared in the standard space # 1. From the confidenceLevel parameter mySMT_CL = ot.StrongMaximumTest(myStandardEvent, standardSpaceDesignPoint, importanceLevel, accuracyLevel, confidenceLevel) # 2. Or from the maximum number of points sampling the sphere pointsNumber = 1000 mySMT_PN = ot.StrongMaximumTest(myStandardEvent, standardSpaceDesignPoint, importanceLevel, accuracyLevel, pointsNumber) # Perform the test mySMT_CL.run() mySMT_PN.run() # Get (or evaluate) the confidence level # associated to the number of points used to sample the sphere print('Confidence level = ', mySMT_CL.getConfidenceLevel()) # Get (or evaluate) the number of points used to sample the sphere # associated the confidence level used print('Points Number = ', mySMT_CL.getPointNumber()) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Confidence level = 0.99 Points Number = 13 .. code-block:: default # Get all the points verifying the event and outside the design point vicinity # Get also the values of limit state function at these points potentialDesignPoints = mySMT_CL.getFarDesignPointVerifyingEventPoints() values = mySMT_CL.getFarDesignPointVerifyingEventValues() print('Potential design points = ', potentialDesignPoints) print('Model values = ', values) # Get all the points verifying the event and inside the design point vicinity # Get also the values of limit state function at these points vicinityDesignPoint = mySMT_CL.getNearDesignPointVerifyingEventPoints() values = mySMT_CL.getNearDesignPointVerifyingEventValues() print('Points verifying the Event in the vicinity of the design points = ', vicinityDesignPoint) print('Model values = ', values) # Get all the points not verifying the event and outside the design point vicinity # Get also the values of limit state function at these points farSecurityPoints = mySMT_CL.getFarDesignPointViolatingEventPoints() values = mySMT_CL.getFarDesignPointViolatingEventValues() print('Points NOT verifying the Event outside the vicinity of the design points = ', farSecurityPoints) print('Model values = ', values) # Get all the points not verifying the event and inside the design point vicinity # Get also the values of limit state function at these points vicinitySecurityPoints = mySMT_CL.getNearDesignPointViolatingEventPoints() values = mySMT_CL.getNearDesignPointViolatingEventValues() print('Points NOT verifying the Event outside the vicinity of the design points = ', vicinitySecurityPoints) print('Model values = ', values) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Potential design points = Model values = Points verifying the Event in the vicinity of the design points = 0 : [ 4.35201 0.192736 ] 1 : [ 4.29217 0.744625 ] 2 : [ 4.24568 0.975375 ] 3 : [ 3.03803 3.12211 ] 4 : [ -2.51712 3.55546 ] 5 : [ 3.95195 1.83282 ] Model values = [ y0 ] 0 : [ 4.73748 ] 1 : [ 5.78142 ] 2 : [ 6.19643 ] 3 : [ 9.28224 ] 4 : [ 4.5938 ] 5 : [ 7.6176 ] Points NOT verifying the Event outside the vicinity of the design points = 0 : [ 2.79593 -3.34065 ] 1 : [ -4.14701 -1.33396 ] 2 : [ 0.738077 -4.2933 ] 3 : [ -4.34599 0.299258 ] 4 : [ 2.86914 -3.27799 ] 5 : [ -1.94894 -3.896 ] 6 : [ 0.558462 -4.32033 ] Model values = [ y0 ] 0 : [ -3.88538 ] 1 : [ -6.81493 ] 2 : [ -7.84852 ] 3 : [ -3.74747 ] 4 : [ -3.68684 ] 5 : [ -9.74094 ] 6 : [ -8.08221 ] Points NOT verifying the Event outside the vicinity of the design points = Model values = .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.005 seconds) .. _sphx_glr_download_auto_reliability_sensitivity_reliability_plot_strong_maximum_test.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_strong_maximum_test.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_strong_maximum_test.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_