Skip to content

Simulation Output

All per-scenario simulation results use Hive partitioning: one data.parquet file per scenario stored in a scenario_id=NNNN/ subdirectory. See Hive Partitioning for how to read these files.


Every simulation/ entity partition below shares a leading (scenario_id, stage_id, node_id) axis: scenario_id is the scenario id, stage_id the declared stage id, and node_id the id of the visited policy-graph node for that (scenario_id, stage_id) pair. On a plain stage chain (the default: a policy_graph that declares no nodes) the nodes are numbered by 0-based stage position, so node_id is that position; it equals stage_id only when the declared stage ids are 0, 1, 2, … (declared stage ids 10, 20, 30 give node_id 0, 1, 2). On a policy graph that declares nodes, node_id is the node’s declared id and identifies which branch a scenario actually visited at that stage, and joins back to the node’s stage_id/pool_id via the nodes of the policy checkpoint’s manifest (see policy/manifest.bin).

Methodology: Policy Graphs

Two run-level, unpartitioned files complete this axis:

The per-scenario node-path trace: exactly the (scenario_id, stage_id, node_id) axis prefix, one row per stage visited by each scenario. 3 columns, all non-null. Joins to any entity file on (scenario_id, stage_id).

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based).
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).

Run-level, per-scenario summary: one row per scenario. 3 columns.

Methodology: Upper Bound Evaluation · Discount Rate Formulation

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based).
probabilityFloat64Yes—Per-scenario leaf-path weight under a declared census. null under sampled scenario selection.
discounted_immediate_costFloat64NoUSDPresent value at the first stage of the scenario’s immediate cost: the sum over the visited stages of discount_factor × immediate_cost; when a boundary policy is loaded, the last stage’s term uses total_cost in place of immediate_cost.

Per-stage cost breakdown. One row per stage. 29 columns.

Methodology: LP Formulation · Discount Rate Formulation

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
block_idInt32Yes—Always null: costs are reported per stage.
total_costFloat64NoUSDThe stage objective, immediate_cost + future_cost, in this stage’s monetary units (not discounted to the first stage).
immediate_costFloat64NoUSDThe stage objective without the future-cost term, in this stage’s monetary units.
future_costFloat64NoUSDThe future-cost term of the stage objective: the future-cost variable times this stage’s one-step discount factor (the single-stage factor, not the cumulative discount_factor). See Discount Rate Formulation.
discount_factorFloat64No—Cumulative discount factor of this stage: multiplying a cost of this stage by it gives its present value at the first stage. See Discount Rate Formulation.
thermal_costFloat64NoUSDThermal generation cost component.
anticipated_thermal_costFloat64NoUSDFuel cost of the anticipated commitments decided at this stage, in this stage’s monetary units — each commitment’s delivery-stage cost discounted from its delivery stage to this stage; multiply by discount_factor for its present value. Zero when no anticipated units exist.
contract_costFloat64NoUSDEnergy contract cost component (positive for imports, negative for exports).
deficit_costFloat64NoUSDCost of unserved load (deficit penalty).
excess_costFloat64NoUSDCost of excess generation (excess penalty).
storage_violation_costFloat64NoUSDAlways 0. The storage-floor and filling-target slack costs (both exist only on a hydro with a filling block) are included in immediate_cost and in no category column.
filling_target_costFloat64NoUSDAlways 0. The storage-floor and filling-target slack costs (both exist only on a hydro with a filling block) are included in immediate_cost and in no category column.
hydro_violation_costFloat64NoUSDSum of the outflow, turbined, generation, evaporation and withdrawal violation costs.
outflow_violation_below_costFloat64NoUSDCost of total outflow below-minimum violations.
outflow_violation_above_costFloat64NoUSDCost of total outflow above-maximum violations.
turbined_violation_costFloat64NoUSDCost of the turbined-flow below-minimum slack.
generation_violation_costFloat64NoUSDCost of the generation below-minimum slack.
evaporation_violation_costFloat64NoUSDCost of evaporation violations.
withdrawal_violation_costFloat64NoUSDCost of water withdrawal violations.
inflow_penalty_costFloat64NoUSDCost of inflow non-negativity slack (numerical penalty).
generic_violation_costFloat64NoUSDCost of generic constraint violations.
spillage_costFloat64NoUSDCost of spillage and diversion flow.
turbined_costFloat64NoUSDTurbined-flow cost: each hydro’s per-unit turbined-flow cost rate (the turbined_cost input) times its turbined flow and the block hours, summed over hydros and blocks.
curtailment_costFloat64NoUSDCost of non-controllable source curtailment.
exchange_costFloat64NoUSDTransmission exchange cost component.
pumping_costFloat64NoUSDAlways 0: pumping carries no objective cost; its power enters the bus balance.

