InverseFORM

class otrobopt.InverseFORM(*args)

Inverse First Order Reliability Method.

The Inverse FORM algorithm solves the inverse reliability problem: given a target reliability index \beta_t, find the parameter \theta to be calibrated of the limit state function g(\ux, \theta) such that the reliability index of the resulting failure event equals \beta_t.

In this class, \ux denotes the stochastic (random) parameters in standard space and \theta denotes the parameter to be optimized.

Formally, the algorithm seeks a pair (\ux^*, \theta^*) such that:

\ux^* = \argmin_{\ux\; :\; \|\ux\| = \beta_t} g(\ux, \theta^*), \qquad
g(\ux^*, \theta^*) = 0

where \ux^* is the Most Probable Point (MPP) on the sphere of radius \beta_t in standard space and \theta^* is the calibrated parameter value such that \beta(\theta^*) = \beta_t.

The algorithm is iterative. At each iteration k:

  1. Compute the gradient of the limit state function with respect to the physical variables \nabla_\ux g and with respect to the parameter \frac{\partial g}{\partial \theta}.

  2. Compute the direction of update in the standard space:

    \Delta \ux = -\frac{\beta_t}{\|\nabla_\ux g\|} \nabla_\ux g - \ux

  3. Compute the parameter update:

    \Delta \theta = \frac{\ux \cdot \nabla_\ux g - g + \beta_t \|\nabla_\ux g\|}
                       {\frac{\partial g}{\partial \theta}}

  4. Update \ux \leftarrow \ux + \alpha \Delta \ux and \theta \leftarrow \theta + \alpha \Delta \theta where \alpha is determined by a step-size control strategy.

The algorithm converges when:

  • The parameter variation |\Delta \theta| is below \varepsilon_\theta (variable convergence)

  • The limit state value |g(\ux, \theta)| is below \varepsilon_g (limit state convergence)

  • The beta variation |\|\ux\| - |\beta_t|| is below \varepsilon_\beta (beta convergence)

Parameters:
eventRandomVector

Event we are computing the probability of.

parameterNamestr

Name of the parameter of the limit state function to be calibrated.

physicalStartingPointsequence of float

Physical space starting point for the design point search.

Methods

getBetaConvergence()

Beta convergence criterion accessor.

getClassName()

Accessor to the object's name.

getFixedStep()

Fixed-step mode accessor.

getFixedStepValue()

Fixed-step value accessor.

getLimitStateConvergence()

Limit-state convergence criterion accessor.

getMaximumIteration()

Maximum iteration accessor.

getName()

Accessor to the object's name.

getResult()

Result accessor.

getTargetBeta()

Target reliability index accessor.

getVariableConvergence()

Variable convergence criterion accessor.

getVariableStepMaxIterations()

Line search maximum iteration accessor.

hasName()

Test if the object is named.

run()

Run the algorithm.

setBetaConvergence(betaConvergence)

Beta convergence criterion accessor.

setFixedStep(fixedStep)

Fixed-step mode accessor.

setFixedStepValue(fixedStepValue)

Fixed-step value accessor.

setLimitStateConvergence(limitStateConvergence)

Limit-state convergence criterion accessor.

setMaximumIteration(maximumIteration)

Maximum iteration accessor.

setName(name)

Accessor to the object's name.

setResult(result)

Result accessor.

setTargetBeta(targetBeta)

Target reliability index accessor.

setVariableConvergence(variableConvergence)

Variable convergence criterion accessor.

setVariableStepMaxIterations(...)

Line search maximum iteration accessor.

Examples

>>> import openturns as ot
>>> import otrobopt
>>> ot.RandomGenerator.SetSeed(0)

Define a simple beam deflection limit state with a parametric input:

>>> full = ot.SymbolicFunction(['E', 'F', 'L', 'b', 'h'], ['F*L^3/(48.*E*b*h^3/12.)'])
>>> g = ot.ParametricFunction(full, [2], [5.0])  # freeze L = 5.0

Define the random distribution for the inputs:

