diff --git a/component/adapter.py b/component/adapter.py index 494e8c721fdbd37332e16f79633cc8f4cd2b42f7..50d9ed2ac578d611828f5ace486443ab827cb0b5 100644 --- a/component/adapter.py +++ b/component/adapter.py @@ -28,14 +28,14 @@ from Model_Library.component.core import ( ComponentCommodity, ComponentKind, ) -from Model_Library.dynamics import resample, resample_variable +from Model_Library.dynamics import resample_variable from Model_Library.optimization_model import VariableKind import pyomo.environ as pyo class AssetAdapter(AbstractComponent): - def __init__(self, name, configuration, dynamic, assets): + def __init__(self, name, configuration, assets): self.asset = assets[configuration["asset"]] self.grid = self.asset._components[configuration["grid"]] @@ -47,7 +47,6 @@ class AssetAdapter(AbstractComponent): commodity_4=None, configuration=configuration, capacity=ComponentCapacity.NONE, - dynamic=dynamic, ) self.commodity = self.grid.commodity @@ -100,7 +99,7 @@ class AssetAdapter(AbstractComponent): class MemberAdapter(AbstractComponent): - def __init__(self, name, configuration, dynamic, members): + def __init__(self, name, configuration, members): self.member = members[configuration["member"]] self.grid = self.member._components[configuration["grid"]] @@ -112,7 +111,6 @@ class MemberAdapter(AbstractComponent): commodity_4=None, configuration=configuration, capacity=ComponentCapacity.NONE, - dynamic=dynamic, ) self.commodity = self.grid.commodity diff --git a/component/cold.py b/component/cold.py index 5e1a3bbf22d6d50e892843329592c862adcd6be9..3915f068e9136b1dd808133a5046513deaaa8f27 100644 --- a/component/cold.py +++ b/component/cold.py @@ -31,7 +31,7 @@ from Model_Library.component.core import ( class AbsorptionChiller(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.HEAT, @@ -39,12 +39,11 @@ class AbsorptionChiller(BaseComponent): commodity_3=ComponentCommodity.COLD, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) class CompressorChiller(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.ELECTRICITY, @@ -52,25 +51,18 @@ class CompressorChiller(BaseComponent): commodity_3=ComponentCommodity.COLD, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) class ColdConsumption(BaseConsumption): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( - name=name, - commodity=ComponentCommodity.COLD, - configuration=configuration, - dynamic=dynamic, + name=name, commodity=ComponentCommodity.COLD, configuration=configuration ) class ColdGrid(BaseGrid): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( - name=name, - commodity=ComponentCommodity.COLD, - configuration=configuration, - dynamic=dynamic, + name=name, commodity=ComponentCommodity.COLD, configuration=configuration ) diff --git a/component/core.py b/component/core.py index c138fdc8433c5ccc41dffd391365219996c595dc..4b56d4725be01b92c35af796dcdb4b1b2480a01e 100644 --- a/component/core.py +++ b/component/core.py @@ -69,7 +69,6 @@ class AbstractComponent: commodity_4, configuration, capacity, - dynamic, ): self.name = name self.input_commodity_1 = commodity_1 @@ -113,8 +112,6 @@ class AbstractComponent: "factor_effort_maintenance_operation", 0 ) - self.dynamic = dynamic - if configuration is not None and "additional_model_logic" in configuration: self.additional_model_logic = configuration["additional_model_logic"] else: @@ -301,7 +298,7 @@ class AbstractComponent: class BaseBusBar(AbstractComponent): - def __init__(self, name, commodity, dynamic): + def __init__(self, name, commodity): super().__init__( name=name, commodity_1=commodity, @@ -310,11 +307,8 @@ class BaseBusBar(AbstractComponent): commodity_4=None, configuration=None, capacity=ComponentCapacity.NONE, - dynamic=dynamic, ) - self.dynamic = dynamic - def match(self, kind=ComponentKind.ALL, commodity=ComponentCommodity.ALL): match_kind = kind == ComponentKind.ALL or kind == ComponentKind.BUSBAR match_commodity = ( @@ -345,14 +339,7 @@ class BaseBusBar(AbstractComponent): class BaseComponent(AbstractComponent): def __init__( - self, - name, - commodity_1, - commodity_2, - commodity_3, - commodity_4, - configuration, - dynamic, + self, name, commodity_1, commodity_2, commodity_3, commodity_4, configuration ): super().__init__( name=name, @@ -362,7 +349,6 @@ class BaseComponent(AbstractComponent): commodity_4=commodity_4, configuration=configuration, capacity=ComponentCapacity.REQUIRED, - dynamic=dynamic, ) self._setup_conversions(configuration) @@ -520,7 +506,7 @@ class BaseComponent(AbstractComponent): class BaseConsumption(AbstractComponent): - def __init__(self, name, commodity, configuration, dynamic): + def __init__(self, name, commodity, configuration): super().__init__( name=name, commodity_1=commodity, @@ -529,12 +515,11 @@ class BaseConsumption(AbstractComponent): commodity_4=None, configuration=configuration, capacity=ComponentCapacity.NONE, - dynamic=dynamic, ) self.commodity = commodity - self.consumption = configuration["consumption"].resample(dynamic) + self.consumption = configuration["consumption"] def match(self, kind=ComponentKind.ALL, commodity=ComponentCommodity.ALL): match_kind = kind == ComponentKind.ALL or kind == ComponentKind.CONSUMPTION @@ -563,7 +548,7 @@ class BaseConsumption(AbstractComponent): class BaseGeneration(AbstractComponent): - def __init__(self, name, commodity, configuration, dynamic): + def __init__(self, name, commodity, configuration): super().__init__( name=name, commodity_1=None, @@ -572,12 +557,11 @@ class BaseGeneration(AbstractComponent): commodity_4=None, configuration=configuration, capacity=ComponentCapacity.NONE, - dynamic=dynamic, ) self.commodity = commodity - self.generation = configuration["generation"].resample(dynamic) + self.generation = configuration["generation"] def match(self, kind=ComponentKind.ALL, commodity=ComponentCommodity.ALL): match_kind = kind == ComponentKind.ALL or kind == ComponentKind.GENERATION @@ -606,7 +590,7 @@ class BaseGeneration(AbstractComponent): class BaseGrid(AbstractComponent): - def __init__(self, name, commodity, configuration, dynamic): + def __init__(self, name, commodity, configuration): super().__init__( name=name, commodity_1=commodity, @@ -615,25 +599,16 @@ class BaseGrid(AbstractComponent): commodity_4=None, configuration=configuration, capacity=ComponentCapacity.OPTIONAL, - dynamic=dynamic, ) self.commodity = commodity if "price" in configuration: - if isinstance(configuration["price"], (int, float)): - self.price = configuration["price"] - else: - self.price = configuration["price"].resample(dynamic) + self.price = configuration["price"] else: self.price = 0 if "injection_price" in configuration: - if isinstance(configuration["injection_price"], (int, float)): - self.injection_price = configuration["injection_price"] - else: - self.injection_price = configuration["injection_price"].resample( - dynamic - ) + self.injection_price = configuration["injection_price"] else: self.injection_price = 0 if "peak_power_cost" in configuration: @@ -641,10 +616,7 @@ class BaseGrid(AbstractComponent): else: self.peak_power_cost_ = 0 if "co2_emissions" in configuration: - if isinstance(configuration["co2_emissions"], (int, float)): - self.co2_emissions_ = configuration["co2_emissions"] - else: - self.co2_emissions_ = configuration["co2_emissions"].resample(dynamic) + self.co2_emissions_ = configuration["co2_emissions"] else: self.co2_emissions_ = 0 @@ -737,7 +709,7 @@ class BaseGrid(AbstractComponent): class BaseStorage(AbstractComponent): - def __init__(self, name, commodity, configuration, dynamic): + def __init__(self, name, commodity, configuration): super().__init__( name=name, commodity_1=commodity, @@ -746,7 +718,6 @@ class BaseStorage(AbstractComponent): commodity_4=None, configuration=configuration, capacity=ComponentCapacity.REQUIRED, - dynamic=dynamic, ) self.commodity = commodity diff --git a/component/electricity.py b/component/electricity.py index e97207ed0a4b65cad331ee3b3c79bd28d7e39874..00b4c396c4c82b8464f6274097932d261e130b85 100644 --- a/component/electricity.py +++ b/component/electricity.py @@ -38,14 +38,12 @@ import pyomo.environ as pyo class ElectricalBusBar(BaseBusBar): - def __init__(self, name, configuration, dynamic): - super().__init__( - name=name, commodity=ComponentCommodity.ELECTRICITY, dynamic=dynamic - ) + def __init__(self, name, configuration): + super().__init__(name=name, commodity=ComponentCommodity.ELECTRICITY) class BiPowerElectronic(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.ELECTRICITY, @@ -53,7 +51,6 @@ class BiPowerElectronic(BaseComponent): commodity_3=ComponentCommodity.ELECTRICITY, commodity_4=ComponentCommodity.ELECTRICITY, configuration=configuration, - dynamic=dynamic, ) def _load_conversions(self, configuration): @@ -76,7 +73,7 @@ class BiPowerElectronic(BaseComponent): class PowerElectronic(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.ELECTRICITY, @@ -84,7 +81,6 @@ class PowerElectronic(BaseComponent): commodity_3=ComponentCommodity.ELECTRICITY, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) def _load_conversions(self, configuration): @@ -102,7 +98,7 @@ class PowerElectronic(BaseComponent): class PVGenerator(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=None, @@ -110,15 +106,14 @@ class PVGenerator(BaseComponent): commodity_3=ComponentCommodity.ELECTRICITY, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) if "irradiance" in configuration: - self.irradiance = configuration["irradiance"].resample(dynamic) + self.irradiance = configuration["irradiance"] if "temperature" in configuration: - self.temperature = configuration["temperature"].resample(dynamic) + self.temperature = configuration["temperature"] if "power_factors" in configuration: - self.power_factors = configuration["power_factors"].resample(dynamic) + self.power_factors = configuration["power_factors"] def _setup_conversions(self, configuration): with open(configuration["model"]) as f: @@ -155,40 +150,36 @@ class PVGenerator(BaseComponent): class ElectricalConsumption(BaseConsumption): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity=ComponentCommodity.ELECTRICITY, configuration=configuration, - dynamic=dynamic, ) class ElectricalGeneration(BaseGeneration): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity=ComponentCommodity.ELECTRICITY, configuration=configuration, - dynamic=dynamic, ) class ElectricalGrid(BaseGrid): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity=ComponentCommodity.ELECTRICITY, configuration=configuration, - dynamic=dynamic, ) class Battery(BaseStorage): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity=ComponentCommodity.ELECTRICITY, configuration=configuration, - dynamic=dynamic, ) diff --git a/component/gas.py b/component/gas.py index 8793cebe14825433c50bd5a8e48d9a41e57bcef3..e191ce2006d834a40031704c2a4dd33309ec2630 100644 --- a/component/gas.py +++ b/component/gas.py @@ -26,7 +26,7 @@ from Model_Library.component.core import BaseComponent, BaseGrid, ComponentCommo class CHP(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.GAS, @@ -34,7 +34,6 @@ class CHP(BaseComponent): commodity_3=ComponentCommodity.ELECTRICITY, commodity_4=ComponentCommodity.HEAT, configuration=configuration, - dynamic=dynamic, ) def _load_conversions(self, configuration): @@ -56,10 +55,7 @@ class CHP(BaseComponent): class GasGrid(BaseGrid): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( - name=name, - commodity=ComponentCommodity.GAS, - configuration=configuration, - dynamic=dynamic, + name=name, commodity=ComponentCommodity.GAS, configuration=configuration ) diff --git a/component/heat.py b/component/heat.py index 56ea9c922be4b3ea97693dbb1b8cf0ad778105d9..68cec38ce80b1b1470748c84b80dd6c8123af53a 100644 --- a/component/heat.py +++ b/component/heat.py @@ -35,7 +35,7 @@ import pyomo.environ as pyo class ElectricBoiler(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.ELECTRICITY, @@ -43,12 +43,11 @@ class ElectricBoiler(BaseComponent): commodity_3=ComponentCommodity.HEAT, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) class GasBoiler(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.GAS, @@ -56,12 +55,11 @@ class GasBoiler(BaseComponent): commodity_3=ComponentCommodity.HEAT, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) class GasHeatPump(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.GAS, @@ -69,12 +67,11 @@ class GasHeatPump(BaseComponent): commodity_3=ComponentCommodity.HEAT, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) class HeatExchanger(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.HEAT, @@ -82,12 +79,11 @@ class HeatExchanger(BaseComponent): commodity_3=ComponentCommodity.HEAT, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) class HeatPump(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.ELECTRICITY, @@ -95,13 +91,12 @@ class HeatPump(BaseComponent): commodity_3=ComponentCommodity.HEAT, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) def _load_conversions(self, configuration): efficiency = configuration["efficiency"] - temperature = configuration["temperature"].resample(self.dynamic).values + temperature = configuration["temperature"].values set_temperature = 40.0 cop = (set_temperature + 273.15) / (set_temperature - temperature) * efficiency @@ -112,7 +107,7 @@ class HeatPump(BaseComponent): class SolarThermalCollector(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=None, @@ -120,10 +115,9 @@ class SolarThermalCollector(BaseComponent): commodity_3=ComponentCommodity.HEAT, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) - self.irradiance = configuration["irradiance"].resample(dynamic) + self.irradiance = configuration["irradiance"] def _setup_conversions(self, configuration): self.operational_variables = [(self.name + ".output_1", VariableKind.INDEXED)] @@ -146,30 +140,21 @@ class SolarThermalCollector(BaseComponent): class HotWaterConsumption(BaseConsumption): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( - name=name, - commodity=ComponentCommodity.HEAT, - configuration=configuration, - dynamic=dynamic, + name=name, commodity=ComponentCommodity.HEAT, configuration=configuration ) class HeatGrid(BaseGrid): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( - name=name, - commodity=ComponentCommodity.HEAT, - configuration=configuration, - dynamic=dynamic, + name=name, commodity=ComponentCommodity.HEAT, configuration=configuration ) class HeatStorage(BaseStorage): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( - name=name, - commodity=ComponentCommodity.HEAT, - configuration=configuration, - dynamic=dynamic, + name=name, commodity=ComponentCommodity.HEAT, configuration=configuration ) diff --git a/component/hydrogen.py b/component/hydrogen.py index 493c5effce569b384ae59e2a3d8ffd791740abcf..25315ab707a1dddc33b8224603283b53b340eed2 100644 --- a/component/hydrogen.py +++ b/component/hydrogen.py @@ -26,7 +26,7 @@ from Model_Library.component.core import BaseComponent, BaseStorage, ComponentCo class Electrolyzer(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.ELECTRICITY, @@ -34,7 +34,6 @@ class Electrolyzer(BaseComponent): commodity_3=ComponentCommodity.HYDROGEN, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) def _load_conversions(self, configuration): @@ -47,7 +46,7 @@ class Electrolyzer(BaseComponent): class FuelCell(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.HYDROGEN, @@ -55,7 +54,6 @@ class FuelCell(BaseComponent): commodity_3=ComponentCommodity.ELECTRICITY, commodity_4=ComponentCommodity.HEAT, configuration=configuration, - dynamic=dynamic, ) def _load_conversions(self, configuration): @@ -77,7 +75,7 @@ class FuelCell(BaseComponent): class HydrogenStorage(BaseStorage): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity=ComponentCommodity.HYDROGEN, diff --git a/component/space_heat.py b/component/space_heat.py index f6e85c2567eba471eea69ceda399477b84d7e08e..486bdbea4403e0ff1bf6d9b418e48fcbd6384f61 100644 --- a/component/space_heat.py +++ b/component/space_heat.py @@ -30,7 +30,7 @@ from Model_Library.component.core import ( class ElectricRadiator(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.ELECTRICITY, @@ -38,12 +38,11 @@ class ElectricRadiator(BaseComponent): commodity_3=ComponentCommodity.SPACE_HEAT, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) class Radiator(BaseComponent): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity_1=ComponentCommodity.HEAT, @@ -51,15 +50,13 @@ class Radiator(BaseComponent): commodity_3=ComponentCommodity.SPACE_HEAT, commodity_4=None, configuration=configuration, - dynamic=dynamic, ) class HeatConsumption(BaseConsumption): - def __init__(self, name, configuration, dynamic): + def __init__(self, name, configuration): super().__init__( name=name, commodity=ComponentCommodity.SPACE_HEAT, configuration=configuration, - dynamic=dynamic, ) diff --git a/topology.py b/topology.py index 37d67c2cc8fc5aefbcacfe4fbdc0c7ffe0d79897..798bda3ae2fcc7b25fffd069b1399fa9ad12096b 100644 --- a/topology.py +++ b/topology.py @@ -83,7 +83,7 @@ class SumConnection: class Topology: - def __init__(self, name, configuration, members, assets, dynamic): + def __init__(self, name, configuration, members, assets): self._name = name self._members = members self._assets = assets @@ -97,15 +97,15 @@ class Topology: component_type = component_configuration["type"] if component_type == "MemberAdapter": component = component_library[component_type]( - component_name, component_configuration, dynamic, members + component_name, component_configuration, members ) elif component_type == "AssetAdapter": component = component_library[component_type]( - component_name, component_configuration, dynamic, assets + component_name, component_configuration, assets ) else: component = component_library[component_type]( - component_name, component_configuration, dynamic + component_name, component_configuration ) self._components[component_name] = component @@ -209,8 +209,6 @@ class Topology: connector.flows[0] = connector.name other_side.replace_flow(flow_to_remove, connector.name) - self._dynamic = dynamic - if "additional_model_logic" in configuration: self._additional_model_logic = configuration["additional_model_logic"] else: @@ -241,8 +239,8 @@ class Topology: if component.match(kind=kind, commodity=commodity) ) - def optimize(self, key, strategy): - model = self.build_model(self._dynamic, strategy) + def optimize(self, key, dynamic, strategy): + model = self.build_model(dynamic, strategy) options = dict() options["MIPGap"] = 0.01 @@ -254,24 +252,24 @@ class Topology: if not model.is_ok(): raise RuntimeError("Model is infeasible or unbounded!") - self.create_empty_entity_result(key, self._dynamic) + self.create_empty_entity_result(key, dynamic) self.extract_result(model, key) def build_model(self, dynamic, strategy): model = OptimizationModel(self._name, dynamic) - self.fill_block(model, strategy) + self.fill_block(model, dynamic, strategy) model.collect_objectives() return model - def fill_block(self, block, strategy): + def fill_block(self, block, dynamic, strategy): for asset in self._assets.values(): - asset_block = OptimizationBlock(asset._name, asset._dynamic) + asset_block = OptimizationBlock(asset._name, dynamic) block.add(asset._name, asset_block) - asset.fill_block(asset_block, strategy) + asset.fill_block(asset_block, dynamic, strategy) if strategy is None: objectives = {"objective": []} @@ -586,25 +584,25 @@ class Topology: class Prosumer(Topology): - def __init__(self, name, configuration, dynamic): - super().__init__(name, configuration, dict(), dict(), dynamic) + def __init__(self, name, configuration): + super().__init__(name, configuration, dict(), dict()) class DistrictAsset(Topology): - def __init__(self, name, configuration, dynamic): - super().__init__(name, configuration, dict(), dict(), dynamic) + def __init__(self, name, configuration): + super().__init__(name, configuration, dict(), dict()) class District(Topology): - def __init__(self, name, configuration, prosumers, district_assets, dynamic): - super().__init__(name, configuration, prosumers, district_assets, dynamic) + def __init__(self, name, configuration, prosumers, district_assets): + super().__init__(name, configuration, prosumers, district_assets) class CityAsset(Topology): - def __init__(self, name, configuration, dynamic): - super().__init__(name, configuration, dict(), dict(), dynamic) + def __init__(self, name, configuration): + super().__init__(name, configuration, dict(), dict()) class City(Topology): - def __init__(self, name, configuration, districts, city_assets, dynamic): - super().__init__(name, configuration, districts, city_assets, dynamic) + def __init__(self, name, configuration, districts, city_assets): + super().__init__(name, configuration, districts, city_assets)