Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
4dab019
Revert "fix renewable serialization test"
ahalev May 19, 2023
f9de5f3
Revert "fix microgrid test"
ahalev May 19, 2023
461713e
Revert "fix renewable tests"
ahalev May 19, 2023
efeae04
Revert "add curtailment module to microgrid in tests"
ahalev May 19, 2023
cb6ce8b
Revert "fix mpc tests"
ahalev May 19, 2023
c840316
Revert "update info"
ahalev May 19, 2023
ae72088
Revert "update docstring"
ahalev May 19, 2023
c013cd5
Revert "pass containers through to curtailment module"
ahalev May 19, 2023
16b6b60
Revert "allow module_container passthrough to reset"
ahalev May 19, 2023
6c56bc6
Revert "add check for curtailment module in populated_correctly"
ahalev May 19, 2023
0b617a6
Revert "check curtailment in check_step"
ahalev May 19, 2023
b999821
Revert "whitespace"
ahalev May 19, 2023
8a88209
Revert "formatting"
ahalev May 19, 2023
a1f4d92
Revert "fix tests for excess load"
ahalev May 19, 2023
c77dafc
Revert "fix excess pv tests"
ahalev May 19, 2023
8abcf18
Revert "add repr"
ahalev May 19, 2023
2305ecf
Revert "bug fix in setup"
ahalev May 19, 2023
8c3ce03
Revert "fix consumption computation"
ahalev May 19, 2023
9316f8d
Revert "add curtailment params check to curtailment module"
ahalev May 19, 2023
9cc03e0
Revert "pull container into microgrid"
ahalev May 19, 2023
cd3d967
Revert "pass container not microgrid"
ahalev May 19, 2023
4fec823
Revert "import into modules init"
ahalev May 19, 2023
a70e139
Revert "rename dir"
ahalev May 19, 2023
2d9dcc1
Revert "write update meth"
ahalev May 19, 2023
13409ed
Revert "update new module"
ahalev May 19, 2023
1f49a41
Revert "whitespace"
ahalev May 19, 2023
8388512
Revert "whitespace"
ahalev May 19, 2023
b18012d
Revert "add renewable cuttailment module"
ahalev May 19, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 2 additions & 11 deletions src/pymgrid/convert/to_nonmodular_ops.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
from pymgrid.modules import (
LoadModule, RenewableModule, BatteryModule, GridModule, GensetModule, UnbalancedEnergyModule, CurtailmentModule
)
from pymgrid.modules import LoadModule, RenewableModule, BatteryModule, GridModule, GensetModule, UnbalancedEnergyModule
from copy import deepcopy
import pandas as pd
import numpy as np
Expand Down Expand Up @@ -28,7 +26,7 @@ def get_empty_params():


def check_viability(modular):
classes = LoadModule, RenewableModule, BatteryModule, GridModule, GensetModule, UnbalancedEnergyModule, CurtailmentModule
classes = LoadModule, RenewableModule, BatteryModule, GridModule, GensetModule, UnbalancedEnergyModule
classes_str = '\n'.join([str(x) for x in classes])
n_modules_by_cls = dict(zip(classes, [0]*len(classes)))

Expand Down Expand Up @@ -74,8 +72,6 @@ def add_params_from_module(module, params_dict):
add_genset_params(module, params_dict)
elif isinstance(module, UnbalancedEnergyModule):
add_unbalanced_energy_params(module, params_dict)
elif isinstance(module, CurtailmentModule):
check_curtailment_params(module)
else:
raise ValueError(f'Cannot parse module {module}.')

Expand Down Expand Up @@ -182,11 +178,6 @@ def add_unbalanced_energy_params(unbalanced_energy_module, params_dict):
_add_to_df_cost(params_dict, 'overgeneration')


def check_curtailment_params(curtailment_module):
if curtailment_module.curtailment_cost != 0:
warn(f'Curtailment cost {curtailment_module.curtailment_cost} will be ignored in conversion to nonmodular.')


def _add_empty(params_dict, subdict_name, *keys):
params_dict[subdict_name].update({k: [] for k in keys})

Expand Down
36 changes: 5 additions & 31 deletions src/pymgrid/microgrid/microgrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from warnings import warn

from pymgrid.microgrid import DEFAULT_HORIZON
from pymgrid.modules import ModuleContainer, UnbalancedEnergyModule, CurtailmentModule
from pymgrid.modules import ModuleContainer, UnbalancedEnergyModule
from pymgrid.microgrid.utils.step import MicrogridStep
from pymgrid.utils.eq import verbose_eq
from pymgrid.utils.logger import ModularLogger
Expand All @@ -33,9 +33,7 @@ class Microgrid(yaml.YAMLObject):
.. note::
The constructor copies modules passed to it.

add_curtailment_module : bool, default False

add_unbalanced_module : bool, default True
add_unbalanced_module : bool, default True.
Whether to add an unbalanced energy module to your microgrid. Such a module computes and attributes
costs to any excess supply or demand.
Set to True unless ``modules`` contains an ``UnbalancedEnergyModule``.
Expand Down Expand Up @@ -103,18 +101,14 @@ class Microgrid(yaml.YAMLObject):