>>> coll = [ot.LogNormalMuSigmaOverMu(30000., 0.12, 0.).getDistribution(),
...         ot.LogNormalMuSigmaOverMu(0.1, 0.2, 0.).getDistribution(),
...         ot.LogNormalMuSigmaOverMu(0.2, 0.05, 0.).getDistribution(),
...         ot.LogNormalMuSigmaOverMu(0.4, 0.05, 0.).getDistribution()]
>>> distribution = ot.JointDistribution(coll)
>>> x0 = [coll[i].computeQuantile(0.5)[0] for i in range(len(coll))]
>>> vect = ot.RandomVector(distribution)
>>> output = ot.CompositeRandomVector(g, vect)
>>> event = ot.ThresholdEvent(output, ot.Greater(), 0.02)

Solve the inverse problem: what beam length L yields \beta = 3.0?

>>> algo = otrobopt.InverseFORM(event, 'L', x0)
>>> algo.setTargetBeta(3.0)
>>> algo.run()
>>> result = algo.getResult()
>>> parameter = result.getParameter()
__init__(*args)
getBetaConvergence()

Beta convergence criterion accessor.

Returns:
betaConvfloat

Convergence threshold on |\|\ux\| - |\beta_t||.

getClassName()

Accessor to the object’s name.

Returns:
class_namestr

The object class name (object.__class__.__name__).

getFixedStep()

Fixed-step mode accessor.

Returns:
fixedStepbool

Whether a fixed step size is used.

getFixedStepValue()

Fixed-step value accessor.

Returns:
stepfloat

Step size \alpha used when the fixed-step mode is enabled.

getLimitStateConvergence()

Limit-state convergence criterion accessor.

Returns:
gConvfloat

Convergence threshold on |g(\ux, \theta)|.

getMaximumIteration()

Maximum iteration accessor.

Returns:
maxIterint

Maximum number of outer iterations.

getName()

Accessor to the object’s name.

Returns:
namestr

The name of the object.

getResult()

Result accessor.

Returns:
resultInverseFORMResult

The result structure containing the calibrated parameter, convergence criteria, and the standard FORM results.

getTargetBeta()

Target reliability index accessor.

Returns:
betafloat

Target reliability index \beta_t.

getVariableConvergence()

Variable convergence criterion accessor.

Returns:
varConvfloat

Convergence threshold on |\Delta \theta|.

getVariableStepMaxIterations()

Line search maximum iteration accessor.

Returns:
maxIterint

Maximum number of line search iterations.

hasName()

Test if the object is named.

Returns:
hasNamebool

True if the name is not empty.

run()

Run the algorithm.

Launches the iterative inverse FORM algorithm. The result is stored internally and can be retrieved with getResult().

setBetaConvergence(betaConvergence)

Beta convergence criterion accessor.

Sets the tolerance \varepsilon_\beta on the convergence of the reliability index \beta.

Parameters:
betaConvfloat

Convergence threshold on |\|\ux\| - |\beta_t||.

setFixedStep(fixedStep)

Fixed-step mode accessor.

When enabled, the algorithm uses a constant step size \alpha (see setFixedStepValue()) for the parameter and design point updates. When disabled, an Armijo-like line search is performed at each iteration.

Parameters:
fixedStepbool

Whether to use a fixed step size.

setFixedStepValue(fixedStepValue)

Fixed-step value accessor.

Parameters:
stepfloat

Step size \alpha used when the fixed-step mode is enabled.

setLimitStateConvergence(limitStateConvergence)

Limit-state convergence criterion accessor.

Sets the tolerance \varepsilon_g on the convergence of the limit state function value.

Parameters:
gConvfloat

Convergence threshold on |g(\ux, \theta)|.

setMaximumIteration(maximumIteration)

Maximum iteration accessor.

Parameters:
maxIterint

Maximum number of outer iterations of the inverse FORM algorithm.

setName(name)

Accessor to the object’s name.

Parameters:
namestr

The name of the object.

setResult(result)

Result accessor.

Parameters:
resultInverseFORMResult

The result structure.

setTargetBeta(targetBeta)

Target reliability index accessor.

Parameters:
betafloat

Target reliability index \beta_t.

setVariableConvergence(variableConvergence)

Variable convergence criterion accessor.

Sets the tolerance \varepsilon_\theta on the convergence of the calibrated parameter.

Parameters:
varConvfloat

Convergence threshold on |\Delta \theta|.

setVariableStepMaxIterations(variableStepMaxIterations)

Line search maximum iteration accessor.

Maximum number of backtracking steps in the variable step-size (Armijo-like) line search.

Parameters:
maxIterint

Maximum number of line search iterations.