RELIABILITY: RESISTANCE VS. STRESS (R-S)¶

This example showcases the application of different reliability analysis methods available in UQLab to the simple R-S example.

Package imports¶

In [1]:
from uqpylab import sessions
import numpy as np

Start a remote UQCloud session¶

In [2]:
# Start the session
mySession = sessions.cloud()
# (Optional) Get a convenient handle to the command line interface
uq = mySession.cli
# Reset the session
mySession.reset()
Processing .
.
 done!

 uqpylab.sessions :: INFO     :: This is UQ[py]Lab, version 1.00, running on https://uqcloud.ethz.ch. 
                                 UQ[py]Lab is free software, published under the open source BSD 3-clause license.
                                 To request special permissions, please contact:
                                  - Stefano Marelli (marelli@ibk.baug.ethz.ch).
                                 A new session (98d4b6d653154f489649141f9795f9b0) started.
 uqpylab.sessions :: INFO     :: Reset successful.

Set the random seed for reproducibility¶

In [3]:
uq.rng(100,'twister');

COMPUTATIONAL MODEL¶

The R-S function is defined as: $$g(\mathbf{x}) = R - S,$$

where $\mathbf{x} = \{R,S\}$. $R$ and $S$ are the resistance and stress variables, respectively.

Create a limit state function model using a string, written below in a vectorized operation:

In [4]:
ModelOpts = { 
    'Type': 'Model', 
    'mString': 'X(:,1) - X(:,2)',
    'isVectorized': 1
}
myModel = uq.createModel(ModelOpts)

PROBABILISTIC INPUT MODEL¶

The probabilistic input model consists of two independent Gaussian random variables: $$R \sim \mathcal{N}(5, 0.8), \; S \sim \mathcal{N}(2, 0.6)$$

Specify the probabilistic input model for $R$ and $S$:

In [5]:
InputOpts = {
    "Marginals": [
        {"Name": "R",               # Resistance
         "Type": "Gaussian",
         "Moments": [5.0 , 0.8]
        },
        {"Name": "S",               # Stress
         "Type": "Gaussian",
         "Moments": [2.0 , 0.6]
        }
    ]
}

Create an INPUT object based on the specified marginals:

In [6]:
myInput = uq.createInput(InputOpts)

RELIABILITY ANALYSIS¶

Failure event is defined as $g(\mathbf{x}) \leq 0$. The failure probability is then defined as $P_f = P[g(\mathbf{x}) \leq 0]$.

Reliability analysis is performed with the following methods:

  • Monte Carlo simulation
  • First-order reliability method (FORM)
  • Importance sampling (IS)
  • Subset simulation
  • Adaptive Kriging-Monte Carlo Simulation (AK-MCS)

Monte Carlo simulation (MCS)¶

Select the Reliability module and the Monte Carlo simulation (MCS) method:

In [7]:
MCSOpts = {
    "Type": "Reliability",
    "Method":"MCS"
}

Specify the maximum sample size:

In [8]:
MCSOpts["Simulation"] = {
    "MaxSampleSize":1e5
}

Run reliability analysis with MCS:

In [9]:
MCSAnalysis = uq.createAnalysis(MCSOpts)

Print out a report of the results:

In [10]:
uq.print(MCSAnalysis)
---------------------------------------------------
Monte Carlo simulation
---------------------------------------------------
Pf               1.5300e-03       
Beta             2.9616           
CoV              0.0808           
ModelEvaluations 100000           
PfCI             [1.2878e-03 1.7722e-03]
BetaCI           [2.9161e+00 3.0143e+00]
---------------------------------------------------


Create a graphical representation of the results:¶

In [11]:
uq.display(MCSAnalysis);

FORM¶

Select FORM as the reliability analysis method:

In [12]:
FORMOpts = {
    "Type": "Reliability",
    "Method":"FORM"
}

Run the FORM analysis:

In [13]:
FORMAnalysis = uq.createAnalysis(FORMOpts)

Print out a report of the results:

