RELIABILITY: TWO-DIMENSIONAL HAT FUNCTION¶

This example showcases the application of various reliability analysis methods in UQ[Py]Lab to a two-dimensional hat function.

1 - INITIALIZATION¶

Package imports¶

In [1]:
from uqpylab import sessions
import pprint; pp = pprint.PrettyPrinter(depth=2)

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
# Set the timeout
mySession.timeout = 2000
# 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 (0e6cd96d2cc24bdca5bab9ad250c6489) started.
 uqpylab.sessions :: INFO     :: Reset successful.

Set the random seed for reproducibility¶

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

2 - COMPUTATIONAL MODEL¶

The two-dimensional hat function is defined as follows: $$g(x_1, x_2) = 20 - (x_1 - x_2)^2 - 8 (x_1 + x_2 - 4)^3$$

Create a limit state function model based on the hat function using a string, written below in a vectorized operation:¶

In [4]:
ModelOpts = { 
    'Type': 'Model', 
    'ModelFun':'Hat.model',
    'isVectorized': True
}
myModel = uq.createModel(ModelOpts)

3 - PROBABILISTIC INPUT MODEL¶

The probabilistic input model consists of two independent and identically-distributed Gaussian random variables: $$X_i \sim \mathcal{N}(0.25, 1), \quad i = 1, 2$$

Specify the marginals of the two input random variables:¶

In [5]:
InputOpts = {
    "Marginals": [
        {"Name":"X1",
         "Type":"Gaussian",
         "Parameters":[0.25,1]
        },
        {"Name":"X2",
         "Type":"Gaussian",
         "Parameters":[0.25,1]
        }
    ]
}

Create an INPUT object based on the specified marginals and print its properties¶

In [6]:
myInput = uq.createInput(InputOpts)
uq.print(myInput)
==============================================================
Input object name: Input 1
Dimension(M): 2

Marginals:

Index | Name | Type     |  Parameters             | Moments              
--------------------------------------------------------------------------
1     | X1   | Gaussian |  2.500e-01, 1.000e+00   | 2.500e-01, 1.000e+00
2     | X2   | Gaussian |  2.500e-01, 1.000e+00   | 2.500e-01, 1.000e+00


Copula:

Type: Independent
Dimension: 2
Variables coupled: [1 2]
==============================================================

4 - STRUCTURAL RELIABILITY¶

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 (MCS)
  • Subset simulation
  • Adaptive-Kriging-Monte-Carlo-Simulation (AK-MCS)
  • Adaptive-Polynomial-Chaos-Kriging-Monte-Carlo-Simulation (APCK-MCS)

4.1 Monte Carlo simulation (MCS)¶

Define a Reliability analysis using Monte Carlo simulation (MCS) by specifying the maximum sample size, the size of the batchs, and the target coefficient of variation:

In [7]:
MCSOpts = {
    "Type":"Reliability",
    "Method":"MCS",
    "Simulation": { 
        "MaxSampleSize":1.0E+6,
        "BatchSize":1.0E+5,
        "TargetCoV":0.01
    }
}

Run the Monte Carlo simulation and print out a report of the results:

In [8]:
MCSAnalysis = uq.createAnalysis(MCSOpts)
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((100000,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((100000,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((100000,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((100000,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((100000,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((100000,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((100000,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((100000,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((100000,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((100000,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.

Print out a report of the results:

In [9]:
uq.print(MCSAnalysis)
---------------------------------------------------
Monte Carlo simulation
---------------------------------------------------
Pf               3.9600e-04       
Beta             3.3556           
CoV              0.0502           
ModelEvaluations 1000000          
PfCI             [3.5700e-04 4.3500e-04]
BetaCI           [3.3295e+00 3.3841e+00]
---------------------------------------------------


Create a graphical representation of the results (convergence of $P_f$, convergence of $\beta$, and MCS samples):

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

4.2 Subset Simulation¶

Define a Reliability analysis using subset simulation by specifying the batch size:

In [11]:
SubsetSimOpts = {
    "Type":"Reliability",
    "Method":"Subset",
    "Simulation": {
        "BatchSize": 10000
    }
}

Run reliability analysis with Subset simulation:

In [12]:
SubsetSim = uq.createAnalysis(SubsetSimOpts)
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((10000,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((944,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((940,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((940,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((941,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((947,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((946,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((960,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((954,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((935,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((932,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((937,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((936,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((936,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((930,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((931,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((919,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((935,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((933,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((929,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((891,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((917,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((925,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((935,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((917,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((907,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((910,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.
 uqpylab.sessions :: INFO     :: Received intermediate compute request, function: Hat.model.
 uqpylab.sessions :: INFO     :: Carrying out local computation...
 uqpylab.sessions :: INFO     :: Local computation complete.
 uqpylab.sessions :: INFO     :: Starting transmission of intermediate compute results ((928,))...
 uqpylab.sessions :: INFO     :: Intermediate compute results sent.

Print out a report of the results:

In [13]:
uq.print(SubsetSim)
---------------------------------------------------
Subset simulation
---------------------------------------------------
Pf               3.8250e-04       
Beta             3.3652           
CoV              0.0918           
ModelEvaluations 35155            
PfCI             [3.1365e-04 4.5135e-04]
BetaCI           [3.3192e+00 3.4195e+00]
---------------------------------------------------


Create a graphical representation of the results (plot the subsets):

In [14]:
uq.display(SubsetSim);