Hydro plant dispatch results. One row per (stage, block, hydro) triplet. 41 columns.

Methodology: LP Formulation · Hydro Production Function Models

The nine energy-conversion columns (equivalent_productivity_mw_per_m3s … stored_energy_final_mwh, plus the four tail columns below) report the two evaluators defined in Hydro Production Function Models §5: the reference-point pair and the useful-range mean (integrated_*) pair.

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
block_idInt32Yes—Load block index. Nullable in the schema; always set in written output.
hydro_idInt32No—Hydro plant ID.
turbined_m3sFloat64Nom³/sTurbined flow in cubic metres per second (m³/s).
spillage_m3sFloat64Nom³/sSpilled flow in m³/s.
outflow_m3sFloat64Nom³/sTotal outflow (turbined + spilled) in m³/s.
evaporation_m3sFloat64Yesm³/sNet evaporation flow in m³/s; signed. Positive values are net evaporative loss; negative values are net rainfall on the lake surface. On a parallel stage the stage-level value, repeated on every block row; on a chronological stage the block’s own value. 0.0 for a plant that models no evaporation. Never null in written output.
diverted_inflow_m3sFloat64Yesm³/sFlow diverted into this reservoir by other plants’ diversions, in m³/s; 0.0 when none. Never null in written output.
diverted_outflow_m3sFloat64Yesm³/sFlow this plant diverts, in m³/s; 0.0 when it has no diversion. Never null in written output.
incremental_inflow_m3sFloat64Nom³/sNatural incremental inflow to this reservoir in m³/s (excluding upstream contributions).
inflow_m3sFloat64Nom³/sEqual to incremental_inflow_m3s: the plant’s incremental (local) inflow in m³/s, the stage value repeated on every block row; upstream releases are not included.
storage_initial_hm3Float64Nohm³Reservoir storage at the start of the row’s interval in cubic hectometres (hm³): the stage’s incoming storage on a parallel stage (the same on every block row), the block’s starting boundary storage on a chronological stage.
storage_final_hm3Float64Nohm³Reservoir storage at the end of the row’s interval in hm³: the stage’s end storage on a parallel stage, the block’s ending boundary storage on a chronological stage.
generation_mwFloat64NoMWAverage power generation over the block in megawatts (MW).
generation_mwhFloat64NoMWhTotal energy generated over the block in megawatt-hours (MWh).
equivalent_productivity_mw_per_m3sFloat64NoMW/(m³/s)Equivalent productivity ρ_eq [MW/(m³/s)] at the reference operating point for this stage.
accumulated_productivity_mw_per_m3sFloat64NoMW/(m³/s)Accumulated cascade productivity ρ_acum [MW/(m³/s)]: sum of ρ_eq for this plant and all downstream plants.
incremental_inflow_energy_mwFloat64NoMWPower equivalent of incremental inflow: ρ_acum × incremental_inflow_m3s [MW].
stored_energy_initial_mwhFloat64NoMWhEnergy content of usable storage at stage start: (storage_initial_hm3 − V_min) × integrated_accumulated_productivity_mw_per_m3s × 1e6/3600 [MWh], where V_min is the plant’s physical reservoir.min_storage_hm3 (never a hydro_bounds storage override) and storage_initial_hm3 is the row’s own value (the per-block boundary storage on a chronological stage).
stored_energy_final_mwhFloat64NoMWhEnergy content of usable storage at stage end: (storage_final_hm3 − V_min) × integrated_accumulated_productivity_mw_per_m3s × 1e6/3600 [MWh], where V_min is the plant’s physical reservoir.min_storage_hm3 (never a hydro_bounds storage override) and storage_final_hm3 is the row’s own value (the per-block boundary storage on a chronological stage).
spillage_costFloat64NoUSDMonetary cost attributed to spillage.
water_value_per_hm3Float64NoUSD/hm³Dual of the plant’s own water-balance row, in monetary units per hm³: each block’s own row on a chronological stage; the stage row, repeated on every block row, on a parallel stage. Negative values mean one more hm³ lowers the cost; see Convergence & Diagnostics for the sign.
storage_binding_codeInt8No—Storage-binding code (see codes.json storage_binding mapping); always 0 in written output.
operative_state_codeInt8No—Operative state code (see codes.json operative_state mapping); always 1 in written output.
turbined_slack_m3sFloat64Nom³/sTurbined flow slack variable (non-negativity enforcement). Zero under normal operation.
outflow_slack_below_m3sFloat64Nom³/sOutflow lower-bound slack in m³/s.
outflow_slack_above_m3sFloat64Nom³/sOutflow upper-bound slack in m³/s.
generation_slack_mwFloat64NoMWGeneration bound slack in MW.
storage_violation_below_hm3Float64Nohm³Storage below the dead volume of a filling hydro at its Operating stages, in hm³ (the soft floor of Penalty System); 0 on every other plant and stage: a non-filling plant in service keeps its dead volume as a hard bound, a filling plant’s floor while it fills is its filling target (whose miss is filling_target_violation_hm3), and any other plant outside its commissioning window has no storage floor. A stage-level value, repeated on every block row.
filling_target_violation_hm3Float64Nohm³Filling target miss in hm³. Zero when the target is met. A stage-level value, repeated on every block row.
evaporation_violation_pos_m3sFloat64Nom³/sSlack of the evaporation row above its linearised target (evaporation exceeds the target), in m³/s; on a parallel stage the stage-level value, repeated on every block row; on a chronological stage the block’s own. Zero under normal operation.
evaporation_violation_neg_m3sFloat64Nom³/sSlack of the evaporation row below its linearised target (evaporation falls short of the target), in m³/s; on a parallel stage the stage-level value, repeated on every block row; on a chronological stage the block’s own. Zero under normal operation.
inflow_nonnegativity_slack_m3sFloat64Nom³/sInflow non-negativity slack in m³/s. Zero under normal operation. A stage-level value, repeated on every block row.
water_withdrawal_violation_pos_m3sFloat64Nom³/sWater withdrawal over-target violation in m³/s. Zero when withdrawal is at or below target. A stage-level value, repeated on every block row.
water_withdrawal_violation_neg_m3sFloat64Nom³/sWater withdrawal under-target violation in m³/s. Zero when withdrawal is at or above target. A stage-level value, repeated on every block row.
integrated_equivalent_productivity_mw_per_m3sFloat64NoMW/(m³/s)Useful-range mean equivalent productivity [MW/(m³/s)]: ρ_eq with the forebay level averaged over the plant’s physical storage range (reservoir in system/hydros.json). Equals equivalent_productivity_mw_per_m3s when the range is collapsed, the plant has no VHA geometry or specific productivity, or an equivalent_productivity_mw_per_m3s override is supplied.
integrated_accumulated_productivity_mw_per_m3sFloat64NoMW/(m³/s)integrated_equivalent_productivity_mw_per_m3s summed over this plant and every downstream plant [MW/(m³/s)].
stored_energy_initial_mwFloat64NoMWstored_energy_initial_mwh ÷ the stage’s total block hours [MW] — the same divisor on every block row of the stage, never the block’s own hours.
stored_energy_final_mwFloat64NoMWstored_energy_final_mwh ÷ the stage’s total block hours [MW].

