Skip to content

Commit

Permalink
Relative capacity limits based on multiple projects (#1048)
Browse files Browse the repository at this point in the history
  • Loading branch information
anamileva authored Oct 26, 2023
1 parent 60112b4 commit 684f7b5
Show file tree
Hide file tree
Showing 10 changed files with 176 additions and 98 deletions.
1 change: 1 addition & 0 deletions db/csvs_test_examples/csv_structure.csv
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ project/project_new_binary_build_size,data_dependent,project_new_binary_build_si
project/project_capacity_groups/requirements,data_dependent,project_capacity_group_requirement_scenario_id,project_capacity_group_requirements,simple,,0,0,,,,
project/project_capacity_groups/projects,data_dependent,project_capacity_group_scenario_id,project_capacity_groups,simple,,0,0,,,,
project/relative_capacity,data_dependent,project_relative_capacity_requirement_scenario_id,project_relative_capacity_requirements,simple,,0,0,,,,
project/relative_capacity/mappings,data_dependent,prj_for_lim_map_id,project_relative_capacity_requirements_map,simple,,1,0,,,inputs_project_relative_capacity_requirements,project_relative_capacity_requirement_scenario_id
project/project_fuels,data_dependent,project_fuel_scenario_id,project_fuels,simple,,1,0,,,inputs_project_operational_chars,project_operational_chars_scenario_id
project/project_heat_rate_curves,data_dependent,heat_rate_curves_scenario_id,project_heat_rate_curves,simple,,1,0,,,inputs_project_operational_chars,project_operational_chars_scenario_id
project/project_variable_om_curves,data_dependent,variable_om_curves_scenario_id,project_variable_om_curves,simple,,1,0,,,inputs_project_operational_chars,project_operational_chars_scenario_id
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
project,project_for_limits,period,min_relative_capacity_limit_new,max_relative_capacity_limit_new,min_relative_capacity_limit_total,max_relative_capacity_limit_total
Solar,Wind,2020,,,,2
project,period,prj_for_lim_map_id,min_relative_capacity_limit_new,max_relative_capacity_limit_new,min_relative_capacity_limit_total,max_relative_capacity_limit_total
Solar,2020,1,,,,2
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
project_for_limits
Wind
22 changes: 20 additions & 2 deletions db/db_schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -1163,19 +1163,37 @@ CREATE TABLE inputs_project_relative_capacity_requirements
(
project_relative_capacity_requirement_scenario_id INTEGER,
project VARCHAR(64),
project_for_limits VARCHAR(64),
period INTEGER,
prj_for_lim_map_id INTEGER,
min_relative_capacity_limit_new FLOAT,
max_relative_capacity_limit_new FLOAT,
min_relative_capacity_limit_total FLOAT,
max_relative_capacity_limit_total FLOAT,
PRIMARY KEY (project_relative_capacity_requirement_scenario_id, project,
project_for_limits, period),
period, prj_for_lim_map_id),
FOREIGN KEY (project_relative_capacity_requirement_scenario_id) REFERENCES
subscenarios_project_relative_capacity_requirements
(project_relative_capacity_requirement_scenario_id)
);

DROP TABLE IF EXISTS subscenarios_project_relative_capacity_requirements_map;
CREATE TABLE subscenarios_project_relative_capacity_requirements_map
(
project VARCHAR(64),
prj_for_lim_map_id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(32),
description VARCHAR(128)
);

DROP TABLE IF EXISTS inputs_project_relative_capacity_requirements_map;
CREATE TABLE inputs_project_relative_capacity_requirements_map
(
project VARCHAR(64),
prj_for_lim_map_id INTEGER,
project_for_limits VARCHAR(64),
PRIMARY KEY (project, prj_for_lim_map_id, project_for_limits)
);


-- Group project mapping
DROP TABLE IF EXISTS subscenarios_project_capacity_groups;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
project project_for_limits period min_relative_capacity_limit_new max_relative_capacity_limit_new min_relative_capacity_limit_total max_relative_capacity_limit_total
Solar Wind 2020 . . . 2.0
project period min_relative_capacity_limit_new max_relative_capacity_limit_new min_relative_capacity_limit_total max_relative_capacity_limit_total
Solar 2020 . . . 2.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
project period project_for_limit
Solar 2020 Wind
158 changes: 105 additions & 53 deletions gridpath/project/capacity/relative_capacity.py

Large diffs are not rendered by default.

71 changes: 35 additions & 36 deletions tests/project/capacity/test_relative_capacity.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright 2016-2020 Blue Marble Analytics LLC.
# Copyright 2016-2023 Blue Marble Analytics LLC.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -95,86 +95,85 @@ def test_initialized_components(self):
)
instance = m.create_instance(data)

