Reliability Block Diagram (systems-engineering-safety/arp4761a/reliability-block-diagram)
Use when the task is evaluating a system architecture as a reliability
block diagram (RBD): success logic expressed as blocks in series whose
internal redundancy is active parallel, k-out-of-n voting, or cold
standby. This leaf computes the quantitative reliability view of the
architecture over a mission: it complements the fta-fmea leaf, which
derives the failure logic and cut sets for the same system. All logic
is deterministic offline stdlib; no repair is modeled (use
markov-analysis for repairable and state-space models).
Domain quick reference
- Constant-rate component model: R(t) = exp(-lambda * t), MTBF =
1 / lambda. Mission time t in hours; rates in failures per hour.
- Series blocks (all items must work): R_s = product(R_i), and for
exponentials the block stays exponential with lambda_s =
sum(lambda_i), MTBF_s = 1 / lambda_s.
- Active parallel (1 of n, rates may differ): R_p = 1 - product(1 -
R_i). Identical units at rate lambda give the closed form
R_p = 1 - (1 - exp(-lambda t))^n and MTBF = (1/lambda) * H_n with
H_n the n-th harmonic number, for example 3/(2 lambda) for a pair.
- k-out-of-n voting (identical units, rate lambda): R = sum_{j=k..n}
C(n, j) R_u^j (1 - R_u)^(n - j) with R_u = exp(-lambda t); MTBF =
(1/lambda) * sum_{j=k..n} 1/j. 2 of 3 gives R = 3 R_u^2 - 2 R_u^3.
- Cold standby (1 of 2 identical units, perfect switching):
R_standby(t) = exp(-lambda t) * (1 + lambda t), MTBF = 2 / lambda.
Imperfect switching folds the switch failure rate into the standby
gain: R = exp(-lambda t) * (1 + (lambda + switch_rate) t). That
simplified form is a leading-order approximation; it stays accurate
while the switch hazard switch_rate * t is small, and for a
state-space or repairable treatment of switching use the
markov-analysis leaf.
- Equivalent block failure rate for a non-exponential block over
mission t: lambda_block = -ln(R_block(t)) / t (exact sum for a pure
series block). System mission rate is -ln(R_sys(t)) / t.
- Dominant component: one-at-a-time sensitivity scales each rate by
(1 + pct/100) and reports the elasticity
e = (R - R_perturbed) / (R * pct/100), which approximates
-(dR/dlambda) * lambda / R at the operating point. The component
with the largest elasticity drives system reliability.
Workflow
- Lay out the architecture as a block structure: a list of block
dicts connected in series. Each block is one of the four types:
series, parallel, kofn, standby (see evaluate_rbd docstring).
- Collect a constant failure rate per component from the
failure-rate-estimation leaf or data sources, plus the mission
time t at which reliability is wanted (design life or flight
duration).
- Evaluate the structure with evaluate_rbd(structure, t) to get the
system mission reliability, the exact system MTBF, the per-block
reliabilities, and the dominant component.
- Drill into any single block with block_reliability, block_mtbf and
block_equivalent_rate, or evaluate bare primitives
(series_reliability, parallel_reliability, kofn_reliability,
standby_reliability) for a quick configuration comparison.
- Rank architectures: same components as active parallel, 2-of-3
voting, or cold standby rarely have the same reliability or MTBF;
compare mission reliability at the design life and the sensitivity
report.
- Convert per-block or system mission reliabilities into equivalent
failure rates when feeding PSSA/SSA probability allocations or
comparing against the FHA probability requirement for the failure
condition.
Worked example
Dual hydraulic actuators (each lambda = 1e-4 per hour) in active
parallel, in series with a controller (lambda = 5e-5), mission t = 10
h.
- Component: R_each = exp(-1e-3) = 0.9990005 (0.99900 within 1%).
- Actuator pair: R_par = 1 - (1 - 0.9990005)^2 = 0.9999990 (within 1%
of 0.999999), block MTBF = 3 / (2 * 1e-4) = 15000 h, equivalent
block rate at t = 10 is about 1e-7 per hour.
- System: R_sys = 0.9999990 * exp(-5e-4) = 0.9994991 (0.9994995
within 1%); exact system MTBF = 2/1.5e-4 - 1/2.5e-4 = 9333.33 h.
- Dominant component at t = 10 h: the controller (series single item,
elasticity 5.0e-4) rather than an actuator (elasticity 1.0e-6):
redundancy masks each actuator, the controller is a single point.
2 of 3 voting computers at lambda = 1e-4 per hour, t = 100 h:
R_u = exp(-0.01) = 0.99005, R_2of3 = 3 R_u^2 - 2 R_u^3 =
0.99970495, MTBF = (1e4) * (1/2 + 1/3) = 8333.33 h. Same components
and mission, reliability ranking: cold standby 0.9999503 > active
parallel pair 0.9999010 > 2 of 3 voting 0.9997050 > single 0.99005.
Voting exists for fault masking and integrity, not for peak
reliability; standby saves the dormant unit from wear so it wins on
long missions, while active parallel wins when the switch hazard is
significant.
Verification
- Confirm R_each, R_par and R_sys of the worked example within 1% of
0.99900, 0.999999 and 0.9994995.
- Confirm the 2 of 3 mission reliability 0.99970495 and MTBF 8333.33 h.
- Confirm evaluate_rbd returns the dominant component dict pointing at
the controller block (block_index 1).
- Confirm exact identities: k-of-n with k = 1 equals active parallel;
k = n equals series; series block MTBF is 1 / sum(rates); cold
standby MTBF is 2 / lambda.
- Confirm every non-physical input raises ValueError: negative or zero
rates, negative time, k outside 1..n, non-identical units in kofn or
standby blocks, standby without exactly 2 items, an empty structure,
an unknown block type, an empty items list.
- Run the contract test offline: python3
scripts/test_reliability_block_diagram.py (33 tests, deterministic).
Pitfalls
- Routing here, not to fta-fmea: RBD gives the quantitative
series-parallel reliability and MTBF view; fault tree analysis
derives minimal cut sets and the failure logic for the same
architecture.
- Routing here, not to markov-analysis: this leaf models non-repairable
blocks with constant rates and exact closed forms; repairable
systems, availability, and state-space standby or non-identical
standby belong to the Markov leaf.
- Routing here, not to failure-rate-estimation: this leaf consumes
component failure rates; demonstrating or estimating those rates
from test or service data is the failure-rate-estimation job.
- Reading k-of-n as active parallel: 2 of 3 voting is less reliable
than a parallel pair of the same units but masks a single failed
unit's output, which is why voting architectures exist.
- Applying the imperfect-switch standby form with a large switch_rate:
the simplified form drifts above unity once switch_rate * t is not
small; keep it to the low switch hazard regime.
- Quoting the exact per-block MTBF for an active parallel block with
very many items: exact evaluation uses an exponential-term expansion
that caps at 16 items per parallel block; pre-combine series paths
into single rates for larger structures.
- Assuming blocks are independent when they share power, cooling or
installation: common cause failures need the common-cause-analysis
leaf, which is outside the plain RBD model.
Related leaves
- systems-engineering-safety/arp4761a/fta-fmea: the logic view of the
same architecture, minimal cut sets over failure events; RBD
provides the quantitative series-parallel reliability counterpart.
- systems-engineering-safety/arp4761a/failure-rate-estimation: the
source of the component failure rates and MTBF bounds fed into the
block structure.
- systems-engineering-safety/arp4761a/markov-analysis: repairable,
state-space and non-identical standby modeling when the static RBD
assumptions do not hold.
- systems-engineering-safety/arp4761a/common-cause-analysis: checks
that the independence assumption behind series-parallel math holds.
- systems-engineering-safety/arp4761a/zonal-safety-analysis: physical
separation and installation-level independence that the RBD
reliability numbers assume.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_reliability_block_diagram.py
The test covers the worked-example numbers within 1%, the series and
parallel closed forms, k-of-n edges, cold standby with perfect and
simplified imperfect switching, exact MTBF values, block and system
equivalent rates, one-at-a-time sensitivity ranking, round-trip
identities, and ValueError rejection of non-physical structures and
inputs.
Compliance
- Standards referenced, not reproduced: ARP4761A text is proprietary
(SAE); the reliability block diagram method and the constant-rate
series-parallel formulas are common engineering methodology,
summary-only per standards-map.yaml.
- The leaf is a static, non-repairable constant-rate model with stated
assumptions; it does not reproduce standard tables or sections.
- compliance: STANDARDS-REF, gated: false.
1---2name: reliability-block-diagram3description: Use when you must analyze aircraft system reliability with a reliability block diagram (RBD) per ARP4761A: evaluate a structure of blocks in series from constant failure-rate components, compute component and system mission reliability R(t) = exp(-lambda t), combine series, active parallel, k-out-of-n voting and cold standby redundancy blocks, derive exact block and system MTBF, convert a non-exponential block to an equivalent failure rate -ln(R)/t, and identify the dominant component whose failure rate drives system reliability by one-at-a-time sensitivity analysis. Parses a block structure of rates and returns system reliability, MTBF, per-block reliabilities and the dominant component. Produces the quantitative series-parallel reliability view that complements the fault tree logic view. Trigger: reliability block diagram, RBD, series parallel reliability, redundancy, k-out-of-n, standby, MTBF, mission reliability, failure rate.4license: Apache-2.05---67# Reliability Block Diagram (systems-engineering-safety/arp4761a/reliability-block-diagram)89Use when the task is evaluating a system architecture as a reliability10block diagram (RBD): success logic expressed as blocks in series whose11internal redundancy is active parallel, k-out-of-n voting, or cold12standby. This leaf computes the quantitative reliability view of the13architecture over a mission: it complements the fta-fmea leaf, which14derives the failure logic and cut sets for the same system. All logic15is deterministic offline stdlib; no repair is modeled (use16markov-analysis for repairable and state-space models).1718## Domain quick reference1920- Constant-rate component model: R(t) = exp(-lambda * t), MTBF =21 1 / lambda. Mission time t in hours; rates in failures per hour.22- Series blocks (all items must work): R_s = product(R_i), and for23 exponentials the block stays exponential with lambda_s =24 sum(lambda_i), MTBF_s = 1 / lambda_s.25- Active parallel (1 of n, rates may differ): R_p = 1 - product(1 -26 R_i). Identical units at rate lambda give the closed form27 R_p = 1 - (1 - exp(-lambda t))^n and MTBF = (1/lambda) * H_n with28 H_n the n-th harmonic number, for example 3/(2 lambda) for a pair.29- k-out-of-n voting (identical units, rate lambda): R = sum_{j=k..n}30 C(n, j) R_u^j (1 - R_u)^(n - j) with R_u = exp(-lambda t); MTBF =31 (1/lambda) * sum_{j=k..n} 1/j. 2 of 3 gives R = 3 R_u^2 - 2 R_u^3.32- Cold standby (1 of 2 identical units, perfect switching):33 R_standby(t) = exp(-lambda t) * (1 + lambda t), MTBF = 2 / lambda.34 Imperfect switching folds the switch failure rate into the standby35 gain: R = exp(-lambda t) * (1 + (lambda + switch_rate) t). That36 simplified form is a leading-order approximation; it stays accurate37 while the switch hazard switch_rate * t is small, and for a38 state-space or repairable treatment of switching use the39 markov-analysis leaf.40- Equivalent block failure rate for a non-exponential block over41 mission t: lambda_block = -ln(R_block(t)) / t (exact sum for a pure42 series block). System mission rate is -ln(R_sys(t)) / t.43- Dominant component: one-at-a-time sensitivity scales each rate by44 (1 + pct/100) and reports the elasticity45 e = (R - R_perturbed) / (R * pct/100), which approximates46 -(dR/dlambda) * lambda / R at the operating point. The component47 with the largest elasticity drives system reliability.4849## Workflow50511. Lay out the architecture as a block structure: a list of block52 dicts connected in series. Each block is one of the four types:53 series, parallel, kofn, standby (see evaluate_rbd docstring).542. Collect a constant failure rate per component from the55 failure-rate-estimation leaf or data sources, plus the mission56 time t at which reliability is wanted (design life or flight57 duration).583. Evaluate the structure with evaluate_rbd(structure, t) to get the59 system mission reliability, the exact system MTBF, the per-block60 reliabilities, and the dominant component.614. Drill into any single block with block_reliability, block_mtbf and62 block_equivalent_rate, or evaluate bare primitives63 (series_reliability, parallel_reliability, kofn_reliability,64 standby_reliability) for a quick configuration comparison.655. Rank architectures: same components as active parallel, 2-of-366 voting, or cold standby rarely have the same reliability or MTBF;67 compare mission reliability at the design life and the sensitivity68 report.696. Convert per-block or system mission reliabilities into equivalent70 failure rates when feeding PSSA/SSA probability allocations or71 comparing against the FHA probability requirement for the failure72 condition.7374## Worked example7576Dual hydraulic actuators (each lambda = 1e-4 per hour) in active77parallel, in series with a controller (lambda = 5e-5), mission t = 1078h.7980- Component: R_each = exp(-1e-3) = 0.9990005 (0.99900 within 1%).81- Actuator pair: R_par = 1 - (1 - 0.9990005)^2 = 0.9999990 (within 1%82 of 0.999999), block MTBF = 3 / (2 * 1e-4) = 15000 h, equivalent83 block rate at t = 10 is about 1e-7 per hour.84- System: R_sys = 0.9999990 * exp(-5e-4) = 0.9994991 (0.999499585 within 1%); exact system MTBF = 2/1.5e-4 - 1/2.5e-4 = 9333.33 h.86- Dominant component at t = 10 h: the controller (series single item,87 elasticity 5.0e-4) rather than an actuator (elasticity 1.0e-6):88 redundancy masks each actuator, the controller is a single point.89902 of 3 voting computers at lambda = 1e-4 per hour, t = 100 h:91R_u = exp(-0.01) = 0.99005, R_2of3 = 3 R_u^2 - 2 R_u^3 =920.99970495, MTBF = (1e4) * (1/2 + 1/3) = 8333.33 h. Same components93and mission, reliability ranking: cold standby 0.9999503 > active94parallel pair 0.9999010 > 2 of 3 voting 0.9997050 > single 0.99005.95Voting exists for fault masking and integrity, not for peak96reliability; standby saves the dormant unit from wear so it wins on97long missions, while active parallel wins when the switch hazard is98significant.99100## Verification101102- Confirm R_each, R_par and R_sys of the worked example within 1% of103 0.99900, 0.999999 and 0.9994995.104- Confirm the 2 of 3 mission reliability 0.99970495 and MTBF 8333.33 h.105- Confirm evaluate_rbd returns the dominant component dict pointing at106 the controller block (block_index 1).107- Confirm exact identities: k-of-n with k = 1 equals active parallel;108 k = n equals series; series block MTBF is 1 / sum(rates); cold109 standby MTBF is 2 / lambda.110- Confirm every non-physical input raises ValueError: negative or zero111 rates, negative time, k outside 1..n, non-identical units in kofn or112 standby blocks, standby without exactly 2 items, an empty structure,113 an unknown block type, an empty items list.114- Run the contract test offline: python3115 scripts/test_reliability_block_diagram.py (33 tests, deterministic).116117## Pitfalls118119- Routing here, not to fta-fmea: RBD gives the quantitative120 series-parallel reliability and MTBF view; fault tree analysis121 derives minimal cut sets and the failure logic for the same122 architecture.123- Routing here, not to markov-analysis: this leaf models non-repairable124 blocks with constant rates and exact closed forms; repairable125 systems, availability, and state-space standby or non-identical126 standby belong to the Markov leaf.127- Routing here, not to failure-rate-estimation: this leaf consumes128 component failure rates; demonstrating or estimating those rates129 from test or service data is the failure-rate-estimation job.130- Reading k-of-n as active parallel: 2 of 3 voting is less reliable131 than a parallel pair of the same units but masks a single failed132 unit's output, which is why voting architectures exist.133- Applying the imperfect-switch standby form with a large switch_rate:134 the simplified form drifts above unity once switch_rate * t is not135 small; keep it to the low switch hazard regime.136- Quoting the exact per-block MTBF for an active parallel block with137 very many items: exact evaluation uses an exponential-term expansion138 that caps at 16 items per parallel block; pre-combine series paths139 into single rates for larger structures.140- Assuming blocks are independent when they share power, cooling or141 installation: common cause failures need the common-cause-analysis142 leaf, which is outside the plain RBD model.143144## Related leaves145146- systems-engineering-safety/arp4761a/fta-fmea: the logic view of the147 same architecture, minimal cut sets over failure events; RBD148 provides the quantitative series-parallel reliability counterpart.149- systems-engineering-safety/arp4761a/failure-rate-estimation: the150 source of the component failure rates and MTBF bounds fed into the151 block structure.152- systems-engineering-safety/arp4761a/markov-analysis: repairable,153 state-space and non-identical standby modeling when the static RBD154 assumptions do not hold.155- systems-engineering-safety/arp4761a/common-cause-analysis: checks156 that the independence assumption behind series-parallel math holds.157- systems-engineering-safety/arp4761a/zonal-safety-analysis: physical158 separation and installation-level independence that the RBD159 reliability numbers assume.160161## Behavior contract (gate 3)162163Run the deterministic contract test (stdlib unittest, offline):164165 python3 scripts/test_reliability_block_diagram.py166167The test covers the worked-example numbers within 1%, the series and168parallel closed forms, k-of-n edges, cold standby with perfect and169simplified imperfect switching, exact MTBF values, block and system170equivalent rates, one-at-a-time sensitivity ranking, round-trip171identities, and ValueError rejection of non-physical structures and172inputs.173174## Compliance175176- Standards referenced, not reproduced: ARP4761A text is proprietary177 (SAE); the reliability block diagram method and the constant-rate178 series-parallel formulas are common engineering methodology,179 summary-only per standards-map.yaml.180- The leaf is a static, non-repairable constant-rate model with stated181 assumptions; it does not reproduce standard tables or sections.182- compliance: STANDARDS-REF, gated: false.