sdom.OptimizationResults

class sdom.OptimizationResults(termination_condition: str = '', solver_status: str = '', total_cost: float = 0.0, gen_mix_target: float = 0.0, generation_df: ~pandas.core.frame.DataFrame = <factory>, storage_df: ~pandas.core.frame.DataFrame = <factory>, thermal_generation_df: ~pandas.core.frame.DataFrame = <factory>, installed_plants_df: ~pandas.core.frame.DataFrame = <factory>, summary_df: ~pandas.core.frame.DataFrame = <factory>, problem_info: dict = <factory>, capacity: dict = <factory>, storage_capacity: dict = <factory>, generation_totals: dict = <factory>, cost_breakdown: dict = <factory>, is_zonal: bool = False, areas: list = <factory>, lines: list = <factory>, area_capacity: dict = <factory>, area_storage_capacity: dict = <factory>, area_generation_totals: dict = <factory>, area_cost_breakdown: dict = <factory>, area_generation_df: dict = <factory>, area_storage_df: dict = <factory>, area_thermal_generation_df: dict = <factory>, area_installed_plants_df: dict = <factory>, area_summary_df: dict = <factory>, interregional_exchanges_df: ~pandas.core.frame.DataFrame = <factory>)[source]

Data class containing all optimization results from SDOM.

This class stores the complete results from an SDOM optimization run, organized into DataFrames for different result categories (generation, storage, summary) and provides convenient accessors for specific metrics.

termination_condition

The solver termination condition (e.g., ‘optimal’, ‘infeasible’).

Type:

str

solver_status

The solver status (e.g., ‘ok’, ‘warning’).

Type:

str

total_cost

The total objective value (cost) from the optimization.

Type:

float

gen_mix_target

The generation mix target value used in this run.

Type:

float

generation_df

Hourly generation dispatch results for all technologies.

Type:

pd.DataFrame

storage_df

Hourly storage operation results (charge, discharge, SOC).

Type:

pd.DataFrame

thermal_generation_df

Disaggregated hourly thermal generation by plant.

Type:

pd.DataFrame

installed_plants_df

Installed capacity for each individual power plant (solar, wind, thermal).

Type:

pd.DataFrame

summary_df

Summary metrics including capacities, costs, and totals.

Type:

pd.DataFrame

problem_info

Solver problem information (constraints, variables, etc.).

Type:

dict

capacity

Installed capacity by technology.

Type:

dict

storage_capacity

Storage capacity details (charge, discharge, energy).

Type:

dict

generation_totals

Total generation by technology.

Type:

dict

cost_breakdown

Detailed cost breakdown (CAPEX, OPEX, FOM, VOM).

Type:

dict

__init__(termination_condition: str = '', solver_status: str = '', total_cost: float = 0.0, gen_mix_target: float = 0.0, generation_df: ~pandas.core.frame.DataFrame = <factory>, storage_df: ~pandas.core.frame.DataFrame = <factory>, thermal_generation_df: ~pandas.core.frame.DataFrame = <factory>, installed_plants_df: ~pandas.core.frame.DataFrame = <factory>, summary_df: ~pandas.core.frame.DataFrame = <factory>, problem_info: dict = <factory>, capacity: dict = <factory>, storage_capacity: dict = <factory>, generation_totals: dict = <factory>, cost_breakdown: dict = <factory>, is_zonal: bool = False, areas: list = <factory>, lines: list = <factory>, area_capacity: dict = <factory>, area_storage_capacity: dict = <factory>, area_generation_totals: dict = <factory>, area_cost_breakdown: dict = <factory>, area_generation_df: dict = <factory>, area_storage_df: dict = <factory>, area_thermal_generation_df: dict = <factory>, area_installed_plants_df: dict = <factory>, area_summary_df: dict = <factory>, interregional_exchanges_df: ~pandas.core.frame.DataFrame = <factory>) None

Methods

__init__([termination_condition, ...])

get_generation_dataframe()

Get the hourly generation dispatch DataFrame.

get_installed_plants_dataframe()

Get the installed power plants capacity DataFrame.

get_problem_info()

Get solver problem information.

get_storage_dataframe()

Get the hourly storage operation DataFrame.

get_summary_dataframe()

Get the summary metrics DataFrame.

get_thermal_generation_dataframe()

Get the disaggregated hourly thermal generation DataFrame.

Attributes

gen_mix_target

is_optimal

Check if the solution is optimal.

is_zonal

solver_status

termination_condition

total_cap_pv

Total installed solar PV capacity (MW).

total_cap_storage_charge

Storage charging power capacity by technology (MW).

total_cap_storage_discharge

Storage discharging power capacity by technology (MW).

total_cap_storage_energy

Storage energy capacity by technology (MWh).

total_cap_thermal

Total installed thermal capacity (MW).

total_cap_wind

Total installed wind capacity (MW).

total_cost