The stored_energy_initial_mwh and stored_energy_final_mwh columns equal the reference-point product (with accumulated_productivity_mw_per_m3s) only when a plant’s physical storage range is collapsed or it has no resolvable VHA geometry.


Hydro dispatch results at (hydro, bus) cell granularity — one cell per distinct bus among a plant’s unit groups (see hydros[].unit_groups[] in the Case Format reference). One row per (stage, block, hydro, bus) quadruplet. 9 columns.

Methodology: LP Formulation

simulation/hydros/ reports each plant’s total: a plant split across several unit groups sharing one bus has no per-group quantity to report, since every split of that shared cell’s flow across its same-bus groups is an equally optimal solution with no dual to distinguish them. This partition reports at the bus-cell granularity the LP itself solves.

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
block_idInt32Yes—Load block index. Nullable in the schema; always set in written output.
hydro_idInt32No—Hydro plant ID.
bus_idInt32No—Bus ID for this cell. Always non-null.
turbined_m3sFloat64Nom³/sTurbined flow for this cell in m³/s.
generation_mwFloat64NoMWAverage power generation for this cell over the block in MW.
generation_mwhFloat64NoMWhTotal energy generated by this cell over the block in MWh (generation_mw × block_duration_hours).

A plant’s cell rows sum bit-exactly to its simulation/hydros/ row for turbined_m3s, on every production model. For generation_mw the cell rows sum bit-exactly only for FPHA and single-cell plants, and for generation_mwh only for single-cell plants, since each row multiplies its own generation_mw by the block duration. On a constant-productivity ("constant_productivity"/"linearized_head") model a multi-cell plant’s total is (Σ_c q_c)·ρ — its cells’ turbined flow summed, then multiplied by the productivity once — while each cell row is q_c·ρ computed independently. The sum of a plant’s cell rows can therefore differ from its plant total by a rounding-scale amount (see Determinism & Provenance — Out of Scope).


