1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
"""
Estimate a flooding probability
===============================
"""
# %%
#
# In this example, we estimate the probability that the output of a function exceeds a given threshold with the FORM method.
# We consider the :ref:`flooding model <use-case-flood-model>`.
# %%
# Define the model
# ----------------
# %%
from openturns.usecases import flood_model
import openturns as ot
import openturns.viewer as otv
# %%
# We load the flooding model from the usecases module :
fm = flood_model.FloodModel()
distribution = fm.distribution
model = fm.model.getMarginal(1)
# %%
# See the input distribution
distribution
# %%
# See the model
model.getOutputDescription()
# %%
# Draw the distribution of a sample of the output.
sampleSize = 1000
inputSample = distribution.getSample(sampleSize)
outputSample = model(inputSample)
graph = ot.HistogramFactory().build(outputSample).drawPDF()
_ = otv.View(graph)
# %%
# Define the event
# ----------------
# %%
# Then we create the event whose probability we want to estimate.
# %%
vect = ot.RandomVector(distribution)
G = ot.CompositeRandomVector(model, vect)
event = ot.ThresholdEvent(G, ot.Greater(), 0.0)
event.setName("overflow")
# %%
# Estimate the probability with FORM
# ----------------------------------
# %%
# Define a solver.
# %%
optimAlgo = ot.Cobyla()
optimAlgo.setMaximumCallsNumber(1000)
optimAlgo.setMaximumAbsoluteError(1.0e-8)
optimAlgo.setMaximumRelativeError(1.0e-10)
optimAlgo.setMaximumResidualError(1.0e-10)
optimAlgo.setMaximumConstraintError(1.0e-10)
# %%
# Run FORM.
optimAlgo.setStartingPoint(distribution.getMean())
algo = ot.FORM(optimAlgo, event)
algo.run()
result = algo.getResult()
standardSpaceDesignPoint = result.getStandardSpaceDesignPoint()
# %%
# Retrieve results.
# %%
result = algo.getResult()
probability = result.getEventProbability()
print("Pf=", probability)
# %%
# Importance factors.
graph = result.drawImportanceFactors()
view = otv.View(graph)
# %%
otv.View.ShowAll()
|