Problem RP8

In this example, we present the RP8 problem of BBRC 2019 using the FORM SORM method and the Monte Carlo method.

import otbenchmark as otb
import matplotlib.pyplot as plt
problem = otb.ReliabilityProblem8()
print(problem)
name = RP8
event = class=ThresholdEventImplementation antecedent=class=CompositeRandomVector function=class=Function name=Unnamed implementation=class=FunctionImplementation name=Unnamed description=[x1,x2,x3,x4,x5,x6,y0] evaluationImplementation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0] formulas=[x1 + 2 * x2 + 2 * x3 + x4 - 5 * x5 - 5 * x6] gradientImplementation=class=SymbolicGradient name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0] formulas=[x1 + 2 * x2 + 2 * x3 + x4 - 5 * x5 - 5 * x6] hessianImplementation=class=SymbolicHessian name=Unnamed evaluation=class=SymbolicEvaluation name=Unnamed inputVariablesNames=[x1,x2,x3,x4,x5,x6] outputVariablesNames=[y0] formulas=[x1 + 2 * x2 + 2 * x3 + x4 - 5 * x5 - 5 * x6] antecedent=class=UsualRandomVector distribution=class=JointDistribution name=JointDistribution dimension=6 copula=class=IndependentCopula name=IndependentCopula dimension=6 marginal[0]=class=ParametrizedDistribution parameters=class=LogNormalMuSigma name=Unnamed mu=120 sigma=12 gamma=0 distribution=class=LogNormal name=LogNormal dimension=1 muLog=4.78252 sigmaLog=0.0997513 gamma=0 marginal[1]=class=ParametrizedDistribution parameters=class=LogNormalMuSigma name=Unnamed mu=120 sigma=12 gamma=0 distribution=class=LogNormal name=LogNormal dimension=1 muLog=4.78252 sigmaLog=0.0997513 gamma=0 marginal[2]=class=ParametrizedDistribution parameters=class=LogNormalMuSigma name=Unnamed mu=120 sigma=12 gamma=0 distribution=class=LogNormal name=LogNormal dimension=1 muLog=4.78252 sigmaLog=0.0997513 gamma=0 marginal[3]=class=ParametrizedDistribution parameters=class=LogNormalMuSigma name=Unnamed mu=120 sigma=12 gamma=0 distribution=class=LogNormal name=LogNormal dimension=1 muLog=4.78252 sigmaLog=0.0997513 gamma=0 marginal[4]=class=ParametrizedDistribution parameters=class=LogNormalMuSigma name=Unnamed mu=50 sigma=10 gamma=0 distribution=class=LogNormal name=LogNormal dimension=1 muLog=3.89241 sigmaLog=0.198042 gamma=0 marginal[5]=class=ParametrizedDistribution parameters=class=LogNormalMuSigma name=Unnamed mu=40 sigma=8 gamma=0 distribution=class=LogNormal name=LogNormal dimension=1 muLog=3.66927 sigmaLog=0.198042 gamma=0 operator=class=Less name=Unnamed threshold=0
probability = 0.0007897927545597477
event = problem.getEvent()
g = event.getFunction()

Compute the bounds of the domain

inputVector = event.getAntecedent()
distribution = inputVector.getDistribution()
inputDimension = distribution.getDimension()
print(inputDimension)
6
alpha = 1.0 - 1.0e-5
bounds, marginalProb = distribution.computeMinimumVolumeIntervalWithMarginalProbability(
    alpha
)
referencePoint = distribution.getMean()
print(referencePoint)
[120,120,120,120,50,40]
crossCut = otb.CrossCutFunction(g, referencePoint)
fig = crossCut.draw(bounds)
# Remove the legend labels because there
# are too many for such a small figure
for ax in fig.axes:
    ax.legend("")
# Increase space between sub-figures so that
# there are no overlap
plt.subplots_adjust(hspace=0.5, wspace=0.75)
Cross-cuts of function

Plot cross-cuts of the distribution

crossCut = otb.CrossCutDistribution(distribution)
fig = crossCut.drawMarginalPDF()
# Remove the legend labels because there
# are too many for such a small figure
for ax in fig.axes:
    ax.legend("")
# Increase space between sub-figures so that
# there are no overlap
plt.subplots_adjust(hspace=0.5, wspace=0.75)
Iso-values of marginal PDF

The correct way to represent cross-cuts of a distribution is to draw the contours of the PDF of the conditional distribution.

fig = crossCut.drawConditionalPDF(referencePoint)
# Remove the legend labels because there
# are too many for such a small figure
for ax in fig.axes:
    ax.legend("")
# Increase space between sub-figures so that
# there are no overlap
plt.subplots_adjust(hspace=0.5, wspace=0.75)
Iso-values of conditional PDF
Descr =  1 0
Descr =  2 0
Descr =  2 1
Descr =  3 0
Descr =  3 1
Descr =  3 2
Descr =  4 0
Descr =  4 1
Descr =  4 2
Descr =  4 3
Descr =  5 0
Descr =  5 1
Descr =  5 2
Descr =  5 3
Descr =  5 4
inputVector = event.getAntecedent()
event = problem.getEvent()
g = event.getFunction()
drawEvent = otb.DrawEvent(event)
_ = drawEvent.draw(bounds)
# Increase space between sub-figures so that
# there are no overlap
plt.subplots_adjust(hspace=0.5, wspace=0.75)
plot rp8

Total running time of the script: (0 minutes 37.454 seconds)