Inverse Reliability Problems
Defining Inverse Reliability Problems
In general, 4 main "items" are always need to fully define an inverse reliability problem and successfully solve it to find the parameter of interest $\theta$:
| Item | Description | 
|---|---|
| $\vec{X}$ | Random vector with correlated non-normal marginals | 
| $\rho^{X}$ | Correlation matrix | 
| $g(\vec{X}, \theta)$ | Limit state function | 
| $\beta$ | Target reliability index | 
Fortuna.jl package uses these 4 "items" to fully define inverse reliability problems of type I using SensitivityProblem() type as shown in the example below.
Solving Inverse Reliability Problems
# Define the random vector:
X_1 = randomvariable("Normal", "M", [0, 1])
X_2 = randomvariable("Normal", "M", [0, 1])
X_3 = randomvariable("Normal", "M", [0, 1])
X_4 = randomvariable("Normal", "M", [0, 1])
X = [X_1, X_2, X_3, X_4]
# Define the correlation matrix:
ρ_X = Matrix{Float64}(1.0 * I, 4, 4)
# Define the limit state function:
g(x::Vector, θ::Real) = exp(-θ * (x[1] + 2 * x[2] + 3 * x[3])) - x[4] + 1.5
# Define the target reliability index:
β = 2
# Define an inverse reliability problem:
problem = InverseReliabilityProblem(X, ρ_X, g, β)Solving Inverse Reliability Problems
After defining an inverse reliability problem, Fortuna.jl allows to easily solve it using a single solve() function as shown in the example below.
# Perform the inverse reliability analysis:
solution = solve(problem, 0.1; x_0=[0.2, 0.2, 0.2, 0.2])
println("x = $(solution.x[:, end])")
println("θ = $(solution.θ[end])")x = [0.21827438460314785, 0.4365487692062958, 0.6548231538094436, 1.8256473105081492]
θ = 0.3671461348014133API
Fortuna.solve — Methodsolve(problem::InverseReliabilityProblem, θ_0::Real; 
    x_0::Union{Nothing, Vector{<:Real}} = nothing, 
    max_num_iters = 250, tol_1 = 10E-6, tol_2 = 10E-6, tol_3 = 10E-3,
    backend = AutoForwardDiff())Function used to solve inverse reliability problems.
Fortuna.InverseReliabilityProblem — TypeInverseReliabilityProblem <: AbstractReliabilityProblemType used to define inverse reliability problems.
- X::AbstractVector{<:UnivariateDistribution}: Random vector $\vec{X}$
- ρ_X::AbstractMatrix{<:Real}: Correlation matrix $\rho^{X}$
- g::Function: Limit state function $g(\vec{X}, \theta)$
- β::Real: Target reliability index $\beta_t$
Fortuna.InverseReliabilityProblemCache — TypeInverseReliabilityProblemCacheType used to store results of inverse reliability analysis.
- x::Matrix{Float64}: Design points in X-space at each iteration $\vec{x}_{i}^{*}$
- u::Matrix{Float64}: Design points in U-space at each iteration $\vec{u}_{i}^{*}$
- θ::Vector{Float64}: Parameter of interest at each iteration $\theta_{i}$
- G::Vector{Float64}: Limit state function at each iteration $G(\vec{u}_{i}^{*}, \theta_{i})$
- ∇G_u::Matrix{Float64}: Gradient of the limit state function at each iteration $\nabla_{\vec{u}} G(\vec{u}_{i}^{*}, \theta_{i})$
- ∇G_θ::Vector{Float64}: Gradient of the limit state function at each iteration $\nabla_{\theta} G(\vec{u}_{i}^{*}, \theta_{i})$
- α::Matrix{Float64}: Normalized negative gradient of the limit state function at each iteration $\vec{\alpha}_{i}$
- du::Matrix{Float64}: Search direction for the design point in U-space at each iteration $\vec{d}_{u_{i}}$
- dθ::Vector{Float64}: Search direction for the parameter of interest at each iteration $\vec{d}_{u_{i}}$
- c_1::Vector{Float64}: $c_{1}$-coefficients at each iteration $c_{1_{i}}$
- c_2::Vector{Float64}: $c_{2}$-coefficients at each iteration $c_{2_{i}}$
- m_1::Vector{Float64}: First merit function at each iteration $m_{1_{i}}$
- m_2::Vector{Float64}: Second merit function at each iteration $m_{2_{i}}$
- m::Vector{Float64}: Merit function at each iteration $m_{i}$
- λ::Vector{Float64}: Step size at each iteration $\lambda_{i}$