Thermal unit dispatch results. One row per (stage, block, thermal) triplet. 12 columns.

Methodology: Equipment-Specific Formulations

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
block_idInt32Yes—Load block index. Nullable in the schema; always set in written output.
thermal_idInt32No—Thermal unit ID.
generation_mwFloat64NoMWAverage power generation over the block in MW.
generation_mwhFloat64NoMWhTotal energy generated over the block in MWh.
generation_costFloat64NoUSDMonetary generation cost for this block.
is_anticipatedBooleanNo—true if this unit is configured for anticipated dispatch.
anticipated_committed_mwFloat64YesMWCommitted capacity under anticipated dispatch in MW. null for non-anticipated units.
anticipated_decision_mwFloat64YesMWDispatch decision under anticipated dispatch in MW. null for non-anticipated units.
operative_state_codeInt8No—Operative state code (see codes.json operative_state mapping); always 1 in written output.

Transmission line flow results. One row per (stage, block, line) triplet. 13 columns.

Methodology: Equipment-Specific Formulations

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
block_idInt32Yes—Load block index. Nullable in the schema; always set in written output.
line_idInt32No—Transmission line ID.
direct_flow_mwFloat64NoMWFlow in the forward (direct) direction in MW.
reverse_flow_mwFloat64NoMWFlow in the reverse direction in MW.
net_flow_mwFloat64NoMWNet flow (direct minus reverse) in MW.
net_flow_mwhFloat64NoMWhNet energy flow over the block in MWh.
losses_mwFloat64NoMWTransmission losses in MW.
losses_mwhFloat64NoMWhTransmission losses in MWh over the block.
exchange_costFloat64NoUSDMonetary cost attributed to this line’s exchange.
operative_state_codeInt8No—Operative state code (see codes.json operative_state mapping); always 2 in written output.

