pystra.decision.targets.RackwitzTargetModel#

Use it: User guide · Worked example · Theory

class RackwitzTargetModel(safety_cost_ratio, failure_cost_ratio, resistance_cov=0.3, load_cov=0.3, base_cost=1.0, interest_rate=0.035, obsolescence_rate=0.02, load_occurrence_rate=1.0, serviceability_cost_ratio=0.3, demolition_cost_ratio=0.2, serviceability_resistance_ratio=1.5, benefit_rate=0.0)[source]#

Bases: object

Rackwitz/Steenbergen target-reliability model for code calibration.

The model follows the normalized life-cycle objective used by Rackwitz and restated by Steenbergen, Rózsás, and Vrouwenvelder. Every cost is expressed as a fraction of the base construction cost C0 (base_cost), and the design variable is the mean resistance-to-load ratio p = E[R] / E[S]. The construction cost is C(p) = C0 + C1 p = base_cost * (1 + safety_cost_ratio * p), so the cost inputs below are ratios to C0.

Parameters:
  • safety_cost_ratio (float) – Marginal safety cost C1 / C0 – the extra construction cost per unit of p as a fraction of the base cost. Larger values make safety relatively more expensive and lower the optimal target.

  • failure_cost_ratio (float) – Failure (ULS) consequence cost H / C0.

  • resistance_cov (float) – Coefficients of variation of resistance and load in the closed-form lognormal P_f(p) model.

  • load_cov (float) – Coefficients of variation of resistance and load in the closed-form lognormal P_f(p) model.

  • base_cost (float) – Base construction cost C0. Because every other cost is a ratio to it, its value does not change the calibrated target; defaults to 1.

  • interest_rate (float) – Discount/interest rate gamma.

  • obsolescence_rate (float) – Obsolescence rate omega.

  • load_occurrence_rate (float) – Load occurrence rate lambda (renewals per year).

  • serviceability_cost_ratio (float) – Serviceability (SLS) cost U / C0.

  • demolition_cost_ratio (float) – Demolition/obsolescence cost A / C0.

  • serviceability_resistance_ratio (float) – Ratio of the ULS to SLS resistance thresholds; the SLS check uses p / serviceability_resistance_ratio.

  • benefit_rate (float) – Constant annual benefit b / C0. It is independent of p and so does not affect the optimum; defaults to 0.

Notes

The default rates and ratios (interest_rate=0.035, obsolescence_rate=0.02, serviceability_cost_ratio=0.3, demolition_cost_ratio=0.2, serviceability_resistance_ratio=1.5) are the Case 1 values of Steenbergen, Rózsás, and Vrouwenvelder (2018, Table 5); Rackwitz (2000, Fig. B.1) uses serviceability_cost_ratio=0.2. To recalibrate a whole table for your own classes, pass safety_costs (the C1 / C0 values) and failure_costs (the H / C0 values) to table(). The calibrated targets are not a reproduction of the rounded JCSS or ISO 2394 tables; see table().

Methods

calibrate

Return the target reliability implied by this model.

calibration

Return a generic calibration object for this model.

construction_cost

Return C(p) = C0 + C1 p.

failure_probability

Return the ULS failure probability for a design value.

objective

Return the normalized Rackwitz/Steenbergen life-cycle objective.

serviceability_probability

Return the SLS failure probability for a design value.

table

Calculate a Rackwitz-style target-reliability table.

property metadata: dict#

Return source parameters used by the normalized model.

construction_cost(design)[source]#

Return C(p) = C0 + C1 p.

Return type:

float

failure_probability(design)[source]#

Return the ULS failure probability for a design value.

Return type:

float

serviceability_probability(design)[source]#

Return the SLS failure probability for a design value.

Return type:

float

objective(design)[source]#

Return the normalized Rackwitz/Steenbergen life-cycle objective.

Return type:

float

calibration(bounds=(1.0, 15.0))[source]#

Return a generic calibration object for this model.

Return type:

TargetReliabilityCalibration

calibrate(bounds=(1.0, 15.0))[source]#

Return the target reliability implied by this model.

Return type:

TargetReliability

classmethod table(safety_costs=None, failure_costs=None, bounds=(1.0, 15.0), **kwargs)[source]#

Calculate a Rackwitz-style target-reliability table.

Parameters:
  • safety_costs (Mapping[str, float] | None) – Label -> C1 / C0 (marginal safety cost) for each relative safety-cost class. Defaults to representative large/normal/ small values.

  • failure_costs (Mapping[str, float] | None) – Label -> H / C0 (failure consequence cost) for each consequence class. Defaults to representative minor/moderate/large values.

  • bounds (tuple[float, float]) – Search interval for the optimizing p.

  • **kwargs (Any) – Forwarded to RackwitzTargetModel (e.g. resistance_cov, interest_rate) so every model setting can be varied too.

Return type:

DataFrame

Notes

The default classes are C1 / C0 = 0.3 / 0.03 / 0.003, an order-of-magnitude grading around the C1 / C0 = 0.03 base case of Rackwitz (2000, Fig. B.1), and H / C0 = 0.5 / 2.5 / 6.5, the midpoints of the JCSS consequence classes (rho = 1 + H / C0 below 2, 2-5 and 5-10). The remaining defaults are those of Steenbergen et al. (2018, Table 5). With serviceability_cost_ratio=0.2 and H / C0 = 3, the Rackwitz (2000, Fig. B.1) values, the model reproduces the normal-consequence column of Rackwitz (2000, Table 1): 3.1 / 3.7 / 4.3.

The result is a direct optimization, not a reproduction of the rounded targets in the JCSS Probabilistic Model Code (Part 1, Table 1) or ISO 2394:2015 (Table G.4), and it should not be expected to match them. Those tables do not state the cost ratios or coefficients of variation behind each cell; Steenbergen et al. (2018, Table 7) read each tabulated rate as an upper limit on the optimal rates within a class. In this closed-form model the optimum moves by about 0.6 in beta for each decade of C1 / C0 but by only about 0.2 across the whole JCSS consequence range. The tables, in contrast, step by 0.5-0.6 between consequence classes. With the defaults, the large-consequence column is 3.25 / 3.88 / 4.45 against the tabulated 3.7 / 4.4 / 4.7. Supply your own safety_costs and failure_costs (and resistance_cov / load_cov) to calibrate for a particular structure.