From 4152f4b2096e1edc6c35cc85952de0f8ea2557cf Mon Sep 17 00:00:00 2001 From: Ana Mileva Date: Wed, 14 Feb 2024 10:24:41 -0800 Subject: [PATCH] Max transmission targets (#1069) --- .../targets/1_min_transmission_targets.csv | 12 +- .../targets/2_max_transmission_targets.csv | 5 + db/csvs_test_examples/scenarios.csv | 252 +++++++++--------- .../horizon_params.csv | 6 +- db/db_schema.sql | 140 +++++----- .../inputs/transmission_targets.tab | 6 +- .../geography/transmission_target_zones.py | 7 +- ...transmission_target_violation_penalties.py | 7 +- ...egate_transmission_target_contributions.py | 6 +- .../transmission_target.py | 57 ++-- .../transmission_target_balance.py | 176 +++++++++--- .../transmission_target_contributions.py | 16 +- .../test_transmission_target.py | 72 ++++- .../test_data/inputs/transmission_targets.tab | 10 +- ...est_scenario_objective_function_values.csv | 1 + tests/test_examples.py | 10 + 16 files changed, 490 insertions(+), 293 deletions(-) create mode 100644 db/csvs_test_examples/policy/transmission_targets/targets/2_max_transmission_targets.csv diff --git a/db/csvs_test_examples/policy/transmission_targets/targets/1_min_transmission_targets.csv b/db/csvs_test_examples/policy/transmission_targets/targets/1_min_transmission_targets.csv index 030a8f2d7..d733664be 100644 --- a/db/csvs_test_examples/policy/transmission_targets/targets/1_min_transmission_targets.csv +++ b/db/csvs_test_examples/policy/transmission_targets/targets/1_min_transmission_targets.csv @@ -1,7 +1,5 @@ -transmission_target_zone,subproblem_id,stage_id,balancing_type,horizon,transmission_target_positive_direction_mwh,transmission_target_negative_direction_mwh -TxTargetZone1,1,1,period,2020,,2 -TxTargetZone1,1,1,period,2030,,2 -TxTargetZone2,1,1,period,2020,2, -TxTargetZone2,1,1,period,2030,2, -,,, -,,, +transmission_target_zone,subproblem_id,stage_id,balancing_type,horizon,transmission_target_pos_dir_min_mwh,transmission_target_pos_dir_max_mwh,transmission_target_neg_dir_min_mwh,transmission_target_neg_dir_max_mwh +TxTargetZone1,1,1,period,2020,,,2, +TxTargetZone1,1,1,period,2030,,,2, +TxTargetZone2,1,1,period,2020,2,,, +TxTargetZone2,1,1,period,2030,2,,, diff --git a/db/csvs_test_examples/policy/transmission_targets/targets/2_max_transmission_targets.csv b/db/csvs_test_examples/policy/transmission_targets/targets/2_max_transmission_targets.csv new file mode 100644 index 000000000..021564ce0 --- /dev/null +++ b/db/csvs_test_examples/policy/transmission_targets/targets/2_max_transmission_targets.csv @@ -0,0 +1,5 @@ +transmission_target_zone,subproblem_id,stage_id,balancing_type,horizon,transmission_target_pos_dir_min_mwh,transmission_target_pos_dir_max_mwh,transmission_target_neg_dir_min_mwh,transmission_target_neg_dir_max_mwh +TxTargetZone1,1,1,period,2020,,,,0.01 +TxTargetZone1,1,1,period,2030,,,,0.01 +TxTargetZone2,1,1,period,2020,,,,4 +TxTargetZone2,1,1,period,2030,,,,4 \ No newline at end of file diff --git a/db/csvs_test_examples/scenarios.csv b/db/csvs_test_examples/scenarios.csv index 4868fa157..ccc5d9467 100644 --- a/db/csvs_test_examples/scenarios.csv +++ b/db/csvs_test_examples/scenarios.csv @@ -1,127 +1,127 @@ -optional_feature_or_subscenarios,test,test_w_storage,test_w_hydro,test_new_solar,test_new_binary_solar,test_new_build_storage,test_new_build_storage_cumulative_min_max,test_new_binary_build_storage,test_no_overgen_allowed,test_no_reserves,test_variable_gen_reserves,test_new_solar_carbon_cap,test_new_solar_carbon_tax,test_ramp_up_constraints,test_ramp_up_and_down_constraints,2horizons,2horizons_w_hydro,2horizons_w_hydro_and_nuclear_binary_availability,2horizons_w_hydro_w_balancing_types,2periods,2periods_gen_lin_econ_retirement,2periods_gen_bin_econ_retirement,2periods_new_build,2periods_new_build_2zones,2periods_new_build_2zones_singleBA,2periods_new_build_2zones_transmission,2periods_new_build_2zones_transmission_w_losses,2periods_new_build_2zones_transmission_w_losses_opp_dir,2periods_new_build_2zones_new_build_transmission,2periods_new_build_cumulative_min_max,2periods_new_build_rps,2periods_new_build_rps_variable_reserves,2periods_new_build_rps_variable_reserves_subhourly_adj,2periods_new_build_rps_w_rps_eligible_storage,2periods_new_build_rps_w_rps_ineligible_storage,2periods_new_build_simple_prm,test_new_solar_carbon_cap_2zones_dont_count_tx,test_new_solar_carbon_cap_2zones_tx,single_stage_prod_cost,multi_stage_prod_cost,multi_stage_prod_cost_w_hydro,single_stage_prod_cost_cycle_select,test_tx_simple,test_tx_dcopf,2periods_new_build_local_capacity,test_startup_shutdown_rates,test_no_fuels,test_variable_om_curves,test_aux_cons,2periods_new_build_rps_percent_target,single_stage_prod_cost_linked_subproblems,multi_stage_prod_cost_linked_subproblems,test_w_lf_down_percent_req,2periods_new_build_capgroups,test_markets,2periods_new_build_horizon_energy_target,2periods_new_build_period_and_horizon_energy_target,2periods_new_build_horizon_energy_target_halfyear,test_new_build_gen_var_stor_hyb,test_carbon_tax_allowance,test_min_max_build_trans,2periods_new_build_2zones_transmission_Tx1halfavail,2periods_new_build_2zones_transmission_Tx1halfavailmonthly,test_cheap_fuel_blend,test_new_solar_carbon_cap_2zones_tx_low_carbon_fuel_blend,test_cheap_fuel_blend_w_limit,test_new_solar_fuel_burn_limit,test_new_solar_fuel_burn_limit_relative,test_w_solver_options,test_carbon_tax_allowance_with_different_fuel_groups,test_performance_standard,test_tx_flow,test_new_solar_reserve_prj_contribution,test_new_solar_carbon_cap_2zones_tx_hydrogen_prod,test_new_solar_carbon_cap_2zones_tx_hydrogen_prod_new,test_new_solar_carbon_cap_dac,test_cap_factor_limits,multi_stage_prod_cost_w_markets,test_supplemental_firing,test_tx_capacity_groups,2periods_new_build_cumulative_and_vintage_min_max,2periods_new_build_fin_lifetime,2periods_new_build_simple_prm_w_energy_only,2periods_new_build_simple_prm_w_energy_only_deliv_cap_limit,test_w_storage_w_soc_penalty,test_w_storage_w_soc_last_tmp_penalty,single_stage_prod_cost_linked_subproblems_w_hydro,test_new_solar_itc,test_new_build_storage_itc,2periods_new_build_simple_prm_2loadzones,2periods_new_build_simple_prm_2loadzones_newtx_w_transfers,test_tx_targets,test_w_flex_load,2periods_new_build_simple_prm_2loadzones_newtx_w_transfers_w_costs,test_new_solar_w_relative_capacity_instead_of_potential,2periods_new_build_2zones_transmission_w_hurdle_rates,2periods_new_build_simple_prm_2loadzones_newtx_w_transfers_w_subsidies,test_new_build_storage_itc_single_superperiod,test_w_storage_starting_soc,test_w_nonfuel_emissions,test_new_solar_carbon_credits,test_performance_standard_carbon_credits,test_new_solar_carbon_tax_w_carbon_credits,test_new_solar_carbon_credits_w_sell,test_performance_standard_carbon_credits_w_cap_no_credits_mapping,single_stage_prod_cost_w_spinup_lookahead -of_transmission,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1,,1,1,,,,,1,,,,,,,,,,1,1,1,,1,,1,1,,,,,1,,,1, -of_transmission_hurdle_rates,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,, -of_simultaneous_flow_limits,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +optional_feature_or_subscenarios,test,test_w_storage,test_w_hydro,test_new_solar,test_new_binary_solar,test_new_build_storage,test_new_build_storage_cumulative_min_max,test_new_binary_build_storage,test_no_overgen_allowed,test_no_reserves,test_variable_gen_reserves,test_new_solar_carbon_cap,test_new_solar_carbon_tax,test_ramp_up_constraints,test_ramp_up_and_down_constraints,2horizons,2horizons_w_hydro,2horizons_w_hydro_and_nuclear_binary_availability,2horizons_w_hydro_w_balancing_types,2periods,2periods_gen_lin_econ_retirement,2periods_gen_bin_econ_retirement,2periods_new_build,2periods_new_build_2zones,2periods_new_build_2zones_singleBA,2periods_new_build_2zones_transmission,2periods_new_build_2zones_transmission_w_losses,2periods_new_build_2zones_transmission_w_losses_opp_dir,2periods_new_build_2zones_new_build_transmission,2periods_new_build_cumulative_min_max,2periods_new_build_rps,2periods_new_build_rps_variable_reserves,2periods_new_build_rps_variable_reserves_subhourly_adj,2periods_new_build_rps_w_rps_eligible_storage,2periods_new_build_rps_w_rps_ineligible_storage,2periods_new_build_simple_prm,test_new_solar_carbon_cap_2zones_dont_count_tx,test_new_solar_carbon_cap_2zones_tx,single_stage_prod_cost,multi_stage_prod_cost,multi_stage_prod_cost_w_hydro,single_stage_prod_cost_cycle_select,test_tx_simple,test_tx_dcopf,2periods_new_build_local_capacity,test_startup_shutdown_rates,test_no_fuels,test_variable_om_curves,test_aux_cons,2periods_new_build_rps_percent_target,single_stage_prod_cost_linked_subproblems,multi_stage_prod_cost_linked_subproblems,test_w_lf_down_percent_req,2periods_new_build_capgroups,test_markets,2periods_new_build_horizon_energy_target,2periods_new_build_period_and_horizon_energy_target,2periods_new_build_horizon_energy_target_halfyear,test_new_build_gen_var_stor_hyb,test_carbon_tax_allowance,test_min_max_build_trans,2periods_new_build_2zones_transmission_Tx1halfavail,2periods_new_build_2zones_transmission_Tx1halfavailmonthly,test_cheap_fuel_blend,test_new_solar_carbon_cap_2zones_tx_low_carbon_fuel_blend,test_cheap_fuel_blend_w_limit,test_new_solar_fuel_burn_limit,test_new_solar_fuel_burn_limit_relative,test_w_solver_options,test_carbon_tax_allowance_with_different_fuel_groups,test_performance_standard,test_tx_flow,test_new_solar_reserve_prj_contribution,test_new_solar_carbon_cap_2zones_tx_hydrogen_prod,test_new_solar_carbon_cap_2zones_tx_hydrogen_prod_new,test_new_solar_carbon_cap_dac,test_cap_factor_limits,multi_stage_prod_cost_w_markets,test_supplemental_firing,test_tx_capacity_groups,2periods_new_build_cumulative_and_vintage_min_max,2periods_new_build_fin_lifetime,2periods_new_build_simple_prm_w_energy_only,2periods_new_build_simple_prm_w_energy_only_deliv_cap_limit,test_w_storage_w_soc_penalty,test_w_storage_w_soc_last_tmp_penalty,single_stage_prod_cost_linked_subproblems_w_hydro,test_new_solar_itc,test_new_build_storage_itc,2periods_new_build_simple_prm_2loadzones,2periods_new_build_simple_prm_2loadzones_newtx_w_transfers,test_tx_targets,test_w_flex_load,2periods_new_build_simple_prm_2loadzones_newtx_w_transfers_w_costs,test_new_solar_w_relative_capacity_instead_of_potential,2periods_new_build_2zones_transmission_w_hurdle_rates,2periods_new_build_simple_prm_2loadzones_newtx_w_transfers_w_subsidies,test_new_build_storage_itc_single_superperiod,test_w_storage_starting_soc,test_w_nonfuel_emissions,test_new_solar_carbon_credits,test_performance_standard_carbon_credits,test_new_solar_carbon_tax_w_carbon_credits,test_new_solar_carbon_credits_w_sell,test_performance_standard_carbon_credits_w_cap_no_credits_mapping,single_stage_prod_cost_w_spinup_lookahead,test_tx_targets_max +of_transmission,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1,,1,1,,,,,1,,,,,,,,,,1,1,1,,1,,1,1,,,,,1,,,1,,1 +of_transmission_hurdle_rates,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +of_simultaneous_flow_limits,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, of_lf_reserves_up,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,"1 -",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -of_lf_reserves_down,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -of_regulation_up,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -of_regulation_down,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -of_frequency_response,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_spinning_reserves,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_period_energy_target,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_horizon_energy_target,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_transmission_target,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, -of_carbon_cap,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,1,1,1,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,1,1, -of_track_carbon_imports,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,1,1,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, -of_carbon_tax,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,, -of_performance_standard,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1, -of_carbon_credits,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1, -of_fuel_burn_limit,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_subsidies,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,1,1,,,,,,,, -of_prm,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,1,,,1,,,1,,,,,,,,, -of_local_capacity,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_capacity_transfers,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,,,1,,,,,,,,, -of_elcc_surface,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_deliverability,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,, -of_markets,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_tuning,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -temporal_scenario_id,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,2,2,2,2,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,1,1,4,5,5,4,1,1,6,7,1,1,1,6,8,9,1,6,1,6,6,6,3,1,6,6,6,1,1,1,1,1,1,1,1,1,1,10,10,1,1,5,1,6,6,6,6,6,1,1,8,11,12,6,6,15,1,6,1,6,14,13,1,1,1,1,1,1,1,16 -load_zone_scenario_id,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,1,1,1,1,2,4,1,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,4,1,2,1,2,2,1,1,1,1,2,1,1,2,1 -load_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,2,1,1,1,1,1,1,1,1,2,4,1,1,1,3,1,1,1,2,1,3,3,3,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,2,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1 -project_portfolio_scenario_id,1,2,3,4,5,6,6,7,1,1,1,4,4,1,1,1,3,3,3,1,8,9,10,11,11,12,12,12,12,10,13,13,13,14,14,10,15,15,1,1,3,1,16,16,10,17,1,1,1,13,1,1,1,10,1,13,13,13,18,4,12,12,12,1,15,1,4,4,1,4,15,16,4,19,20,21,1,1,1,12,10,10,10,10,2,2,3,4,6,10,10,16,22,10,4,12,10,6,2,1,4,15,4,4,15,1 -project_operational_chars_scenario_id,1,1,1,1,1,1,1,1,1,1,2,1,1,3,4,1,5,10,6,1,1,1,1,1,1,1,1,1,1,1,1,7,7,8,8,1,1,1,7,1,9,18,1,1,1,11,12,13,14,1,7,7,1,1,1,1,1,1,1,15,1,1,1,15,16,17,1,1,1,17,16,1,1,19,19,1,20,1,21,1,1,1,1,1,22,23,7,1,1,1,1,1,1,1,1,1,1,1,24,25,1,16,1,1,16,7 -project_availability_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -project_load_zone_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -project_elcc_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,2,,,,,,1,1,,,1,,,1,,,,,,,,, -project_specified_capacity_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,3,3,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,3,3,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,3,1,1,3,1 -project_specified_fixed_cost_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -fuel_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -fuel_price_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -project_new_cost_scenario_id,,,,1,1,1,1,1,,,,1,1,,,,,,,,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,,1,1,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1,,1,1,,1,1,1,1,1,1,1,,,,1,1,2,1,1,,,,1,1,1,1,1,,1,1,1,1,1,,,1,1,1,1,1, -project_new_potential_scenario_id,,,,1,,,1,,,,,2,2,,,,,,,,,,,,,,,,,1,,,,,,,2,2,,,,,2,2,,,,,,,,,,,,,,,,2,,,,,2,,2,2,,2,2,2,1,2,2,2,,,,,3,,,,,,,1,,,,2,,,,,,,,,2,2,2,2,2, -project_new_binary_build_size_scenario_id,,,,,1,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_capacity_group_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_capacity_group_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_relative_capacity_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, -transmission_portfolio_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,2,,,,,,,,1,1,,,,,3,3,,,,,,,,,,,,,,,,,2,1,1,,1,,,,,,1,3,,1,1,,,,,4,,,,,,,,,,1,2,3,,2,,1,2,,,,,1,,,1, -transmission_load_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,2,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1,,1,1,,,,,1,,,,,,,,,,1,1,1,,1,,1,1,,,,,1,,,1, -transmission_specified_capacity_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1,,1,1,,,,,1,,,,,,,,,,1,1,1,,1,,1,1,,,,,1,,,1, -transmission_availability_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,2,3,,1,,,,,,1,1,,1,1,,,,,1,,,,,,,,,,1,1,1,,1,,1,1,,,,,1,,,1, -transmission_operational_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,3,3,1,,,,,,,,1,1,,,,,1,2,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1,,1,1,,,,,1,,,,,,,,,,1,1,4,,1,,1,1,,,,,1,,,1, -transmission_hurdle_rate_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,, -transmission_new_cost_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,1,,,1,,,1,,,,,,,,, -transmission_new_potential_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,, -transmission_flow_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -transmission_capacity_group_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,, -transmission_capacity_group_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,, -transmission_carbon_cap_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,1,1,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, -transmission_simultaneous_flow_limit_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -transmission_simultaneous_flow_limit_line_group_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -lf_reserves_up_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -lf_reserves_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1 -project_lf_reserves_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,5,1,1,5,1 -lf_reserves_down_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -lf_reserves_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1 -project_lf_reserves_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,5,1,1,5,1 -regulation_up_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -regulation_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1 -project_regulation_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,5,1,1,5,1 -regulation_down_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -regulation_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1 -project_regulation_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,5,1,1,5,1 -frequency_response_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -frequency_response_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_frequency_response_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -spinning_reserves_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -spinning_reserves_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_spinning_reserves_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -period_energy_target_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,2,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -horizon_energy_target_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -energy_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,1,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_energy_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,2,,,,,,,,,,,,,,,1,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -transmission_target_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, -transmission_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, -tx_line_transmission_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, -carbon_cap_target_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,2,2,1,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,1,1, -carbon_cap_zone_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,1,1,1,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,1,1, -project_carbon_cap_zone_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,1,1,1,,,,,,,,,,,,,,,,1,,,,,,,,,2,,,2,2, -carbon_tax_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,, -carbon_tax_zone_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,, -project_carbon_tax_zone_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,, -project_carbon_tax_allowance_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -performance_standard_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1, -performance_standard_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1, -project_performance_standard_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1, -carbon_credits_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1, -carbon_cap_zones_carbon_credits_zones_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,, -performance_standard_zones_carbon_credits_zones_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1, -carbon_tax_zones_carbon_credits_zones_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,, -project_carbon_credits_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1, -project_carbon_credits_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1, -carbon_credits_price_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,, -fuel_burn_limit_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,2,,,,,,3,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -fuel_burn_limit_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_fuel_burn_limit_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -subsidy_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,2,3,,,,,,,, -prm_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,1,,,1,,,1,,,,,,,,, -prm_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,2,,,2,,,2,,,,,,,,, -prm_capacity_transfer_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,,,1,,,,,,,,, -prm_capacity_transfer_params_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,2,,,1,,,,,,,,, -project_prm_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,2,,,2,,,2,,,,,,,,, -transmission_prm_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,,,1,,,,,,,,, -prm_deliverability_cost_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,, -prm_deliverability_existing_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -prm_deliverability_potential_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,, -project_prm_deliverability_multipliers_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,, -elcc_surface_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -local_capacity_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -local_capacity_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_local_capacity_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_local_capacity_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -tuning_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -solver_options_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -market_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,, -load_zone_market_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,, -market_price_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,, -market_volume_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file +",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +of_lf_reserves_down,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +of_regulation_up,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +of_regulation_down,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +of_frequency_response,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_spinning_reserves,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_period_energy_target,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_horizon_energy_target,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_transmission_target,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1 +of_carbon_cap,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,1,1,1,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,1,1,,1 +of_track_carbon_imports,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,1,1,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1 +of_carbon_tax,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,, +of_performance_standard,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,, +of_carbon_credits,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,, +of_fuel_burn_limit,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_subsidies,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,1,1,,,,,,,,, +of_prm,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,1,,,1,,,1,,,,,,,,,, +of_local_capacity,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_capacity_transfers,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,,,1,,,,,,,,,, +of_elcc_surface,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_deliverability,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,, +of_markets,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_tuning,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +temporal_scenario_id,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,2,2,2,2,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,1,1,4,5,5,4,1,1,6,7,1,1,1,6,8,9,1,6,1,6,6,6,3,1,6,6,6,1,1,1,1,1,1,1,1,1,1,10,10,1,1,5,1,6,6,6,6,6,1,1,8,11,12,6,6,15,1,6,1,6,14,13,1,1,1,1,1,1,1,16,15 +load_zone_scenario_id,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,1,1,1,1,2,4,1,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,4,1,2,1,2,2,1,1,1,1,2,1,1,2,1,4 +load_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,2,1,1,1,1,1,1,1,1,2,4,1,1,1,3,1,1,1,2,1,3,3,3,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,2,2,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1 +project_portfolio_scenario_id,1,2,3,4,5,6,6,7,1,1,1,4,4,1,1,1,3,3,3,1,8,9,10,11,11,12,12,12,12,10,13,13,13,14,14,10,15,15,1,1,3,1,16,16,10,17,1,1,1,13,1,1,1,10,1,13,13,13,18,4,12,12,12,1,15,1,4,4,1,4,15,16,4,19,20,21,1,1,1,12,10,10,10,10,2,2,3,4,6,10,10,16,22,10,4,12,10,6,2,1,4,15,4,4,15,1,16 +project_operational_chars_scenario_id,1,1,1,1,1,1,1,1,1,1,2,1,1,3,4,1,5,10,6,1,1,1,1,1,1,1,1,1,1,1,1,7,7,8,8,1,1,1,7,1,9,18,1,1,1,11,12,13,14,1,7,7,1,1,1,1,1,1,1,15,1,1,1,15,16,17,1,1,1,17,16,1,1,19,19,1,20,1,21,1,1,1,1,1,22,23,7,1,1,1,1,1,1,1,1,1,1,1,24,25,1,16,1,1,16,7,1 +project_availability_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +project_load_zone_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +project_elcc_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,2,,,,,,1,1,,,1,,,1,,,,,,,,,, +project_specified_capacity_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,3,3,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,3,3,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,3,1,1,3,1,3 +project_specified_fixed_cost_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +fuel_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +fuel_price_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +project_new_cost_scenario_id,,,,1,1,1,1,1,,,,1,1,,,,,,,,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,,1,1,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1,,1,1,,1,1,1,1,1,1,1,,,,1,1,2,1,1,,,,1,1,1,1,1,,1,1,1,1,1,,,1,1,1,1,1,,1 +project_new_potential_scenario_id,,,,1,,,1,,,,,2,2,,,,,,,,,,,,,,,,,1,,,,,,,2,2,,,,,2,2,,,,,,,,,,,,,,,,2,,,,,2,,2,2,,2,2,2,1,2,2,2,,,,,3,,,,,,,1,,,,2,,,,,,,,,2,2,2,2,2,,2 +project_new_binary_build_size_scenario_id,,,,,1,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_capacity_group_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_capacity_group_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_relative_capacity_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, +transmission_portfolio_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,2,,,,,,,,1,1,,,,,3,3,,,,,,,,,,,,,,,,,2,1,1,,1,,,,,,1,3,,1,1,,,,,4,,,,,,,,,,1,2,3,,2,,1,2,,,,,1,,,1,,3 +transmission_load_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,2,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1,,1,1,,,,,1,,,,,,,,,,1,1,1,,1,,1,1,,,,,1,,,1,,1 +transmission_specified_capacity_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1,,1,1,,,,,1,,,,,,,,,,1,1,1,,1,,1,1,,,,,1,,,1,,1 +transmission_availability_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,2,3,,1,,,,,,1,1,,1,1,,,,,1,,,,,,,,,,1,1,1,,1,,1,1,,,,,1,,,1,,1 +transmission_operational_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,3,3,1,,,,,,,,1,1,,,,,1,2,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1,,1,1,,,,,1,,,,,,,,,,1,1,4,,1,,1,1,,,,,1,,,1,,4 +transmission_hurdle_rate_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +transmission_new_cost_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,1,,,1,,,1,,,,,,,,,, +transmission_new_potential_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, +transmission_flow_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +transmission_capacity_group_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, +transmission_capacity_group_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, +transmission_carbon_cap_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,1,1,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1 +transmission_simultaneous_flow_limit_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +transmission_simultaneous_flow_limit_line_group_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +lf_reserves_up_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +lf_reserves_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1 +project_lf_reserves_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,5,1,1,5,1,5 +lf_reserves_down_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +lf_reserves_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1 +project_lf_reserves_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,5,1,1,5,1,5 +regulation_up_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +regulation_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1 +project_regulation_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,5,1,1,5,1,5 +regulation_down_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +regulation_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1 +project_regulation_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,5,1,1,5,1,5 +frequency_response_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +frequency_response_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_frequency_response_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +spinning_reserves_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +spinning_reserves_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_spinning_reserves_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +period_energy_target_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,2,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +horizon_energy_target_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +energy_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,1,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_energy_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,2,,,,,,,,,,,,,,,1,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +transmission_target_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,2 +transmission_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1 +tx_line_transmission_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1 +carbon_cap_target_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,2,2,1,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,1,1,,1 +carbon_cap_zone_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,1,1,1,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,1,1,,1 +project_carbon_cap_zone_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1,,1,1,1,,,,,,,,,,,,,,,,1,,,,,,,,,2,,,2,2,,1 +carbon_tax_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,, +carbon_tax_zone_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,, +project_carbon_tax_zone_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,, +project_carbon_tax_allowance_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +performance_standard_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,, +performance_standard_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,, +project_performance_standard_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,, +carbon_credits_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,, +carbon_cap_zones_carbon_credits_zones_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,,, +performance_standard_zones_carbon_credits_zones_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,, +carbon_tax_zones_carbon_credits_zones_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,, +project_carbon_credits_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,, +project_carbon_credits_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,, +carbon_credits_price_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,, +fuel_burn_limit_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,2,,,,,,3,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +fuel_burn_limit_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_fuel_burn_limit_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +subsidy_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,2,3,,,,,,,,, +prm_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,1,,,1,,,1,,,,,,,,,, +prm_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,2,,,2,,,2,,,,,,,,,, +prm_capacity_transfer_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,,,1,,,,,,,,,, +prm_capacity_transfer_params_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,2,,,1,,,,,,,,,, +project_prm_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,1,2,,,2,,,2,,,,,,,,,, +transmission_prm_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,1,,,1,,,,,,,,,, +prm_deliverability_cost_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,, +prm_deliverability_existing_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +prm_deliverability_potential_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,, +project_prm_deliverability_multipliers_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,, +elcc_surface_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +local_capacity_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +local_capacity_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_local_capacity_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_local_capacity_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +tuning_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +solver_options_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +market_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +load_zone_market_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +market_price_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +market_volume_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/15_1horizon_1period_2balancingtypes/horizon_params.csv b/db/csvs_test_examples/temporal/15_1horizon_1period_2balancingtypes/horizon_params.csv index 96ff8c66f..963f87c87 100644 --- a/db/csvs_test_examples/temporal/15_1horizon_1period_2balancingtypes/horizon_params.csv +++ b/db/csvs_test_examples/temporal/15_1horizon_1period_2balancingtypes/horizon_params.csv @@ -1,3 +1,3 @@ -balancing_type_horizon,horizon,boundary -day,202001,circular -period,2020,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +period,2020,circular diff --git a/db/db_schema.sql b/db/db_schema.sql index 688f06c68..879918ce3 100644 --- a/db/db_schema.sql +++ b/db/db_schema.sql @@ -3440,14 +3440,16 @@ CREATE TABLE subscenarios_system_transmission_targets DROP TABLE IF EXISTS inputs_system_transmission_targets; CREATE TABLE inputs_system_transmission_targets ( - transmission_target_scenario_id INTEGER, - transmission_target_zone VARCHAR(32), - subproblem_id INTEGER, - stage_id INTEGER, - balancing_type VARCHAR(32), - horizon INTEGER, - transmission_target_positive_direction_mwh FLOAT, - transmission_target_negative_direction_mwh FLOAT, + transmission_target_scenario_id INTEGER, + transmission_target_zone VARCHAR(32), + subproblem_id INTEGER, + stage_id INTEGER, + balancing_type VARCHAR(32), + horizon INTEGER, + transmission_target_pos_dir_min_mwh FLOAT, + transmission_target_pos_dir_max_mwh FLOAT, + transmission_target_neg_dir_min_mwh FLOAT, + transmission_target_neg_dir_max_mwh FLOAT, PRIMARY KEY (transmission_target_scenario_id, transmission_target_zone, subproblem_id, stage_id, balancing_type, horizon) ); @@ -5031,21 +5033,27 @@ CREATE TABLE results_system_horizon_energy_target DROP TABLE IF EXISTS results_system_transmission_targets; CREATE TABLE results_system_transmission_targets ( - scenario_id INTEGER, - transmission_target_zone VARCHAR(64), - subproblem_id INTEGER, - stage_id INTEGER, - balancing_type VARCHAR(32), - horizon INTEGER, - hrz_objective_coefficient FLOAT, - transmission_target_pos_dir_mwh FLOAT, - total_transmission_target_energy_positive_direction_mwh FLOAT, - fraction_of_transmission_target_positive_direction_met FLOAT, - transmission_target_shortage_positive_direction_mwh FLOAT, - transmission_target_neg_dir_mwh FLOAT, - total_transmission_target_energy_negative_direction_mwh FLOAT, - fraction_of_transmission_target_negative_direction_met FLOAT, - transmission_target_shortage_negative_direction_mwh FLOAT, + scenario_id INTEGER, + transmission_target_zone VARCHAR(64), + subproblem_id INTEGER, + stage_id INTEGER, + balancing_type VARCHAR(32), + horizon INTEGER, + hrz_objective_coefficient FLOAT, + total_transmission_target_energy_pos_dir_mwh FLOAT, + transmission_target_pos_dir_min_mwh FLOAT, + fraction_of_transmission_target_pos_dir_min_met FLOAT, + transmission_target_shortage_pos_dir_min_mwh FLOAT, + transmission_target_pos_dir_max_mwh FLOAT, + fraction_of_transmission_target_pos_dir_max_met FLOAT, + transmission_target_overage_pos_dir_max_mwh FLOAT, + total_transmission_target_energy_neg_dir_mwh FLOAT, + transmission_target_neg_dir_min_mwh FLOAT, + fraction_of_transmission_target_neg_dir_min_met FLOAT, + transmission_target_shortage_neg_dir_min_mwh FLOAT, + transmission_target_neg_dir_max_mwh FLOAT, + fraction_of_transmission_target_neg_dir_max_met FLOAT, + transmission_target_overage_neg_dir_min_mwh FLOAT, PRIMARY KEY (scenario_id, transmission_target_zone, subproblem_id, stage_id, balancing_type, horizon) ); @@ -5160,50 +5168,50 @@ CREATE TABLE results_system_local_capacity DROP TABLE IF EXISTS results_system_costs; CREATE TABLE results_system_costs ( - scenario_id INTEGER, + scenario_id INTEGER, --period INTEGER, - subproblem_id INTEGER, - stage_id INTEGER, - Total_Capacity_Costs Float, - Total_Fixed_Costs FLOAT, - Total_Tx_Capacity_Costs Float, - Total_Tx_Fixed_Costs FLOAT, - Total_PRM_Deliverability_Group_Costs FLOAT, - Total_Variable_OM_Cost Float, - Total_Fuel_Cost Float, - Total_Startup_Cost Float, - Total_Shutdown_Cost Float, - Total_Operational_Violation_Cost FLOAT, - Total_Curtailment_Cost FLOAT, - Total_Hurdle_Cost Float, - Total_Load_Balance_Penalty_Costs Float, - Frequency_Response_Penalty_Costs Float, - Frequency_Response_Partial_Penalty_Costs FLOAT, - LF_Reserves_Down_Penalty_Costs Float, - LF_Reserves_Up_Penalty_Costs Float, - Regulation_Down_Penalty_Costs Float, - Regulation_Up_Penalty_Costs Float, - Spinning_Reserves_Penalty_Costs Float, - Total_PRM_Shortage_Penalty_Costs Float, - Total_Local_Capacity_Shortage_Penalty_Costs Float, - Total_Carbon_Cap_Balance_Penalty_Costs Float, - Total_Carbon_Tax_Cost FLOAT, - Total_Performance_Standard_Balance_Penalty_Costs Float, - Total_Period_Energy_Target_Balance_Penalty_Costs FLOAT, - Total_Horizon_Energy_Target_Balance_Penalty_Costs FLOAT, - Total_Transmission_Target_Balance_Penalty_Costs FLOAT, - Total_Dynamic_ELCC_Tuning_Cost Float, - Total_Import_Carbon_Tuning_Cost Float, - Total_Market_Net_Cost FLOAT, - Total_Export_Penalty_Cost FLOAT, - Total_Horizon_Fuel_Burn_Min_Abs_Penalty_Costs FLOAT, - Total_Horizon_Fuel_Burn_Max_Abs_Penalty_Costs FLOAT, - Total_Horizon_Fuel_Burn_Max_Rel_Penalty_Costs FLOAT, - Total_SOC_Penalty_Cost FLOAT, - Total_SOC_Penalty_Last_Tmp_Cost FLOAT, - Total_Subsidies FLOAT, - Total_Capacity_Transfer_Costs FLOAT, - Total_Carbon_Credit_Revenue FLOAT, + subproblem_id INTEGER, + stage_id INTEGER, + Total_Capacity_Costs Float, + Total_Fixed_Costs FLOAT, + Total_Tx_Capacity_Costs Float, + Total_Tx_Fixed_Costs FLOAT, + Total_PRM_Deliverability_Group_Costs FLOAT, + Total_Variable_OM_Cost Float, + Total_Fuel_Cost Float, + Total_Startup_Cost Float, + Total_Shutdown_Cost Float, + Total_Operational_Violation_Cost FLOAT, + Total_Curtailment_Cost FLOAT, + Total_Hurdle_Cost Float, + Total_Load_Balance_Penalty_Costs Float, + Frequency_Response_Penalty_Costs Float, + Frequency_Response_Partial_Penalty_Costs FLOAT, + LF_Reserves_Down_Penalty_Costs Float, + LF_Reserves_Up_Penalty_Costs Float, + Regulation_Down_Penalty_Costs Float, + Regulation_Up_Penalty_Costs Float, + Spinning_Reserves_Penalty_Costs Float, + Total_PRM_Shortage_Penalty_Costs Float, + Total_Local_Capacity_Shortage_Penalty_Costs Float, + Total_Carbon_Cap_Balance_Penalty_Costs Float, + Total_Carbon_Tax_Cost FLOAT, + Total_Performance_Standard_Balance_Penalty_Costs Float, + Total_Period_Energy_Target_Balance_Penalty_Costs FLOAT, + Total_Horizon_Energy_Target_Balance_Penalty_Costs FLOAT, + Total_Transmission_Target_Balance_Penalty_Costs FLOAT, + Total_Dynamic_ELCC_Tuning_Cost Float, + Total_Import_Carbon_Tuning_Cost Float, + Total_Market_Net_Cost FLOAT, + Total_Export_Penalty_Cost FLOAT, + Total_Horizon_Fuel_Burn_Min_Abs_Penalty_Costs FLOAT, + Total_Horizon_Fuel_Burn_Max_Abs_Penalty_Costs FLOAT, + Total_Horizon_Fuel_Burn_Max_Rel_Penalty_Costs FLOAT, + Total_SOC_Penalty_Cost FLOAT, + Total_SOC_Penalty_Last_Tmp_Cost FLOAT, + Total_Subsidies FLOAT, + Total_Capacity_Transfer_Costs FLOAT, + Total_Carbon_Credit_Revenue FLOAT, PRIMARY KEY (scenario_id, subproblem_id, stage_id) ); diff --git a/examples/test_tx_targets/inputs/transmission_targets.tab b/examples/test_tx_targets/inputs/transmission_targets.tab index a3a59c540..86e85c4d4 100644 --- a/examples/test_tx_targets/inputs/transmission_targets.tab +++ b/examples/test_tx_targets/inputs/transmission_targets.tab @@ -1,3 +1,3 @@ -transmission_target_zone balancing_type horizon transmission_target_positive_direction_mwh transmission_target_negative_direction_mwh -TxTargetZone1 period 2020 . 2.0 -TxTargetZone2 period 2020 2.0 . +transmission_target_zone balancing_type horizon transmission_target_pos_dir_min_mwh transmission_target_pos_dir_max_mwh transmission_target_neg_dir_min_mwh transmission_target_neg_dir_max_mwh +TxTargetZone1 period 2020 . . 2.0 . +TxTargetZone2 period 2020 2.0 . . . diff --git a/gridpath/geography/transmission_target_zones.py b/gridpath/geography/transmission_target_zones.py index 0e2775c5c..5aa5561f8 100644 --- a/gridpath/geography/transmission_target_zones.py +++ b/gridpath/geography/transmission_target_zones.py @@ -1,4 +1,5 @@ # Copyright 2022 (c) Crown Copyright, GC. +# Modifications Copyright Blue Marble Analytics LLC 2023. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,8 +14,8 @@ # limitations under the License. """ -Zones where transmission target will be enforced; these can be different from the load zones -and reserve balancing areas. +Zones where transmission target will be enforced; these can be different from +the load zones and reserve balancing areas. """ import csv @@ -32,6 +33,8 @@ def add_model_components(m, d, scenario_directory, subproblem, stage): m.TRANSMISSION_TARGET_ZONES = Set() + # Note that these parameters control all target constraints (min, max, + # direction) m.transmission_target_allow_violation = Param( m.TRANSMISSION_TARGET_ZONES, within=Boolean, default=0 ) diff --git a/gridpath/objective/system/policy/aggregate_transmission_target_violation_penalties.py b/gridpath/objective/system/policy/aggregate_transmission_target_violation_penalties.py index e1428e6b6..45f8b2f31 100644 --- a/gridpath/objective/system/policy/aggregate_transmission_target_violation_penalties.py +++ b/gridpath/objective/system/policy/aggregate_transmission_target_violation_penalties.py @@ -1,4 +1,5 @@ # Copyright 2022 (c) Crown Copyright, GC. +# Modifications Copyright Blue Marble Analytics LLC 2023. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -33,8 +34,10 @@ def add_model_components(m, d, scenario_directory, subproblem, stage): def total_penalty_costs_rule(mod): return sum( ( - mod.Transmission_Target_Shortage_Pos_Dir_MWh_Expression[z, bt, hz] - + mod.Transmission_Target_Shortage_Neg_Dir_MWh_Expression[z, bt, hz] + mod.Transmission_Target_Shortage_Pos_Dir_Min_MWh_Expression[z, bt, hz] + + mod.Transmission_Target_Overage_Pos_Dir_Max_MWh_Expression[z, bt, hz] + + mod.Transmission_Target_Shortage_Neg_Dir_Min_MWh_Expression[z, bt, hz] + + mod.Transmission_Target_Overage_Neg_Dir_Max_MWh_Expression[z, bt, hz] ) * mod.transmission_target_violation_penalty_per_mwh[z] * mod.hrz_objective_coefficient[bt, hz] diff --git a/gridpath/system/policy/transmission_targets/aggregate_transmission_target_contributions.py b/gridpath/system/policy/transmission_targets/aggregate_transmission_target_contributions.py index c10e041f3..4a1c3c904 100644 --- a/gridpath/system/policy/transmission_targets/aggregate_transmission_target_contributions.py +++ b/gridpath/system/policy/transmission_targets/aggregate_transmission_target_contributions.py @@ -1,4 +1,5 @@ # Copyright 2022 (c) Crown Copyright, GC. +# Modifications Copyright Blue Marble Analytics LLC 2023. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -95,10 +96,9 @@ def export_results(scenario_directory, subproblem, stage, m, d): :param d: :return: """ - results_columns = [ - "total_transmission_target_energy_positive_direction_mwh", - "total_transmission_target_energy_negative_direction_mwh", + "total_transmission_target_energy_pos_dir_mwh", + "total_transmission_target_energy_neg_dir_mwh", ] data = [ [ diff --git a/gridpath/system/policy/transmission_targets/transmission_target.py b/gridpath/system/policy/transmission_targets/transmission_target.py index 46145f437..eec2f65e5 100644 --- a/gridpath/system/policy/transmission_targets/transmission_target.py +++ b/gridpath/system/policy/transmission_targets/transmission_target.py @@ -1,4 +1,5 @@ # Copyright 2022 (c) Crown Copyright, GC. +# Modifications Copyright Blue Marble Analytics LLC 2023. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,7 +14,7 @@ # limitations under the License. """ -Simplest implementation with a MWh target +Min and max transmission targets by balancing type, horizon, and direction. """ import csv @@ -40,22 +41,34 @@ def add_model_components(m, d, scenario_directory, subproblem, stage): dimen=3, within=m.TRANSMISSION_TARGET_ZONES * m.BLN_TYPE_HRZS ) - # Transmission target specified in energy terms for the positive direction of the - # tx line - m.transmission_target_pos_dir_mwh = Param( + # Transmission targets specified in energy terms for the positive + # direction of the tx line + m.transmission_target_pos_dir_min_mwh = Param( m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, within=NonNegativeReals, default=0, ) - # Transmission target specified in energy terms for the negative direction of the - # tx line - m.transmission_target_neg_dir_mwh = Param( + m.transmission_target_pos_dir_max_mwh = Param( + m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, + within=NonNegativeReals, + default=float("inf"), + ) + + # Transmission targets specified in energy terms for the negative + # direction of the tx line + m.transmission_target_neg_dir_min_mwh = Param( m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, within=NonNegativeReals, default=0, ) + m.transmission_target_neg_dir_max_mwh = Param( + m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, + within=NonNegativeReals, + default=float("inf"), + ) + def load_model_data(m, d, data_portal, scenario_directory, subproblem, stage): """ @@ -79,8 +92,10 @@ def load_model_data(m, d, data_portal, scenario_directory, subproblem, stage): ), index=m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, param=( - m.transmission_target_pos_dir_mwh, - m.transmission_target_neg_dir_mwh, + m.transmission_target_pos_dir_min_mwh, + m.transmission_target_pos_dir_max_mwh, + m.transmission_target_neg_dir_min_mwh, + m.transmission_target_neg_dir_max_mwh, ), ) @@ -102,8 +117,10 @@ def get_inputs_from_database(scenario_id, subscenarios, subproblem, stage, conn) transmission_targets = c.execute( f"""SELECT transmission_target_zone, balancing_type, inputs_system_transmission_targets.horizon, - transmission_target_positive_direction_mwh, - transmission_target_negative_direction_mwh + transmission_target_pos_dir_min_mwh, + transmission_target_pos_dir_max_mwh, + transmission_target_neg_dir_min_mwh, + transmission_target_neg_dir_max_mwh FROM inputs_system_transmission_targets JOIN (SELECT balancing_type_horizon, horizon @@ -179,8 +196,10 @@ def write_model_inputs( "transmission_target_zone", "balancing_type", "horizon", - "transmission_target_positive_direction_mwh", - "transmission_target_negative_direction_mwh", + "transmission_target_pos_dir_min_mwh", + "transmission_target_pos_dir_max_mwh", + "transmission_target_neg_dir_min_mwh", + "transmission_target_neg_dir_max_mwh", ] ) @@ -201,16 +220,20 @@ def export_results(scenario_directory, subproblem, stage, m, d): :return: """ results_columns = [ - "transmission_target_pos_dir_mwh", - "transmission_target_neg_dir_mwh", + "transmission_target_pos_dir_min_mwh", + "transmission_target_pos_dir_max_mwh", + "transmission_target_neg_dir_min_mwh", + "transmission_target_neg_dir_max_mwh", ] data = [ [ z, bt, hz, - m.transmission_target_pos_dir_mwh[z, bt, hz], - m.transmission_target_neg_dir_mwh[z, bt, hz], + m.transmission_target_pos_dir_min_mwh[z, bt, hz], + m.transmission_target_pos_dir_max_mwh[z, bt, hz], + m.transmission_target_neg_dir_min_mwh[z, bt, hz], + m.transmission_target_neg_dir_max_mwh[z, bt, hz], ] for ( z, diff --git a/gridpath/system/policy/transmission_targets/transmission_target_balance.py b/gridpath/system/policy/transmission_targets/transmission_target_balance.py index 2f6c424bf..782162b7b 100644 --- a/gridpath/system/policy/transmission_targets/transmission_target_balance.py +++ b/gridpath/system/policy/transmission_targets/transmission_target_balance.py @@ -1,4 +1,5 @@ # Copyright 2022 (c) Crown Copyright, GC. +# Modifications Copyright Blue Marble Analytics LLC 2023. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +14,11 @@ # limitations under the License. """ -Simplest implementation with a MWh target by period. +Transmission targets by balancing type, horizon, and line direction """ - -import csv -import os.path -import pandas as pd - from pyomo.environ import Var, Constraint, NonNegativeReals, Expression, value -from db.common_functions import spin_on_database_lock -from gridpath.auxiliary.db_interface import setup_results_import from gridpath.common_functions import create_results_df from gridpath.system.policy.transmission_targets import TX_TARGETS_DF @@ -37,39 +31,71 @@ def add_model_components(m, d, scenario_directory, subproblem, stage): :return: """ - m.Transmission_Target_Shortage_Pos_Dir_MWh = Var( + m.Transmission_Target_Shortage_Pos_Dir_Min_MWh = Var( + m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, + within=NonNegativeReals, + ) + + m.Transmission_Target_Overage_Pos_Dir_Max_MWh = Var( + m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, + within=NonNegativeReals, + ) + + m.Transmission_Target_Shortage_Neg_Dir_Min_MWh = Var( m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, within=NonNegativeReals, ) - m.Transmission_Target_Shortage_Neg_Dir_MWh = Var( + m.Transmission_Target_Overage_Neg_Dir_Max_MWh = Var( m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, within=NonNegativeReals, ) - def violation_pos_dir_expression_rule(mod, z, bt, hz): + def violation_pos_dir_min_expression_rule(mod, z, bt, hz): if mod.transmission_target_allow_violation[z]: - return mod.Transmission_Target_Shortage_Pos_Dir_MWh[z, bt, hz] + return mod.Transmission_Target_Shortage_Pos_Dir_Min_MWh[z, bt, hz] else: return 0 - m.Transmission_Target_Shortage_Pos_Dir_MWh_Expression = Expression( + m.Transmission_Target_Shortage_Pos_Dir_Min_MWh_Expression = Expression( m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, - rule=violation_pos_dir_expression_rule, + rule=violation_pos_dir_min_expression_rule, ) - def violation_neg_dir_expression_rule(mod, z, bt, hz): + def violation_pos_dir_max_expression_rule(mod, z, bt, hz): if mod.transmission_target_allow_violation[z]: - return mod.Transmission_Target_Shortage_Neg_Dir_MWh[z, bt, hz] + return mod.Transmission_Target_Overage_Pos_Dir_Max_MWh[z, bt, hz] else: return 0 - m.Transmission_Target_Shortage_Neg_Dir_MWh_Expression = Expression( + m.Transmission_Target_Overage_Pos_Dir_Max_MWh_Expression = Expression( m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, - rule=violation_neg_dir_expression_rule, + rule=violation_pos_dir_max_expression_rule, ) - def transmission_target_pos_dir_rule(mod, z, bt, hz): + def violation_neg_dir_min_expression_rule(mod, z, bt, hz): + if mod.transmission_target_allow_violation[z]: + return mod.Transmission_Target_Shortage_Neg_Dir_Min_MWh[z, bt, hz] + else: + return 0 + + m.Transmission_Target_Shortage_Neg_Dir_Min_MWh_Expression = Expression( + m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, + rule=violation_neg_dir_min_expression_rule, + ) + + def violation_neg_dir_max_expression_rule(mod, z, bt, hz): + if mod.transmission_target_allow_violation[z]: + return mod.Transmission_Target_Overage_Neg_Dir_Max_MWh[z, bt, hz] + else: + return 0 + + m.Transmission_Target_Overage_Neg_Dir_Max_MWh_Expression = Expression( + m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, + rule=violation_neg_dir_max_expression_rule, + ) + + def transmission_target_pos_dir_min_rule(mod, z, bt, hz): """ Total delivered transmission-target-eligible energy in positive direction must exceed target @@ -78,21 +104,44 @@ def transmission_target_pos_dir_rule(mod, z, bt, hz): :param p: :return: """ - if mod.transmission_target_pos_dir_mwh[z, bt, hz] == 0: + if mod.transmission_target_pos_dir_min_mwh[z, bt, hz] == 0: + return Constraint.Skip + else: + return ( + mod.Total_Transmission_Target_Energy_Pos_Dir_MWh[z, bt, hz] + + mod.Transmission_Target_Shortage_Pos_Dir_Min_MWh_Expression[z, bt, hz] + >= mod.transmission_target_pos_dir_min_mwh[z, bt, hz] + ) + + m.Transmission_Target_Pos_Dir_Min_Constraint = Constraint( + m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, + rule=transmission_target_pos_dir_min_rule, + ) + + def transmission_target_pos_dir_max_rule(mod, z, bt, hz): + """ + Total delivered transmission-target-eligible energy in positive + direction must be below target + :param mod: + :param z: + :param p: + :return: + """ + if mod.transmission_target_pos_dir_max_mwh[z, bt, hz] == float("inf"): return Constraint.Skip else: return ( mod.Total_Transmission_Target_Energy_Pos_Dir_MWh[z, bt, hz] - + mod.Transmission_Target_Shortage_Pos_Dir_MWh_Expression[z, bt, hz] - >= mod.transmission_target_pos_dir_mwh[z, bt, hz] + - mod.Transmission_Target_Overage_Pos_Dir_Max_MWh_Expression[z, bt, hz] + <= mod.transmission_target_pos_dir_max_mwh[z, bt, hz] ) - m.Transmission_Target_Pos_Dir_Constraint = Constraint( + m.Transmission_Target_Pos_Dir_Max_Constraint = Constraint( m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, - rule=transmission_target_pos_dir_rule, + rule=transmission_target_pos_dir_max_rule, ) - def transmission_target_neg_dir_rule(mod, z, bt, hz): + def transmission_target_neg_dir_min_rule(mod, z, bt, hz): """ Total delivered transmission-target-eligible energy in negative direction must exceed target @@ -101,18 +150,41 @@ def transmission_target_neg_dir_rule(mod, z, bt, hz): :param p: :return: """ - if mod.transmission_target_neg_dir_mwh[z, bt, hz] == 0: + if mod.transmission_target_neg_dir_min_mwh[z, bt, hz] == 0: return Constraint.Skip else: return ( mod.Total_Transmission_Target_Energy_Neg_Dir_MWh[z, bt, hz] - + mod.Transmission_Target_Shortage_Neg_Dir_MWh_Expression[z, bt, hz] - >= mod.transmission_target_neg_dir_mwh[z, bt, hz] + + mod.Transmission_Target_Shortage_Neg_Dir_Min_MWh_Expression[z, bt, hz] + >= mod.transmission_target_neg_dir_min_mwh[z, bt, hz] ) - m.Transmission_Target_Neg_Dir_Constraint = Constraint( + m.Transmission_Target_Neg_Dir_Min_Constraint = Constraint( m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, - rule=transmission_target_neg_dir_rule, + rule=transmission_target_neg_dir_min_rule, + ) + + def transmission_target_neg_dir_max_rule(mod, z, bt, hz): + """ + Total delivered transmission-target-eligible energy in negative + direction must be below target + :param mod: + :param z: + :param p: + :return: + """ + if mod.transmission_target_neg_dir_max_mwh[z, bt, hz] == float("inf"): + return Constraint.Skip + else: + return ( + mod.Total_Transmission_Target_Energy_Neg_Dir_MWh[z, bt, hz] + - mod.Transmission_Target_Overage_Neg_Dir_Max_MWh_Expression[z, bt, hz] + <= mod.transmission_target_neg_dir_max_mwh[z, bt, hz] + ) + + m.Transmission_Target_Neg_Dir_Max_Constraint = Constraint( + m.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET, + rule=transmission_target_neg_dir_max_rule, ) @@ -128,10 +200,14 @@ def export_results(scenario_directory, subproblem, stage, m, d): """ results_columns = [ - "fraction_of_transmission_target_positive_direction_met", - "transmission_target_shortage_positive_direction_mwh", - "fraction_of_transmission_target_negative_direction_met", - "transmission_target_shortage_negative_direction_mwh", + "fraction_of_transmission_target_pos_dir_min_met", + "transmission_target_shortage_pos_dir_min_mwh", + "fraction_of_transmission_target_pos_dir_max_met", + "transmission_target_overage_pos_dir_max_mwh", + "fraction_of_transmission_target_neg_dir_min_met", + "transmission_target_shortage_neg_dir_min_mwh", + "fraction_of_transmission_target_neg_dir_max_met", + "transmission_target_overage_neg_dir_min_mwh", ] data = [ [ @@ -139,19 +215,35 @@ def export_results(scenario_directory, subproblem, stage, m, d): bt, hz, ( - 1 - if float(m.transmission_target_pos_dir_mwh[z, bt, hz]) == 0 + None + if float(m.transmission_target_pos_dir_min_mwh[z, bt, hz]) == 0 + else value(m.Total_Transmission_Target_Energy_Pos_Dir_MWh[z, bt, hz]) + / float(m.transmission_target_pos_dir_min_mwh[z, bt, hz]) + ), + value(m.Transmission_Target_Shortage_Pos_Dir_Min_MWh_Expression[z, bt, hz]), + ( + None + if float(m.transmission_target_pos_dir_max_mwh[z, bt, hz]) + == float("inf") else value(m.Total_Transmission_Target_Energy_Pos_Dir_MWh[z, bt, hz]) - / float(m.transmission_target_pos_dir_mwh[z, bt, hz]) + / float(m.transmission_target_pos_dir_max_mwh[z, bt, hz]) + ), + value(m.Transmission_Target_Overage_Pos_Dir_Max_MWh_Expression[z, bt, hz]), + ( + None + if float(m.transmission_target_neg_dir_min_mwh[z, bt, hz]) == 0 + else value(m.Total_Transmission_Target_Energy_Neg_Dir_MWh[z, bt, hz]) + / float(m.transmission_target_neg_dir_min_mwh[z, bt, hz]) ), - value(m.Transmission_Target_Shortage_Pos_Dir_MWh_Expression[z, bt, hz]), + value(m.Transmission_Target_Shortage_Neg_Dir_Min_MWh_Expression[z, bt, hz]), ( - 1 - if float(m.transmission_target_neg_dir_mwh[z, bt, hz]) == 0 + None + if float(m.transmission_target_neg_dir_max_mwh[z, bt, hz]) + == float("inf") else value(m.Total_Transmission_Target_Energy_Neg_Dir_MWh[z, bt, hz]) - / float(m.transmission_target_neg_dir_mwh[z, bt, hz]) + / float(m.transmission_target_neg_dir_max_mwh[z, bt, hz]) ), - value(m.Transmission_Target_Shortage_Neg_Dir_MWh_Expression[z, bt, hz]), + value(m.Transmission_Target_Overage_Neg_Dir_Max_MWh_Expression[z, bt, hz]), ] for ( z, diff --git a/gridpath/transmission/operations/transmission_target_contributions.py b/gridpath/transmission/operations/transmission_target_contributions.py index 19886f384..bed8fcac4 100644 --- a/gridpath/transmission/operations/transmission_target_contributions.py +++ b/gridpath/transmission/operations/transmission_target_contributions.py @@ -151,7 +151,7 @@ def transmit_power_pos_dir_rule(mod, tx, tmp): else: return ( mod.Transmission_Target_Energy_MW_Pos_Dir[tx, tmp] - <= mod.TxSimpleBinary_Transmit_Power_Positive_Direction_MW[tx, tmp] + == mod.TxSimpleBinary_Transmit_Power_Positive_Direction_MW[tx, tmp] ) m.Transmission_Target_Energy_MW_Pos_Dir_Constraint = Constraint( @@ -165,7 +165,7 @@ def transmit_power_neg_dir_rule(mod, tx, tmp): else: return ( mod.Transmission_Target_Energy_MW_Neg_Dir[tx, tmp] - <= mod.TxSimpleBinary_Transmit_Power_Negative_Direction_MW[tx, tmp] + == mod.TxSimpleBinary_Transmit_Power_Negative_Direction_MW[tx, tmp] ) m.Transmission_Target_Energy_MW_Neg_Dir_Constraint = Constraint( @@ -179,7 +179,7 @@ def transmit_power_pos_dir_net_rule(mod, tx, tmp): else: return ( mod.Transmission_Target_Net_Energy_MW_Pos_Dir[tx, tmp] - <= mod.Transmit_Power_MW[tx, tmp] + == mod.Transmit_Power_MW[tx, tmp] ) m.Transmission_Target_Net_Energy_MW_Pos_Dir_Constraint = Constraint( @@ -193,7 +193,7 @@ def transmit_power_neg_dir_net_rule(mod, tx, tmp): else: return ( mod.Transmission_Target_Net_Energy_MW_Neg_Dir[tx, tmp] - <= -mod.Transmit_Power_MW[tx, tmp] + == mod.Transmit_Power_MW[tx, tmp] ) m.Transmission_Target_Net_Energy_MW_Neg_Dir_Constraint = Constraint( @@ -261,13 +261,17 @@ def export_results(scenario_directory, subproblem, stage, m, d): """ results_columns = [ - "hurdle_cost_positive_direction", - "hurdle_cost_negative_direction", + "actual_flow_positive_direction", + "actual_flow_negative_direction", + "tx_flow_positive_direction", + "tx_flow_negative_direction", ] data = [ [ tx, tmp, + value(m.TxSimpleBinary_Transmit_Power_Positive_Direction_MW[tx, tmp]), + value(m.TxSimpleBinary_Transmit_Power_Negative_Direction_MW[tx, tmp]), ( value(m.Transmission_Target_Energy_MW_Pos_Dir[tx, tmp]) if float(m.contributes_net_flow_to_tx_target[tx]) == 0 diff --git a/tests/system/policy/transmission_targets/test_transmission_target.py b/tests/system/policy/transmission_targets/test_transmission_target.py index 463c5cddf..d0c30cc4f 100644 --- a/tests/system/policy/transmission_targets/test_transmission_target.py +++ b/tests/system/policy/transmission_targets/test_transmission_target.py @@ -94,7 +94,7 @@ def test_data_loaded_correctly(self): instance = m.create_instance(data) # Set: Tx_Target_Zone1 - expected_tx_target_zone_periods = sorted( + expected_tx_target_zone_periods_min = sorted( [ ("Tx_Target_Zone1", "year", 2020), ("Tx_Target_Zone1", "year", 2030), @@ -102,7 +102,7 @@ def test_data_loaded_correctly(self): ("Tx_Target_Zone2", "year", 2030), ] ) - actual_tx_target_zone_periods = sorted( + actual_tx_target_zone_bt_hrz_min = sorted( [ (z, bt, hz) for ( @@ -113,15 +113,15 @@ def test_data_loaded_correctly(self): ] ) self.assertListEqual( - expected_tx_target_zone_periods, actual_tx_target_zone_periods + expected_tx_target_zone_periods_min, actual_tx_target_zone_bt_hrz_min ) - # Param: period_tx_target_mwh + # Param: transmission_target_pos_dir_min_mwh expected_tx_target_pos = OrderedDict( sorted( { ("Tx_Target_Zone1", "year", 2020): 50, - ("Tx_Target_Zone1", "year", 2030): 50, + ("Tx_Target_Zone1", "year", 2030): 0, ("Tx_Target_Zone2", "year", 2020): 10, ("Tx_Target_Zone2", "year", 2030): 10, }.items() @@ -130,7 +130,7 @@ def test_data_loaded_correctly(self): actual_tx_target_pos = OrderedDict( sorted( { - (z, bt, hz): instance.transmission_target_pos_dir_mwh[z, bt, hz] + (z, bt, hz): instance.transmission_target_pos_dir_min_mwh[z, bt, hz] for ( z, bt, @@ -141,8 +141,33 @@ def test_data_loaded_correctly(self): ) self.assertDictEqual(expected_tx_target_pos, actual_tx_target_pos) - # Param: transmission_target_neg_dir_mwh - expected_tx_target_neg = OrderedDict( + # Param: transmission_target_pos_dir_max_mwh + expected_tx_target_pos_max = OrderedDict( + sorted( + { + ("Tx_Target_Zone1", "year", 2020): float("inf"), + ("Tx_Target_Zone1", "year", 2030): 100, + ("Tx_Target_Zone2", "year", 2020): float("inf"), + ("Tx_Target_Zone2", "year", 2030): 20, + }.items() + ) + ) + actual_tx_target_pos_max = OrderedDict( + sorted( + { + (z, bt, hz): instance.transmission_target_pos_dir_max_mwh[z, bt, hz] + for ( + z, + bt, + hz, + ) in instance.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET + }.items() + ) + ) + self.assertDictEqual(expected_tx_target_pos_max, actual_tx_target_pos_max) + + # Param: transmission_target_neg_dir_min_mwh + expected_tx_target_neg_min = OrderedDict( sorted( { ("Tx_Target_Zone1", "year", 2020): 0.2, @@ -152,10 +177,35 @@ def test_data_loaded_correctly(self): }.items() ) ) - actual_tx_target_neg = OrderedDict( + actual_tx_target_neg_min = OrderedDict( + sorted( + { + (z, bt, hz): instance.transmission_target_neg_dir_min_mwh[z, bt, hz] + for ( + z, + bt, + hz, + ) in instance.TRANSMISSION_TARGET_ZONE_BLN_TYPE_HRZS_WITH_TRANSMISSION_TARGET + }.items() + ) + ) + self.assertDictEqual(expected_tx_target_neg_min, actual_tx_target_neg_min) + + # Param: transmission_target_neg_dir_max_mwh + expected_tx_target_neg_max = OrderedDict( + sorted( + { + ("Tx_Target_Zone1", "year", 2020): 1, + ("Tx_Target_Zone1", "year", 2030): float("inf"), + ("Tx_Target_Zone2", "year", 2020): 10, + ("Tx_Target_Zone2", "year", 2030): float("inf"), + }.items() + ) + ) + actual_tx_target_neg_max = OrderedDict( sorted( { - (z, bt, hz): instance.transmission_target_neg_dir_mwh[z, bt, hz] + (z, bt, hz): instance.transmission_target_neg_dir_max_mwh[z, bt, hz] for ( z, bt, @@ -164,7 +214,7 @@ def test_data_loaded_correctly(self): }.items() ) ) - self.assertDictEqual(expected_tx_target_neg, actual_tx_target_neg) + self.assertDictEqual(expected_tx_target_neg_max, actual_tx_target_neg_max) if __name__ == "__main__": diff --git a/tests/test_data/inputs/transmission_targets.tab b/tests/test_data/inputs/transmission_targets.tab index c39482059..69f2ed6d3 100644 --- a/tests/test_data/inputs/transmission_targets.tab +++ b/tests/test_data/inputs/transmission_targets.tab @@ -1,5 +1,5 @@ -energy_target_zone balancing_type horizon period_transmission_target_pos_dir_mwh period_transmission_target_neg_dir_mwh -Tx_Target_Zone1 year 2020 50 0.2 -Tx_Target_Zone1 year 2030 50 0.33 -Tx_Target_Zone2 year 2020 10 0 -Tx_Target_Zone2 year 2030 10 0 +energy_target_zone balancing_type horizon transmission_target_pos_dir_min_mwh transmission_target_pos_dir_max_mwh transmission_target_neg_dir_min_mwh transmission_target_neg_dir_max_mwh +Tx_Target_Zone1 year 2020 50 . 0.2 1 +Tx_Target_Zone1 year 2030 . 100 0.33 . +Tx_Target_Zone2 year 2020 10 . . 10 +Tx_Target_Zone2 year 2030 10 20 0 . \ No newline at end of file diff --git a/tests/test_data/test_scenario_objective_function_values.csv b/tests/test_data/test_scenario_objective_function_values.csv index 488b51a26..1647cbe4c 100644 --- a/tests/test_data/test_scenario_objective_function_values.csv +++ b/tests/test_data/test_scenario_objective_function_values.csv @@ -104,3 +104,4 @@ test_variable_om_curves,-3796309193923.3223,-3796309193923.3223 test_startup_shutdown_rates,-560795927282.98,-560795927282.5082 test_performance_standard_carbon_credits_w_cap_no_credits_mapping,,-3592014778836.2856 single_stage_prod_cost_w_spinup_lookahead,"{1: -1362812018115.0881, 2: -2530872747652.0815, 3: -2433497089444.3677}","{1: -1362812018115.0881, 2: -2530872747652.0815, 3: -2433497089444.3677}" +test_tx_targets_max,-58282613551718.55,-58282613551718.55 diff --git a/tests/test_examples.py b/tests/test_examples.py index a755a7aa4..fd89f210c 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -1283,6 +1283,16 @@ def test_example_single_stage_prod_cost_w_spinup_lookahead(self): scenario_name=scenario_name, literal=True ) + def test_example_test_tx_targets_max(self): + """ + Check validation and objective function value of + "test_example_test_tx_targets_max" + example + :return: + """ + scenario_name = "test_tx_targets_max" + self.validate_and_test_example_generic(scenario_name=scenario_name) + @classmethod def tearDownClass(cls): os.remove(DB_PATH)