Bus load balance results. One row per (stage, block, bus) triplet. 12 columns.

Methodology: System Element Modeling Overview

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
block_idInt32Yes—Load block index. Nullable in the schema; always set in written output.
bus_idInt32No—Bus ID.
load_mwFloat64NoMWTotal load demand at this bus in MW.
load_mwhFloat64NoMWhTotal load energy demand over the block in MWh.
deficit_mwFloat64NoMWUnserved load (deficit) at this bus in MW. Zero under feasible dispatch.
deficit_mwhFloat64NoMWhUnserved load energy over the block in MWh.
excess_mwFloat64NoMWExcess generation at this bus in MW. Zero under feasible dispatch.
excess_mwhFloat64NoMWhExcess generation energy over the block in MWh.
spot_priceFloat64NoUSD/MWhLocational marginal price (shadow price of the power balance constraint) in USD per MWh.

Pumping station results. One row per (stage, block, pumping station) triplet. 11 columns.

Methodology: Equipment-Specific Formulations

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
block_idInt32Yes—Load block index. Nullable in the schema; always set in written output.
pumping_station_idInt32No—Pumping station ID.
pumped_flow_m3sFloat64Nom³/sPumped flow rate in m³/s.
pumped_volume_hm3Float64Nohm³Total pumped volume over the block in hm³.
power_consumption_mwFloat64NoMWPower consumed by the pumping station in MW.
energy_consumption_mwhFloat64NoMWhEnergy consumed over the block in MWh.
pumping_costFloat64NoUSDAlways 0: pumping carries no objective cost; its power enters the bus balance.
operative_state_codeInt8No—Operative state code (see codes.json operative_state mapping); always 1 in written output.

Energy contract results. One row per (stage, block, contract) triplet. 10 columns.

Methodology: Equipment-Specific Formulations

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
block_idInt32Yes—Load block index. Nullable in the schema; always set in written output.
contract_idInt32No—Contract ID.
power_mwFloat64NoMWContracted power in MW, non-negative for both import and export contracts. Direction is carried by the contract type and the price sign, not by the sign of this value.
energy_mwhFloat64NoMWhContracted energy over the block in MWh.
price_per_mwhFloat64NoUSD/MWhContract price in USD per MWh.
total_costFloat64NoUSDTotal contract cost for this block: positive for imports (cost), negative for exports (revenue).
operative_state_codeInt8No—Operative state code (see codes.json operative_state mapping); always 1 for contracts (a dormant stage emits a zero-power_mw row, not a distinct code).

Non-controllable source results (wind, solar, run-of-river hydro without storage, etc.). One row per (stage, block, non-controllable) triplet. 12 columns.

Methodology: Equipment-Specific Formulations

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
block_idInt32Yes—Load block index. Nullable in the schema; always set in written output.
non_controllable_idInt32No—Non-controllable source ID.
generation_mwFloat64NoMWActual generation dispatched in MW.
generation_mwhFloat64NoMWhActual energy generated over the block in MWh.
available_mwFloat64NoMWMaximum available generation in MW (before curtailment).
curtailment_mwFloat64NoMWGeneration curtailed in MW. Zero when all available generation is dispatched.
curtailment_mwhFloat64NoMWhCurtailed energy over the block in MWh.
curtailment_costFloat64NoUSDMonetary cost attributed to curtailment.
operative_state_codeInt8No—Operative state code (see codes.json operative_state mapping); always 1 in written output.

Autoregressive inflow lag state variables. One row per (stage, hydro, lag) triplet. No block dimension — inflow lags are stage-level state variables. 6 columns. All columns are non-nullable.

Methodology: PAR(p) Inflow Model · State Augmentation

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
hydro_idInt32No—Hydro plant ID.
lag_indexInt32No—Autoregressive lag index, 0-based: 0 is the inflow of the most recently completed lag period (Multi-Resolution Studies §2); without season_definitions no stage completes a lag period and inflow_m3s is 0 on every row.
inflow_m3sFloat64Nom³/sInflow value for this lag in m³/s.