# Set: RELATIVE_CAPACITY_PROJECT_PAIR_PERIODS
expected_prj_prd = sorted(
[("Battery", "Wind", 2020), ("Battery", "Wind", 2030)]
)
# Set: REL_CAP_PRJ_PRD
expected_prj_prd = sorted([("Battery", 2020), ("Battery", 2030)])
actual_prj_prd = sorted(
[
(prj, prj_l, period)
(prj, period)
for (
prj,
prj_l,
period,
) in instance.RELATIVE_CAPACITY_PROJECT_PAIR_PERIODS
) in instance.REL_CAP_PRJ_PRD
]
)
self.assertListEqual(expected_prj_prd, actual_prj_prd)

# Set: PRJS_FOR_REL_CAP_LIMIT
expected_prj_prd = {
("Battery", 2020): ["Wind"],
("Battery", 2030): ["Wind", "Battery_Binary"],
}
actual_prj_prd = {
(prj, period): [prj for prj in instance.PRJS_FOR_REL_CAP_LIMIT[prj, period]]
for (
prj,
period,
) in instance.REL_CAP_PRJ_PRD
}
self.assertDictEqual(expected_prj_prd, actual_prj_prd)

# Params: min_relative_capacity_limit_new
expected_new_min = {
("Battery", "Wind", 2020): 0,
("Battery", "Wind", 2030): 1,
("Battery", 2020): 0,
("Battery", 2030): 1,
}
actual_new_min = {
(prj, prj_for_lim, prd): instance.min_relative_capacity_limit_new[
prj, prj_for_lim, prd
]
(prj, prd): instance.min_relative_capacity_limit_new[prj, prd]
for (
prj,
prj_for_lim,
prd,
) in instance.RELATIVE_CAPACITY_PROJECT_PAIR_PERIODS
) in instance.REL_CAP_PRJ_PRD
}
self.assertDictEqual(expected_new_min, actual_new_min)

# # Params: max_relative_capacity_limit_new
expected_new_max = {
("Battery", "Wind", 2020): 2,
("Battery", "Wind", 2030): float("inf"),
("Battery", 2020): 2,
("Battery", 2030): float("inf"),
}
actual_new_max = {
(prj, prj_for_lim, prd): instance.max_relative_capacity_limit_new[
prj, prj_for_lim, prd
]
(prj, prd): instance.max_relative_capacity_limit_new[prj, prd]
for (
prj,
prj_for_lim,
prd,
) in instance.RELATIVE_CAPACITY_PROJECT_PAIR_PERIODS
) in instance.REL_CAP_PRJ_PRD
}
self.assertDictEqual(expected_new_max, actual_new_max)

# Params: min_relative_capacity_limit_total
expected_total_min = {
("Battery", "Wind", 2020): 3,
("Battery", "Wind", 2030): 0,
("Battery", 2020): 3,
("Battery", 2030): 0,
}
actual_total_min = {
(prj, prj_for_lim, prd): instance.min_relative_capacity_limit_total[
prj, prj_for_lim, prd
]
(prj, prd): instance.min_relative_capacity_limit_total[prj, prd]
for (
prj,
prj_for_lim,
prd,
) in instance.RELATIVE_CAPACITY_PROJECT_PAIR_PERIODS
) in instance.REL_CAP_PRJ_PRD
}
self.assertDictEqual(expected_total_min, actual_total_min)

# Params: max_relative_capacity_limit_total
expected_total_max = {
("Battery", "Wind", 2020): float("inf"),
("Battery", "Wind", 2030): 4,
("Battery", 2020): float("inf"),
("Battery", 2030): 4,
}
actual_total_max = {
(prj, prj_for_lim, prd): instance.max_relative_capacity_limit_total[
prj, prj_for_lim, prd
]
(prj, prd): instance.max_relative_capacity_limit_total[prj, prd]
for (
prj,
prj_for_lim,
prd,
) in instance.RELATIVE_CAPACITY_PROJECT_PAIR_PERIODS
) in instance.REL_CAP_PRJ_PRD
}
self.assertDictEqual(expected_total_max, actual_total_max)
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
project project_for_limits period min_relative_capacity_limit_new max_relative_capacity_limit_new min_relative_capacity_limit_total max_relative_capacity_limit_total
Battery Wind 2020 . 2 3 .
Battery Wind 2030 1 . . 4
project period min_relative_capacity_limit_new max_relative_capacity_limit_new min_relative_capacity_limit_total max_relative_capacity_limit_total
Battery 2020 . 2 3 .
Battery 2030 1 . . 4
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
project period project_for_limit
Battery 2020 Wind
Battery 2030 Wind
Battery 2030 Battery_Binary

0 comments on commit 684f7b5

Please sign in to comment.