In [14]:
uq.print(FORMAnalysis)
---------------------------------------------------
FORM
---------------------------------------------------
Pf               1.3499e-03       
BetaHL           3.0000           
ModelEvaluations 8                
---------------------------------------------------
Variables        R           S           
  Ustar          -2.400000   1.800000    
  Xstar          3.08e+00    3.08e+00    
  Importance     0.640000    0.360000    
---------------------------------------------------


Create a graphical representation of the results:¶

In [15]:
uq.display(FORMAnalysis);

Importance sampling (IS)¶

Select importance sampling (IS) as the reliability analysis method:

In [16]:
ISOpts = {
    "Type": "Reliability",
    "Method":"IS"
}

Run the IS reliability analysis:

In [17]:
ISAnalysis = uq.createAnalysis(ISOpts)

Print out a report of the results:

In [18]:
uq.print(ISAnalysis)
---------------------------------------------------
Importance Sampling
---------------------------------------------------
Pf               1.3662e-03       
Beta             2.9963           
CoV              0.0569           
ModelEvaluations 1008             
PfCI             [1.2139e-03 1.5186e-03]
BetaCI           [2.9639e+00 3.0322e+00]
---------------------------------------------------


Create a graphical representation of the results:¶

In [19]:
uq.display(ISAnalysis);

Subset simulation¶

Select subset simulation as the reliability analysis method:

In [20]:
SubsetSimOpts = {
    "Type": "Reliability",
    "Method":"Subset"
}

Run the subset simulation:

In [21]:
SubsetSimAnalysis = uq.createAnalysis(SubsetSimOpts)

Print out a report of the results:

In [22]:
uq.print(SubsetSimAnalysis)
---------------------------------------------------
Subset simulation
---------------------------------------------------
Pf               1.3800e-03       
Beta             2.9933           
CoV              0.2303           
ModelEvaluations 2693             
PfCI             [7.5702e-04 2.0030e-03]
BetaCI           [2.8777e+00 3.1720e+00]
---------------------------------------------------


Create a graphical representation of the results:¶

In [23]:
uq.display(SubsetSimAnalysis);

Adaptive Kriging-Monte Carlo Simulation (AK-MCS)¶

Select subset simulation as the reliability analysis method:

In [24]:
AKMCSOpts = {
    "Type": "Reliability",
    "Method":"AKMCS"
}

Run the AK-MCS simulation:

In [25]:
AKMCSAnalysis = uq.createAnalysis(AKMCSOpts)
Processing .
 done!

Print out a report of the results:

In [26]:
uq.print(AKMCSAnalysis)
---------------------------------------------------
AK-MCS
---------------------------------------------------
Pf               1.1600e-03       
Beta             3.0459           
CoV              0.0928           
ModelEvaluations 18               
PfCI             [9.4903e-04 1.3710e-03]
BetaCI           [2.9953e+00 3.1057e+00]
PfMinus/Plus     [1.1600e-03 1.1600e-03]
---------------------------------------------------


Create a graphical representation of the results:¶

In [27]:
uq.display(AKMCSAnalysis);

Stochastic spectral embedding-based reliability (SSER)¶

Select stochastic spectral embedding-based reliability as the reliability analysis method

In [28]:
SSEROpts = {
    "Type": "Reliability",
    "Method": "SSER"
}

Run the SSER simulation:

In [29]:
SSERAnalysis = uq.createAnalysis(SSEROpts)
Processing .
.
.
 done!

Print out a report of the results:

In [30]:
uq.print(SSERAnalysis)
---------------------------------------------------
Stochastic spectral embedding-based reliability
---------------------------------------------------
Pf               1.2906e-03       
Beta             3.0137           
CoV              0.0000           
ModelEvaluations 80               
PfCI             [1.2906e-03 1.2906e-03]
BetaCI           [3.0137e+00 3.0137e+00]
---------------------------------------------------


Create a graphical representation of the results:¶

In [31]:
uq.display(SSERAnalysis);
Processing .
.
.
.
.
.
.
 done!

Terminate the remote UQCloud session:¶

In [32]:
mySession.quit()
 uqpylab.sessions :: INFO     :: Session 98d4b6d653154f489649141f9795f9b0 terminated.
Out[32]:
True