Water travel-time in-transit volumes. One row per (stage, downstream hydro, maturity lag) triplet. No block dimension — in-transit buckets are stage-level state variables. 7 columns. All columns are non-nullable. The directory is present only when the system declares a travel-time arc (travel_time_hours present, strictly positive, with a downstream_id).

Methodology: State Augmentation

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
hydro_idInt32No—Downstream (receiving) hydro plant ID the in-transit water is destined for.
lagInt32No—Maturity lag (1-based) of the bucket at the end of this stage: lag 1 arrives at the receiving plant at the next stage, lag k arrives k stages later.
in_transit_volume_hm3Float64Nohm³Volume in this bucket at the end of the stage, in hm³. Water that would mature after the last stage is dropped when no terminal boundary is loaded, so such a bucket reads 0 (see Horizon limitation).
delayed_arrival_hm3Float64Nohm³Volume of the incoming lag-1 bucket, which enters the receiving plant’s water balance at this stage or, while that plant is outside its commissioning window, the balance of the nearest downstream plant that is not PreFilling (with none, it leaves the modeled system), in hm³; written on the lag = 1 row and 0 on deeper lags.

Rolling release-window seed recording each in-transit bucket’s own upstream release history, for seeding a continuing (resumed) run’s transit buckets across the boundary. Scenario-level — unlike every other simulation partition, a window’s own [start_date, end_date) span anchors the row, not a stage/node index, so this schema carries scenario_id alone (no stage_id/node_id). 5 columns. All columns are non-nullable. Hive-partitioned by scenario_id (transit_seed/scenario_id=NNNN/data.parquet); written only when the system declares a travel-time arc.

Methodology: State Augmentation

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
hydro_idInt32No—Upstream entity identifier whose release the window covers.
start_dateDate32No—Start of the release window (inclusive).
end_dateDate32No—End of the release window (exclusive).
value_m3sFloat64Nom³/sMean release rate over the window, in m³/s.

Post-horizon commitments the study decides, keyed (thermal_id, delivery_date) — distinct from the per-plant anticipated_committed_mw/anticipated_decision_mw columns on simulation/thermals/. One row per scenario and decision whose delivery stage is a post-study stage, at its decision stage; a scenario with no such decision writes no partition. 7 columns. All columns are non-nullable. Hive-partitioned by scenario_id (anticipated_lanes/scenario_id=NNNN/data.parquet); written only when the study declares post_study_stages.

Methodology: State Augmentation

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id of the decision stage, where the commitment is deposited into its ring slot.
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
thermal_idInt32No—Anticipated thermal unit ID.
delivery_dateInt32No—Calendar date the commitment delivers, encoded YYYYMMDD (year*10000 + month*100 + day).
deposited_decision_mwFloat64NoMWCommitment decided at stage_id for delivery at delivery_date, in MW.
carried_committed_mwFloat64NoMWValue of the ring slot holding the commitment at stage_id, in MW; the deposit row makes it equal to deposited_decision_mw.

Run-level echo of every commitment decided before the study and delivered past the study horizon (for the equivalent term in other planning tools, see the Glossary), declared as past_anticipated_commitments windows extending past the horizon end. Unlike simulation/anticipated_lanes/, this file is not under simulation/, is unpartitioned, and carries no scenario, stage, or node axis: each row is a resolved input, scenario- and stage-independent. One row per fixed post-horizon window. 4 columns. All columns are non-nullable. Written by both the CLI and the Python bindings; written only when at least one such window exists — an empty set writes no file and no anticipated/ directory. There is no cost column: the fuel of a commitment decided before the study is sunk and enters no objective; when a boundary is loaded, the commitment’s state contribution is folded into the boundary cuts’ intercepts.

Methodology: State Augmentation

