Cost Reduction Framework#

The Cost Reduction Framework estimates how overnight capital cost, total capital investment, and construction duration change across a sequence of firm reactor orders. It is available as the crf Python package inside ACCERT.

Python API#

Use run_one_scenario when you want to evaluate one deterministic set of cost-reduction levers.

from crf import run_one_scenario, print_scenario_result

config = {
    "reactor_type": "AP1000",  # AP1000, SFR, or HTGR
    "f_22": 250_000_000,
    "f_2321": 150_000_000,
    "land_cost_per_acre_0": 22_000,
    "startup_0": 28,
    "staggering_ratio": 0.75,
}

levers = {
    "num_orders": 10,
    "num_NOAK": 8,
    "itc_percent": 0,
    "n_itc": 0,
    "interest_percent": 6,
    "design_completion_percent": 70,
    "design_maturity": 1,
    "proc_exp": 0.5,
    "N_proc": 3,
    "ce_exp": 0.5,
    "N_cons": 5,
    "ae_exp": 0.5,
    "N_AE": 4,
    "standardization_percent": 80,
    "modularity_code": 0,
    "bop_grade_code": 0,
    "rb_grade_code": 0,
}

result = run_one_scenario(config, levers)
print_scenario_result(result)

The returned dictionary includes the static lever values, per-unit metrics such as OCC_1, TCI_1, and duration_1, and summary metrics such as avg_OCC, avg_TCI, avg_duration, and occ_reduction_from_FOAK_to_NOAK_percent.

Visualization#

Use save_dashboard to generate dashboard-style capital-cost figures from a scenario result. The dashboard includes a lever input table, OCC, TCI, construction duration, cost breakdowns, a staggered construction timeline, and the FOAK-to-NOAK OCC reduction waterfall by lever. Set show_levers=False to omit the lever input table and generate the compact chart-only dashboard.

from crf import run_one_scenario, save_dashboard

result = run_one_scenario(config, levers)
save_dashboard(
    result,
    "cost_reduction_framework_dashboard.png",
    title="AP1000 Cost Reduction Framework",
    show_levers=True,
)

For downstream analysis, results_to_dataframe converts the scenario result to a chart-ready pandas.DataFrame with one row per plant, while levers_to_dataframe returns the lever table and waterfall_to_dataframe returns the FOAK-to-NOAK waterfall values using the lever labels from the Excel dashboard.

Configuration#

config describes the reactor and fixed project assumptions.

Key

Description

reactor_type

Built-in Cost Reduction Framework baseline: AP1000, SFR, or HTGR.

f_22

Reactor building cost adjustment.

f_2321

Turbine generator cost adjustment.

land_cost_per_acre_0

Baseline land cost per acre.

startup_0

First-unit startup duration in months.

staggering_ratio

Fractional overlap between sequential unit construction schedules. The timeline chart delays later plant starts when needed so construction and startup finish dates do not move backward.

Levers#

levers contains the scenario variables. Percent inputs are entered as percent values, for example 6 for a six-percent interest rate. Binary code inputs use 0 or 1 and are converted internally to model labels.

Key

Meaning

num_orders

Number of firm plant orders to evaluate.

num_NOAK

Plant number used for nth-of-a-kind learning. Defaults to num_orders.

itc_percent

Investment tax credit percentage. Values are rounded to the nearest supported Cost Reduction Framework ITC level.

n_itc

Number of first units eligible for ITC.

interest_percent

Interest rate in percent.

design_completion_percent

Initial design completion in percent.

design_maturity

Initial technology/design maturity factor.

proc_exp, N_proc

Supply chain proficiency and number of plants to reach best proficiency.

ce_exp, N_cons

Construction proficiency and number of plants to reach best proficiency.

ae_exp, N_AE

Architect-engineer proficiency and number of plants to reach best proficiency.

standardization_percent

Cross-site standardization in percent.

modularity_code

0 for stick-built, 1 for modularized.

bop_grade_code

0 for nuclear-grade BOP, 1 for non-nuclear-grade BOP.

rb_grade_code

0 for nuclear-grade reactor building, 1 for non-nuclear-grade reactor building.

Sampling from Excel#

Use run_sampling_from_excel to run Monte Carlo samples from an Excel workbook with a sheet named Levers.

from crf import run_sampling_from_excel

run_sampling_from_excel(
    config=config,
    levers_xlsx="crf_levers.xlsx",
    n_samples=100,
    out_csv="crf_samples.csv",
    out_pkl="crf_samples.pkl",
    seed=42,
)

The Levers sheet must include these columns:

Levers, Min, Low, Median, High, Max, Distribution, Type, Set, Probabilities

The lever rows must follow the order expected by the Cost Reduction Framework because several rows share the same display name:

Number of firm orders
ITC amount
Number of plants claiming ITC
Interest rate
Design completion
Design maturity (technology maturity)
Supply chain proficiency
Number of plants to achieve best proficiency
Construction proficiency
Number of plants to achieve best proficiency
A/E proficiency
Number of plants to achieve best proficiency
Cross-site standardization
Modular civil construction
Commercial BOP
Non-safety-related RB

Runnable deterministic examples are available in tutorial/crf_ap1000_example.py, tutorial/crf_htgr_example.py, and tutorial/crf_sfr_example.py.