def __init__(self,
modules,
add_curtailment_module=False,
add_unbalanced_module=True,
curtailment_cost=0.0,
loss_load_cost=10.,
overgeneration_cost=2.,
reward_shaping_func=None,
trajectory_func=None):

self._modules = self._get_module_container(modules,
add_curtailment_module,
add_unbalanced_module,
curtailment_cost,
loss_load_cost,
overgeneration_cost)

Expand Down Expand Up @@ -143,13 +137,7 @@ def _get_unbalanced_energy_module(self,
overgeneration_cost=overgeneration_cost
)

def _get_module_container(self,
modules,
add_curtailment_module,
add_unbalanced_module,
curtailment_cost,
loss_load_cost,
overgeneration_cost):
def _get_module_container(self, modules, add_unbalanced_module, loss_load_cost, overgeneration_cost):
"""
Types of _modules:
Fixed source: provides energy to the microgrid.
Expand Down Expand Up @@ -180,21 +168,10 @@ def _get_module_container(self,
if not pd.api.types.is_list_like(modules):
raise TypeError("modules must be list-like of modules.")

if add_curtailment_module:
curtailment_module = CurtailmentModule(curtailment_cost=curtailment_cost)
modules.append(curtailment_module)
else:
curtailment_module = None

if add_unbalanced_module:
modules.append(self._get_unbalanced_energy_module(loss_load_cost, overgeneration_cost))

container = ModuleContainer(modules)

if curtailment_module:
curtailment_module.setup(container)

return container
return ModuleContainer(modules)

def _check_trajectory_func(self, trajectory_func):
if trajectory_func is None:
Expand Down Expand Up @@ -236,11 +213,8 @@ def reset(self):
Observations from resetting the modules as well as the flushed balance log.
"""
self._set_trajectory()
def reset_args(module): return (self.modules,) if isinstance(module, CurtailmentModule) else ()

return {
**{name: [module.reset(*reset_args(module)) for module in module_list]
for name, module_list in self.modules.iterdict()},
**{name: [module.reset() for module in module_list] for name, module_list in self.modules.iterdict()},
**{"balance": self._balance_logger.flush(),
"other": self._microgrid_logger.flush()}
}
Expand Down
1 change: 0 additions & 1 deletion src/pymgrid/modules/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from .battery.battery_module import BatteryModule
from .curtailment_module import CurtailmentModule
from .genset_module import GensetModule
from .grid_module import GridModule
from .load_module import LoadModule
Expand Down
189 changes: 0 additions & 189 deletions src/pymgrid/modules/curtailment_module.py

This file was deleted.

2 changes: 1 addition & 1 deletion src/pymgrid/modules/unbalanced_energy_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def __init__(self,
initial_step=0,
loss_load_cost=10,
overgeneration_cost=2.0,
normalized_action_bounds=(0, 1)
normalized_action_bounds = (0, 1)
):

super().__init__(raise_errors,
Expand Down
4 changes: 2 additions & 2 deletions tests/control/test_mpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def test_run_with_load_pv_battery_grid(self):
self.assertEqual(mpc_output.shape[0], max_steps)
self.assertEqual(mpc_output[("grid", 0, "grid_import")].values +
mpc_output[("battery", 0, "discharge_amount")].values +
mpc_output[("curtailment", 0, "net_renewable_usage")].values,
mpc_output[("renewable", 0, "renewable_used")].values,
[load_const] * mpc_output.shape[0]
)

Expand Down Expand Up @@ -128,7 +128,7 @@ def test_run_with_load_pv_battery_grid_different_names(self):
self.assertEqual(mpc_output[("load_with_name", 0, "load_met")].values, [load_const]*mpc_output.shape[0])
self.assertEqual(mpc_output[("grid", 0, "grid_import")].values +
mpc_output[("battery", 0, "discharge_amount")].values +
mpc_output[("curtailment", 0, "net_renewable_usage")].values,
mpc_output[("pv_with_name", 0, "renewable_used")].values,
[load_const] * mpc_output.shape[0]
)
self.assertEqual(mpc_output[("load_with_name", 0, "load_met")].values, [load_const]*mpc_output.shape[0])
5 changes: 1 addition & 4 deletions tests/helpers/modular_microgrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ def get_modular_microgrid(remove_modules=(),
retain_only=None,
additional_modules=None,
add_unbalanced_module=True,
add_curtailment_module=True,
timeseries_length=100,
modules_only=False,
normalized_action_bounds=(0, 1)):
Expand Down Expand Up @@ -64,6 +63,4 @@ def get_modular_microgrid(remove_modules=(),
if modules_only:
return modules

return Microgrid(modules,
add_unbalanced_module=add_unbalanced_module,
add_curtailment_module=add_curtailment_module)
return Microgrid(modules, add_unbalanced_module=add_unbalanced_module)
1 change: 0 additions & 1 deletion tests/helpers/test_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

from unittest.util import safe_repr


class TestCase(unittest.TestCase):
def assertEqual(self, first, second, msg=None) -> None:
try:
Expand Down
Loading