NameTypeNullableUnitsDescription
thermal_idInt32No—Anticipated thermal unit ID.
start_dateDate32No—First delivery date of the fixed window.
end_dateDate32No—End of the fixed window (exclusive): the window’s end_date as declared in past_anticipated_commitments.
value_mwFloat64NoMWCommitted delivery held constant over the window, in MW.

Generic user-defined constraint slacks. One row per active generic-constraint row at each stage — one per (stage, block, constraint) triplet, or one stage-level row (block_id null) for a block-independent constraint — whether or not it is violated; slack_value and slack_cost are 0 where it is not and on every row of a constraint with slack disabled. 7 columns.

Methodology: Penalty System

NameTypeNullableUnitsDescription
scenario_idInt32No—Scenario id (0-based). Duplicates the Hive partition directory (scenario_id=NNNN/) as an explicit in-file column.
stage_idInt32No—Declared stage id (from stages.json).
node_idInt32No—Visited policy-graph node id; on a stage chain, the 0-based stage position (not the declared stage id).
block_idInt32Yes—Load block index. null for stage-level constraints.
constraint_idInt32No—Constraint ID as defined in the case input files.
slack_valueFloat64No—Non-negative for a one-sided constraint. For a two-sided (range) constraint (both bounds finite), the signed net s_plus - s_minus — may be negative. Zero means no violation.
slack_costFloat64NoUSDMonetary cost attributed to this violation.

Identical schema to training/solver/iterations.parquet. One row per scenario_id; phase is always "simulation". iteration, stage_id, opening_index, rank, and worker_id are NULL (a simulation row carries no per-iteration / per-stage / per-opening / per-rank / per-worker attribution); scenario_id is set.

Methodology: LP Warm-Start


Same columns and types as training/solver/retry_histogram.parquet. One row per scenario and retry level with a positive count; iteration holds the scenario id (0-based), phase is always "simulation" and stage_id is null. novomodelo run (CLI) writes the file with no rows and records simulation retries only in lp_retries and retry_attempts of simulation/solver/iterations.parquet. The Python function novomodelo.run.run() writes the rows.


The generic_constraints/ directory is written when the study declares any generic user-defined constraints. It sits at the top level of <output_dir>/, a peer of training/ and simulation/, not nested under either. The directory is omitted entirely when the study has no generic constraints.

Methodology: LP Formulation

The fully resolved echo of every generic constraint as the LP actually built it — one row per (constraint, stage, block, term). Written once, not per-scenario (the resolution is deterministic given the case, independent of simulation outcome). 13 columns.

bound_lower/bound_upper are the resolved interval endpoints (lower before upper), each null where unbounded on that side; derived_shape labels the shape those endpoints imply: floor, cap, band or equality. The per-term columns (term_index, variable_kind, variable, coefficient) are null on a term-less constraint’s placeholder row, and slack_penalty is null when slack is disabled for the constraint.

NameTypeNullableUnitsDescription
stage_idInt32No—Declared stage id (from stages.json).
block_idInt32Yes—Load block index within the stage. null for stage-level (non-block) constraints.
constraint_idInt32No—Generic constraint ID as defined in the case input files.
constraint_nameUtf8No—Human-readable constraint name from the case input files.
term_indexInt32Yes—Index of this term within the constraint’s linear expression. null on a term-less placeholder row.
variable_kindUtf8Yes—Kind of decision variable this term references. null on a term-less placeholder row.
variableUtf8Yes—Identity of the referenced variable within its kind. null on a term-less placeholder row.
coefficientFloat64Yes—Linear coefficient applied to this term. null on a term-less placeholder row.
bound_lowerFloat64Yes—Resolved lower bound of the constraint’s interval. null when unbounded below.
bound_upperFloat64Yes—Resolved upper bound of the constraint’s interval. null when unbounded above.
derived_shapeUtf8No—Shape implied by the resolved bounds: floor, cap, band or equality.
slack_enabledBooleanNo—Whether a slack variable is enabled for this constraint.
slack_penaltyFloat64Yes—Penalty cost per unit of slack. null when slack is disabled.