total_gen_pv

Total solar PV generation (MWh).

total_gen_thermal

Total thermal generation (MWh).

total_gen_wind

Total wind generation (MWh).

generation_df

storage_df

thermal_generation_df

installed_plants_df

summary_df

problem_info

capacity

storage_capacity

generation_totals

cost_breakdown

areas

lines

area_capacity

area_storage_capacity

area_generation_totals

area_cost_breakdown

area_generation_df

area_storage_df

area_thermal_generation_df

area_installed_plants_df

area_summary_df

interregional_exchanges_df

termination_condition: str = ''
solver_status: str = ''
total_cost: float = 0.0
gen_mix_target: float = 0.0
generation_df: DataFrame
storage_df: DataFrame
thermal_generation_df: DataFrame
installed_plants_df: DataFrame
summary_df: DataFrame
problem_info: dict
capacity: dict
storage_capacity: dict
generation_totals: dict
cost_breakdown: dict
is_zonal: bool = False
areas: list
lines: list
area_capacity: dict
area_storage_capacity: dict
area_generation_totals: dict
area_cost_breakdown: dict
area_generation_df: dict
area_storage_df: dict
area_thermal_generation_df: dict
area_installed_plants_df: dict
area_summary_df: dict
interregional_exchanges_df: DataFrame
property is_optimal: bool

Check if the solution is optimal.

property total_cap_thermal: float

Total installed thermal capacity (MW).

property total_cap_pv: float

Total installed solar PV capacity (MW).

property total_cap_wind: float

Total installed wind capacity (MW).

property total_cap_storage_charge: dict

Storage charging power capacity by technology (MW).

property total_cap_storage_discharge: dict

Storage discharging power capacity by technology (MW).

property total_cap_storage_energy: dict

Storage energy capacity by technology (MWh).

property total_gen_pv: float

Total solar PV generation (MWh).

property total_gen_wind: float

Total wind generation (MWh).

property total_gen_thermal: float

Total thermal generation (MWh).

get_generation_dataframe() DataFrame[source]

Get the hourly generation dispatch DataFrame.

Returns:

DataFrame with columns: Scenario, Hour, Solar PV Generation (MW), Solar PV Curtailment (MW), Wind Generation (MW), Wind Curtailment (MW), All Thermal Generation (MW), Hydro Generation (MW), Nuclear Generation (MW), Other Renewables Generation (MW), Imports (MW), Storage Charge/Discharge (MW), Exports (MW), Load (MW).

Return type:

pd.DataFrame

get_storage_dataframe() DataFrame[source]

Get the hourly storage operation DataFrame.

Returns:

DataFrame with columns: Hour, Technology, Charging power (MW), Discharging power (MW), State of charge (MWh).

Return type:

pd.DataFrame

get_thermal_generation_dataframe() DataFrame[source]

Get the disaggregated hourly thermal generation DataFrame.

Returns:

DataFrame with columns: Hour, and one column per thermal plant.

Return type:

pd.DataFrame

get_summary_dataframe() DataFrame[source]

Get the summary metrics DataFrame.

Returns:

DataFrame with columns: Metric, Technology, Run, Optimal Value, Unit.

Return type:

pd.DataFrame

get_installed_plants_dataframe() DataFrame[source]

Get the installed power plants capacity DataFrame.

Returns:

DataFrame with columns: Plant ID, Technology, Installed Capacity (MW), Max Capacity (MW), Capacity Fraction.

Return type:

pd.DataFrame

get_problem_info() dict[source]

Get solver problem information.

Returns:

Dictionary with keys: Number of constraints, Number of variables, Number of binary variables, Number of objectives, Number of nonzeros.

Return type:

dict

__init__(termination_condition: str = '', solver_status: str = '', total_cost: float = 0.0, gen_mix_target: float = 0.0, generation_df: ~pandas.core.frame.DataFrame = <factory>, storage_df: ~pandas.core.frame.DataFrame = <factory>, thermal_generation_df: ~pandas.core.frame.DataFrame = <factory>, installed_plants_df: ~pandas.core.frame.DataFrame = <factory>, summary_df: ~pandas.core.frame.DataFrame = <factory>, problem_info: dict = <factory>, capacity: dict = <factory>, storage_capacity: dict = <factory>, generation_totals: dict = <factory>, cost_breakdown: dict = <factory>, is_zonal: bool = False, areas: list = <factory>, lines: list = <factory>, area_capacity: dict = <factory>, area_storage_capacity: dict = <factory>, area_generation_totals: dict = <factory>, area_cost_breakdown: dict = <factory>, area_generation_df: dict = <factory>, area_storage_df: dict = <factory>, area_thermal_generation_df: dict = <factory>, area_installed_plants_df: dict = <factory>, area_summary_df: dict = <factory>, interregional_exchanges_df: ~pandas.core.frame.DataFrame = <factory>) None