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>)[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>) 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.

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

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#
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>) None#