diff --git a/.bumpversion.cfg b/.bumpversion.cfg deleted file mode 100644 index 512c0b7a1..000000000 --- a/.bumpversion.cfg +++ /dev/null @@ -1,20 +0,0 @@ -[bumpversion] -current_version = 0.5.3a1 -commit = True -tag = True - -[bumpversion:file:setup.py] -search = version='{current_version}' -replace = version='{new_version}' - -[bumpversion:file:README.rst] -search = v{current_version}. -replace = v{new_version}. - -[bumpversion:file:docs/conf.py] -search = version = release = '{current_version}' -replace = version = release = '{new_version}' - -[bumpversion:file:src/oemof/solph/__init__.py] -search = __version__ = '{current_version}' -replace = __version__ = '{new_version}' diff --git a/.flake8 b/.flake8 new file mode 100644 index 000000000..d632ccc03 --- /dev/null +++ b/.flake8 @@ -0,0 +1,4 @@ +[flake8] +max-line-length = 79 +exclude = */migrations/*, docs/conf.py +ignore = E203, W503 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index fc7ee51e4..3cb51e3c2 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -25,7 +25,7 @@ If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - OS: (e.g. iOS, Debian, Ubunut, Windows10) - - Python version (e.g. 3.8) + - Python version (e.g. 3.11) **Additional context** Add any other context about the problem here. diff --git a/.github/workflows/tox_pytests.yml b/.github/workflows/tox_pytests.yml index 7b7570226..48f4845a8 100644 --- a/.github/workflows/tox_pytests.yml +++ b/.github/workflows/tox_pytests.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.8, 3.9, "3.10"] + python-version: [3.9, "3.10", "3.11"] steps: - uses: actions/checkout@v1 diff --git a/.gitignore b/.gitignore index 0672a8eba..c75a3d940 100644 --- a/.gitignore +++ b/.gitignore @@ -20,8 +20,9 @@ develop-eggs .installed.cfg lib lib64 -venv*/ -pyvenv*/ +venv/ +.venv/ +pyvenv/ pip-wheel-metadata/ # Installer logs diff --git a/.prospector.yml b/.prospector.yml deleted file mode 100644 index 2931b0714..000000000 --- a/.prospector.yml +++ /dev/null @@ -1,7 +0,0 @@ -pep257: - disable: - - D200 - - D203 - - D213 - - D406 - - D407 diff --git a/.scrutinizer.yml b/.scrutinizer.yml new file mode 100644 index 000000000..39b65f6d3 --- /dev/null +++ b/.scrutinizer.yml @@ -0,0 +1,7 @@ +filter: + paths: + - src/ + - examples/ + excluded_paths: + - "*/experimental/*" # submodules marked experimental + diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index ac3547310..52872fcff 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -119,9 +119,9 @@ Available standard environments are:: clean check docs - py37 - py38 py39 + py310 + py311 To run a subset of tests:: diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 69992fa42..000000000 --- a/MANIFEST.in +++ /dev/null @@ -1,26 +0,0 @@ -graft docs -graft src -graft ci -graft tests - -include .bumpversion.cfg -include .coveragerc -include .editorconfig - -include AUTHORS.rst -include CITATION.cff -include CONTRIBUTING.rst -include LICENSE -include README.rst -include *.md -include VERSION - -include tox.ini -include *.yml -include *.yaml - -recursive-exclude examples *.py -recursive-include examples *.csv -recursive-include examples *.xlsx - -global-exclude *.py[cod] __pycache__/* *.so *.dylib diff --git a/README.rst b/README.rst index 1c12f0bdd..21501fdf2 100644 --- a/README.rst +++ b/README.rst @@ -61,9 +61,9 @@ :alt: Supported implementations :target: https://pypi.org/project/oemof.solph -.. |commits-since| image:: https://img.shields.io/github/commits-since/oemof/oemof-solph/v0.5.1/dev +.. |commits-since| image:: https://img.shields.io/github/commits-since/oemof/oemof-solph/latest/dev :alt: Commits since latest release - :target: https://github.com/oemof/oemof-solph/compare/v0.5.1...dev + :target: https://github.com/oemof/oemof-solph/compare/master...dev .. |zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.596235.svg :alt: Zenodo DOI @@ -267,7 +267,7 @@ or by e-mailing us (see `here `_ for contact informa License ======= -Copyright (c) 2023 oemof developer group +Copyright (c) oemof developer group Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/VERSION b/VERSION deleted file mode 100644 index 9efb9a050..000000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -__version__ = "0.5.3a1" diff --git a/docs/_files/OffsetConverter_efficiency.svg b/docs/_files/OffsetConverter_efficiency.svg deleted file mode 100644 index 054bcbe5f..000000000 --- a/docs/_files/OffsetConverter_efficiency.svg +++ /dev/null @@ -1,1384 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_files/OffsetConverter_power_relation.svg b/docs/_files/OffsetConverter_power_relation.svg deleted file mode 100644 index c2e6682ad..000000000 --- a/docs/_files/OffsetConverter_power_relation.svg +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_files/OffsetConverter_relations_1.svg b/docs/_files/OffsetConverter_relations_1.svg new file mode 100644 index 000000000..b76639d7b --- /dev/null +++ b/docs/_files/OffsetConverter_relations_1.svg @@ -0,0 +1,1523 @@ + + + + + + + + 2024-06-07T15:12:01.584406 + image/svg+xml + + + Matplotlib v3.8.3, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_files/OffsetConverter_relations_2.svg b/docs/_files/OffsetConverter_relations_2.svg new file mode 100644 index 000000000..f09208b9a --- /dev/null +++ b/docs/_files/OffsetConverter_relations_2.svg @@ -0,0 +1,1593 @@ + + + + + + + + 2024-06-07T15:12:01.844394 + image/svg+xml + + + Matplotlib v3.8.3, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/changelog.rst b/docs/changelog.rst index 75660133e..05eaa230c 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -9,6 +9,8 @@ These are new features and improvements of note in each release :backlinks: top +.. include:: whatsnew/v0-6-0.rst +.. include:: whatsnew/v0-5-4.rst .. include:: whatsnew/v0-5-3.rst .. include:: whatsnew/v0-5-2.rst .. include:: whatsnew/v0-5-1.rst diff --git a/docs/conf.py b/docs/conf.py index bee986ce9..d81c66685 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -6,6 +6,9 @@ import matplotlib from sphinx.ext.autodoc import between +from oemof.solph import __version__ + + matplotlib.use("agg") sys.path.append(os.path.join(os.path.dirname(__file__), "..", "examples")) @@ -36,7 +39,7 @@ def setup(app): year = "2014-2023" author = "oemof-developer-group" copyright = "{0}, {1}".format(year, author) -version = release = "0.5.3a1" +version = release = __version__ pygments_style = "trac" templates_path = ["."] diff --git a/docs/examples/cellular.rst b/docs/examples/cellular.rst deleted file mode 100644 index 27ae45942..000000000 --- a/docs/examples/cellular.rst +++ /dev/null @@ -1,7 +0,0 @@ -Cellular energy system ----------------------- - -Building your system from smaller cells -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: cellular.cellular diff --git a/docs/examples/index.rst b/docs/examples/index.rst index d5c4c6813..6ff1fdfa3 100644 --- a/docs/examples/index.rst +++ b/docs/examples/index.rst @@ -11,7 +11,6 @@ Examples time_index.rst nametuple.rst simple_dispatch.rst - cellular.rst activity_costs.rst min_max_runtimes.rst startup_costs.rst diff --git a/docs/usage.rst b/docs/usage.rst index e69ea7882..58247d9d9 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -75,7 +75,7 @@ Both code blocks will create an hourly datetime index for 2011: .. code-block:: python import pandas as pd - my_index = pd.date_range('1/1/2011', periods=8761, freq='H') + my_index = pd.date_range('1/1/2011', periods=8761, freq='h') This index can be used to define the EnergySystem: @@ -682,70 +682,139 @@ The `Link` allows to model connections between two busses, e.g. modeling the tra OffsetConverter (component) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The `OffsetConverter` object makes it possible to create a Converter with different efficiencies in part load condition. -For this object it is necessary to define the inflow as a nonconvex flow and to set a minimum load. -The following example illustrates how to define an OffsetConverter for given information for the output: +The `OffsetConverter` object makes it possible to create a Converter with efficiencies depending on the part load condition. +For this it is necessary to define one flow as a nonconvex flow and to set a minimum load. +The following example illustrates how to define an OffsetConverter for given +information for an output, i.e. a combined heat and power plant. The plant +generates up to 100 kW electric energy at an efficiency of 40 %. In minimal +load the electric efficiency is at 30 %, and the minimum possible load is 50 % +of the nominal load. At the same time, heat is produced with a constant +efficiency. By using the `OffsetConverter` a linear relation of in- and output +power with a power dependent efficiency is generated. .. code-block:: python - eta_min = 0.5 # efficiency at minimal operation point - eta_max = 0.8 # efficiency at nominal operation point - P_out_min = 20 # absolute minimal output power - P_out_max = 100 # absolute nominal output power + >>> from oemof import solph - # calculate limits of input power flow - P_in_min = P_out_min / eta_min - P_in_max = P_out_max / eta_max + >>> eta_el_min = 0.3 # electrical efficiency at minimal operation point + >>> eta_el_max = 0.4 # electrical efficiency at nominal operation point + >>> eta_th_min = 0.5 # thermal efficiency at minimal operation point + >>> eta_th_max = 0.5 # thermal efficiency at nominal operation point + >>> P_out_min = 20 # absolute minimal output power + >>> P_out_max = 100 # absolute nominal output power - # calculate coefficients of input-output line equation - c1 = (P_out_max-P_out_min)/(P_in_max-P_in_min) - c0 = P_out_max - c1*P_in_max +As reference for our system we use the input and will mark that flow as +nonconvex respectively. The efficiencies for electricity and heat output have +therefore to be defined with respect to the input flow. The same is true for +the minimal and maximal load. Therefore, we first calculate the minimum and +maximum input of fuel and then derive the slope and offset for both outputs. + +.. code-block:: python + + >>> P_in_max = P_out_max / eta_el_max + >>> P_in_min = P_out_min / eta_el_min + >>> P_in_max + 250.0 + >>> round(P_in_min, 2) + 66.67 + +With that information, we can derive the normed minimal and maximal load of the +nonconvex flow, and calculate the slope and the offset for both outputs. Note, +that the offset for the heat output is 0, because the thermal heat output +efficiency is constant. + +.. code-block:: python + + >>> l_max = 1 + >>> l_min = P_in_min / P_in_max + >>> slope_el, offset_el = solph.components.slope_offset_from_nonconvex_input( + ... l_max, l_min, eta_el_max, eta_el_min + ... ) + >>> slope_th, offset_th = solph.components.slope_offset_from_nonconvex_input( + ... l_max, l_min, eta_th_max, eta_th_min + ... ) + >>> round(slope_el, 3) + 0.436 + >>> round(offset_el, 3) + -0.036 + >>> round(slope_th, 3) + 0.5 + >>> round(offset_th, 3) + 0.0 + +Then we can create our component with the buses attached to it. + +.. code-block:: python + + >>> bfuel = solph.Bus("fuel") + >>> bel = solph.Bus("electricity") + >>> bth = solph.Bus("heat") # define OffsetConverter - solph.components.OffsetConverter( - label='boiler', - inputs={bfuel: solph.flows.Flow( - nominal_value=P_in_max, - max=1, - min=P_in_min/P_in_max, - nonconvex=solph.NonConvex())}, - outputs={bth: solph.flows.Flow()}, - coefficients = [c0, c1]) - -This example represents a boiler, which is supplied by fuel and generates heat. -It is assumed that the nominal thermal power of the boiler (output power) is 100 (kW) and the efficiency at nominal power is 80 %. -The boiler cannot operate under 20 % of nominal power, in this case 20 (kW) and the efficiency at that part load is 50 %. -Note that the nonconvex flow has to be defined for the input flow. -By using the OffsetConverter a linear relation of in- and output power with a power dependent efficiency is generated. -The following figures illustrate the relations: - -.. image:: _files/OffsetConverter_power_relation.svg - :width: 70 % - :alt: OffsetConverter_power_relation.svg - :align: center + >>> diesel_genset = solph.components.OffsetConverter( + ... label='boiler', + ... inputs={ + ... bfuel: solph.flows.Flow( + ... nominal_value=P_out_max, + ... max=l_max, + ... min=l_min, + ... nonconvex=solph.NonConvex() + ... ) + ... }, + ... outputs={ + ... bel: solph.flows.Flow(), + ... bth: solph.flows.Flow(), + ... }, + ... conversion_factors={bel: slope_el, bth: slope_th}, + ... normed_offsets={bel: offset_el, bth: offset_th}, + ... ) -Now, it becomes clear, why this object has been named `OffsetConverter`. The -linear equation of in- and outflow does not hit the origin, but is offset. By multiplying -the Offset :math:`C_{0}` with the binary status variable of the nonconvex flow, the origin (0, 0) becomes -part of the solution space and the boiler is allowed to switch off: +.. note:: -.. include:: ../src/oemof/solph/components/_offset_converter.py - :start-after: _OffsetConverter-equations: - :end-before: """ + One of the inputs and outputs has to be a `NonConvex` flow and this flow + will serve as the reference for the `conversion_factors` and the + `normed_offsets`. The `NonConvex` flow also holds -The following figures shows the efficiency dependent on the output power, -which results in a nonlinear relation: + - the `nominal_value` (or `Investment` in case of investment optimization), + - the `min` and + - the `max` attributes. -.. math:: + The `conversion_factors` and `normed_offsets` are specified similar to the + `Converter` API with dictionaries referencing the respective input and + output buses. Note, that you cannot have the `conversion_factors` or + `normed_offsets` point to the `NonConvex` flow. - \eta = C_1 \cdot P_{out}(t) / (P_{out}(t) - C_0) +The following figures show the power at the electrical and the thermal output +and the resepctive ratios to the nonconvex flow (normalized). The efficiency +becomes non-linear. -.. image:: _files/OffsetConverter_efficiency.svg +.. image:: _files/OffsetConverter_relations_1.svg :width: 70 % - :alt: OffsetConverter_efficiency.svg + :alt: OffsetConverter_relations_1.svg :align: center -The parameters :math:`C_{0}` and :math:`C_{1}` can be given by scalars or by series in order to define a different efficiency equation for every timestep. + +.. image:: _files/OffsetConverter_relations_2.svg + :width: 70 % + :alt: OffsetConverter_relations_2.svg + :align: center + +.. math:: + + \eta = P(t) / P_\text{ref}(t) + +It also becomes clear, why the component has been named `OffsetConverter`. The +linear equation of inflow to electrical outflow does not hit the origin, but is +offset. By multiplying the offset :math:`y_\text{0,normed}` with the binary +status variable of the `NonConvex` flow, the origin (0, 0) becomes part of the +solution space and the boiler is allowed to switch off. + +.. include:: ../src/oemof/solph/components/_offset_converter.py + :start-after: _OffsetConverter-equations: + :end-before: """ + +The parameters :math:`y_\text{0,normed}` and :math:`m` can be given by scalars or by series in order to define a different efficiency equation for every timestep. +It is also possible to define multiple outputs. .. note:: See the :py:class:`~oemof.solph.components._offset_converter.OffsetConverter` class for all parameters and the mathematical background. @@ -813,7 +882,7 @@ This small example of PV, grid and SinkDSM shows how to use the component data = pd.DataFrame.from_dict(data_dict) # Do timestamp stuff - datetimeindex = pd.date_range(start='1/1/2013', periods=len(data.index), freq='H') + datetimeindex = pd.date_range(start='1/1/2013', periods=len(data.index), freq='h') data['timestamp'] = datetimeindex data.set_index('timestamp', inplace=True) @@ -1027,10 +1096,10 @@ First, you start by defining your energy system as you might have done before, b import pandas as pd import oemof.solph as solph - my_index = pd.date_range('1/1/2013', periods=17520, freq='H') + my_index = pd.date_range('1/1/2013', periods=17520, freq='h') periods = [ - pd.date_range('1/1/2013', periods=8760, freq='H'), - pd.date_range('1/1/2014', periods=8760, freq='H'), + pd.date_range('1/1/2013', periods=8760, freq='h'), + pd.date_range('1/1/2014', periods=8760, freq='h'), ] my_energysystem = solph.EnergySystem(timeindex=my_index, periods=periods) @@ -1081,7 +1150,7 @@ So if you want to use this, the above would simplify to: def determine_periods(datetimeindex): ... - my_index = pd.date_range('1/1/2013', periods=17520, freq='H') + my_index = pd.date_range('1/1/2013', periods=17520, freq='h') periods = determine_periods(my_index) # Make use of method my_energysystem = solph.EnergySystem(timeindex=my_index, periods=periods) @@ -1279,130 +1348,6 @@ Besides the `invest` variable, new variables are introduced as well. These are: monthly periods, but you would need to be very careful in parameterizing your energy system and your model and also, this would mean monthly discounting (if applicable) as well as specifying your plants lifetimes in months. -Modelling cellular energy systems and modularizing energy system models ------------------------------------------------------------------------ - -The cellular approach is a concept proposed by the [VDE-ETG](https://shop.vde.com/en/vde-study-the-cellular-approach). It is -related to smart-grids and multi-microgrid systems but extends both. The idea is to group the components of an energy system -into a hierarchically aggregating structure of cells. For example, the sources, sinks, storages and converters of a household -could be a single cell. Then a group of physically neighboring households could form another cell, consisting of household-cells. -This behaviour can be scaled up. The real game-changer in the cellular approach is the way the cells are operated, which will -not be covered here. Here, we focus on the way such cellular energy systems can be modeled. - -So far, the implementation in solph is just a neat way to group different parts of a larger energy system into cells. However, -the implementation can also be regarded as a precursor for further functionality. Decomposition techniques such -as [Benders](https://en.wikipedia.org/wiki/Benders_decomposition) or -[Dantzig-Wolfe](https://en.wikipedia.org/wiki/Dantzig%E2%80%93Wolfe_decomposition) could be implemented in solph. These methods -are dependent on a special constraint matrix structure, which the cellular modelling approach presented here is helping to obtain. - -Modelling procedure -^^^^^^^^^^^^^^^^^^^ - -Similar to the creation of regular energy systems, the creation of energy cells is the first step in model creation. Essentially, -each energy cell is just an energy system, therefore we use the class :py:class:`oemof.solph.EnergySystem` to create energy cells. - -.. code-block:: python - - from oemof.solph import EnergySystem - - es = EnergySystem( - label="es", timeindex=timeindex, infer_last_interval=False - ) - ec_1 = EnergySystem( - label="ec_1", timeindex=timeindex, infer_last_interval=False - ) - ec_2 = EnergySystem( - label="ec_2", timeindex=timeindex, inver_last_interval=False - ) - -Now we can go on and add components to the energy cells just like we do with regular energy systems. - -.. code-block:: python - - from oemof import solph - - bus_el_es = solph.buses.Bus(label="bus_el_es") - es.add(bus_el_es) - - bus_el_ec_1 = solph.buses.Bus(label="bus_el_ec_1") - sink_el_ec_1 = solph.components.Sink( - label="sink_el_ec_1", - inputs={bus_el_ec_1: flows.Flow(fix=10, nominal_value=1)}, - ) - source_el_ec_1 = solph.components.Source( - label="source_el_ec_1", - outputs={ - bus_el_ec_1: flows.Flow( - max=30, nominal_value=1, variable_costs=10, - ), - }, - ) - ec_1.add(bus_el_ec_1, sink_el_ec_1, source_el_ec_1) - -.. note:: This is just an exemplary piece of code. A (little bit more interesting) working - example can be found in the examples. - -The next step would be to model the connections between cells. Here, we resort to the class -:py:class:`oemof.solph.components.Link`. Each connection Link has two inputs (from the -"parent cell" and the "child cell") and two outputs (to the "parent cell" and the "child -cell"). A connection between the "parent cell" `es` and the "child cell" `ec_1` could look -like this: - -.. code-block:: python - - connector_el_ec_1 = solph.buses.Bus( - label="connector_el_ec_1", - inputs={ - bus_el_es: flows.Flow(), - bus_el_ec_1: flows.Flow(), - }, - outputs={ - bus_el_es: flows.Flow(), - bus_el_ec_1: flows.Flow(), - }, - conversion_factors={ - (bus_el_es, bus_el_ec_1): 0.85, - (bus_el_ec_1, bus_el_es): 0.85 - } - ) - es.add(connector_el_ec_1) - -The `conversion_factors` can be used to model transmission losses. Here, a symmetrical -loss of 15% is assumed. -All connection Links are added to the upmost energy cell. - -.. note:: Note that we do not add the energy cells as components to their parent cells! - Instead, the hierarchical structure is flattened and all connections between the cells - are created as depicted above. - -The last step is to create (and solve) the model. Again, this is fairly similar to the -regular model creation. However, instead of passing just one instance of -:py:class:`oemof.solph.EnergySystem`, a list of energy systems is passed. - -.. warning:: - By convention the first element of the list is assumed to be the upmost energy cell. - The ordering afterwards does not play a role. - -.. note:: The resulting model is monolithic. This means that all components of all energy - cells are actually grouped into one pyomo model. It would, therefore, also be possible - to model all the components in one :py:class:`oemof.solph.EnergySystem` instance and - the results would be identical. - -.. code-block:: python - - cmodel = Model( - energysystem=[es, ec_1, ec_2, ...] - ) - cmodel.solve() - -As pointed out above, the resulting model is monolithic. Nonetheless, this modelling approach -holds some benefits: - -* Better overview through segmentation of the energy system -* (Facilitated) opportunity to model cellular energy systems where the energy exchanged between cells - is of interest -* Segmentation of the energy system is a necessary precursor for distributed optimization via Dantzig-Wolfe - Mixed Integer (Linear) Problems ------------------------------- diff --git a/docs/whatsnew/v0-5-3.rst b/docs/whatsnew/v0-5-3.rst index 440d87ac5..c4dcb591f 100644 --- a/docs/whatsnew/v0-5-3.rst +++ b/docs/whatsnew/v0-5-3.rst @@ -1,23 +1,49 @@ -v0.5.3 ------- +v0.5.3 (June 25th, 2024) +------------------------ API changes ########### +* The `OffsetConverter` expects two dictionaries now instead of the + `coefficient` tuple. These are, `conversion_factors` with the slope relative + to the `NonConvex` flow, and `normed_offsets` with the normed offsets + relative to the `NonConvex` flow. +* The `NonConvex` attribute must be specified for one of `Flow` at the inlets + or outlets of the `OffsetConverter`. `min`, `max` and `nominal_value` have to + be specified for the same `Flow`. + New features ############ -Documentation -############# +* `OffsetConverter` can now handle multiple inputs and outputs +* There are two methods available for the `OffsetConverter` to calculate the + slope and normed offset relative to the `NonConvex` input given the `min`, + `max` and the respective efficiencies/ratios, i.e. + `slope_offset_from_nonconvex_input` and `slope_offset_from_nonconvex_output`. Bug fixes ######### +* Fix custom attributes of Sink, Source, GenericCHP and Converter components + not being properly passed to base Node class + Other changes ############# +* Unified (usage) documentation for `OffsetConverter` +* Remove approach to model cellular systems (was more confusing than it helped) +* Refine indexing of flows (period index was not needed). + Known issues ############ +* Incompatible to numpy >= 2.0.0. This is because of Pyomo, but we have to + enforce a lower version in our package. + Contributors ############ + +* Lennart Schürmann +* Richard Keil +* Francesco Witte +* Patrik Schönfeldt diff --git a/docs/whatsnew/v0-5-4.rst b/docs/whatsnew/v0-5-4.rst new file mode 100644 index 000000000..edc02ba08 --- /dev/null +++ b/docs/whatsnew/v0-5-4.rst @@ -0,0 +1,32 @@ +v0.5.4 (August 19th, 2024) +-------------------------- + +New features +############ + +* Explicitly allow to have multiple inputs or outputs for Sinks and Sources, + respectively. +* Allow to set lower limits for generic_integral_limit constraint. + + +Documentation +############# + +* Improve documentation of full load time. + +Other changes +############# + +* Refined internal sequence generation. (For e.g. constraint formulations, + Scalars are internally mapped to fake sequences without a defined length.) + +Known issues +############ + +* Incompatible to numpy >= 2.0.0. This is because of Pyomo, but we have to + enforce a lower version in our package. + +Contributors +############ + +* Patrik Schönfeldt diff --git a/docs/whatsnew/v0-6-0.rst b/docs/whatsnew/v0-6-0.rst new file mode 100644 index 000000000..339fae4d9 --- /dev/null +++ b/docs/whatsnew/v0-6-0.rst @@ -0,0 +1,38 @@ +v0.6.0 +------ + +API changes +########### + +* Costs for energy storage are now defined for N-1 points in time + (initial time step is neglected). This is because with a balanced + storage, content of the initial and the first time step (which is + effectively the same) had double weight before. Also, if the + initial storage level is defined, the costs just offset the + objective value without changing anything else. + +New features +############ + + +Documentation +############# + +Bug fixes +######### + + +Other changes +############# + + +Known issues +############ + +* Incompatible to numpy >= 2.0.0. This is because of Pyomo, but we have to + enforce a lower version in our package. + +Contributors +############ + +* Patrik Schönfeldt diff --git a/examples/activity_costs/activity_costs.py b/examples/activity_costs/activity_costs.py index 950304d21..9f129c015 100644 --- a/examples/activity_costs/activity_costs.py +++ b/examples/activity_costs/activity_costs.py @@ -52,7 +52,7 @@ def main(): # Calculate parameters and initialize the energy system and ########################################################################## periods = 24 - time = pd.date_range("1/1/2018", periods=periods, freq="H") + time = pd.date_range("1/1/2018", periods=periods, freq="h") demand_heat = np.full(periods, 5) demand_heat[:4] = 0 diff --git a/examples/basic_example/basic_example.py b/examples/basic_example/basic_example.py index d8e6d7b12..b188b4ca8 100644 --- a/examples/basic_example/basic_example.py +++ b/examples/basic_example/basic_example.py @@ -61,7 +61,6 @@ import logging import os import pprint as pp -import warnings from datetime import datetime import matplotlib.pyplot as plt @@ -71,28 +70,48 @@ from oemof.solph import EnergySystem from oemof.solph import Model from oemof.solph import buses -from oemof.solph import components as cmp +from oemof.solph import components from oemof.solph import create_time_index from oemof.solph import flows from oemof.solph import helpers from oemof.solph import processing from oemof.solph import views +STORAGE_LABEL = "battery_storage" + + +def get_data_from_file_path(file_path: str) -> pd.DataFrame: + dir = os.path.dirname(os.path.abspath(__file__)) + data = pd.read_csv(dir + "/" + file_path) + return data + + +def plot_figures_for(element: dict) -> None: + figure, axes = plt.subplots(figsize=(10, 5)) + element["sequences"].plot(ax=axes, kind="line", drawstyle="steps-post") + plt.legend( + loc="upper center", + prop={"size": 8}, + bbox_to_anchor=(0.5, 1.25), + ncol=2, + ) + figure.subplots_adjust(top=0.8) + plt.show() + + +def main(dump_and_restore=False): + # For models that need a long time to optimise, saving and loading the + # EnergySystem might be advised. By default, we do not do this here. Feel + # free to experiment with this once you understood the rest of the code. + dump_results = restore_results = dump_and_restore -def main(): # ************************************************************************* # ********** PART 1 - Define and optimise the energy system *************** # ************************************************************************* # Read data file - - filename = os.path.join(os.getcwd(), "basic_example.csv") - try: - data = pd.read_csv(filename) - except FileNotFoundError: - msg = "Data file not found: {0}. Values for one timestep created!" - warnings.warn(msg.format(filename), UserWarning) - data = pd.DataFrame({"pv": [0.3], "wind": [0.6], "demand_el": [500]}) + file_name = "basic_example.csv" + data = get_data_from_file_path(file_name) solver = "cbc" # 'glpk', 'gurobi',.... debug = False # Set number_of_timesteps to 3 to get a readable lp-file. @@ -124,67 +143,93 @@ def main(): # connect components to these buses (see below). # create natural gas bus - bgas = buses.Bus(label="natural_gas") + bus_gas = buses.Bus(label="natural_gas") # create electricity bus - bel = buses.Bus(label="electricity") + bus_electricity = buses.Bus(label="electricity") # adding the buses to the energy system - energysystem.add(bgas, bel) + energysystem.add(bus_gas, bus_electricity) # create excess component for the electricity bus to allow overproduction - energysystem.add(cmp.Sink(label="excess_bel", inputs={bel: flows.Flow()})) + energysystem.add( + components.Sink( + label="excess_bus_electricity", + inputs={bus_electricity: flows.Flow()}, + ) + ) # create source object representing the gas commodity energysystem.add( - cmp.Source( + components.Source( label="rgas", - outputs={bgas: flows.Flow()}, + outputs={bus_gas: flows.Flow()}, ) ) # create fixed source object representing wind power plants energysystem.add( - cmp.Source( + components.Source( label="wind", - outputs={bel: flows.Flow(fix=data["wind"], nominal_value=1000000)}, + outputs={ + bus_electricity: flows.Flow( + fix=data["wind"], nominal_value=1000000 + ) + }, ) ) # create fixed source object representing pv power plants energysystem.add( - cmp.Source( + components.Source( label="pv", - outputs={bel: flows.Flow(fix=data["pv"], nominal_value=582000)}, + outputs={ + bus_electricity: flows.Flow( + fix=data["pv"], nominal_value=582000 + ) + }, ) ) # create simple sink object representing the electrical demand # nominal_value is set to 1 because demand_el is not a normalised series energysystem.add( - cmp.Sink( + components.Sink( label="demand", - inputs={bel: flows.Flow(fix=data["demand_el"], nominal_value=1)}, + inputs={ + bus_electricity: flows.Flow( + fix=data["demand_el"], nominal_value=1 + ) + }, ) ) # create simple converter object representing a gas power plant energysystem.add( - cmp.Converter( + components.Converter( label="pp_gas", - inputs={bgas: flows.Flow()}, - outputs={bel: flows.Flow(nominal_value=10e10, variable_costs=50)}, - conversion_factors={bel: 0.58}, + inputs={bus_gas: flows.Flow()}, + outputs={ + bus_electricity: flows.Flow( + nominal_value=10e10, variable_costs=50 + ) + }, + conversion_factors={bus_electricity: 0.58}, ) ) # create storage object representing a battery - storage = cmp.GenericStorage( - nominal_storage_capacity=10077997, - label="storage", - inputs={bel: flows.Flow(nominal_value=10077997 / 6)}, + nominal_capacity = 10077997 + nominal_value = nominal_capacity / 6 + + battery_storage = components.GenericStorage( + nominal_storage_capacity=nominal_capacity, + label=STORAGE_LABEL, + inputs={bus_electricity: flows.Flow(nominal_value=nominal_value)}, outputs={ - bel: flows.Flow(nominal_value=10077997 / 6, variable_costs=0.001) + bus_electricity: flows.Flow( + nominal_value=nominal_value, variable_costs=0.001 + ) }, loss_rate=0.00, initial_storage_level=None, @@ -192,7 +237,7 @@ def main(): outflow_conversion_factor=0.8, ) - energysystem.add(storage) + energysystem.add(battery_storage) ########################################################################## # Optimise the energy system and plot the results @@ -201,22 +246,25 @@ def main(): logging.info("Optimise the energy system") # initialise the operational model - model = Model(energysystem) + energysystem_model = Model(energysystem) # This is for debugging only. It is not(!) necessary to solve the problem # and should be set to False to save time and disc space in normal use. For # debugging the timesteps should be set to 3, to increase the readability # of the lp-file. if debug: - filename = os.path.join( + file_path = os.path.join( helpers.extend_basic_path("lp_files"), "basic_example.lp" ) - logging.info("Store lp-file in {0}.".format(filename)) - model.write(filename, io_options={"symbolic_solver_labels": True}) + logging.info(f"Store lp-file in {file_path}.") + io_option = {"symbolic_solver_labels": True} + energysystem_model.write(file_path, io_options=io_option) # if tee_switch is true solver messages will be displayed logging.info("Solve the optimization problem") - model.solve(solver=solver, solve_kwargs={"tee": solver_verbose}) + energysystem_model.solve( + solver=solver, solve_kwargs={"tee": solver_verbose} + ) logging.info("Store the energy system with the results.") @@ -224,74 +272,54 @@ def main(): # from the model transfer them into a homogeneous structured dictionary. # add results to the energy system to make it possible to store them. - energysystem.results["main"] = processing.results(model) - energysystem.results["meta"] = processing.meta_results(model) + energysystem.results["main"] = processing.results(energysystem_model) + energysystem.results["meta"] = processing.meta_results(energysystem_model) # The default path is the '.oemof' folder in your $HOME directory. # The default filename is 'es_dump.oemof'. # You can omit the attributes (as None is the default value) for testing # cases. You should use unique names/folders for valuable results to avoid # overwriting. - - # store energy system with results - energysystem.dump(dpath=None, filename=None) + if dump_results: + energysystem.dump(dpath=None, filename=None) # ************************************************************************* # ********** PART 2 - Processing the results ****************************** # ************************************************************************* - logging.info("**** The script can be divided into two parts here.") - logging.info("Restore the energy system and the results.") - energysystem = EnergySystem() - energysystem.restore(dpath=None, filename=None) + # Saved data can be restored in a second script. So you can work on the + # data analysis without re-running the optimisation every time. If you do + # so, make sure that you really load the results you want. For example, + # if dumping fails, you might exidentially load outdated results. + if restore_results: + logging.info("**** The script can be divided into two parts here.") + logging.info("Restore the energy system and the results.") + + energysystem = EnergySystem() + energysystem.restore(dpath=None, filename=None) # define an alias for shorter calls below (optional) results = energysystem.results["main"] - storage = energysystem.groups["storage"] + storage = energysystem.groups[STORAGE_LABEL] # print a time slice of the state of charge - print("") - print("********* State of Charge (slice) *********") - print( - results[(storage, None)]["sequences"][ - datetime(2012, 2, 25, 8, 0, 0) : datetime(2012, 2, 25, 17, 0, 0) - ] - ) - print("") + start_time = datetime(2012, 2, 25, 8, 0, 0) + end_time = datetime(2012, 2, 25, 17, 0, 0) + + print("\n********* State of Charge (slice) *********") + print(f"{results[(storage, None)]['sequences'][start_time : end_time]}\n") # get all variables of a specific component/bus - custom_storage = views.node(results, "storage") + custom_storage = views.node(results, STORAGE_LABEL) electricity_bus = views.node(results, "electricity") # plot the time series (sequences) of a specific component/bus - - fig, ax = plt.subplots(figsize=(10, 5)) - custom_storage["sequences"].plot( - ax=ax, kind="line", drawstyle="steps-post" - ) - plt.legend( - loc="upper center", - prop={"size": 8}, - bbox_to_anchor=(0.5, 1.25), - ncol=2, - ) - fig.subplots_adjust(top=0.8) - plt.show() - - fig, ax = plt.subplots(figsize=(10, 5)) - electricity_bus["sequences"].plot( - ax=ax, kind="line", drawstyle="steps-post" - ) - plt.legend( - loc="upper center", prop={"size": 8}, bbox_to_anchor=(0.5, 1.3), ncol=2 - ) - fig.subplots_adjust(top=0.8) - plt.show() + plot_figures_for(custom_storage) + plot_figures_for(electricity_bus) # print the solver results print("********* Meta results *********") - pp.pprint(energysystem.results["meta"]) - print("") + pp.pprint(f"{energysystem.results['meta']}\n") # print the sums of the flows around the electricity bus print("********* Main results *********") diff --git a/examples/cellular/cellular.py b/examples/cellular/cellular.py deleted file mode 100644 index e82df3b2d..000000000 --- a/examples/cellular/cellular.py +++ /dev/null @@ -1,332 +0,0 @@ -""" -General description -------------------- - -Cellular energy systems are proposed by the VDE-ETG. They are, as the name -implies, energy systems that consist of cells. Each cell can contain -multiple other cells. So there is a hierarchy between them. - -However, the hierarchical levels are abstracted here and the structure is flat. - -The connections between the cells are modelled as Links. Each connector Link -has two inputs (buses of the parent and child cell) and two outputs (buses of -the parent and child cell). Losses can be modelled by using the -`conversion_factors` of the Link class. - -Code ----- -Download source code: :download:`cellular.py ` - -.. dropdown:: Click to display code - - .. literalinclude:: /../examples/cellular/cellular.py - :language: python - :lines: 45- - -Installation requirements -------------------------- - -This example requires at least oemof.solph (v0.5.1), install by: - -.. code:: bash - - pip install oemof.solph[examples] - -Licence -------- - -Lennart Schürmann - -`MIT license `_ - -""" - - -from oemof.solph import EnergySystem -from oemof.solph import Model -from oemof.solph import buses -from oemof.solph import components as cmp -from oemof.solph import create_time_index -from oemof.solph import flows -from oemof.solph import processing -from oemof.solph import views - - -def main(): - ########################################################################### - # define the cells of the cellular energy system - ########################################################################### - # define necessary parameters - - n_periods = 3 - - daterange = create_time_index(year=2020, interval=1, number=n_periods) - - mysolver = "cbc" - - # create the energy cells - es = EnergySystem(timeindex=daterange, infer_last_interval=False) - ec_1 = EnergySystem(timeindex=daterange, infer_last_interval=False) - ec_2 = EnergySystem(timeindex=daterange, infer_last_interval=False) - ec_1_1 = EnergySystem(timeindex=daterange, infer_last_interval=False) - ec_1_2 = EnergySystem(timeindex=daterange, infer_last_interval=False) - ec_2_1 = EnergySystem(timeindex=daterange, infer_last_interval=False) - ec_2_2 = EnergySystem(timeindex=daterange, infer_last_interval=False) - - demand_1 = [10] * n_periods - demand_2 = [10] * n_periods - demand_1_1 = [10] * n_periods - demand_1_2 = [10] * n_periods - demand_2_1 = [10] * n_periods - demand_2_2 = [80] * n_periods - - pv_1 = [10] * n_periods - pv_2 = [10] * n_periods - pv_1_1 = [80] * n_periods - pv_1_2 = [40] * n_periods - pv_2_1 = [10] * n_periods - pv_2_2 = [10] * n_periods - - bus_el_es = buses.Bus(label="bus_el_es") - bus_el_ec_1 = buses.Bus(label="bus_el_ec_1") - bus_el_ec_2 = buses.Bus(label="bus_el_ec_2") - bus_el_ec_1_1 = buses.Bus(label="bus_el_ec_1_1") - bus_el_ec_1_2 = buses.Bus(label="bus_el_ec_1_2") - bus_el_ec_2_1 = buses.Bus(label="bus_el_ec_2_1") - bus_el_ec_2_2 = buses.Bus(label="bus_el_ec_2_2") - - es.add(bus_el_es) - ec_1.add(bus_el_ec_1) - ec_2.add(bus_el_ec_2) - ec_1_1.add(bus_el_ec_1_1) - ec_1_2.add(bus_el_ec_1_2) - ec_2_1.add(bus_el_ec_2_1) - ec_2_2.add(bus_el_ec_2_2) - - sink_el_ec_1 = cmp.Sink( - label="sink_el_ec_1", - inputs={bus_el_ec_1: flows.Flow(fix=demand_1, nominal_value=1)}, - ) - sink_el_ec_2 = cmp.Sink( - label="sink_el_ec_2", - inputs={bus_el_ec_2: flows.Flow(fix=demand_2, nominal_value=1)}, - ) - sink_el_ec_1_1 = cmp.Sink( - label="sink_el_ec_1_1", - inputs={bus_el_ec_1_1: flows.Flow(fix=demand_1_1, nominal_value=1)}, - ) - sink_el_ec_1_2 = cmp.Sink( - label="sink_el_ec_1_2", - inputs={bus_el_ec_1_2: flows.Flow(fix=demand_1_2, nominal_value=1)}, - ) - sink_el_ec_2_1 = cmp.Sink( - label="sink_el_ec_2_1", - inputs={bus_el_ec_2_1: flows.Flow(fix=demand_2_1, nominal_value=1)}, - ) - sink_el_ec_2_2 = cmp.Sink( - label="sink_el_ec_2_2", - inputs={bus_el_ec_2_2: flows.Flow(fix=demand_2_2, nominal_value=1)}, - ) - - ec_1.add(sink_el_ec_1) - ec_2.add(sink_el_ec_2) - ec_1_1.add(sink_el_ec_1_1) - ec_1_2.add(sink_el_ec_1_2) - ec_2_1.add(sink_el_ec_2_1) - ec_2_2.add(sink_el_ec_2_2) - - source_el_ec_1 = cmp.Source( - label="source_el_ec_1", - outputs={ - bus_el_ec_1: flows.Flow( - max=pv_1, nominal_value=1, variable_costs=5 - ) - }, - ) - source_el_ec_2 = cmp.Source( - label="source_el_ec_2", - outputs={ - bus_el_ec_2: flows.Flow( - max=pv_2, nominal_value=1, variable_costs=5 - ) - }, - ) - source_el_ec_1_1 = cmp.Source( - label="source_el_ec_1_1", - outputs={ - bus_el_ec_1_1: flows.Flow( - max=pv_1_1, nominal_value=1, variable_costs=10 - ) - }, - ) - source_el_ec_1_2 = cmp.Source( - label="source_el_ec_1_2", - outputs={ - bus_el_ec_1_2: flows.Flow( - max=pv_1_2, nominal_value=1, variable_costs=1 - ) - }, - ) - source_el_ec_2_1 = cmp.Source( - label="source_el_ec_2_1", - outputs={ - bus_el_ec_2_1: flows.Flow( - max=pv_2_1, nominal_value=1, variable_costs=5 - ) - }, - ) - source_el_ec_2_2 = cmp.Source( - label="source_el_ec_2_2", - outputs={ - bus_el_ec_2_2: flows.Flow( - max=pv_2_2, nominal_value=1, variable_costs=5 - ) - }, - ) - - ec_1.add(source_el_ec_1) - ec_2.add(source_el_ec_2) - ec_1_1.add(source_el_ec_1_1) - ec_1_2.add(source_el_ec_1_2) - ec_2_1.add(source_el_ec_2_1) - ec_2_2.add(source_el_ec_2_2) - - connector_el_ec_1 = cmp.Link( - label="connector_el_ec_1", - inputs={ - bus_el_es: flows.Flow(), - bus_el_ec_1: flows.Flow(), - }, - outputs={ - bus_el_es: flows.Flow(), - bus_el_ec_1: flows.Flow(), - }, - conversion_factors={ - (bus_el_es, bus_el_ec_1): 1, - (bus_el_ec_1, bus_el_es): 1, - }, - ) - - connector_el_ec_2 = cmp.Link( - label="connector_el_ec_2", - inputs={ - bus_el_es: flows.Flow(), - bus_el_ec_2: flows.Flow(), - }, - outputs={ - bus_el_es: flows.Flow(), - bus_el_ec_2: flows.Flow(), - }, - conversion_factors={ - (bus_el_es, bus_el_ec_2): 1, - (bus_el_ec_2, bus_el_es): 1, - }, - ) - - connector_el_ec_1_1 = cmp.Link( - label="connector_el_ec_1_1", - inputs={ - bus_el_ec_1: flows.Flow(), - bus_el_ec_1_1: flows.Flow(), - }, - outputs={ - bus_el_ec_1: flows.Flow(), - bus_el_ec_1_1: flows.Flow(), - }, - conversion_factors={ - (bus_el_ec_1, bus_el_ec_1_1): 0.85, - (bus_el_ec_1_1, bus_el_ec_1): 0.85, - }, - ) - - connector_el_ec_1_2 = cmp.Link( - label="connector_el_ec_1_2", - inputs={ - bus_el_ec_1: flows.Flow(), - bus_el_ec_1_2: flows.Flow(), - }, - outputs={ - bus_el_ec_1: flows.Flow(), - bus_el_ec_1_2: flows.Flow(), - }, - conversion_factors={ - (bus_el_ec_1, bus_el_ec_1_2): 1, - (bus_el_ec_1_2, bus_el_ec_1): 1, - }, - ) - - connector_el_ec_2_1 = cmp.Link( - label="connector_el_ec_2_1", - inputs={ - bus_el_ec_2: flows.Flow(), - bus_el_ec_2_1: flows.Flow(), - }, - outputs={ - bus_el_ec_2: flows.Flow(), - bus_el_ec_2_1: flows.Flow(), - }, - conversion_factors={ - (bus_el_ec_2, bus_el_ec_2_1): 1, - (bus_el_ec_2_1, bus_el_ec_2): 1, - }, - ) - - connector_el_ec_2_2 = cmp.Link( - label="connector_el_ec_2_2", - inputs={ - bus_el_ec_2: flows.Flow(), - bus_el_ec_2_2: flows.Flow(), - }, - outputs={ - bus_el_ec_2: flows.Flow(), - bus_el_ec_2_2: flows.Flow(), - }, - conversion_factors={ - (bus_el_ec_2, bus_el_ec_2_2): 1, - (bus_el_ec_2_2, bus_el_ec_2): 1, - }, - ) - - # the connectors are all part of the overarching, the upmost es - es.add( - connector_el_ec_1, - connector_el_ec_2, - connector_el_ec_1_1, - connector_el_ec_1_2, - connector_el_ec_2_1, - connector_el_ec_2_2, - ) - - cmodel = Model( - energysystem=[es, ec_1, ec_2, ec_1_1, ec_1_2, ec_2_1, ec_2_2] - ) - - cmodel.solve(solver=mysolver) - - # evaluate and plot the results - results = processing.results(cmodel) - - print(views.node(results, "bus_el_ec_1")["sequences"].iloc[0, :]) - msg = ( - "\nAs we can see, a flow of 70 kW is going from the bus_el_ec_1 " - "to the connector_el_ec_1. It is composed of 30 kW from " - "connector_el_ec_1_2 (and therefore ec_1_2) and 40 kW from " - "connector_el_ec_1_1 (and therefore ec_1_1). Where does it go?\n" - ) - print(msg) - print(views.node(results, "bus_el_ec_2_2")["sequences"].iloc[0, :]) - msg = ( - "\nIt is going into bus_el_ec_2_2 (and therefore ec_2_2), to " - "supply the demand.\n" - ) - print(msg) - - msg = ( - "Here we can see that the conversion factors are in fact considered:\n" - ) - print(msg) - print(views.node(results, "connector_el_ec_1_1")["sequences"].iloc[0, :]) - - -if __name__ == "__main__": - main() diff --git a/examples/dual_variable_example/dual_variable_example.py b/examples/dual_variable_example/dual_variable_example.py index 5a58240b1..4ccc1105a 100644 --- a/examples/dual_variable_example/dual_variable_example.py +++ b/examples/dual_variable_example/dual_variable_example.py @@ -60,7 +60,7 @@ def main(): logger.define_logging() date_time_index = pd.date_range( - "1/1/2012", periods=number_of_time_steps, freq="H" + "1/1/2012", periods=number_of_time_steps, freq="h" ) energysystem = EnergySystem( diff --git a/examples/electrical/transshipment.py b/examples/electrical/transshipment.py index 8f6349c72..d5e0e53ef 100644 --- a/examples/electrical/transshipment.py +++ b/examples/electrical/transshipment.py @@ -129,7 +129,7 @@ def draw_graph( def main(): - datetimeindex = pd.date_range("1/1/2017", periods=3, freq="H") + datetimeindex = pd.date_range("1/1/2017", periods=3, freq="h") es = EnergySystem(timeindex=datetimeindex, infer_last_interval=False) diff --git a/examples/emission_constraint/emission_constraint.py b/examples/emission_constraint/emission_constraint.py index 4945eaa28..73537ead4 100644 --- a/examples/emission_constraint/emission_constraint.py +++ b/examples/emission_constraint/emission_constraint.py @@ -39,7 +39,7 @@ def main(): # create energy system energysystem = solph.EnergySystem( - timeindex=pd.date_range("1/1/2012", periods=3, freq="H") + timeindex=pd.date_range("1/1/2012", periods=3, freq="h") ) # create gas bus diff --git a/examples/flexible_modelling/add_constraints.py b/examples/flexible_modelling/add_constraints.py index 824da815a..1f1efceab 100644 --- a/examples/flexible_modelling/add_constraints.py +++ b/examples/flexible_modelling/add_constraints.py @@ -56,7 +56,7 @@ def run_add_constraints_example(solver="cbc", nologg=False): # ##### creating an oemof solph optimization model, nothing special here ## # create an energy system object for the oemof solph nodes es = EnergySystem( - timeindex=pd.date_range("1/1/2017", periods=5, freq="H"), + timeindex=pd.date_range("1/1/2017", periods=5, freq="h"), infer_last_interval=False, ) # add some nodes @@ -123,26 +123,26 @@ def run_add_constraints_example(solver="cbc", nologg=False): # add the sub-model to the oemof Model instance om.add_component("MyBlock", myblock) - def _inflow_share_rule(m, s, e, p, t): + def _inflow_share_rule(m, s, e, t): """pyomo rule definition: Here we can use all objects from the block or the om object, in this case we don't need anything from the block except the newly defined set MYFLOWS. """ - expr = om.flow[s, e, p, t] >= om.flows[s, e].outflow_share[t] * sum( - om.flow[i, o, p, t] for (i, o) in om.FLOWS if o == e + expr = om.flow[s, e, t] >= om.flows[s, e].outflow_share[t] * sum( + om.flow[i, o, t] for (i, o) in om.FLOWS if o == e ) return expr myblock.inflow_share = po.Constraint( - myblock.MYFLOWS, om.TIMEINDEX, rule=_inflow_share_rule + myblock.MYFLOWS, om.TIMESTEPS, rule=_inflow_share_rule ) # add emission constraint myblock.emission_constr = po.Constraint( expr=( sum( - om.flow[i, o, p, t] + om.flow[i, o, t] for (i, o) in myblock.COMMODITYFLOWS - for p, t in om.TIMEINDEX + for t in om.TIMESTEPS ) <= emission_limit ) diff --git a/examples/flexible_modelling/saturating_storage.py b/examples/flexible_modelling/saturating_storage.py index 08efa43ab..46f9d7730 100644 --- a/examples/flexible_modelling/saturating_storage.py +++ b/examples/flexible_modelling/saturating_storage.py @@ -40,7 +40,7 @@ def saturating_storage_example(): # create an energy system - idx = pd.date_range("1/1/2023", periods=100, freq="H") + idx = pd.date_range("1/1/2023", periods=100, freq="h") es = solph.EnergySystem(timeindex=idx, infer_last_interval=False) # power bus diff --git a/examples/flow_count_limit/flow_count_limit.py b/examples/flow_count_limit/flow_count_limit.py index 0ba707e74..210d85052 100644 --- a/examples/flow_count_limit/flow_count_limit.py +++ b/examples/flow_count_limit/flow_count_limit.py @@ -50,7 +50,7 @@ def main(): energy_system = solph.EnergySystem( - timeindex=pd.date_range("1/1/2012", periods=4, freq="H") + timeindex=pd.date_range("1/1/2012", periods=4, freq="h") ) bel = solph.Bus(label="bel") diff --git a/examples/gradient_example/gradient_example.py b/examples/gradient_example/gradient_example.py index c1e153668..c1f7f58cb 100644 --- a/examples/gradient_example/gradient_example.py +++ b/examples/gradient_example/gradient_example.py @@ -50,7 +50,7 @@ def main(): # used. gradient = 0.01 - date_time_index = pd.date_range("1/1/2012", periods=48, freq="H") + date_time_index = pd.date_range("1/1/2012", periods=48, freq="h") print(date_time_index) energysystem = EnergySystem( timeindex=date_time_index, infer_last_interval=True diff --git a/examples/invest_nonconvex_flow_examples/diesel_genset_nonconvex_investment.py b/examples/invest_nonconvex_flow_examples/diesel_genset_nonconvex_investment.py index 8ecaa15af..9ea6dfa30 100644 --- a/examples/invest_nonconvex_flow_examples/diesel_genset_nonconvex_investment.py +++ b/examples/invest_nonconvex_flow_examples/diesel_genset_nonconvex_investment.py @@ -89,7 +89,7 @@ def main(): # Change the index of data to be able to select data based on the time # range. - data.index = pd.date_range(start="2022-01-01", periods=len(data), freq="H") + data.index = pd.date_range(start="2022-01-01", periods=len(data), freq="h") # Choose the range of the solar potential and demand # based on the selected simulation period. diff --git a/examples/offset_converter_example/offset_diesel_genset_nonconvex_investment.py b/examples/offset_converter_example/offset_diesel_genset_nonconvex_investment.py index 941517ec2..94ebe0825 100644 --- a/examples/offset_converter_example/offset_diesel_genset_nonconvex_investment.py +++ b/examples/offset_converter_example/offset_diesel_genset_nonconvex_investment.py @@ -18,7 +18,7 @@ - demand_el: ac electricity demand (given as a separate csv file) - excess_el: allows for some electricity overproduction - + Code ---- Download source code: :download:`offset_diesel_genset_nonconvex_investment.py ` @@ -44,11 +44,14 @@ __copyright__ = "oemof developer group" __license__ = "MIT" -import numpy as np import os -import pandas as pd import time -from datetime import datetime, timedelta +from datetime import datetime +from datetime import timedelta + +import numpy as np +import pandas as pd + from oemof import solph try: @@ -86,7 +89,7 @@ def offset_converter_example(): data = pd.read_csv(filepath_or_buffer=filename) # Change the index of data to be able to select data based on the time range. - data.index = pd.date_range(start="2022-01-01", periods=len(data), freq="H") + data.index = pd.date_range(start="2022-01-01", periods=len(data), freq="h") # Choose the range of the solar potential and demand # based on the selected simulation period. @@ -97,7 +100,7 @@ def offset_converter_example(): # Create the energy system. date_time_index = pd.date_range( - start=start_date, periods=n_days * 24, freq="H" + start=start_date, periods=n_days * 24, freq="h" ) energy_system = solph.EnergySystem(timeindex=date_time_index) @@ -154,11 +157,11 @@ def offset_converter_example(): max_efficiency = 0.33 # Calculate the two polynomial coefficients, i.e. the y-intersection and the - # slope of the linear equation. - c1 = (max_load / max_efficiency - min_load / min_efficiency) / ( - max_load - min_load + # slope of the linear equation. There is a conveniece function for that + # in solph: + slope, offset = solph.components.slope_offset_from_nonconvex_output( + max_load, min_load, max_efficiency, min_efficiency ) - c0 = min_load * (1 / min_efficiency - c1) epc_diesel_genset = 84.80 # currency/kW/year variable_cost_diesel_genset = 0.045 # currency/kWh @@ -177,7 +180,8 @@ def offset_converter_example(): nonconvex=solph.NonConvex(), ), }, - coefficients=(c0, c1), + conversion_factors={b_diesel: slope}, + normed_offsets={b_diesel: offset}, ) # The rectifier assumed to have a fixed efficiency of 98%. @@ -277,7 +281,7 @@ def offset_converter_example(): # The higher the MipGap or ratioGap, the faster the solver would converge, # but the less accurate the results would be. solver_option = {"gurobi": {"MipGap": "0.02"}, "cbc": {"ratioGap": "0.02"}} - solver = "cbc" + solver = "gurobi" model = solph.Model(energy_system) model.solve( diff --git a/examples/storage_balanced_unbalanced/storage.py b/examples/storage_balanced_unbalanced/storage.py index 396e96bb1..591274630 100644 --- a/examples/storage_balanced_unbalanced/storage.py +++ b/examples/storage_balanced_unbalanced/storage.py @@ -66,8 +66,8 @@ def storage_example(): ) # create an energy system - idx = pd.date_range("1/1/2017", periods=len(timeseries), freq="H") - es = solph.EnergySystem(timeindex=idx) + idx = pd.date_range("1/1/2017", periods=len(timeseries), freq="h") + es = solph.EnergySystem(timeindex=idx, infer_last_interval=True) for data_set in DATA: name = data_set["name"] diff --git a/examples/storage_costs/storage_costs.py b/examples/storage_costs/storage_costs.py index d82068860..312c5ab49 100644 --- a/examples/storage_costs/storage_costs.py +++ b/examples/storage_costs/storage_costs.py @@ -42,7 +42,7 @@ def storage_costs_example(): # create an energy system - idx = pd.date_range("1/1/2023", periods=13, freq="H") + idx = pd.date_range("1/1/2023", periods=13, freq="h") es = solph.EnergySystem(timeindex=idx, infer_last_interval=False) # power bus diff --git a/pyproject.toml b/pyproject.toml index 8d7102f4d..60f422d70 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,97 @@ +[build-system] +requires = ["flit_core >=3.2,<4"] +build-backend = "flit_core.buildapi" + +[tool.flit.sdist] +include = [ + "AUTHORS.rst", + "CITATION.cff", + "CODE_OF_CONDUCT.md", + "CONTRIBUTING.rst", + "LICENSE", + "README.rst", + "VERSION", + "tox.ini", + "ci/", + "docs/", + "examples/", + "src/", + "tests/", + ".bumpversion.cfg", + ".coveragerc", + ".editorconfig", + ".flake8", + ".pep8speaks.yml", + ".readthedocs.yaml", + ".scrutinizer.yml", +] +exclude = ["docs/_build"] + +[project] +name = "oemof.solph" +dynamic = ["version"] +description = "A model generator for energy system modelling and optimisation." +readme = "README.rst" +authors = [ + {name = "oemof developer group", email = "contact@oemof.org"}, +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: MIT License", + "Operating System :: Unix", + "Operating System :: POSIX", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Utilities", +] +requires-python = ">=3.8" +dependencies = [ + "blinker", + "dill", + "numpy < 2.0.0", + "pandas >= 2.0.0", + "pyomo >= 6.6.0, < 7.0", + "networkx", + "oemof.tools >= 0.4.3", + "oemof.network >= 0.5.0", +] +license = {text = "MIT"} + +[project.urls] +Homepage = "https://github.com/oemof/oemof-solph" +Documentation = "https://oemof-solph.readthedocs.io/" +Changelog = "https://oemof-solph.readthedocs.io/en/latest/changelog.html" +"Issue Tracker" = "https://github.com/oemof/oemof-solph/issues/" + +[project.optional-dependencies] +dev = [ + "flit", + "matplotlib", + "nbformat", + "pytest", + "sphinx", + "sphinx_rtd_theme", + "sphinx-copybutton", + "sphinx-design", + "termcolor", + "tox", +] + +[project.scripts] +oemof_installation_test = "oemof.solph._console_scripts:check_oemof_installation" + [tool.black] line-length = 79 -target-version = ['py37', 'py38'] +target-version = ['py39', 'py310', 'py311'] include = '\.pyi?$' exclude = ''' /( @@ -18,6 +109,45 @@ exclude = ''' )/ ''' -[build-system] -requires = ["setuptools", "wheel"] -build-backend = "setuptools.build_meta" +[tool.pytest.ini_options] +norecursedirs = [ + ".git", + ".tox", + ".env", + "dist", + "build", + "docs/_build", + "migrations", + "examples", +] +python_files = [ + "test_*.py", + "*_test.py", + "*_tests.py", + "tests.py", +] +addopts = """ + -ra + --strict-markers + --ignore=docs/conf.py + --ignore=setup.py + --ignore=ci + --ignore=.eggs + --doctest-modules + --doctest-glob=\\*.rst + --tb=short + --pyargs +""" +testpaths = [ + "src/oemof/solph/", + "tests/", + "docs/", +] + +[tool.isort] +force_single_line = true +line_length = 79 +known_first_party = "oemof-solph" +default_section = "THIRDPARTY" +forced_separate = "test_oemof-solph" +skip = "migrations" diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 8354fec39..000000000 --- a/setup.cfg +++ /dev/null @@ -1,112 +0,0 @@ -[bdist_wheel] -universal = 1 - -[flake8] -max-line-length = 79 -exclude = */migrations/*, docs/conf.py -ignore = E203, W503 - -[pydocstyle] -ignore = D200, D203, D213, D406, D407 - -[pep257] -ignore = D200, D203, D213, D406, D407 - -[tool:pytest] -# If a pytest section is found in one of the possible config files -# (pytest.ini, tox.ini or setup.cfg), then pytest will not look for any others, -# so if you add a pytest config section elsewhere, -# you will need to delete this section from setup.cfg. -norecursedirs = - .git - .tox - .env - dist - build - migrations - examples - -python_files = - test_*.py - *_test.py - *_tests.py - tests.py -addopts = - -ra - --strict-markers - --ignore=docs/conf.py - --ignore=setup.py - --ignore=ci - --ignore=.eggs - --doctest-modules - --doctest-glob=\*.rst - --tb=short - --pyargs -# The order of these options matters. testpaths comes after addopts so that -# oemof.solph in testpaths is interpreted as -# --pyargs oemof.solph. -# Any tests in the src/ directory (that is, tests installed with the package) -# can be run by any user with pytest --pyargs oemof.solph. -# Packages that are sensitive to the host machine, most famously NumPy, -# include tests with the installed package so that any user can check -# at any time that everything is working properly. -# If you do choose to make installable tests, this will run the installed -# tests as they are actually installed (same principle as when we ensure that -# we always test the installed version of the package). -# If you have no need for this (and your src/ directory is very large), -# you can save a few milliseconds on testing by telling pytest not to search -# the src/ directory by removing -# --pyargs and oemof.solph from the options here. -testpaths = - oemof.solph - tests/ - -[metadata] -description_file = README.rst - -[tool:isort] -force_single_line = True -line_length = 79 -known_first_party = oemof-solph -default_section = THIRDPARTY -forced_separate = test_oemof-solph -skip = migrations - -[matrix] -# This is the configuration for the `./bootstrap.py` script. -# It generates `.travis.yml`, `tox.ini` and `.appveyor.yml`. -# -# Syntax: [alias:] value [!variable[glob]] [&variable[glob]] -# -# alias: -# - is used to generate the tox environment -# - it's optional -# - if not present the alias will be computed from the `value` -# value: -# - a value of "-" means empty -# !variable[glob]: -# - exclude the combination of the current `value` with -# any value matching the `glob` in `variable` -# - can use as many you want -# &variable[glob]: -# - only include the combination of the current `value` -# when there's a value matching `glob` in `variable` -# - can use as many you want - -python_versions = - py38 - py39 - py310 - -dependencies = -# 1.4: Django==1.4.16 !python_versions[py3*] -# 1.5: Django==1.5.11 -# 1.6: Django==1.6.8 -# 1.7: Django==1.7.1 !python_versions[py26] -# Deps commented above are provided as examples. That's what you would use in a Django project. - -coverage_flags = - cover: true - nocov: false -environment_variables = - - diff --git a/setup.py b/setup.py deleted file mode 100644 index 51b37fa09..000000000 --- a/setup.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python -# -*- encoding: utf-8 -*- -import io -import re -from glob import glob -from os.path import basename -from os.path import dirname -from os.path import join -from os.path import splitext - -from setuptools import find_packages -from setuptools import setup - - -def read(*names, **kwargs): - with io.open( - join(dirname(__file__), *names), - encoding=kwargs.get("encoding", "utf8"), - ) as fh: - return fh.read() - - -long_description = "%s" % ( - re.compile("^.. start-badges.*^.. end-badges", re.M | re.S).sub( - "", read("README.rst") - ) -) - - -setup( - name="oemof.solph", - version="0.5.3a1", - license="MIT", - description=( - "A model generator for energy system modelling and optimisation." - ), - long_description=long_description, - long_description_content_type="text/x-rst", - author="oemof developer group", - author_email="contact@oemof.org", - url="https://oemof.org", - packages=["oemof"] + ["oemof." + p for p in find_packages("src/oemof")], - package_dir={"": "src"}, - py_modules=[splitext(basename(path))[0] for path in glob("src/*.py")], - include_package_data=True, - zip_safe=False, - classifiers=[ - # complete classifier list: - # http://pypi.python.org/pypi?%3Aaction=list_classifiers - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "Intended Audience :: Science/Research", - "License :: OSI Approved :: MIT License", - "Operating System :: Unix", - "Operating System :: POSIX", - "Operating System :: Microsoft :: Windows", - "Operating System :: MacOS", - "Operating System :: OS Independent", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: Implementation :: CPython", - "Topic :: Utilities", - ], - project_urls={ - "Documentation": "https://oemof-solph.readthedocs.io/", - "Changelog": ( - "https://oemof-solph.readthedocs.io/en/latest/changelog.html" - ), - "Issue Tracker": "https://github.com/oemof/oemof-solph/issues", - }, - keywords=[ - # eg: 'keyword1', 'keyword2', 'keyword3', - ], - python_requires=">=3.8", - install_requires=[ - "blinker", - "dill", - "numpy", - "pandas >= 1.5.3", - "pyomo >= 6.6.0, < 7.0", - "networkx", - "oemof.tools >= 0.4.2", - "oemof.network >= 0.5.0a1", - ], - extras_require={ - "dev": [ - "matplotlib", - "nbformat", - "pytest", - "sphinx", - "sphinx_rtd_theme", - "sphinx-copybutton", - "sphinx-design", - "termcolor", - ], - "examples": ["matplotlib"], - "dummy": ["oemof"], - }, - entry_points={ - "console_scripts": [ - "oemof_installation_test = " - + "oemof.solph._console_scripts:check_oemof_installation" - ] - }, -) diff --git a/src/oemof/solph/__init__.py b/src/oemof/solph/__init__.py index d27c66140..b242a6f27 100644 --- a/src/oemof/solph/__init__.py +++ b/src/oemof/solph/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.5.3a1" +__version__ = "0.6.0a2" from . import buses from . import components diff --git a/src/oemof/solph/_console_scripts.py b/src/oemof/solph/_console_scripts.py index be8accacf..da0d66a78 100644 --- a/src/oemof/solph/_console_scripts.py +++ b/src/oemof/solph/_console_scripts.py @@ -21,7 +21,7 @@ def check_oemof_installation(silent=False): logging.disable(logging.CRITICAL) - date_time_index = pd.date_range("1/1/2012", periods=6, freq="H") + date_time_index = pd.date_range("1/1/2012", periods=6, freq="h") energysystem = solph.EnergySystem( timeindex=date_time_index, infer_last_interval=False, diff --git a/src/oemof/solph/_energy_system.py b/src/oemof/solph/_energy_system.py index 234080a07..79681ad04 100644 --- a/src/oemof/solph/_energy_system.py +++ b/src/oemof/solph/_energy_system.py @@ -302,4 +302,13 @@ def create_time_index( number = round(hoy / interval) if start is None: start = f"1/1/{year}" - return pd.date_range(start, periods=number + 1, freq=f"{interval}H") + try: + time_index = pd.date_range( + start, periods=number + 1, freq=f"{interval}h" + ) + except ValueError: + # Pandas <2.2 compatibility + time_index = pd.date_range( + start, periods=number + 1, freq=f"{interval}H" + ) + return time_index diff --git a/src/oemof/solph/_models.py b/src/oemof/solph/_models.py index 59ab74188..6d647b300 100644 --- a/src/oemof/solph/_models.py +++ b/src/oemof/solph/_models.py @@ -45,12 +45,8 @@ class BaseModel(po.ConcreteModel): Parameters ---------- - energysystem : EnergySystem object or (experimental) list + energysystem : EnergySystem object Object that holds the nodes of an oemof energy system graph. - Experimental: If a list is passed, the list needs to hold EnergySystem - objects and a cellular structure is assumed. In this case, the first - element needs to be the upmost energy cell (structurally containing - all other cells). constraint_groups : list (optional) Solph looks for these groups in the given energy system and uses them to create the constraints of the optimization problem. @@ -76,7 +72,7 @@ class BaseModel(po.ConcreteModel): name : str Name of the model es : solph.EnergySystem - Energy system of the model (upmost energy cell for cellular structures) + Energy system of the model meta : `pyomo.opt.results.results_.SolverResults` or None Solver results dual : `pyomo.core.base.suffix.Suffix` or None @@ -115,13 +111,8 @@ def __init__(self, energysystem, **kwargs): # ######################## Arguments ################################# self.name = kwargs.get("name", type(self).__name__) - self.is_cellular = isinstance(energysystem, list) - if self.is_cellular: - self.es = energysystem[0] - self.ec = energysystem[1:] - else: - self.es = energysystem + self.es = energysystem self.timeincrement = kwargs.get("timeincrement", self.es.timeincrement) self.objective_weighting = kwargs.get( @@ -132,27 +123,14 @@ def __init__(self, energysystem, **kwargs): "constraint_groups", [] ) - if self.is_cellular: - for es in energysystem: - self._constraint_groups += [ - i - for i in es.groups - if hasattr(i, "CONSTRAINT_GROUP") - and i not in self._constraint_groups - ] - else: - self._constraint_groups += [ - i - for i in self.es.groups - if hasattr(i, "CONSTRAINT_GROUP") - and i not in self._constraint_groups - ] + self._constraint_groups += [ + i + for i in self.es.groups + if hasattr(i, "CONSTRAINT_GROUP") + and i not in self._constraint_groups + ] self.flows = self.es.flows() - if self.is_cellular: - for cell in self.ec: - for io, f in cell.flows().items(): - self.flows.update({io: f}) self.solver_results = None self.dual = None @@ -306,10 +284,6 @@ class Model(BaseModel): ---------- energysystem : EnergySystem object or (experimental) list Object that holds the nodes of an oemof energy system graph. - Experimental: If a list is passed, the list needs to hold EnergySystem - objects and a cellular structure is assumed. In this case, the first - element needs to be the upmost energy cell (structurally containing - all other cells). constraint_groups : list Solph looks for these groups in the given energy system and uses them to create the constraints of the optimization problem. @@ -403,10 +377,7 @@ def _add_parent_block_sets(self): Also create sets PERIODS and TIMEINDEX used for multi-period models. """ self.nodes = list(self.es.nodes) - if self.is_cellular: - # collect all nodes from the child cells - for cell in self.ec: - self.nodes.extend(cell.nodes) + # create set with all nodes self.NODES = po.Set(initialize=[n for n in self.nodes]) @@ -490,33 +461,33 @@ def _add_parent_block_sets(self): def _add_parent_block_variables(self): """Add the parent block variables, which is the `flow` variable, indexed by FLOWS and TIMEINDEX.""" - self.flow = po.Var(self.FLOWS, self.TIMEINDEX, within=po.Reals) + self.flow = po.Var(self.FLOWS, self.TIMESTEPS, within=po.Reals) for o, i in self.FLOWS: if self.flows[o, i].nominal_value is not None: if self.flows[o, i].fix[self.TIMESTEPS.at(1)] is not None: - for p, t in self.TIMEINDEX: - self.flow[o, i, p, t].value = ( + for t in self.TIMESTEPS: + self.flow[o, i, t].value = ( self.flows[o, i].fix[t] * self.flows[o, i].nominal_value ) - self.flow[o, i, p, t].fix() + self.flow[o, i, t].fix() else: - for p, t in self.TIMEINDEX: - self.flow[o, i, p, t].setub( + for t in self.TIMESTEPS: + self.flow[o, i, t].setub( self.flows[o, i].max[t] * self.flows[o, i].nominal_value ) if not self.flows[o, i].nonconvex: - for p, t in self.TIMEINDEX: - self.flow[o, i, p, t].setlb( + for t in self.TIMESTEPS: + self.flow[o, i, t].setlb( self.flows[o, i].min[t] * self.flows[o, i].nominal_value ) elif (o, i) in self.UNIDIRECTIONAL_FLOWS: - for p, t in self.TIMEINDEX: - self.flow[o, i, p, t].setlb(0) + for t in self.TIMESTEPS: + self.flow[o, i, t].setlb(0) else: if (o, i) in self.UNIDIRECTIONAL_FLOWS: - for p, t in self.TIMEINDEX: - self.flow[o, i, p, t].setlb(0) + for t in self.TIMESTEPS: + self.flow[o, i, t].setlb(0) diff --git a/src/oemof/solph/_plumbing.py b/src/oemof/solph/_plumbing.py index 806cf9507..bb6ed5b80 100644 --- a/src/oemof/solph/_plumbing.py +++ b/src/oemof/solph/_plumbing.py @@ -11,13 +11,14 @@ """ -from collections import UserList from collections import abc from itertools import repeat +import numpy as np + def sequence(iterable_or_scalar): - """Tests if an object is iterable (except string) or scalar and returns + """Checks if an object is iterable (except string) or scalar and returns the original sequence if object is an iterable and an 'emulated' sequence object of class _Sequence if object is a scalar or string. @@ -27,8 +28,17 @@ def sequence(iterable_or_scalar): Examples -------- - >>> sequence([1,2]) - [1, 2] + >>> y = sequence([1,2,3,4,5,6,7,8,9,10,11]) + >>> y[0] + 1 + + >>> y[10] + 11 + + >>> import pandas as pd + >>> s1 = sequence(pd.Series([1,5,9])) + >>> s1[2] + 9 >>> x = sequence(10) >>> x[0] @@ -36,64 +46,81 @@ def sequence(iterable_or_scalar): >>> x[10] 10 - >>> print(x) - [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10] """ - if isinstance(iterable_or_scalar, abc.Iterable) and not isinstance( - iterable_or_scalar, str - ): + if isinstance(iterable_or_scalar, str): return iterable_or_scalar + elif isinstance(iterable_or_scalar, abc.Iterable): + return np.array(iterable_or_scalar) else: - return _Sequence(default=iterable_or_scalar) + return _FakeSequence(value=iterable_or_scalar) -class _Sequence(UserList): +class _FakeSequence: """Emulates a list whose length is not known in advance. Parameters ---------- - source: - default: + value : scalar + length : integer Examples -------- - >>> s = _Sequence(default=42) - >>> len(s) - 1 - >>> s[1] - 42 - >>> s[2] - 42 - >>> len(s) - 3 + >>> s = _FakeSequence(value=42, length=5) >>> s - [42, 42, 42] - >>> s[8] + [42, 42, 42, 42, 42] + >>> s = _FakeSequence(value=42) + >>> # undefined lenght, access still works + >>> s[1337] 42 - - """ - def __init__(self, *args, **kwargs): - self.default = kwargs["default"] - self.default_changed = False - self.highest_index = 0 - super().__init__(*args) + def __init__(self, value, length=None): + self._value = value + self._length = length + + @property + def size(self): + return self._length - def __getitem__(self, key): - self.highest_index = max(self.highest_index, key) - return self.default + @size.setter + def size(self, value): + self._length = value - def __init_list(self): - self.data = [self.default] * (self.highest_index + 1) + def __getitem__(self, _): + return self._value def __repr__(self): - return str([i for i in self]) + if self._length is not None: + return str([i for i in self]) + else: + return f"[{self._value}, {self._value}, ..., {self._value}]" def __len__(self): - return max(len(self.data), self.highest_index + 1) + return self._length def __iter__(self): - return repeat(self.default, self.highest_index + 1) + return repeat(self._value, self._length) + + def max(self): + return self._value + + def min(self): + return self._value + + def sum(self): + if self._length is None: + return np.inf + else: + return self._length * self._value + + def to_numpy(self, length=None): + if length is not None: + return np.full(length, self._value) + else: + return np.full(len(self), self._value) + + @property + def value(self): + return self._value diff --git a/src/oemof/solph/buses/_bus.py b/src/oemof/solph/buses/_bus.py index 98cf88787..7b2f83e28 100644 --- a/src/oemof/solph/buses/_bus.py +++ b/src/oemof/solph/buses/_bus.py @@ -78,9 +78,9 @@ class BusBlock(ScalarBlock): Bus balance: `om.Bus.balance[i, o, t]` .. math:: - \sum_{i \in INPUTS(n)} P_{i}(p, t) = - \sum_{o \in OUTPUTS(n)} P_{o}(p, t), \\ - \forall p, t \in \textrm{TIMEINDEX}, \\ + \sum_{i \in INPUTS(n)} P_{i}(t) = + \sum_{o \in OUTPUTS(n)} P_{o}(t), \\ + \forall t \in \textrm{TIMESTEPS}, \\ \forall i \in \textrm{INPUTS}, \\ \forall o \in \textrm{OUTPUTS} @@ -89,17 +89,17 @@ class BusBlock(ScalarBlock): output of the Bus object. The index :math:`n` is the index for the Bus node itself. Therefore, - a :math:`flow[i, n, p, t]` is a flow from the Component i to the Bus n at + a :math:`flow[i, n, t]` is a flow from the Component i to the Bus n at time index p, t. - ====================== ============================ ==================== - symbol attribute explanation - ====================== ============================ ==================== - :math:`P_{i}(p, t)` `flow[i, n, p, t]` Bus, inflow + ====================== ========================= ==================== + symbol attribute explanation + ====================== ========================= ==================== + :math:`P_{i}(p, t)` `flow[i, n, t]` Bus, inflow - :math:`P_{o}(p, t)` `flow[n, o, p, t]` Bus, outflow + :math:`P_{o}(p, t)` `flow[n, o, t]` Bus, outflow - ====================== ============================ ==================== + ====================== ========================= ==================== """ def __init__(self, *args, **kwargs): @@ -126,14 +126,14 @@ def _create(self, group=None): outs[n] = [o for o in n.outputs] def _busbalance_rule(block): - for p, t in m.TIMEINDEX: + for t in m.TIMESTEPS: for g in group: - lhs = sum(m.flow[i, g, p, t] for i in ins[g]) - rhs = sum(m.flow[g, o, p, t] for o in outs[g]) + lhs = sum(m.flow[i, g, t] for i in ins[g]) + rhs = sum(m.flow[g, o, t] for o in outs[g]) expr = lhs == rhs # no inflows no outflows yield: 0 == 0 which is True if expr is not True: - block.balance.add((g, p, t), expr) + block.balance.add((g, t), expr) - self.balance = Constraint(group, m.TIMEINDEX, noruleinit=True) + self.balance = Constraint(group, m.TIMESTEPS, noruleinit=True) self.balance_build = BuildAction(rule=_busbalance_rule) diff --git a/src/oemof/solph/components/__init__.py b/src/oemof/solph/components/__init__.py index 0e0fa830a..e53a0659e 100644 --- a/src/oemof/solph/components/__init__.py +++ b/src/oemof/solph/components/__init__.py @@ -18,6 +18,8 @@ from ._link import Link from ._offset_converter import OffsetConverter from ._offset_converter import OffsetTransformer +from ._offset_converter import slope_offset_from_nonconvex_input +from ._offset_converter import slope_offset_from_nonconvex_output from ._sink import Sink from ._source import Source @@ -33,4 +35,6 @@ "Sink", "Transformer", "Source", + "slope_offset_from_nonconvex_input", + "slope_offset_from_nonconvex_output", ] diff --git a/src/oemof/solph/components/_converter.py b/src/oemof/solph/components/_converter.py index 04044836f..ab660ea02 100644 --- a/src/oemof/solph/components/_converter.py +++ b/src/oemof/solph/components/_converter.py @@ -181,9 +181,9 @@ class ConverterBlock(ScalarBlock): Linear relation :attr:`om.ConverterBlock.relation[i,o,t]` .. math:: - P_{i}(p, t) \cdot \eta_{o}(t) = - P_{o}(p, t) \cdot \eta_{i}(t), \\ - \forall p, t \in \textrm{TIMEINDEX}, \\ + P_{i}(t) \cdot \eta_{o}(t) = + P_{o}(t) \cdot \eta_{i}(t), \\ + \forall t \in \textrm{TIMESTEPS}, \\ \forall n \in \textrm{CONVERTERS}, \\ \forall i \in \textrm{INPUTS}, \\ \forall o \in \textrm{OUTPUTS} @@ -196,15 +196,15 @@ class ConverterBlock(ScalarBlock): constraints. The index :math: n is the index for the Transformer node itself. Therefore, - a `flow[i, n, p, t]` is a flow from the Bus i to the Transformer n at + a `flow[i, n, t]` is a flow from the Bus i to the Transformer n at time index p, t. ====================== ============================ ==================== symbol attribute explanation ====================== ============================ ==================== - :math:`P_{i,n}(p, t)` `flow[i, n, p, t]` Converter, inflow + :math:`P_{i,n}(p, t)` `flow[i, n, t]` Converter, inflow - :math:`P_{n,o}(p, t)` `flow[n, o, p, t]` Converter, outflow + :math:`P_{n,o}(p, t)` `flow[n, o, t]` Converter, outflow :math:`\eta_{i}(t)` `conversion_factor[i, n, t]` Inflow, efficiency @@ -243,8 +243,8 @@ def _create(self, group=None): self.relation = Constraint( [ - (n, i, o, p, t) - for p, t in m.TIMEINDEX + (n, i, o, t) + for t in m.TIMESTEPS for n in group for o in out_flows[n] for i in in_flows[n] @@ -253,17 +253,17 @@ def _create(self, group=None): ) def _input_output_relation(block): - for p, t in m.TIMEINDEX: + for t in m.TIMESTEPS: for n in group: for o in out_flows[n]: for i in in_flows[n]: try: lhs = ( - m.flow[i, n, p, t] + m.flow[i, n, t] * n.conversion_factors[o][t] ) rhs = ( - m.flow[n, o, p, t] + m.flow[n, o, t] * n.conversion_factors[i][t] ) except ValueError: @@ -273,6 +273,6 @@ def _input_output_relation(block): n.label, o.label ), ) - block.relation.add((n, i, o, p, t), (lhs == rhs)) + block.relation.add((n, i, o, t), (lhs == rhs)) self.relation_build = BuildAction(rule=_input_output_relation) diff --git a/src/oemof/solph/components/_extraction_turbine_chp.py b/src/oemof/solph/components/_extraction_turbine_chp.py index 0a2ef8f1e..cef1a6152 100644 --- a/src/oemof/solph/components/_extraction_turbine_chp.py +++ b/src/oemof/solph/components/_extraction_turbine_chp.py @@ -105,17 +105,17 @@ class ExtractionTurbineCHPBlock(ScalarBlock): * :math:`\dot H_{Fuel}` - Fuel input flow, represented in code as `flow[i, n, p, t]` + Fuel input flow, represented in code as `flow[i, n, t]` * :math:`P_{el}` Electric power outflow, represented in code as - `flow[n, main_output, p, t]` + `flow[n, main_output, t]` * :math:`\dot Q_{th}` Thermal output flow, represented in code as - `flow[n, tapped_output, p, t]` + `flow[n, tapped_output, t]` **Parameters** @@ -242,18 +242,18 @@ def _create(self, group=None): def _input_output_relation_rule(block): """Connection between input, main output and tapped output.""" - for p, t in m.TIMEINDEX: + for t in m.TIMESTEPS: for g in group: - lhs = m.flow[g.inflow, g, p, t] + lhs = m.flow[g.inflow, g, t] rhs = ( - m.flow[g, g.main_output, p, t] - + m.flow[g, g.tapped_output, p, t] + m.flow[g, g.main_output, t] + + m.flow[g, g.tapped_output, t] * g.main_flow_loss_index[t] ) / g.conversion_factor_full_condensation_sq[t] - block.input_output_relation.add((g, p, t), (lhs == rhs)) + block.input_output_relation.add((g, t), (lhs == rhs)) self.input_output_relation = Constraint( - group, m.TIMEINDEX, noruleinit=True + group, m.TIMESTEPS, noruleinit=True ) self.input_output_relation_build = BuildAction( rule=_input_output_relation_rule @@ -261,17 +261,17 @@ def _input_output_relation_rule(block): def _out_flow_relation_rule(block): """Relation between main and tapped output in full chp mode.""" - for p, t in m.TIMEINDEX: + for t in m.TIMESTEPS: for g in group: - lhs = m.flow[g, g.main_output, p, t] + lhs = m.flow[g, g.main_output, t] rhs = ( - m.flow[g, g.tapped_output, p, t] + m.flow[g, g.tapped_output, t] * g.flow_relation_index[t] ) - block.out_flow_relation.add((g, p, t), (lhs >= rhs)) + block.out_flow_relation.add((g, t), (lhs >= rhs)) self.out_flow_relation = Constraint( - group, m.TIMEINDEX, noruleinit=True + group, m.TIMESTEPS, noruleinit=True ) self.out_flow_relation_build = BuildAction( rule=_out_flow_relation_rule diff --git a/src/oemof/solph/components/_generic_chp.py b/src/oemof/solph/components/_generic_chp.py index d7853e2fe..83246bb6c 100644 --- a/src/oemof/solph/components/_generic_chp.py +++ b/src/oemof/solph/components/_generic_chp.py @@ -131,7 +131,7 @@ def __init__( ): if custom_attributes is None: custom_attributes = {} - super().__init__(label, **custom_attributes) + super().__init__(label, custom_properties=custom_attributes) self.fuel_input = fuel_input self.electrical_output = electrical_output @@ -299,6 +299,7 @@ class GenericCHPBlock(ScalarBlock): =============================== ======================= ==== ============================================= """ # noqa: E501 + CONSTRAINT_GROUP = True def __init__(self, *args, **kwargs): @@ -337,37 +338,37 @@ def _create(self, group=None): self.Y = Var(self.GENERICCHPS, m.TIMESTEPS, within=Binary) # constraint rules - def _H_flow_rule(block, n, p, t): + def _H_flow_rule(block, n, t): """Link fuel consumption to component inflow.""" expr = 0 expr += self.H_F[n, t] - expr += -m.flow[list(n.fuel_input.keys())[0], n, p, t] + expr += -m.flow[list(n.fuel_input.keys())[0], n, t] return expr == 0 self.H_flow = Constraint( - self.GENERICCHPS, m.TIMEINDEX, rule=_H_flow_rule + self.GENERICCHPS, m.TIMESTEPS, rule=_H_flow_rule ) - def _Q_flow_rule(block, n, p, t): + def _Q_flow_rule(block, n, t): """Link heat flow to component outflow.""" expr = 0 expr += self.Q[n, t] - expr += -m.flow[n, list(n.heat_output.keys())[0], p, t] + expr += -m.flow[n, list(n.heat_output.keys())[0], t] return expr == 0 self.Q_flow = Constraint( - self.GENERICCHPS, m.TIMEINDEX, rule=_Q_flow_rule + self.GENERICCHPS, m.TIMESTEPS, rule=_Q_flow_rule ) - def _P_flow_rule(block, n, p, t): + def _P_flow_rule(block, n, t): """Link power flow to component outflow.""" expr = 0 expr += self.P[n, t] - expr += -m.flow[n, list(n.electrical_output.keys())[0], p, t] + expr += -m.flow[n, list(n.electrical_output.keys())[0], t] return expr == 0 self.P_flow = Constraint( - self.GENERICCHPS, m.TIMEINDEX, rule=_P_flow_rule + self.GENERICCHPS, m.TIMESTEPS, rule=_P_flow_rule ) def _H_F_1_rule(block, n, t): diff --git a/src/oemof/solph/components/_generic_storage.py b/src/oemof/solph/components/_generic_storage.py index d1731ee1d..211c11a60 100644 --- a/src/oemof/solph/components/_generic_storage.py +++ b/src/oemof/solph/components/_generic_storage.py @@ -110,7 +110,8 @@ class GenericStorage(Node): nominal_storage_capacity should not be set (or set to None) if an investment object is used. storage_costs : numeric (iterable or scalar), :math:`c_{storage}(t)` - Cost (per energy) for having energy in the storage. + Cost (per energy) for having energy in the storage, starting from + time point :math:`t_{1}`. lifetime_inflow : int, :math:`n_{in}` Determine the lifetime of an inflow; only applicable for multi-period models which can invest in storage capacity and have an @@ -270,13 +271,6 @@ def _set_flows(self): def _check_invest_attributes(self): """Raise errors for infeasible investment attribute combinations""" - if self.investment and self.nominal_storage_capacity is not None: - e1 = ( - "If an investment object is defined the invest variable " - "replaces the nominal_storage_capacity.\n Therefore the " - "nominal_storage_capacity should be 'None'.\n" - ) - raise AttributeError(e1) if ( self.invest_relation_input_output is not None and self.invest_relation_output_capacity is not None @@ -289,9 +283,9 @@ def _check_invest_attributes(self): raise AttributeError(e2) if ( self.investment - and sum(solph_sequence(self.fixed_losses_absolute)) != 0 + and self.fixed_losses_absolute.max() != 0 and self.investment.existing == 0 - and self.investment.minimum[0] == 0 + and self.investment.minimum.min() == 0 ): e3 = ( "With fixed_losses_absolute > 0, either investment.existing " @@ -365,11 +359,14 @@ class GenericStorageBlock(ScalarBlock): .. math:: E(t_{last}) = E(-1) - Storage balance :attr:`om.Storage.balance[n, t]` - .. math:: E(t) = &E(t-1) \cdot - (1 - \beta(t)) ^{\tau(t)/(t_u)} \\ + Storage losses :attr:`om.Storage.losses[n, t]` + .. math:: E_{loss}(t) = &E(t-1) \cdot + 1 - (1 - \beta(t))^{\tau(t)/(t_u)} \\ &- \gamma(t)\cdot E_{nom} \cdot {\tau(t)/(t_u)}\\ - &- \delta(t) \cdot {\tau(t)/(t_u)}\\ + &- \delta(t) \cdot {\tau(t)/(t_u)} + + Storage balance :attr:`om.Storage.balance[n, t]` + .. math:: E(t) = &E(t-1) - E_{loss}(t) &- \frac{\dot{E}_o(p, t)}{\eta_o(t)} \cdot \tau(t) + \dot{E}_i(p, t) \cdot \eta_i(t) \cdot \tau(t) @@ -427,7 +424,7 @@ class GenericStorageBlock(ScalarBlock): * :attr: `storage_costs` not 0 .. math:: - \sum_{t \in \textrm{TIMESTEPS}} c_{storage}(t) \cdot E(t) + \sum_{t \in \textrm{TIMEPOINTS} > 0} c_{storage}(t) \cdot E(t) *Multi-period model* @@ -504,6 +501,8 @@ def _storage_content_bound_rule(block, n, t): self.STORAGES, m.TIMEPOINTS, bounds=_storage_content_bound_rule ) + self.storage_losses = Var(self.STORAGES, m.TIMESTEPS) + # set the initial storage content # ToDo: More elegant code possible? for n in group: @@ -515,16 +514,9 @@ def _storage_content_bound_rule(block, n, t): # ************* Constraints *************************** - def _storage_balance_rule(block, n, p, t): - """ - Rule definition for the storage balance of every storage n and - every timestep. - """ - expr = 0 - expr += block.storage_content[n, t + 1] - expr += ( - -block.storage_content[n, t] - * (1 - n.loss_rate[t]) ** m.timeincrement[t] + def _storage_losses_rule(block, n, t): + expr = block.storage_content[n, t] * ( + 1 - (1 - n.loss_rate[t]) ** m.timeincrement[t] ) expr += ( n.fixed_losses_relative[t] @@ -532,16 +524,30 @@ def _storage_balance_rule(block, n, p, t): * m.timeincrement[t] ) expr += n.fixed_losses_absolute[t] * m.timeincrement[t] + + return expr == block.storage_losses[n, t] + + self.losses = Constraint( + self.STORAGES, m.TIMESTEPS, rule=_storage_losses_rule + ) + + def _storage_balance_rule(block, n, t): + """ + Rule definition for the storage balance of every storage n and + every timestep. + """ + expr = block.storage_content[n, t] + expr -= block.storage_losses[n, t] expr += ( - -m.flow[i[n], n, p, t] * n.inflow_conversion_factor[t] + m.flow[i[n], n, t] * n.inflow_conversion_factor[t] ) * m.timeincrement[t] - expr += ( - m.flow[n, o[n], p, t] / n.outflow_conversion_factor[t] + expr -= ( + m.flow[n, o[n], t] / n.outflow_conversion_factor[t] ) * m.timeincrement[t] - return expr == 0 + return expr == block.storage_content[n, t + 1] self.balance = Constraint( - self.STORAGES, m.TIMEINDEX, rule=_storage_balance_rule + self.STORAGES, m.TIMESTEPS, rule=_storage_balance_rule ) def _balanced_storage_rule(block, n): @@ -611,12 +617,12 @@ def _objective_expression(self): for n in self.STORAGES: if n.storage_costs[0] is not None: - storage_costs += ( - self.storage_content[n, 0] * n.storage_costs[0] - ) + # We actually want to iterate over all TIMEPOINTS except the + # 0th. As integers are used for the index, this is equicalent + # to iterating over the TIMESTEPS with one offset. for t in m.TIMESTEPS: storage_costs += ( - self.storage_content[n, t + 1] * n.storage_costs[t + 1] + self.storage_content[n, t + 1] * n.storage_costs[t] ) self.storage_costs = Expression(expr=storage_costs) @@ -1023,6 +1029,8 @@ class GenericInvestmentStorageBlock(ScalarBlock): of the storage" ":math:`E(t)`", ":attr:`storage_content[n, t]`", "Current storage content (current absolute stored energy)" + ":math:`E_{loss}(t)`", ":attr:`storage_losses[n, t]`", "Current storage + losses (absolute losses per time step)" ":math:`E_{invest}(p)`", ":attr:`invest[n, p]`", "Invested (nominal) capacity of the storage" ":math:`E_{old}(p)`", ":attr:`old[n, p]`", " @@ -1120,7 +1128,7 @@ def _create(self, group=None): "For a multi-period investment model, fixed absolute" " losses are not supported. Please remove parameter." ) - if n.fixed_losses_absolute.default != 0: + if n.fixed_losses_absolute[0] != 0: raise ValueError(error_fixed_absolute_losses) error_initial_storage_level = ( "For a multi-period model, initial_storage_level is" @@ -1265,7 +1273,7 @@ def _storage_investvar_bound_rule(block, n, p): i = {n: [i for i in n.inputs][0] for n in group} o = {n: [o for o in n.outputs][0] for n in group} - reduced_periods_timesteps = [(p, t) for (p, t) in m.TIMEINDEX if t > 0] + reduced_periods_timeindex = [(p, t) for (p, t) in m.TIMEINDEX if t > 0] # Handle unit lifetimes def _total_storage_capacity_rule(block): @@ -1514,10 +1522,10 @@ def _storage_balance_first_rule(block, n): ) expr += n.fixed_losses_absolute[0] * m.timeincrement[0] expr += ( - -m.flow[i[n], n, 0, 0] * n.inflow_conversion_factor[0] + -m.flow[i[n], n, 0] * n.inflow_conversion_factor[0] ) * m.timeincrement[0] expr += ( - m.flow[n, o[n], 0, 0] / n.outflow_conversion_factor[0] + m.flow[n, o[n], 0] / n.outflow_conversion_factor[0] ) * m.timeincrement[0] return expr == 0 @@ -1543,16 +1551,16 @@ def _storage_balance_rule(block, n, p, t): ) expr += n.fixed_losses_absolute[t] * m.timeincrement[t] expr += ( - -m.flow[i[n], n, p, t] * n.inflow_conversion_factor[t] + -m.flow[i[n], n, t] * n.inflow_conversion_factor[t] ) * m.timeincrement[t] expr += ( - m.flow[n, o[n], p, t] / n.outflow_conversion_factor[t] + m.flow[n, o[n], t] / n.outflow_conversion_factor[t] ) * m.timeincrement[t] return expr == 0 self.balance = Constraint( self.INVESTSTORAGES, - reduced_periods_timesteps, + reduced_periods_timeindex, rule=_storage_balance_rule, ) diff --git a/src/oemof/solph/components/_link.py b/src/oemof/solph/components/_link.py index 6e0155df7..d5ca435c4 100644 --- a/src/oemof/solph/components/_link.py +++ b/src/oemof/solph/components/_link.py @@ -145,6 +145,7 @@ class LinkBlock(ScalarBlock): & """ + CONSTRAINT_GROUP = True def __init__(self, *args, **kwargs): @@ -176,13 +177,13 @@ def _create(self, group=None): self.LINKS = Set(initialize=[g for g in group]) def _input_output_relation(block): - for p, t in m.TIMEINDEX: + for t in m.TIMESTEPS: for n, conversion in all_conversions.items(): for cidx, c in conversion.items(): try: expr = ( - m.flow[n, cidx[1], p, t] - == c[t] * m.flow[cidx[0], n, p, t] + m.flow[n, cidx[1], t] + == c[t] * m.flow[cidx[0], n, t] ) except KeyError: raise KeyError( @@ -191,12 +192,12 @@ def _input_output_relation(block): "Check if all connected buses match " "the conversion factors.", ) - block.relation.add((n, cidx[0], cidx[1], p, t), expr) + block.relation.add((n, cidx[0], cidx[1], t), expr) self.relation = Constraint( [ - (n, cidx[0], cidx[1], p, t) - for p, t in m.TIMEINDEX + (n, cidx[0], cidx[1], t) + for t in m.TIMESTEPS for n, conversion in all_conversions.items() for cidx, c in conversion.items() ], diff --git a/src/oemof/solph/components/_offset_converter.py b/src/oemof/solph/components/_offset_converter.py index 606b0f3ad..b078c9ced 100644 --- a/src/oemof/solph/components/_offset_converter.py +++ b/src/oemof/solph/components/_offset_converter.py @@ -14,11 +14,11 @@ SPDX-FileCopyrightText: Johannes Röder SPDX-FileCopyrightText: Saeed Sayadi SPDX-FileCopyrightText: Johannes Kochems +SPDX-FileCopyrightText: Francesco Witte SPDX-License-Identifier: MIT """ - from warnings import warn from oemof.network import Node @@ -31,19 +31,53 @@ class OffsetConverter(Node): - """An object with one input and one output and two coefficients to model - part load behaviour. + r"""An object with one input and multiple outputs and two coefficients + per output to model part load behaviour. + The output must contain a NonConvex object. Parameters ---------- - coefficients : tuple, (:math:`C_0(t)`, :math:`C_1(t)`) - Tuple containing the first two polynomial coefficients - i.e. the y-intersection and slope of a linear equation. - The tuple values can either be a scalar or a sequence with length - of time horizon for simulation. - + conversion_factors : dict, (:math:`m(t)`) + Dict containing the respective bus as key and as value the parameter + :math:`m(t)`. It represents the slope of a linear equation with + respect to the `NonConvex` flow. The value can either be a scalar or a + sequence with length of time horizon for simulation. + + normed_offsets : dict, (:math:`y_\text{0,normed}(t)`) + Dict containing the respective bus as key and as value the parameter + :math:`y_\text{0,normed}(t)`. It represents the y-intercept with respect + to the `NonConvex` flow divided by the `nominal_value` of the + `NonConvex` flow (this is for internal purposes). The value can either + be a scalar or a sequence with length of time horizon for simulation. Notes ----- + + :math:`m(t)` and :math:`y_\text{0,normed}(t)` can be calculated as follows: + + .. _OffsetConverterCoefficients-equations: + + .. math:: + + m = \frac{(l_{max}/\eta_{max}-l_{min}/\eta_{min}}{l_{max}-l_{min}} + + y_\text{0,normed} = \frac{1}{\eta_{max}} - m + + Where :math:`l_{max}` and :math:`l_{min}` are the maximum and minimum + partload share (e.g. 1.0 and 0.5) with reference to the `NonConvex` flow + and :math:`\eta_{max}` and :math:`\eta_{min}` are the respective + efficiencies/conversion factors at these partloads. Alternatively, you can + use the inbuilt methods: + + - If the `NonConvex` flow is at an input of the component: + :py:meth:`oemof.solph.components._offset_converter.slope_offset_from_nonconvex_input`, + - If the `NonConvex` flow is at an output of the component: + :py:meth:`oemof.solph.components._offset_converter.slope_offset_from_nonconvex_output` + + You can import these methods from the `oemof.solph.components` level: + + >>> from oemof.solph.components import slope_offset_from_nonconvex_input + >>> from oemof.solph.components import slope_offset_from_nonconvex_output + The sets, variables, constraints and objective parts are created * :py:class:`~oemof.solph.components._offset_converter.OffsetConverterBlock` @@ -52,15 +86,49 @@ class OffsetConverter(Node): >>> from oemof import solph >>> bel = solph.buses.Bus(label='bel') >>> bth = solph.buses.Bus(label='bth') + >>> l_nominal = 60 + >>> l_max = 1 + >>> l_min = 0.5 + >>> eta_max = 0.5 + >>> eta_min = 0.3 + >>> slope = (l_max / eta_max - l_min / eta_min) / (l_max - l_min) + >>> offset = 1 / eta_max - slope + + Or use the provided method as explained in the previous section: + + >>> _slope, _offset = slope_offset_from_nonconvex_output( + ... l_max, l_min, eta_max, eta_min + ... ) + >>> slope == _slope + True + >>> offset == _offset + True + >>> ostf = solph.components.OffsetConverter( ... label='ostf', ... inputs={bel: solph.flows.Flow()}, ... outputs={bth: solph.flows.Flow( - ... nominal_value=60, min=0.5, max=1.0, + ... nominal_value=l_nominal, min=l_min, max=l_max, ... nonconvex=solph.NonConvex())}, - ... coefficients=(20, 0.5)) + ... conversion_factors={bel: slope}, + ... normed_offsets={bel: offset}, + ... ) >>> type(ostf) + + The input required to operate at minimum load, can be computed from the + slope and offset: + + >>> input_at_min = ostf.conversion_factors[bel][0] * l_min + ostf.normed_offsets[bel][0] * l_max + >>> input_at_min * l_nominal + 100.0 + + The same can be done for the input at nominal load: + + >>> input_at_max = l_max * (ostf.conversion_factors[bel][0] + ostf.normed_offsets[bel][0]) + >>> input_at_max * l_nominal + 120.0 + """ # noqa: E501 def __init__( @@ -68,60 +136,247 @@ def __init__( inputs, outputs, label=None, + conversion_factors=None, + normed_offsets=None, coefficients=None, custom_attributes=None, ): if custom_attributes is None: custom_attributes = {} + super().__init__( inputs=inputs, outputs=outputs, label=label, - **custom_attributes, + custom_properties=custom_attributes, ) - if coefficients is not None: - self.coefficients = tuple([sequence(i) for i in coefficients]) - if len(self.coefficients) != 2: - raise ValueError( - "Two coefficients or coefficient series have to be given." + # this part is used for the transition phase from the old + # OffsetConverter API to the new one. It calcualtes the + # conversion_factors and normed_offsets from the coefficients and the + # outputs information on min and max. + if ( + coefficients is not None + and conversion_factors is None + and normed_offsets is None + ): + normed_offsets, conversion_factors = ( + self.normed_offset_and_conversion_factors_from_coefficients( + coefficients ) + ) - # `OffsetConverter` always needs the `NonConvex` attribute, but the - # `Investment` attribute is optional. If it is used, the - # `InvestNonConvexFlow` will be used in the definition of constraints, - # otherwise, the `NonConvexFlow` will be used. - if len(self.outputs): - for v in self.outputs.values(): - if not v.nonconvex: - raise TypeError( - "Output flow must have the `NonConvex` attribute!" - ) - - # `Investment` and `NonConvex` attributes cannot be defined for the - # input flow. - if len(self.inputs): - for v in self.inputs.values(): - if v.investment: - raise TypeError( - "`Investment` attribute must be defined only for the " - + "output flow!" - ) - if v.nonconvex: - raise TypeError( - "`NonConvex` attribute must be defined only for the " - + "output flow!" - ) - - if len(self.inputs) > 1 or len(self.outputs) > 1: + elif coefficients is not None and ( + conversion_factors is not None or normed_offsets is not None + ): + msg = ( + "The deprecated argument `coefficients` cannot be used in " + "combination with its replacements (`conversion_factors` and " + "`normed_offsets`)." + ) + raise TypeError(msg) + + _reference_flow = [v for v in self.inputs.values() if v.nonconvex] + _reference_flow += [v for v in self.outputs.values() if v.nonconvex] + if len(_reference_flow) != 1: raise ValueError( - "Component `OffsetConverter` must not have " - + "more than 1 input and 1 output!" + "Exactly one flow of the `OffsetConverter` must have the " + "`NonConvex` attribute." ) + if _reference_flow[0] in self.inputs.values(): + self._reference_node_at_input = True + self._reference_node = _reference_flow[0].input + else: + self._reference_node_at_input = False + self._reference_node = _reference_flow[0].output + + _investment_node = [ + v.input for v in self.inputs.values() if v.investment + ] + _investment_node += [ + v.output for v in self.outputs.values() if v.investment + ] + + if len(_investment_node) > 0: + if ( + len(_investment_node) > 1 + or self._reference_node != _investment_node[0] + ): + raise TypeError( + "`Investment` attribute must be defined only for the " + "NonConvex flow!" + ) + + self._reference_flow = _reference_flow[0] + + if conversion_factors is None: + conversion_factors = {} + + if self._reference_node in conversion_factors: + raise ValueError( + "Conversion factors cannot be specified for the `NonConvex` " + "flow." + ) + + self.conversion_factors = { + k: sequence(v) for k, v in conversion_factors.items() + } + + missing_conversion_factor_keys = ( + set(self.outputs) | set(self.inputs) + ) - set(self.conversion_factors) + + for cf in missing_conversion_factor_keys: + self.conversion_factors[cf] = sequence(1) + + if normed_offsets is None: + normed_offsets = {} + + if self._reference_node in normed_offsets: + raise ValueError( + "Normed offsets cannot be specified for the `NonConvex` flow." + ) + + self.normed_offsets = { + k: sequence(v) for k, v in normed_offsets.items() + } + + missing_normed_offsets_keys = ( + set(self.outputs) | set(self.inputs) + ) - set(self.normed_offsets) + + for cf in missing_normed_offsets_keys: + self.normed_offsets[cf] = sequence(0) + def constraint_group(self): return OffsetConverterBlock + def normed_offset_and_conversion_factors_from_coefficients( + self, coefficients + ): + """ + Calculate slope and offset for new API from the old API coefficients. + + Parameters + ---------- + coefficients : tuple + tuple holding the coefficients (offset, slope) for the old style + OffsetConverter. + + Returns + ------- + tuple + A tuple holding the slope and the offset for the new + OffsetConverter API. + """ + coefficients = tuple([sequence(i) for i in coefficients]) + if len(coefficients) != 2: + raise ValueError( + "Two coefficients or coefficient series have to be given." + ) + + input_bus = list(self.inputs.values())[0].input + for flow in self.outputs.values(): + + if flow.max.size is not None: + target_len = flow.max.size + else: + target_len = 1 + + slope = [] + offset = [] + for i in range(target_len): + eta_at_max = ( + flow.max[i] + * coefficients[1][i] + / (flow.max[i] - coefficients[0][i]) + ) + eta_at_min = ( + flow.min[i] + * coefficients[1][i] + / (flow.min[i] - coefficients[0][i]) + ) + + c0, c1 = slope_offset_from_nonconvex_output( + flow.max[i], flow.min[i], eta_at_max, eta_at_min + ) + slope.append(c0) + offset.append(c1) + + if target_len == 1: + slope = slope[0] + offset = offset[0] + + conversion_factors = {input_bus: slope} + normed_offsets = {input_bus: offset} + msg = ( + "The usage of coefficients is depricated, use " + "conversion_factors and normed_offsets instead." + ) + warn(msg, DeprecationWarning) + + return normed_offsets, conversion_factors + + def plot_partload(self, bus, tstep): + """Create a matplotlib figure of the flow to nonconvex flow relation. + + Parameters + ---------- + bus : oemof.solph.Bus + Bus, to which the NOT-nonconvex input or output is connected to. + tstep : int + Timestep to generate the figure for. + + Returns + ------- + tuple + A tuple with the matplotlib figure and axes objects. + """ + import matplotlib.pyplot as plt + import numpy as np + + fig, ax = plt.subplots(2, sharex=True) + + slope = self.conversion_factors[bus][tstep] + offset = self.normed_offsets[bus][tstep] + + min_load = self._reference_flow.min[tstep] + max_load = self._reference_flow.max[tstep] + + infeasible_load = np.linspace(0, min_load) + feasible_load = np.linspace(min_load, max_load) + + y_feasible = feasible_load * slope + offset + y_infeasible = infeasible_load * slope + offset + + _ = ax[0].plot(feasible_load, y_feasible, label="operational range") + color = _[0].get_color() + ax[0].plot(infeasible_load, y_infeasible, "--", color=color) + ax[0].scatter( + [0, feasible_load[0], feasible_load[-1]], + [y_infeasible[0], y_feasible[0], y_feasible[-1]], + color=color, + ) + ax[0].legend() + + ratio = y_feasible / feasible_load + ax[1].plot(feasible_load, ratio) + ax[1].scatter( + [feasible_load[0], feasible_load[-1]], + [ratio[0], ratio[-1]], + color=color, + ) + + ax[0].set_ylabel(f"flow from/to bus '{bus.label}'") + ax[1].set_ylabel("efficiency $\\frac{y}{x}$") + ax[1].set_xlabel("nonconvex flow") + + _ = [(_.set_axisbelow(True), _.grid()) for _ in ax] + plt.tight_layout() + + return fig, ax + # --- BEGIN: To be removed for versions >= v0.6 --- class OffsetTransformer(OffsetConverter): @@ -161,30 +416,32 @@ class OffsetConverterBlock(ScalarBlock): .. math:: & - P_{in}(p, t) = C_1(t) \cdot P_{out}(p, t) + C_0(t) \cdot P_max(p) \cdot Y(t) \\ + P(p, t) = P_\text{ref}(p, t) \cdot m(t) + + P_\text{nom,ref}(p) \cdot Y_\text{ref}(t) \cdot y_\text{0,normed}(t) \\ The symbols used are defined as follows (with Variables (V) and Parameters (P)): - +--------------------+------------------------+------+--------------------------------------------+ - | symbol | attribute | type | explanation | - +====================+========================+======+============================================+ - | :math:`P_{out}(t)` | `flow[n,o,p,t]` | V | Outflow of converter | - +--------------------+------------------------+------+--------------------------------------------+ - | :math:`P_{in}(t)` | `flow[i,n,p,t]` | V | Inflow of converter | - +--------------------+------------------------+------+--------------------------------------------+ - | :math:`Y(t)` | | V | Binary status variable of nonconvex inflow | - +--------------------+------------------------+------+--------------------------------------------+ - | :math:`P_{max}(t)` | | V | Maximum Outflow of converter | - +--------------------+------------------------+------+--------------------------------------------+ - | :math:`C_1(t)` | `coefficients[1][n,t]` | P | Linear coefficient 1 (slope) | - +--------------------+------------------------+------+--------------------------------------------+ - | :math:`C_0(t)` | `coefficients[0][n,t]` | P | Linear coefficient 0 (y-intersection) | - +--------------------+------------------------+------+--------------------------------------------+ - - Note that :math:`P_{max}(t) \cdot Y(t)` is merged into one variable, + +------------------------------+--------------------------------------------------------------+------+-----------------------------------------------------------------------------+ + | symbol | attribute | type | explanation | + +==============================+==============================================================+======+=============================================================================+ + | :math:`P(t)` | `flow[i,n,p,t]` or `flow[n,o,p,t]` | V | **Non**-nonconvex flows at input or output | + +------------------------------+--------------------------------------------------------------+------+-----------------------------------------------------------------------------+ + | :math:`P_{in}(t)` | `flow[i,n,p,t]` or `flow[n,o,p,t]` | V | nonconvex flow of converter | + +------------------------------+--------------------------------------------------------------+------+-----------------------------------------------------------------------------+ + | :math:`Y(t)` | | V | Binary status variable of nonconvex flow | + +------------------------------+--------------------------------------------------------------+------+-----------------------------------------------------------------------------+ + | :math:`P_{nom}(t)` | | V | Nominal value (max. capacity) of the nonconvex flow | + +------------------------------+--------------------------------------------------------------+------+-----------------------------------------------------------------------------+ + | :math:`m(t)` | `conversion_factors[i][n,t]` or `conversion_factors[o][n,t]` | P | Linear coefficient 1 (slope) of a **Non**-nonconvex flows | + +------------------------------+--------------------------------------------------------------+------+-----------------------------------------------------------------------------+ + | :math:`y_\text{0,normed}(t)` | `normed_offsets[i][n,t]` or `normed_offsets[o][n,t]` | P | Linear coefficient 0 (y-intersection)/P_{nom}(t) of **Non**-nonconvex flows | + +------------------------------+--------------------------------------------------------------+------+-----------------------------------------------------------------------------+ + + Note that :math:`P_{nom}(t) \cdot Y(t)` is merged into one variable, called `status_nominal[n, o, p, t]`. """ # noqa: E501 + CONSTRAINT_GROUP = True def __init__(self, *args, **kwargs): @@ -209,64 +466,220 @@ def _create(self, group=None): self.OFFSETCONVERTERS = Set(initialize=[n for n in group]) - in_flows = {n: [i for i in n.inputs.keys()] for n in group} - out_flows = {n: [o for o in n.outputs.keys()] for n in group} + reference_node = {n: n._reference_node for n in group} + reference_node_at_input = { + n: n._reference_node_at_input for n in group + } + in_flows = { + n: [i for i in n.inputs.keys() if i != n._reference_node] + for n in group + } + out_flows = { + n: [o for o in n.outputs.keys() if o != n._reference_node] + for n in group + } self.relation = Constraint( [ - (n, i, o, p, t) - for p, t in m.TIMEINDEX + (n, reference_node[n], f, t) + for t in m.TIMESTEPS for n in group - for o in out_flows[n] - for i in in_flows[n] + for f in in_flows[n] + out_flows[n] ], noruleinit=True, ) def _relation_rule(block): """Link binary input and output flow to component outflow.""" - for p, t in m.TIMEINDEX: + for t in m.TIMESTEPS: for n in group: - for o in out_flows[n]: - for i in in_flows[n]: - expr = 0 - expr += -m.flow[n, o, p, t] - expr += m.flow[i, n, p, t] * n.coefficients[1][t] - # `Y(t)` in the last term of the constraint - # (":math:`C_0(t) \cdot Y(t)`") is different for - # different cases. If both `Investment` and - # `NonConvex` attributes are used for the - # `OffsetConverter`, `Y(t)` would represent the - # `status_nominal[n,o,t]` in the - # `InvestNonConvexFlow`. But if only the - # `NonConvex` attribute is defined for the - # `OffsetConverter`, `Y(t)` would correspond to - # the `status_nominal[n,o,t]` in the - # `NonConvexFlow`. - try: - expr += ( - m.InvestNonConvexFlowBlock.status_nominal[ - n, o, t - ] - * n.coefficients[0][t] - ) - # `KeyError` occurs when more than one - # `OffsetConverter` is defined, and in some of - # them only the `NonConvex` attribute is - # considered, while in others both `NonConvex` - # and `Investment` attributes are defined. - # `AttributeError` only occurs when the - # `OffsetConverter` has only the `NonConvex` - # attribute, and therefore, - # `m.InvestNonConvexFlowBlock.status_nominal` - # (inside the `try` block) does not exist. - except (KeyError, AttributeError): - expr += ( - m.NonConvexFlowBlock.status_nominal[ - n, o, t - ] - * n.coefficients[0][t] - ) - block.relation.add((n, i, o, p, t), (expr == 0)) + + if reference_node_at_input[n]: + ref_flow = m.flow[reference_node[n], n, t] + status_nominal_idx = reference_node[n], n, t + else: + ref_flow = m.flow[n, reference_node[n], t] + status_nominal_idx = n, reference_node[n], t + + try: + ref_status_nominal = ( + m.InvestNonConvexFlowBlock.status_nominal[ + status_nominal_idx + ] + ) + except (AttributeError, KeyError): + ref_status_nominal = ( + m.NonConvexFlowBlock.status_nominal[ + status_nominal_idx + ] + ) + + for f in in_flows[n] + out_flows[n]: + rhs = 0 + if f in in_flows[n]: + rhs += m.flow[f, n, t] + else: + rhs += m.flow[n, f, t] + + lhs = 0 + lhs += ref_flow * n.conversion_factors[f][t] + lhs += ref_status_nominal * n.normed_offsets[f][t] + block.relation.add( + (n, reference_node[n], f, t), (lhs == rhs) + ) self.relation_build = BuildAction(rule=_relation_rule) + + +def slope_offset_from_nonconvex_input( + max_load, min_load, eta_at_max, eta_at_min +): + r"""Calculate the slope and the offset with max and min given for input + + The reference is the input flow here. That means, the `NonConvex` flow + is specified at one of the input flows. The `max_load` and the `min_load` + are the `max` and the `min` specifications for the `NonConvex` flow. + `eta_at_max` and `eta_at_min` are the efficiency values of a different + flow, e.g. an output, with respect to the `max_load` and `min_load` + operation points. + + .. math:: + + \text{slope} = + \frac{ + \text{max} \cdot \eta_\text{at max} + - \text{min} \cdot \eta_\text{at min} + }{\text{max} - \text{min}}\\ + + \text{offset} = \eta_\text{at,max} - \text{slope} + + Parameters + ---------- + max_load : float + Maximum load value, e.g. 1 + min_load : float + Minimum load value, e.g. 0.5 + eta_at_max : float + Efficiency at maximum load. + eta_at_min : float + Efficiency at minimum load. + + Returns + ------- + tuple + slope and offset + + Example + ------- + >>> from oemof import solph + >>> max_load = 1 + >>> min_load = 0.5 + >>> eta_at_min = 0.4 + >>> eta_at_max = 0.3 + + With the input load being at 100 %, in this example, the efficiency should + be 30 %. With the input load being at 50 %, it should be 40 %. We can + calcualte slope and the offset which is normed to the nominal value of + the referenced flow (in this case the input flow) always. + + >>> slope, offset = solph.components.slope_offset_from_nonconvex_input( + ... max_load, min_load, eta_at_max, eta_at_min + ... ) + >>> input_flow = 10 + >>> input_flow_nominal = 10 + >>> output_flow = slope * input_flow + offset * input_flow_nominal + + We can then calculate with the `OffsetConverter` input output relation, + what the resulting efficiency is. At max operating conditions it should be + identical to the efficiency we put in initially. Analogously, we apply this + to the minimal load point. + + >>> round(output_flow / input_flow, 3) == eta_at_max + True + >>> input_flow = 5 + >>> output_flow = slope * input_flow + offset * input_flow_nominal + >>> round(output_flow / input_flow, 3) == eta_at_min + True + """ + slope = (max_load * eta_at_max - min_load * eta_at_min) / ( + max_load - min_load + ) + offset = eta_at_max - slope + return slope, offset + + +def slope_offset_from_nonconvex_output( + max_load, min_load, eta_at_max, eta_at_min +): + r"""Calculate the slope and the offset with max and min given for output. + + The reference is the output flow here. That means, the `NonConvex` flow + is specified at one of the output flows. The `max_load` and the `min_load` + are the `max` and the `min` specifications for the `NonConvex` flow. + `eta_at_max` and `eta_at_min` are the efficiency values of a different + flow, e.g. an input, with respect to the `max_load` and `min_load` + operation points. + + .. math:: + + \text{slope} = + \frac{ + \frac{\text{max}}{\eta_\text{at max}} + - \frac{\text{min}}{\eta_\text{at min}} + }{\text{max} - \text{min}}\\ + + \text{offset} = \frac{1}{\eta_\text{at,max}} - \text{slope} + + Parameters + ---------- + max_load : float + Maximum load value, e.g. 1 + min_load : float + Minimum load value, e.g. 0.5 + eta_at_max : float + Efficiency at maximum load. + eta_at_min : float + Efficiency at minimum load. + + Returns + ------- + tuple + slope and offset + + Example + ------- + >>> from oemof import solph + >>> max_load = 1 + >>> min_load = 0.5 + >>> eta_at_min = 0.7 + >>> eta_at_max = 0.8 + + With the output load being at 100 %, in this example, the efficiency should + be 80 %. With the input load being at 50 %, it should be 70 %. We can + calcualte slope and the offset, which is normed to the nominal value of + the referenced flow (in this case the output flow) always. + + >>> slope, offset = solph.components.slope_offset_from_nonconvex_output( + ... max_load, min_load, eta_at_max, eta_at_min + ... ) + >>> output_flow = 10 + >>> output_flow_nominal = 10 + >>> input_flow = slope * output_flow + offset * output_flow_nominal + + We can then calculate with the `OffsetConverter` input output relation, + what the resulting efficiency is. At max operating conditions it should be + identical to the efficiency we put in initially. Analogously, we apply this + to the minimal load point. + + >>> round(output_flow / input_flow, 3) == eta_at_max + True + >>> output_flow = 5 + >>> input_flow = slope * output_flow + offset * output_flow_nominal + >>> round(output_flow / input_flow, 3) == eta_at_min + True + """ + slope = (max_load / eta_at_max - min_load / eta_at_min) / ( + max_load - min_load + ) + offset = 1 / eta_at_max - slope + return slope, offset diff --git a/src/oemof/solph/components/_sink.py b/src/oemof/solph/components/_sink.py index 1890ec7d0..7644871fd 100644 --- a/src/oemof/solph/components/_sink.py +++ b/src/oemof/solph/components/_sink.py @@ -13,10 +13,7 @@ SPDX-License-Identifier: MIT """ -from warnings import warn - from oemof.network import Node -from oemof.tools import debugging class Sink(Node): @@ -24,9 +21,12 @@ class Sink(Node): Parameters ---------- - label : str + label : str or tuple String holding the label of the Sink object. The label of each object must be unique. + inputs: dict + A dictionary mapping input nodes to corresponding inflows + (i.e. input values). Examples -------- @@ -39,31 +39,17 @@ class Sink(Node): ... label='el_export', ... inputs={bel: solph.flows.Flow()}) - - Notes - ----- - It is theoretically possible to use the Sink object with multiple inputs. - However, we strongly recommend using multiple Sink objects instead. """ - def __init__(self, label=None, inputs=None, custom_attributes=None): + def __init__(self, label=None, *, inputs, custom_attributes=None): if inputs is None: inputs = {} if custom_attributes is None: custom_attributes = {} - if len(inputs) != 1: - msg = ( - "A Sink is designed to have one input but you provided {0}." - " If this is intended and you know what you are doing you can " - "disable the SuspiciousUsageWarning globally." - ) - warn( - msg.format(len(inputs)), - debugging.SuspiciousUsageWarning, - ) - - super().__init__(label=label, inputs=inputs, **custom_attributes) + super().__init__( + label=label, inputs=inputs, custom_properties=custom_attributes + ) def constraint_group(self): pass diff --git a/src/oemof/solph/components/_source.py b/src/oemof/solph/components/_source.py index fae32697f..d775d16d8 100644 --- a/src/oemof/solph/components/_source.py +++ b/src/oemof/solph/components/_source.py @@ -13,11 +13,7 @@ SPDX-License-Identifier: MIT """ - -from warnings import warn - from oemof.network import Node -from oemof.tools import debugging class Source(Node): @@ -25,9 +21,12 @@ class Source(Node): Parameters ---------- - label : str + label : str or tuple String holding the label of the Source object. The label of each object must be unique. + outputs: dict + A dictionary mapping input nodes to corresponding outflows + (i.e. output values). Examples -------- @@ -48,32 +47,17 @@ class Source(Node): >>> str(pv_plant.outputs[bel].output) 'electricity' - - Notes - ----- - It is theoretically possible to use the Source object with multiple - outputs. However, we strongly recommend using multiple Source objects - instead. """ - def __init__(self, label=None, outputs=None, custom_attributes=None): + def __init__(self, label=None, *, outputs, custom_attributes=None): if outputs is None: outputs = {} if custom_attributes is None: custom_attributes = {} - if len(outputs) != 1: - msg = ( - "A Source is designed to have one output but you provided {0}." - " If this is intended and you know what you are doing you can " - "disable the SuspiciousUsageWarning globally." - ) - warn( - msg.format(len(outputs)), - debugging.SuspiciousUsageWarning, - ) - - super().__init__(label=label, outputs=outputs, **custom_attributes) + super().__init__( + label=label, outputs=outputs, custom_properties=custom_attributes + ) def constraint_group(self): pass diff --git a/src/oemof/solph/components/experimental/_generic_caes.py b/src/oemof/solph/components/experimental/_generic_caes.py index 53f667edc..ac1b075b4 100644 --- a/src/oemof/solph/components/experimental/_generic_caes.py +++ b/src/oemof/solph/components/experimental/_generic_caes.py @@ -444,14 +444,14 @@ def _create(self, group=None): ) # Compression: Capacity on markets - def cmp_p_constr_rule(block, n, p, t): + def cmp_p_constr_rule(block, n, t): expr = 0 expr += -self.cmp_p[n, t] - expr += m.flow[list(n.electrical_input.keys())[0], n, p, t] + expr += m.flow[list(n.electrical_input.keys())[0], n, t] return expr == 0 self.cmp_p_constr = Constraint( - self.GENERICCAES, m.TIMEINDEX, rule=cmp_p_constr_rule + self.GENERICCAES, m.TIMESTEPS, rule=cmp_p_constr_rule ) # Compression: Max. capacity depending on cavern filling level @@ -534,14 +534,14 @@ def cmp_q_out_shr_constr_rule(block, n, t): ) # (10) Expansion: Capacity on markets - def exp_p_constr_rule(block, n, p, t): + def exp_p_constr_rule(block, n, t): expr = 0 expr += -self.exp_p[n, t] - expr += m.flow[n, list(n.electrical_output.keys())[0], p, t] + expr += m.flow[n, list(n.electrical_output.keys())[0], t] return expr == 0 self.exp_p_constr = Constraint( - self.GENERICCAES, m.TIMEINDEX, rule=exp_p_constr_rule + self.GENERICCAES, m.TIMESTEPS, rule=exp_p_constr_rule ) # (11-12) Expansion: Max. capacity depending on cavern filling level @@ -605,14 +605,14 @@ def exp_q_in_constr_rule(block, n, t): ) # (17) Expansion: Fuel allocation - def exp_q_fuel_constr_rule(block, n, p, t): + def exp_q_fuel_constr_rule(block, n, t): expr = 0 expr += -self.exp_q_fuel_in[n, t] - expr += m.flow[list(n.fuel_input.keys())[0], n, p, t] + expr += m.flow[list(n.fuel_input.keys())[0], n, t] return expr == 0 self.exp_q_fuel_constr = Constraint( - self.GENERICCAES, m.TIMEINDEX, rule=exp_q_fuel_constr_rule + self.GENERICCAES, m.TIMESTEPS, rule=exp_q_fuel_constr_rule ) # (18) Expansion: Definition of single heat flows diff --git a/src/oemof/solph/components/experimental/_piecewise_linear_converter.py b/src/oemof/solph/components/experimental/_piecewise_linear_converter.py index c58e705b4..666dfd701 100644 --- a/src/oemof/solph/components/experimental/_piecewise_linear_converter.py +++ b/src/oemof/solph/components/experimental/_piecewise_linear_converter.py @@ -112,6 +112,7 @@ class PiecewiseLinearConverterBlock(ScalarBlock): **The following constraints are created:** """ + CONSTRAINT_GROUP = True def __init__(self, *args, **kwargs): @@ -184,26 +185,26 @@ def get_outflow_bounds(model, n, t): self.PWLINEARCONVERTERS, m.TIMESTEPS, bounds=get_outflow_bounds ) - def _in_equation(block, n, p, t): + def _in_equation(block, n, t): """Link binary input and output flow to component outflow.""" expr = 0 - expr += -m.flow[list(n.inputs.keys())[0], n, p, t] + expr += -m.flow[list(n.inputs.keys())[0], n, t] expr += self.inflow[n, t] return expr == 0 self.equate_in = Constraint( - self.PWLINEARCONVERTERS, m.TIMEINDEX, rule=_in_equation + self.PWLINEARCONVERTERS, m.TIMESTEPS, rule=_in_equation ) - def _out_equation(block, n, p, t): + def _out_equation(block, n, t): """Link binary input and output flow to component outflow.""" expr = 0 - expr += -m.flow[n, list(n.outputs.keys())[0], p, t] + expr += -m.flow[n, list(n.outputs.keys())[0], t] expr += self.outflow[n, t] return expr == 0 self.equate_out = Constraint( - self.PWLINEARCONVERTERS, m.TIMEINDEX, rule=_out_equation + self.PWLINEARCONVERTERS, m.TIMESTEPS, rule=_out_equation ) self.piecewise = Piecewise( diff --git a/src/oemof/solph/components/experimental/_sink_dsm.py b/src/oemof/solph/components/experimental/_sink_dsm.py index 60fdb4138..1d910f54e 100644 --- a/src/oemof/solph/components/experimental/_sink_dsm.py +++ b/src/oemof/solph/components/experimental/_sink_dsm.py @@ -494,6 +494,7 @@ class SinkDSMOemofBlock(ScalarBlock): ================================= ======================== ==== ======================================= """ # noqa: E501 + CONSTRAINT_GROUP = True def __init__(self, *args, **kwargs): @@ -564,7 +565,7 @@ def _input_output_relation_rule(block): for p, t in m.TIMEINDEX: for g in group: # Inflow from bus - lhs = m.flow[g.inflow, g, p, t] + lhs = m.flow[g.inflow, g, t] # Demand + DSM_up - DSM_down rhs = ( @@ -894,6 +895,7 @@ class SinkDSMOemofInvestmentBlock(ScalarBlock): ================================= ======================== ==== ======================================= """ # noqa: E501 + CONSTRAINT_GROUP = True def __init__(self, *args, **kwargs): @@ -1191,7 +1193,7 @@ def _input_output_relation_rule(block): for p, t in m.TIMEINDEX: for g in group: # Inflow from bus - lhs = m.flow[g.inflow, g, p, t] + lhs = m.flow[g.inflow, g, t] # Demand + DSM_up - DSM_down rhs = ( @@ -1666,6 +1668,7 @@ class SinkDSMDIWBlock(ScalarBlock): ================================= ======================== ==== ======================================= """ # noqa E:501 + CONSTRAINT_GROUP = True def __init__(self, *args, **kwargs): @@ -1742,7 +1745,7 @@ def _input_output_relation_rule(block): # first time steps: 0 + delay time if t <= g.delay_time: # Inflow from bus - lhs = m.flow[g.inflow, g, p, t] + lhs = m.flow[g.inflow, g, t] # Demand +- DSM rhs = ( g.demand[t] * g.max_demand[p] @@ -1762,7 +1765,7 @@ def _input_output_relation_rule(block): # main use case elif g.delay_time < t <= m.TIMESTEPS.at(-1) - g.delay_time: # Inflow from bus - lhs = m.flow[g.inflow, g, p, t] + lhs = m.flow[g.inflow, g, t] # Demand +- DSM rhs = ( g.demand[t] * g.max_demand[p] @@ -1784,7 +1787,7 @@ def _input_output_relation_rule(block): # last time steps: end - delay time else: # Inflow from bus - lhs = m.flow[g.inflow, g, p, t] + lhs = m.flow[g.inflow, g, t] # Demand +- DSM rhs = ( g.demand[t] * g.max_demand[p] @@ -2414,6 +2417,7 @@ class SinkDSMDIWInvestmentBlock(ScalarBlock): ================================= ======================== ==== ======================================= """ # noqa: E501 + CONSTRAINT_GROUP = True def __init__(self, *args, **kwargs): @@ -2717,7 +2721,7 @@ def _input_output_relation_rule(block): # first time steps: 0 + delay time if t <= g.delay_time: # Inflow from bus - lhs = m.flow[g.inflow, g, p, t] + lhs = m.flow[g.inflow, g, t] # Demand +- DSM rhs = ( g.demand[t] * g.max_demand[p] @@ -2737,7 +2741,7 @@ def _input_output_relation_rule(block): # main use case elif g.delay_time < t <= m.TIMESTEPS.at(-1) - g.delay_time: # Inflow from bus - lhs = m.flow[g.inflow, g, p, t] + lhs = m.flow[g.inflow, g, t] # Demand +- DSM rhs = ( g.demand[t] * g.max_demand[p] @@ -2759,7 +2763,7 @@ def _input_output_relation_rule(block): # last time steps: end - delay time else: # Inflow from bus - lhs = m.flow[g.inflow, g, p, t] + lhs = m.flow[g.inflow, g, t] # Demand +- DSM rhs = ( g.demand[t] * g.max_demand[p] @@ -3610,6 +3614,7 @@ class SinkDSMDLRBlock(ScalarBlock): =========================================== ================================= ==== ======================================= """ # noqa: E501 + CONSTRAINT_GROUP = True def __init__(self, *args, **kwargs): @@ -3717,7 +3722,7 @@ def _input_output_relation_rule(block): for p, t in m.TIMEINDEX: for g in group: # outflow from bus - lhs = m.flow[g.inflow, g, p, t] + lhs = m.flow[g.inflow, g, t] # Demand +- DR rhs = ( @@ -4681,6 +4686,7 @@ class SinkDSMDLRInvestmentBlock(ScalarBlock): ================================= ======================== ==== ======================================= """ # noqa: E501 + CONSTRAINT_GROUP = True def __init__(self, *args, **kwargs): @@ -5018,7 +5024,7 @@ def _input_output_relation_rule(block): for p, t in m.TIMEINDEX: for g in group: # outflow from bus - lhs = m.flow[g.inflow, g, p, t] + lhs = m.flow[g.inflow, g, t] # Demand +- DR rhs = ( diff --git a/src/oemof/solph/constraints/equate_flows.py b/src/oemof/solph/constraints/equate_flows.py index bd9f3e725..286209cc3 100644 --- a/src/oemof/solph/constraints/equate_flows.py +++ b/src/oemof/solph/constraints/equate_flows.py @@ -43,17 +43,17 @@ def equate_flows(model, flows1, flows2, factor1=1, name="equate_flows"): """ def _equate_flow_groups_rule(m): - for p, ts in m.TIMEINDEX: - sum1_t = sum(m.flow[fi, fo, p, ts] for fi, fo in flows1) - sum2_t = sum(m.flow[fi, fo, p, ts] for fi, fo in flows2) + for ts in m.TIMESTEPS: + sum1_t = sum(m.flow[fi, fo, ts] for fi, fo in flows1) + sum2_t = sum(m.flow[fi, fo, ts] for fi, fo in flows2) expr = sum1_t * factor1 == sum2_t if expr is not True: - getattr(m, name).add((p, ts), expr) + getattr(m, name).add(ts, expr) setattr( model, name, - po.Constraint(model.TIMEINDEX, noruleinit=True), + po.Constraint(model.TIMESTEPS, noruleinit=True), ) setattr( model, diff --git a/src/oemof/solph/constraints/equate_variables.py b/src/oemof/solph/constraints/equate_variables.py index 53d5f3e7e..52237830d 100644 --- a/src/oemof/solph/constraints/equate_variables.py +++ b/src/oemof/solph/constraints/equate_variables.py @@ -62,7 +62,7 @@ def equate_variables(model, var1, var2, factor1=1, name=None): >>> import pandas as pd >>> from oemof import solph - >>> date_time_index = pd.date_range('1/1/2012', periods=6, freq='H') + >>> date_time_index = pd.date_range('1/1/2012', periods=6, freq='h') >>> energysystem = solph.EnergySystem( ... timeindex=date_time_index, ... infer_last_interval=False, diff --git a/src/oemof/solph/constraints/integral_limit.py b/src/oemof/solph/constraints/integral_limit.py index e5157e5b7..16258d37e 100644 --- a/src/oemof/solph/constraints/integral_limit.py +++ b/src/oemof/solph/constraints/integral_limit.py @@ -12,6 +12,7 @@ SPDX-License-Identifier: MIT """ +import warnings from pyomo import environ as po @@ -29,7 +30,7 @@ def emission_limit(om, flows=None, limit=None): """ generic_integral_limit( - om, keyword="emission_factor", flows=flows, limit=limit + om, keyword="emission_factor", flows=flows, upper_limit=limit ) @@ -49,7 +50,9 @@ def emission_limit_per_period(om, flows=None, limit=None): ) -def generic_integral_limit(om, keyword, flows=None, limit=None): +def generic_integral_limit( + om, keyword, flows=None, upper_limit=None, lower_limit=None, limit=None +): r"""Set a global limit for flows weighted by attribute named keyword. The attribute named keyword has to be added to every flow you want to take into account. @@ -69,8 +72,10 @@ def generic_integral_limit(om, keyword, flows=None, limit=None): used. keyword : string attribute to consider - limit : numeric - Absolute limit of keyword attribute for the energy system. + upper_limit : numeric + Absolute upper limit of keyword attribute for the energy system. + lower_limit : numeric + Absolute lower limit of keyword attribute for the energy system. Note ---- @@ -80,7 +85,10 @@ def generic_integral_limit(om, keyword, flows=None, limit=None): **Constraint:** .. math:: \sum_{i \in F_E} \sum_{t \in T} P_i(p, t) \cdot w_i(t) - \cdot \tau(t) \leq M + \cdot \tau(t) \leq UB + + .. math:: \sum_{i \in F_E} \sum_{t \in T} P_i(p, t) \cdot w_i(t) + \cdot \tau(t) \geq LB With `F_I` being the set of flows considered for the integral limit and @@ -95,14 +103,15 @@ def generic_integral_limit(om, keyword, flows=None, limit=None): :math:`P_n(p, t)` V power flow :math:`n` at time index :math:`p, t` :math:`w_N(t)` P weight given to Flow named according to `keyword` :math:`\tau(t)` P width of time step :math:`t` - :math:`L` P global limit given by keyword `limit` + :math:`UB` P global limit given by keyword `upper_limit` + :math:`LB` P global limit given by keyword `lower_limit` ================= ==== ==================================================== Examples -------- >>> import pandas as pd >>> from oemof import solph - >>> date_time_index = pd.date_range('1/1/2012', periods=6, freq='H') + >>> date_time_index = pd.date_range('1/1/2012', periods=6, freq='h') >>> energysystem = solph.EnergySystem( ... timeindex=date_time_index, ... infer_last_interval=False, @@ -124,25 +133,46 @@ def generic_integral_limit(om, keyword, flows=None, limit=None): flows = _check_and_set_flows(om, flows, keyword) limit_name = "integral_limit_" + keyword + if limit is not None: + msg = ( + "The keyword argument 'limit' to generic_integral_limit has been" + "renamed to 'upper_limit'. The transitional wrapper will be" + "deleted in a future version." + ) + warnings.warn(msg, FutureWarning) + upper_limit = limit + + if upper_limit is None and lower_limit is None: + raise ValueError( + "At least one of upper_limit and lower_limit needs to be defined." + ) + setattr( om, limit_name, po.Expression( expr=sum( - om.flow[inflow, outflow, p, t] + om.flow[inflow, outflow, t] * om.timeincrement[t] * sequence(getattr(flows[inflow, outflow], keyword))[t] for (inflow, outflow) in flows - for p, t in om.TIMEINDEX + for t in om.TIMESTEPS ) ), ) - setattr( - om, - limit_name + "_constraint", - po.Constraint(expr=(getattr(om, limit_name) <= limit)), - ) + if upper_limit is not None: + setattr( + om, + limit_name + "_upper_limit", + po.Constraint(expr=(getattr(om, limit_name) <= upper_limit)), + ) + if lower_limit is not None: + setattr( + om, + limit_name + "_lower_limit", + po.Constraint(expr=(getattr(om, limit_name) >= lower_limit)), + ) return om @@ -208,7 +238,7 @@ def generic_periodical_integral_limit(om, keyword, flows=None, limit=None): def _periodical_integral_limit_rule(m, p): expr = sum( - om.flow[inflow, outflow, p, t] + om.flow[inflow, outflow, t] * om.timeincrement[t] * sequence(getattr(flows[inflow, outflow], keyword))[t] for (inflow, outflow) in flows diff --git a/src/oemof/solph/constraints/investment_limit.py b/src/oemof/solph/constraints/investment_limit.py index f2a44a955..1d3b62454 100644 --- a/src/oemof/solph/constraints/investment_limit.py +++ b/src/oemof/solph/constraints/investment_limit.py @@ -171,7 +171,7 @@ def additional_investment_flow_limit(model, keyword, limit=None): -------- >>> import pandas as pd >>> from oemof import solph - >>> date_time_index = pd.date_range('1/1/2020', periods=6, freq='H') + >>> date_time_index = pd.date_range('1/1/2020', periods=6, freq='h') >>> es = solph.EnergySystem( ... timeindex=date_time_index, ... infer_last_interval=False, diff --git a/src/oemof/solph/constraints/shared_limit.py b/src/oemof/solph/constraints/shared_limit.py index e85a3abab..3ab92b965 100644 --- a/src/oemof/solph/constraints/shared_limit.py +++ b/src/oemof/solph/constraints/shared_limit.py @@ -60,7 +60,7 @@ def shared_limit( >>> import pandas as pd >>> from oemof import solph - >>> date_time_index = pd.date_range('1/1/2012', periods=6, freq='H') + >>> date_time_index = pd.date_range('1/1/2012', periods=6, freq='h') >>> energysystem = solph.EnergySystem( ... timeindex=date_time_index, ... infer_last_interval=False, diff --git a/src/oemof/solph/constraints/storage_level.py b/src/oemof/solph/constraints/storage_level.py index 15b13b017..87c892bdf 100644 --- a/src/oemof/solph/constraints/storage_level.py +++ b/src/oemof/solph/constraints/storage_level.py @@ -88,9 +88,9 @@ def _output_active_rule(m): ) # Define constraints on the output flows - def _constraint_output_rule(m, o, p, t): + def _constraint_output_rule(m, o, t): return ( - m.flow[multiplexer_bus, o, p, t] + m.flow[multiplexer_bus, o, t] / m.flows[multiplexer_bus, o].nominal_value <= active_output[o, t] ) @@ -100,7 +100,7 @@ def _constraint_output_rule(m, o, p, t): f"{name}_output_constraint", po.Constraint( OUTPUTS, - model.TIMEINDEX, + model.TIMESTEPS, rule=_constraint_output_rule, ), ) @@ -153,9 +153,9 @@ def _input_active_rule(m): ) # Define constraints on the input flows - def _constraint_input_rule(m, i, p, t): + def _constraint_input_rule(m, i, t): return ( - m.flow[i, multiplexer_bus, p, t] + m.flow[i, multiplexer_bus, t] / m.flows[i, multiplexer_bus].nominal_value <= 1 - inactive_input[i, t] ) @@ -165,7 +165,7 @@ def _constraint_input_rule(m, i, p, t): f"{name}_input_constraint", po.Constraint( INPUTS, - model.TIMEINDEX, + model.TIMESTEPS, rule=_constraint_input_rule, ), ) diff --git a/src/oemof/solph/flows/_flow.py b/src/oemof/solph/flows/_flow.py index ae9b4e6e6..6ed8e97ab 100644 --- a/src/oemof/solph/flows/_flow.py +++ b/src/oemof/solph/flows/_flow.py @@ -66,15 +66,13 @@ class Flow(Edge): the normed *upper bound* on the negative difference (`flow[t-1] > flow[t]`) of two consecutive flow values. full_load_time_max : numeric, :math:`t_{full\_load,max}` - Upper bound on the summed flow expressed as the equivalent time that - the flow would have to run at full capacity to yield the same sum. The - value will be multiplied with the nominal_value to get the absolute - limit. + Maximum energy transported by the flow expressed as the time (in + hours) that the flow would have to run at nominal capacity + (`nominal_value`). full_load_time_min : numeric, :math:`t_{full\_load,min}` - Lower bound on the summed flow expressed as the equivalent time that - the flow would have to run at full capacity to yield the same sum. The - value will be multiplied with the nominal_value to get the absolute - limit. + Minimum energy transported by the flow expressed as the time (in + hours) that the flow would have to run at nominal capacity + (`nominal_value`). integer : boolean Set True to bound the flow values to integers. nonconvex : :class:`NonConvex ` @@ -293,7 +291,7 @@ def __init__( if ( self.investment and self.nonconvex - and not np.isfinite(self.investment.maximum) + and not np.isfinite(self.investment.maximum.max()) ): raise AttributeError( "Investment into a non-convex flows needs a maximum " diff --git a/src/oemof/solph/flows/_investment_flow_block.py b/src/oemof/solph/flows/_investment_flow_block.py index 760c58354..99efec0dc 100644 --- a/src/oemof/solph/flows/_investment_flow_block.py +++ b/src/oemof/solph/flows/_investment_flow_block.py @@ -141,11 +141,7 @@ def _create_sets(self, group): ) self.MIN_INVESTFLOWS = Set( - initialize=[ - (g[0], g[1]) - for g in group - if (g[2].min[0] != 0 or len(g[2].min) > 1) - ] + initialize=[(g[0], g[1]) for g in group if g[2].min.min() != 0] ) self.EXISTING_INVESTFLOWS = Set( @@ -629,7 +625,7 @@ def _investflow_fixed_rule(block): for i, o in self.FIXED_INVESTFLOWS: for p, t in m.TIMEINDEX: expr = ( - m.flow[i, o, p, t] + m.flow[i, o, t] == self.total[i, o, p] * m.flows[i, o].fix[t] ) self.fixed.add((i, o, p, t), expr) @@ -646,7 +642,7 @@ def _max_investflow_rule(block): for i, o in self.NON_FIXED_INVESTFLOWS: for p, t in m.TIMEINDEX: expr = ( - m.flow[i, o, p, t] + m.flow[i, o, t] <= self.total[i, o, p] * m.flows[i, o].max[t] ) self.max.add((i, o, p, t), expr) @@ -663,7 +659,7 @@ def _min_investflow_rule(block): for i, o in self.MIN_INVESTFLOWS: for p, t in m.TIMEINDEX: expr = ( - m.flow[i, o, p, t] + m.flow[i, o, t] >= self.total[i, o, p] * m.flows[i, o].min[t] ) self.min.add((i, o, p, t), expr) @@ -678,7 +674,7 @@ def _full_load_time_max_investflow_rule(_, i, o): in investment case. """ expr = sum( - m.flow[i, o, p, t] * m.timeincrement[t] for p, t in m.TIMEINDEX + m.flow[i, o, t] * m.timeincrement[t] for t in m.TIMESTEPS ) <= ( m.flows[i, o].full_load_time_max * sum(self.total[i, o, p] for p in m.PERIODS) @@ -695,7 +691,7 @@ def _full_load_time_min_investflow_rule(_, i, o): in investment case. """ expr = sum( - m.flow[i, o, p, t] * m.timeincrement[t] for p, t in m.TIMEINDEX + m.flow[i, o, t] * m.timeincrement[t] for t in m.TIMESTEPS ) >= ( sum(self.total[i, o, p] for p in m.PERIODS) * m.flows[i, o].full_load_time_min diff --git a/src/oemof/solph/flows/_non_convex_flow_block.py b/src/oemof/solph/flows/_non_convex_flow_block.py index 89faa9320..aa1cf457c 100644 --- a/src/oemof/solph/flows/_non_convex_flow_block.py +++ b/src/oemof/solph/flows/_non_convex_flow_block.py @@ -230,14 +230,14 @@ def _sets_for_non_convex_flows(self, group): initialize=[ (g[0], g[1]) for g in group - if max(g[2].nonconvex.minimum_uptime) > 0 + if g[2].nonconvex.minimum_uptime.max() > 0 ] ) self.MINDOWNTIMEFLOWS = Set( initialize=[ (g[0], g[1]) for g in group - if max(g[2].nonconvex.minimum_downtime) > 0 + if g[2].nonconvex.minimum_downtime.max() > 0 ] ) self.NEGATIVE_GRADIENT_FLOWS = Set( @@ -650,15 +650,15 @@ def _maximum_flow_constraint(self): """ m = self.parent_block() - def _maximum_flow_rule(_, i, o, p, t): + def _maximum_flow_rule(_, i, o, t): """Rule definition for MILP maximum flow constraints.""" expr = ( self.status_nominal[i, o, t] * m.flows[i, o].max[t] - >= m.flow[i, o, p, t] + >= m.flow[i, o, t] ) return expr - return Constraint(self.MIN_FLOWS, m.TIMEINDEX, rule=_maximum_flow_rule) + return Constraint(self.MIN_FLOWS, m.TIMESTEPS, rule=_maximum_flow_rule) def _minimum_flow_constraint(self): r""" @@ -670,15 +670,15 @@ def _minimum_flow_constraint(self): """ m = self.parent_block() - def _minimum_flow_rule(_, i, o, p, t): + def _minimum_flow_rule(_, i, o, t): """Rule definition for MILP minimum flow constraints.""" expr = ( self.status_nominal[i, o, t] * m.flows[i, o].min[t] - <= m.flow[i, o, p, t] + <= m.flow[i, o, t] ) return expr - return Constraint(self.MIN_FLOWS, m.TIMEINDEX, rule=_minimum_flow_rule) + return Constraint(self.MIN_FLOWS, m.TIMESTEPS, rule=_minimum_flow_rule) def _status_nominal_constraint(self): r""" @@ -743,17 +743,11 @@ def _positive_gradient_flow_constraint(_): m.flow[ i, o, - m.TIMEINDEX[index][0], - m.TIMEINDEX[index][1], + m.TIMESTEPS[index], ] - * self.status[i, o, m.TIMEINDEX[index][1]] - - m.flow[ - i, - o, - m.TIMEINDEX[index - 1][0], - m.TIMEINDEX[index - 1][1], - ] - * self.status[i, o, m.TIMEINDEX[index - 1][1]] + * self.status[i, o, m.TIMESTEPS[index]] + - m.flow[i, o, m.TIMESTEPS[index - 1]] + * self.status[i, o, m.TIMESTEPS[index - 1]] ) rhs = self.positive_gradient[ i, o, m.TIMEINDEX[index][1] @@ -762,8 +756,7 @@ def _positive_gradient_flow_constraint(_): ( i, o, - m.TIMEINDEX[index][0], - m.TIMEINDEX[index][1], + m.TIMESTEPS[index], ), lhs <= rhs, ) @@ -774,14 +767,13 @@ def _positive_gradient_flow_constraint(_): ( i, o, - m.TIMEINDEX[index][0], - m.TIMEINDEX[index][1], + m.TIMESTEPS[index], ), lhs == rhs, ) self.positive_gradient_constr = Constraint( - self.POSITIVE_GRADIENT_FLOWS, m.TIMEINDEX, noruleinit=True + self.POSITIVE_GRADIENT_FLOWS, m.TIMESTEPS, noruleinit=True ) self.positive_gradient_build = BuildAction( rule=_positive_gradient_flow_constraint @@ -790,33 +782,28 @@ def _positive_gradient_flow_constraint(_): def _negative_gradient_flow_constraint(_): r"""Rule definition for negative gradient constraint.""" for i, o in self.NEGATIVE_GRADIENT_FLOWS: - for index in range(1, len(m.TIMEINDEX) + 1): - if m.TIMEINDEX[index][1] > 0: + for index in range(1, len(m.TIMESTEPS) + 1): + if m.TIMESTEPS[index] > 0: lhs = ( m.flow[ i, o, - m.TIMEINDEX[index - 1][0], - m.TIMEINDEX[index - 1][1], + m.TIMESTEPS[index - 1], ] - * self.status[i, o, m.TIMEINDEX[index - 1][1]] + * self.status[i, o, m.TIMESTEPS[index - 1]] - m.flow[ i, o, - m.TIMEINDEX[index][0], - m.TIMEINDEX[index][1], + m.TIMESTEPS[index], ] - * self.status[i, o, m.TIMEINDEX[index][1]] + * self.status[i, o, m.TIMESTEPS[index]] ) - rhs = self.negative_gradient[ - i, o, m.TIMEINDEX[index][1] - ] + rhs = self.negative_gradient[i, o, m.TIMESTEPS[index]] self.negative_gradient_constr.add( ( i, o, - m.TIMEINDEX[index][0], - m.TIMEINDEX[index][1], + m.TIMESTEPS[index], ), lhs <= rhs, ) @@ -827,14 +814,13 @@ def _negative_gradient_flow_constraint(_): ( i, o, - m.TIMEINDEX[index][0], - m.TIMEINDEX[index][1], + m.TIMESTEPS[index], ), lhs == rhs, ) self.negative_gradient_constr = Constraint( - self.NEGATIVE_GRADIENT_FLOWS, m.TIMEINDEX, noruleinit=True + self.NEGATIVE_GRADIENT_FLOWS, m.TIMESTEPS, noruleinit=True ) self.negative_gradient_build = BuildAction( rule=_negative_gradient_flow_constraint diff --git a/src/oemof/solph/flows/_simple_flow_block.py b/src/oemof/solph/flows/_simple_flow_block.py index eb4d55c26..7cf21bced 100644 --- a/src/oemof/solph/flows/_simple_flow_block.py +++ b/src/oemof/solph/flows/_simple_flow_block.py @@ -215,8 +215,8 @@ def _flow_full_load_time_max_rule(model): """Rule definition for build action of max. sum flow constraint.""" for inp, out in self.FULL_LOAD_TIME_MAX_FLOWS: lhs = sum( - m.flow[inp, out, p, ts] * m.timeincrement[ts] - for p, ts in m.TIMEINDEX + m.flow[inp, out, ts] * m.timeincrement[ts] + for ts in m.TIMESTEPS ) rhs = ( m.flows[inp, out].full_load_time_max @@ -235,8 +235,8 @@ def _flow_full_load_time_min_rule(model): """Rule definition for build action of min. sum flow constraint.""" for inp, out in self.FULL_LOAD_TIME_MIN_FLOWS: lhs = sum( - m.flow[inp, out, p, ts] * m.timeincrement[ts] - for p, ts in m.TIMEINDEX + m.flow[inp, out, ts] * m.timeincrement[ts] + for ts in m.TIMESTEPS ) rhs = ( m.flows[inp, out].full_load_time_min @@ -254,49 +254,37 @@ def _flow_full_load_time_min_rule(model): def _positive_gradient_flow_rule(model): """Rule definition for positive gradient constraint.""" for inp, out in self.POSITIVE_GRADIENT_FLOWS: - for index in range(1, len(m.TIMEINDEX) + 1): - if m.TIMEINDEX.at(index)[1] > 0: + for index in range(1, len(m.TIMESTEPS) + 1): + if m.TIMESTEPS.at(index) > 0: lhs = ( m.flow[ inp, out, - m.TIMEINDEX.at(index)[0], - m.TIMEINDEX.at(index)[1], + m.TIMESTEPS.at(index), ] - m.flow[ inp, out, - m.TIMEINDEX.at(index - 1)[0], - m.TIMEINDEX.at(index - 1)[1], + m.TIMESTEPS.at(index - 1), ] ) rhs = self.positive_gradient[ - inp, out, m.TIMEINDEX.at(index)[1] + inp, out, m.TIMESTEPS.at(index) ] self.positive_gradient_constr.add( - ( - inp, - out, - m.TIMEINDEX.at(index)[0], - m.TIMEINDEX.at(index)[1], - ), + (inp, out, m.TIMESTEPS.at(index)), lhs <= rhs, ) else: lhs = self.positive_gradient[inp, out, 0] rhs = 0 self.positive_gradient_constr.add( - ( - inp, - out, - m.TIMEINDEX.at(index)[0], - m.TIMEINDEX.at(index)[1], - ), + (inp, out, m.TIMESTEPS.at(index)), lhs == rhs, ) self.positive_gradient_constr = Constraint( - self.POSITIVE_GRADIENT_FLOWS, m.TIMEINDEX, noruleinit=True + self.POSITIVE_GRADIENT_FLOWS, m.TIMESTEPS, noruleinit=True ) self.positive_gradient_build = BuildAction( rule=_positive_gradient_flow_rule @@ -305,70 +293,50 @@ def _positive_gradient_flow_rule(model): def _negative_gradient_flow_rule(model): """Rule definition for negative gradient constraint.""" for inp, out in self.NEGATIVE_GRADIENT_FLOWS: - for index in range(1, len(m.TIMEINDEX) + 1): - if m.TIMEINDEX.at(index)[1] > 0: + for index in range(1, len(m.TIMESTEPS) + 1): + if m.TIMESTEPS.at(index) > 0: lhs = ( - m.flow[ - inp, - out, - m.TIMEINDEX.at(index - 1)[0], - m.TIMEINDEX.at(index - 1)[1], - ] - - m.flow[ - inp, - out, - m.TIMEINDEX.at(index)[0], - m.TIMEINDEX.at(index)[1], - ] + m.flow[inp, out, m.TIMESTEPS.at(index - 1)] + - m.flow[inp, out, m.TIMESTEPS.at(index)] ) rhs = self.negative_gradient[ - inp, out, m.TIMEINDEX.at(index)[1] + inp, out, m.TIMESTEPS.at(index) ] self.negative_gradient_constr.add( - ( - inp, - out, - m.TIMEINDEX.at(index)[0], - m.TIMEINDEX.at(index)[1], - ), + (inp, out, m.TIMESTEPS.at(index)), lhs <= rhs, ) else: lhs = self.negative_gradient[inp, out, 0] rhs = 0 self.negative_gradient_constr.add( - ( - inp, - out, - m.TIMEINDEX.at(index)[0], - m.TIMEINDEX.at(index)[1], - ), + (inp, out, m.TIMESTEPS.at(index)), lhs == rhs, ) self.negative_gradient_constr = Constraint( - self.NEGATIVE_GRADIENT_FLOWS, m.TIMEINDEX, noruleinit=True + self.NEGATIVE_GRADIENT_FLOWS, m.TIMESTEPS, noruleinit=True ) self.negative_gradient_build = BuildAction( rule=_negative_gradient_flow_rule ) - def _integer_flow_rule(block, ii, oi, pi, ti): + def _integer_flow_rule(_, ii, oi, ti): """Force flow variable to NonNegativeInteger values.""" - return self.integer_flow[ii, oi, ti] == m.flow[ii, oi, pi, ti] + return self.integer_flow[ii, oi, ti] == m.flow[ii, oi, ti] self.integer_flow_constr = Constraint( - self.INTEGER_FLOWS, m.TIMEINDEX, rule=_integer_flow_rule + self.INTEGER_FLOWS, m.TIMESTEPS, rule=_integer_flow_rule ) if m.es.periods is not None: - def _lifetime_output_rule(block): + def _lifetime_output_rule(_): """Force flow value to zero when lifetime is reached""" for inp, out in self.LIFETIME_FLOWS: for p, ts in m.TIMEINDEX: if m.flows[inp, out].lifetime <= m.es.periods_years[p]: - lhs = m.flow[inp, out, p, ts] + lhs = m.flow[inp, out, ts] rhs = 0 self.lifetime_output.add( (inp, out, p, ts), (lhs == rhs) @@ -391,7 +359,7 @@ def _lifetime_age_output_rule(block): m.flows[inp, out].lifetime - m.flows[inp, out].age <= m.es.periods_years[p] ): - lhs = m.flow[inp, out, p, ts] + lhs = m.flow[inp, out, ts] rhs = 0 self.lifetime_age_output.add( (inp, out, p, ts), (lhs == rhs) @@ -462,9 +430,9 @@ def _objective_expression(self): if m.es.periods is None: for i, o in m.FLOWS: if m.flows[i, o].variable_costs[0] is not None: - for p, t in m.TIMEINDEX: + for t in m.TIMESTEPS: variable_costs += ( - m.flow[i, o, p, t] + m.flow[i, o, t] * m.objective_weighting[t] * m.flows[i, o].variable_costs[t] ) @@ -474,7 +442,7 @@ def _objective_expression(self): if m.flows[i, o].variable_costs[0] is not None: for p, t in m.TIMEINDEX: variable_costs += ( - m.flow[i, o, p, t] + m.flow[i, o, t] * m.objective_weighting[t] * m.flows[i, o].variable_costs[t] * ((1 + m.discount_rate) ** -m.es.periods_years[p]) diff --git a/src/oemof/solph/flows/experimental/_electrical_line.py b/src/oemof/solph/flows/experimental/_electrical_line.py index e96f85de7..2b5e2eb85 100644 --- a/src/oemof/solph/flows/experimental/_electrical_line.py +++ b/src/oemof/solph/flows/experimental/_electrical_line.py @@ -170,13 +170,13 @@ def _voltage_angle_bounds(block, b, t): bus.slack = True def _voltage_angle_relation(block): - for p, t in m.TIMEINDEX: + for t in m.TIMESTEPS: for n in group: if n.input.slack is True: self.voltage_angle[n.output, t].value = 0 self.voltage_angle[n.output, t].fix() try: - lhs = m.flow[n.input, n.output, p, t] + lhs = m.flow[n.input, n.output, t] rhs = ( 1 / n.reactance[t] @@ -190,8 +190,8 @@ def _voltage_angle_relation(block): "Error in constraint creation", "of node {}".format(n.label), ) - block.electrical_flow.add((n, p, t), (lhs == rhs)) + block.electrical_flow.add((n, t), (lhs == rhs)) - self.electrical_flow = Constraint(group, m.TIMEINDEX, noruleinit=True) + self.electrical_flow = Constraint(group, m.TIMESTEPS, noruleinit=True) self.electrical_flow_build = BuildAction(rule=_voltage_angle_relation) diff --git a/src/oemof/solph/processing.py b/src/oemof/solph/processing.py index c641fd436..6623aa5be 100644 --- a/src/oemof/solph/processing.py +++ b/src/oemof/solph/processing.py @@ -17,6 +17,7 @@ """ import sys +from collections import abc from itertools import groupby import numpy as np @@ -25,6 +26,7 @@ from pyomo.core.base.piecewise import IndexedPiecewise from pyomo.core.base.var import Var +from ._plumbing import _FakeSequence from .helpers import flatten @@ -233,9 +235,9 @@ def results(model, remove_last_time_point=False): # create a dict of dataframes keyed by oemof tuples df_dict = { - k - if len(k) > 1 - else (k[0], None): v[["timestep", "variable_name", "value"]] + k if len(k) > 1 else (k[0], None): v[ + ["timestep", "variable_name", "value"] + ] for k, v in df.groupby("oemof_tuple") } @@ -273,12 +275,11 @@ def results(model, remove_last_time_point=False): # add dual variables for bus constraints if model.dual is not None: grouped = groupby( - sorted(model.BusBlock.balance.iterkeys()), lambda p: p[0] + sorted(model.BusBlock.balance.iterkeys()), lambda t: t[0] ) - for bus, timeindex in grouped: + for bus, timestep in grouped: duals = [ - model.dual[model.BusBlock.balance[bus, p, t]] - for _, p, t in timeindex + model.dual[model.BusBlock.balance[bus, t]] for _, t in timestep ] if model.es.periods is None: df = pd.DataFrame({"duals": duals}, index=result_index[:-1]) @@ -430,11 +431,11 @@ def convert_keys_to_strings(result, keep_none_type=False): """ if keep_none_type: converted = { - tuple([str(e) if e is not None else None for e in k]) - if isinstance(k, tuple) - else str(k) - if k is not None - else None: v + ( + tuple([str(e) if e is not None else None for e in k]) + if isinstance(k, tuple) + else str(k) if k is not None else None + ): v for k, v in result.items() } else: @@ -511,7 +512,8 @@ def __separate_attrs( """ def detect_scalars_and_sequences(com): - com_data = {"scalars": {}, "sequences": {}} + scalars = {} + sequences = {} default_exclusions = [ "__", @@ -539,13 +541,13 @@ def detect_scalars_and_sequences(com): # "investment" prefix to component data: if attr_value.__class__.__name__ == "Investment": invest_data = detect_scalars_and_sequences(attr_value) - com_data["scalars"].update( + scalars.update( { "investment_" + str(k): v for k, v in invest_data["scalars"].items() } ) - com_data["sequences"].update( + sequences.update( { "investment_" + str(k): v for k, v in invest_data["sequences"].items() @@ -554,7 +556,7 @@ def detect_scalars_and_sequences(com): continue if isinstance(attr_value, str): - com_data["scalars"][a] = attr_value + scalars[a] = attr_value continue # If the label is a tuple it is iterable, therefore it should be @@ -562,16 +564,19 @@ def detect_scalars_and_sequences(com): if a == "label": attr_value = str(attr_value) - # check if attribute is iterable - # see: https://stackoverflow.com/questions/1952464/ - # in-python-how-do-i-determine-if-an-object-is-iterable - try: - _ = (e for e in attr_value) - com_data["sequences"][a] = attr_value - except TypeError: - com_data["scalars"][a] = attr_value + if isinstance(attr_value, abc.Iterable): + sequences[a] = attr_value + elif isinstance(attr_value, _FakeSequence): + scalars[a] = attr_value.value + else: + scalars[a] = attr_value - com_data["sequences"] = flatten(com_data["sequences"]) + sequences = flatten(sequences) + + com_data = { + "scalars": scalars, + "sequences": sequences, + } move_undetected_scalars(com_data) if exclude_none: remove_nones(com_data) @@ -587,19 +592,11 @@ def move_undetected_scalars(com): if isinstance(value, str): com["scalars"][ckey] = value del com["sequences"][ckey] - continue - try: - _ = (e for e in value) - except TypeError: - com["scalars"][ckey] = value + elif isinstance(value, _FakeSequence): + com["scalars"][ckey] = value.value + del com["sequences"][ckey] + elif len(value) == 0: del com["sequences"][ckey] - else: - try: - if not value.default_changed: - com["scalars"][ckey] = value.default - del com["sequences"][ckey] - except AttributeError: - pass def remove_nones(com): for ckey, value in list(com["scalars"].items()): diff --git a/src/oemof/solph/views.py b/src/oemof/solph/views.py index 93a08921e..2383c1ebc 100644 --- a/src/oemof/solph/views.py +++ b/src/oemof/solph/views.py @@ -409,13 +409,19 @@ def net_storage_flow(results, node_type): subset = ( df.T.groupby( lambda x1: ( - lambda fr, to, ty: "output" - if (fr == lb and ty == "flow") - else "input" - if (to == lb and ty == "flow") - else "level" - if (fr == lb and ty != "flow") - else None + lambda fr, to, ty: ( + "output" + if (fr == lb and ty == "flow") + else ( + "input" + if (to == lb and ty == "flow") + else ( + "level" + if (fr == lb and ty != "flow") + else None + ) + ) + ) )(*x1) ) .sum() diff --git a/tests/constraint_tests.py b/tests/constraint_tests.py index c5be91e1f..e93e7dc0f 100644 --- a/tests/constraint_tests.py +++ b/tests/constraint_tests.py @@ -29,7 +29,7 @@ def setup_class(cls): r"^objective.*(?=s\.t\.)", re.DOTALL | re.MULTILINE ) - cls.date_time_index = pd.date_range("1/1/2012", periods=3, freq="H") + cls.date_time_index = pd.date_range("1/1/2012", periods=3, freq="h") cls.tmppath = solph.helpers.extend_basic_path("tmp") logging.info(cls.tmppath) @@ -283,7 +283,7 @@ def test_storage(self): }, nominal_storage_capacity=1e5, loss_rate=0.13, - storage_costs=0.1, + storage_costs=[0.1, 0.2, 0.3, 0.4], inflow_conversion_factor=0.97, outflow_conversion_factor=0.86, initial_storage_level=0.4, @@ -904,6 +904,29 @@ def test_flow_without_emission_for_emission_constraint_no_error(self): self.compare_lp_files("emission_limit_no_error.lp", my_om=om) + def test_flow_without_emission_for_emission_constraint_lower(self): + """Test that no error is thrown if no flows are explicitly passed""" + bel = solph.buses.Bus(label="electricityBus") + source1 = solph.components.Source( + label="source1", + outputs={ + bel: solph.flows.Flow( + nominal_value=100, + custom_attributes={"emission_factor": 0.8}, + ) + }, + ) + source2 = solph.components.Source( + label="source2", outputs={bel: solph.flows.Flow(nominal_value=100)} + ) + self.energysystem.add(bel, source1, source2) + om = self.get_om() + solph.constraints.generic_integral_limit( + om, keyword="emission_factor", lower_limit=777 + ) + + self.compare_lp_files("emission_limit_lower.lp", my_om=om) + def test_equate_variables_constraint(self): """Testing the equate_variables function in the constraint module.""" bus1 = solph.buses.Bus(label="Bus1") @@ -1356,6 +1379,14 @@ def test_offsetconverter_nonconvex(self): b_diesel = solph.buses.Bus(label="bus_diesel") b_el = solph.buses.Bus(label="bus_electricity") + min = 0.2 + eta_at_nom = 0.4 + eta_at_min = 0.35 + + slope, offset = solph.components.slope_offset_from_nonconvex_output( + 1, min, eta_at_nom, eta_at_min + ) + diesel_genset = solph.components.OffsetConverter( label="diesel_genset", inputs={ @@ -1365,10 +1396,11 @@ def test_offsetconverter_nonconvex(self): b_el: solph.flows.Flow( nonconvex=solph.NonConvex(), nominal_value=100, - min=0.2, + min=min, ) }, - coefficients=[2.5, 0.5], + conversion_factors={b_diesel: slope}, + normed_offsets={b_diesel: offset}, ) self.energysystem.add(b_diesel, b_el, diesel_genset) @@ -1380,12 +1412,20 @@ def test_offsetconverter_nonconvex_investment(self): b_diesel = solph.buses.Bus(label="bus_diesel") b_el = solph.buses.Bus(label="bus_electricity") + min = 0.2 + eta_at_nom = 0.4 + eta_at_min = 0.35 + + slope, offset = solph.components.slope_offset_from_nonconvex_output( + 1, min, eta_at_nom, eta_at_min + ) + diesel_genset = solph.components.OffsetConverter( label="diesel_genset", inputs={b_diesel: solph.flows.Flow()}, outputs={ b_el: solph.flows.Flow( - min=0.2, + min=min, nonconvex=solph.NonConvex(), nominal_value=solph.Investment( ep_costs=100, @@ -1393,7 +1433,8 @@ def test_offsetconverter_nonconvex_investment(self): ), ) }, - coefficients=[2.5, 0.5], + conversion_factors={b_diesel: slope}, + normed_offsets={b_diesel: offset}, ) self.energysystem.add(b_diesel, b_el, diesel_genset) @@ -1903,7 +1944,7 @@ def test_nonequidistant_storage(self): """Constraint test of an energy system with non-equidistant time index """ - idxh = pd.date_range("1/1/2017", periods=3, freq="H") + idxh = pd.date_range("1/1/2017", periods=3, freq="h") idx2h = pd.date_range("1/1/2017 03:00:00", periods=2, freq="2H") idx30m = pd.date_range("1/1/2017 07:00:00", periods=4, freq="30min") timeindex = idxh.append([idx2h, idx30m]) @@ -1932,7 +1973,7 @@ def test_storage_level_constraint(self): with storage_level_constraint """ es = solph.EnergySystem( - timeindex=pd.date_range("2022-01-01", freq="1H", periods=2), + timeindex=pd.date_range("2022-01-01", freq="h", periods=2), infer_last_interval=True, ) diff --git a/tests/lp_files/activity_costs.lp b/tests/lp_files/activity_costs.lp index 02f6420cf..5e10fb48a 100644 --- a/tests/lp_files/activity_costs.lp +++ b/tests/lp_files/activity_costs.lp @@ -2,25 +2,25 @@ min objective: -+10 flow(cheap_plant_activity_costs_Bus_C_0_0) -+10 flow(cheap_plant_activity_costs_Bus_C_0_1) -+10 flow(cheap_plant_activity_costs_Bus_C_0_2) ++10 flow(cheap_plant_activity_costs_Bus_C_0) ++10 flow(cheap_plant_activity_costs_Bus_C_1) ++10 flow(cheap_plant_activity_costs_Bus_C_2) +2 NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_0) +2 NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_1) +2 NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_2) s.t. -c_e_BusBlock_balance(Bus_C_0_0)_: -+1 flow(cheap_plant_activity_costs_Bus_C_0_0) +c_e_BusBlock_balance(Bus_C_0)_: ++1 flow(cheap_plant_activity_costs_Bus_C_0) = 0 -c_e_BusBlock_balance(Bus_C_0_1)_: -+1 flow(cheap_plant_activity_costs_Bus_C_0_1) +c_e_BusBlock_balance(Bus_C_1)_: ++1 flow(cheap_plant_activity_costs_Bus_C_1) = 0 -c_e_BusBlock_balance(Bus_C_0_2)_: -+1 flow(cheap_plant_activity_costs_Bus_C_0_2) +c_e_BusBlock_balance(Bus_C_2)_: ++1 flow(cheap_plant_activity_costs_Bus_C_2) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_activity_costs_Bus_C_0)_: @@ -38,40 +38,40 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_activity_costs_Bus_ +1 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_2) = 0 -c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_0_0)_: --1 flow(cheap_plant_activity_costs_Bus_C_0_0) +c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_0)_: +-1 flow(cheap_plant_activity_costs_Bus_C_0) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_0_1)_: --1 flow(cheap_plant_activity_costs_Bus_C_0_1) +c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_1)_: +-1 flow(cheap_plant_activity_costs_Bus_C_1) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_0_2)_: --1 flow(cheap_plant_activity_costs_Bus_C_0_2) +c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_2)_: +-1 flow(cheap_plant_activity_costs_Bus_C_2) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_0_0)_: -+1 flow(cheap_plant_activity_costs_Bus_C_0_0) +c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_0)_: ++1 flow(cheap_plant_activity_costs_Bus_C_0) -1 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_0_1)_: -+1 flow(cheap_plant_activity_costs_Bus_C_0_1) +c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_1)_: ++1 flow(cheap_plant_activity_costs_Bus_C_1) -1 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_0_2)_: -+1 flow(cheap_plant_activity_costs_Bus_C_0_2) +c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_2)_: ++1 flow(cheap_plant_activity_costs_Bus_C_2) -1 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_2) <= 0 bounds - 0 <= flow(cheap_plant_activity_costs_Bus_C_0_0) <= 10.0 - 0 <= flow(cheap_plant_activity_costs_Bus_C_0_1) <= 10.0 - 0 <= flow(cheap_plant_activity_costs_Bus_C_0_2) <= 10.0 + 0 <= flow(cheap_plant_activity_costs_Bus_C_0) <= 10.0 + 0 <= flow(cheap_plant_activity_costs_Bus_C_1) <= 10.0 + 0 <= flow(cheap_plant_activity_costs_Bus_C_2) <= 10.0 0 <= NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_1) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_2) <= 1 diff --git a/tests/lp_files/activity_costs_multi_period.lp b/tests/lp_files/activity_costs_multi_period.lp index fd798fa7b..ee364020e 100644 --- a/tests/lp_files/activity_costs_multi_period.lp +++ b/tests/lp_files/activity_costs_multi_period.lp @@ -2,12 +2,12 @@ min objective: -+10 flow(cheap_plant_activity_costs_Bus_C_0_0) -+10 flow(cheap_plant_activity_costs_Bus_C_0_1) -+9.80392156862745 flow(cheap_plant_activity_costs_Bus_C_1_2) -+9.80392156862745 flow(cheap_plant_activity_costs_Bus_C_1_3) -+9.611687812379854 flow(cheap_plant_activity_costs_Bus_C_2_4) -+9.611687812379854 flow(cheap_plant_activity_costs_Bus_C_2_5) ++10 flow(cheap_plant_activity_costs_Bus_C_0) ++10 flow(cheap_plant_activity_costs_Bus_C_1) ++9.80392156862745 flow(cheap_plant_activity_costs_Bus_C_2) ++9.80392156862745 flow(cheap_plant_activity_costs_Bus_C_3) ++9.611687812379854 flow(cheap_plant_activity_costs_Bus_C_4) ++9.611687812379854 flow(cheap_plant_activity_costs_Bus_C_5) +2 NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_0) +2 NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_1) +1.9607843137254901 NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_2) @@ -17,28 +17,28 @@ objective: s.t. -c_e_BusBlock_balance(Bus_C_0_0)_: -+1 flow(cheap_plant_activity_costs_Bus_C_0_0) +c_e_BusBlock_balance(Bus_C_0)_: ++1 flow(cheap_plant_activity_costs_Bus_C_0) = 0 -c_e_BusBlock_balance(Bus_C_0_1)_: -+1 flow(cheap_plant_activity_costs_Bus_C_0_1) +c_e_BusBlock_balance(Bus_C_1)_: ++1 flow(cheap_plant_activity_costs_Bus_C_1) = 0 -c_e_BusBlock_balance(Bus_C_1_2)_: -+1 flow(cheap_plant_activity_costs_Bus_C_1_2) +c_e_BusBlock_balance(Bus_C_2)_: ++1 flow(cheap_plant_activity_costs_Bus_C_2) = 0 -c_e_BusBlock_balance(Bus_C_1_3)_: -+1 flow(cheap_plant_activity_costs_Bus_C_1_3) +c_e_BusBlock_balance(Bus_C_3)_: ++1 flow(cheap_plant_activity_costs_Bus_C_3) = 0 -c_e_BusBlock_balance(Bus_C_2_4)_: -+1 flow(cheap_plant_activity_costs_Bus_C_2_4) +c_e_BusBlock_balance(Bus_C_4)_: ++1 flow(cheap_plant_activity_costs_Bus_C_4) = 0 -c_e_BusBlock_balance(Bus_C_2_5)_: -+1 flow(cheap_plant_activity_costs_Bus_C_2_5) +c_e_BusBlock_balance(Bus_C_5)_: ++1 flow(cheap_plant_activity_costs_Bus_C_5) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_activity_costs_Bus_C_0)_: @@ -71,73 +71,73 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_activity_costs_Bus_ +1 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_5) = 0 -c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_0_0)_: --1 flow(cheap_plant_activity_costs_Bus_C_0_0) +c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_0)_: +-1 flow(cheap_plant_activity_costs_Bus_C_0) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_0_1)_: --1 flow(cheap_plant_activity_costs_Bus_C_0_1) +c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_1)_: +-1 flow(cheap_plant_activity_costs_Bus_C_1) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_1_2)_: --1 flow(cheap_plant_activity_costs_Bus_C_1_2) +c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_2)_: +-1 flow(cheap_plant_activity_costs_Bus_C_2) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_1_3)_: --1 flow(cheap_plant_activity_costs_Bus_C_1_3) +c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_3)_: +-1 flow(cheap_plant_activity_costs_Bus_C_3) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_3) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_2_4)_: --1 flow(cheap_plant_activity_costs_Bus_C_2_4) +c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_4)_: +-1 flow(cheap_plant_activity_costs_Bus_C_4) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_4) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_2_5)_: --1 flow(cheap_plant_activity_costs_Bus_C_2_5) +c_u_NonConvexFlowBlock_min(cheap_plant_activity_costs_Bus_C_5)_: +-1 flow(cheap_plant_activity_costs_Bus_C_5) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_5) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_0_0)_: -+1 flow(cheap_plant_activity_costs_Bus_C_0_0) +c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_0)_: ++1 flow(cheap_plant_activity_costs_Bus_C_0) -1 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_0_1)_: -+1 flow(cheap_plant_activity_costs_Bus_C_0_1) +c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_1)_: ++1 flow(cheap_plant_activity_costs_Bus_C_1) -1 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_1_2)_: -+1 flow(cheap_plant_activity_costs_Bus_C_1_2) +c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_2)_: ++1 flow(cheap_plant_activity_costs_Bus_C_2) -1 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_1_3)_: -+1 flow(cheap_plant_activity_costs_Bus_C_1_3) +c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_3)_: ++1 flow(cheap_plant_activity_costs_Bus_C_3) -1 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_3) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_2_4)_: -+1 flow(cheap_plant_activity_costs_Bus_C_2_4) +c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_4)_: ++1 flow(cheap_plant_activity_costs_Bus_C_4) -1 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_4) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_2_5)_: -+1 flow(cheap_plant_activity_costs_Bus_C_2_5) +c_u_NonConvexFlowBlock_max(cheap_plant_activity_costs_Bus_C_5)_: ++1 flow(cheap_plant_activity_costs_Bus_C_5) -1 NonConvexFlowBlock_status_nominal(cheap_plant_activity_costs_Bus_C_5) <= 0 bounds - 0 <= flow(cheap_plant_activity_costs_Bus_C_0_0) <= 10.0 - 0 <= flow(cheap_plant_activity_costs_Bus_C_0_1) <= 10.0 - 0 <= flow(cheap_plant_activity_costs_Bus_C_1_2) <= 10.0 - 0 <= flow(cheap_plant_activity_costs_Bus_C_1_3) <= 10.0 - 0 <= flow(cheap_plant_activity_costs_Bus_C_2_4) <= 10.0 - 0 <= flow(cheap_plant_activity_costs_Bus_C_2_5) <= 10.0 + 0 <= flow(cheap_plant_activity_costs_Bus_C_0) <= 10.0 + 0 <= flow(cheap_plant_activity_costs_Bus_C_1) <= 10.0 + 0 <= flow(cheap_plant_activity_costs_Bus_C_2) <= 10.0 + 0 <= flow(cheap_plant_activity_costs_Bus_C_3) <= 10.0 + 0 <= flow(cheap_plant_activity_costs_Bus_C_4) <= 10.0 + 0 <= flow(cheap_plant_activity_costs_Bus_C_5) <= 10.0 0 <= NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_1) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_activity_costs_Bus_C_2) <= 1 diff --git a/tests/lp_files/connect_investment.lp b/tests/lp_files/connect_investment.lp index 5573bd32f..0f6b8e97d 100644 --- a/tests/lp_files/connect_investment.lp +++ b/tests/lp_files/connect_investment.lp @@ -2,15 +2,15 @@ min objective: -+500 InvestmentFlowBlock_invest(Bus1_Sink_0) +123 InvestmentFlowBlock_invest(Source_Bus1_0) ++500 InvestmentFlowBlock_invest(Bus1_Sink_0) +145 GenericInvestmentStorageBlock_invest(storage_0) s.t. c_e__equate_InvestmentFlowBlock_invest(Source_Bus1_0)_InvestmentFlowBlock_invest(Bus1_Sink_0)__: --1 InvestmentFlowBlock_invest(Bus1_Sink_0) +2 InvestmentFlowBlock_invest(Source_Bus1_0) +-1 InvestmentFlowBlock_invest(Bus1_Sink_0) = 0 c_e__equate_InvestmentFlowBlock_invest(Source_Bus1_0)_GenericInvestmentStorageBlock_invest(storage_0)__: @@ -18,35 +18,30 @@ c_e__equate_InvestmentFlowBlock_invest(Source_Bus1_0)_GenericInvestmentStorageBl -1 GenericInvestmentStorageBlock_invest(storage_0) = 0 -c_e_BusBlock_balance(Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) -+1 flow(storage_Bus1_0_0) --1 flow(Bus1_storage_0_0) --1 flow(Bus1_Sink_0_0) +c_e_BusBlock_balance(Bus1_0)_: +-1 flow(Bus1_storage_0) +-1 flow(Bus1_Sink_0) ++1 flow(storage_Bus1_0) ++1 flow(Source_Bus1_0) = 0 -c_e_BusBlock_balance(Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) -+1 flow(storage_Bus1_0_1) --1 flow(Bus1_storage_0_1) --1 flow(Bus1_Sink_0_1) +c_e_BusBlock_balance(Bus1_1)_: +-1 flow(Bus1_storage_1) +-1 flow(Bus1_Sink_1) ++1 flow(storage_Bus1_1) ++1 flow(Source_Bus1_1) = 0 -c_e_BusBlock_balance(Bus1_0_2)_: -+1 flow(Source_Bus1_0_2) -+1 flow(storage_Bus1_0_2) --1 flow(Bus1_storage_0_2) --1 flow(Bus1_Sink_0_2) +c_e_BusBlock_balance(Bus1_2)_: +-1 flow(Bus1_storage_2) +-1 flow(Bus1_Sink_2) ++1 flow(storage_Bus1_2) ++1 flow(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_total_rule(storage_Bus1_0)_: -+1 InvestmentFlowBlock_total(storage_Bus1_0) -1 InvestmentFlowBlock_invest(storage_Bus1_0) -= 0 - -c_e_InvestmentFlowBlock_total_rule(Bus1_Sink_0)_: --1 InvestmentFlowBlock_invest(Bus1_Sink_0) -+1 InvestmentFlowBlock_total(Bus1_Sink_0) ++1 InvestmentFlowBlock_total(storage_Bus1_0) = 0 c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: @@ -54,68 +49,73 @@ c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: +1 InvestmentFlowBlock_total(Source_Bus1_0) = 0 +c_e_InvestmentFlowBlock_total_rule(Bus1_Sink_0)_: +-1 InvestmentFlowBlock_invest(Bus1_Sink_0) ++1 InvestmentFlowBlock_total(Bus1_Sink_0) += 0 + c_e_InvestmentFlowBlock_total_rule(Bus1_storage_0)_: -+1 InvestmentFlowBlock_total(Bus1_storage_0) -1 InvestmentFlowBlock_invest(Bus1_storage_0) ++1 InvestmentFlowBlock_total(Bus1_storage_0) = 0 c_u_InvestmentFlowBlock_max(storage_Bus1_0_0)_: -+1 flow(storage_Bus1_0_0) ++1 flow(storage_Bus1_0) -1 InvestmentFlowBlock_total(storage_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(storage_Bus1_0_1)_: -+1 flow(storage_Bus1_0_1) ++1 flow(storage_Bus1_1) -1 InvestmentFlowBlock_total(storage_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(storage_Bus1_0_2)_: -+1 flow(storage_Bus1_0_2) ++1 flow(storage_Bus1_2) -1 InvestmentFlowBlock_total(storage_Bus1_0) <= 0 -c_u_InvestmentFlowBlock_max(Bus1_Sink_0_0)_: -+1 flow(Bus1_Sink_0_0) --1 InvestmentFlowBlock_total(Bus1_Sink_0) -<= 0 - -c_u_InvestmentFlowBlock_max(Bus1_Sink_0_1)_: -+1 flow(Bus1_Sink_0_1) --1 InvestmentFlowBlock_total(Bus1_Sink_0) -<= 0 - -c_u_InvestmentFlowBlock_max(Bus1_Sink_0_2)_: -+1 flow(Bus1_Sink_0_2) --1 InvestmentFlowBlock_total(Bus1_Sink_0) -<= 0 - c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) ++1 flow(Source_Bus1_0) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) ++1 flow(Source_Bus1_1) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_2)_: -+1 flow(Source_Bus1_0_2) ++1 flow(Source_Bus1_2) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 +c_u_InvestmentFlowBlock_max(Bus1_Sink_0_0)_: ++1 flow(Bus1_Sink_0) +-1 InvestmentFlowBlock_total(Bus1_Sink_0) +<= 0 + +c_u_InvestmentFlowBlock_max(Bus1_Sink_0_1)_: ++1 flow(Bus1_Sink_1) +-1 InvestmentFlowBlock_total(Bus1_Sink_0) +<= 0 + +c_u_InvestmentFlowBlock_max(Bus1_Sink_0_2)_: ++1 flow(Bus1_Sink_2) +-1 InvestmentFlowBlock_total(Bus1_Sink_0) +<= 0 + c_u_InvestmentFlowBlock_max(Bus1_storage_0_0)_: -+1 flow(Bus1_storage_0_0) ++1 flow(Bus1_storage_0) -1 InvestmentFlowBlock_total(Bus1_storage_0) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_0_1)_: -+1 flow(Bus1_storage_0_1) ++1 flow(Bus1_storage_1) -1 InvestmentFlowBlock_total(Bus1_storage_0) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_0_2)_: -+1 flow(Bus1_storage_0_2) ++1 flow(Bus1_storage_2) -1 InvestmentFlowBlock_total(Bus1_storage_0) <= 0 @@ -130,22 +130,22 @@ c_u_GenericInvestmentStorageBlock_init_content_limit(storage)_: <= 0 c_e_GenericInvestmentStorageBlock_balance_first(storage)_: -+1 flow(storage_Bus1_0_0) --1 flow(Bus1_storage_0_0) +-1 flow(Bus1_storage_0) ++1 flow(storage_Bus1_0) -1 GenericInvestmentStorageBlock_init_content(storage) +1 GenericInvestmentStorageBlock_storage_content(storage_0) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_0_1)_: -+1 flow(storage_Bus1_0_1) --1 flow(Bus1_storage_0_1) +-1 flow(Bus1_storage_1) ++1 flow(storage_Bus1_1) -1 GenericInvestmentStorageBlock_storage_content(storage_0) +1 GenericInvestmentStorageBlock_storage_content(storage_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_0_2)_: -+1 flow(storage_Bus1_0_2) --1 flow(Bus1_storage_0_2) +-1 flow(Bus1_storage_2) ++1 flow(storage_Bus1_2) -1 GenericInvestmentStorageBlock_storage_content(storage_1) +1 GenericInvestmentStorageBlock_storage_content(storage_2) = 0 @@ -181,27 +181,27 @@ c_u_GenericInvestmentStorageBlock_max_storage_content(storage_0_2)_: <= 0 bounds - 0 <= InvestmentFlowBlock_invest(Bus1_Sink_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_invest(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_Sink_0) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_0) <= +inf - 0 <= flow(Source_Bus1_0_0) <= +inf - 0 <= flow(storage_Bus1_0_0) <= +inf - 0 <= flow(Bus1_storage_0_0) <= +inf - 0 <= flow(Bus1_Sink_0_0) <= +inf - 0 <= flow(Source_Bus1_0_1) <= +inf - 0 <= flow(storage_Bus1_0_1) <= +inf - 0 <= flow(Bus1_storage_0_1) <= +inf - 0 <= flow(Bus1_Sink_0_1) <= +inf - 0 <= flow(Source_Bus1_0_2) <= +inf - 0 <= flow(storage_Bus1_0_2) <= +inf - 0 <= flow(Bus1_storage_0_2) <= +inf - 0 <= flow(Bus1_Sink_0_2) <= +inf + 0 <= flow(Bus1_storage_0) <= +inf + 0 <= flow(Bus1_storage_1) <= +inf + 0 <= flow(Bus1_storage_2) <= +inf + 0 <= flow(Bus1_Sink_0) <= +inf + 0 <= flow(Bus1_Sink_1) <= +inf + 0 <= flow(Bus1_Sink_2) <= +inf + 0 <= flow(storage_Bus1_0) <= +inf + 0 <= flow(storage_Bus1_1) <= +inf + 0 <= flow(storage_Bus1_2) <= +inf + 0 <= flow(Source_Bus1_0) <= +inf + 0 <= flow(Source_Bus1_1) <= +inf + 0 <= flow(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_total(storage_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_total(Bus1_Sink_0) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_total(Bus1_Sink_0) <= +inf 0 <= InvestmentFlowBlock_total(Bus1_storage_0) <= +inf - 0 <= InvestmentFlowBlock_invest(Bus1_storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_init_content(storage) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_0) <= +inf diff --git a/tests/lp_files/connect_investment_multi_period.lp b/tests/lp_files/connect_investment_multi_period.lp index 75e8a280e..c4e944198 100644 --- a/tests/lp_files/connect_investment_multi_period.lp +++ b/tests/lp_files/connect_investment_multi_period.lp @@ -2,12 +2,12 @@ min objective: -+499.99999999999994 InvestmentFlowBlock_invest(Bus1_Sink_0) -+330.02221931773533 InvestmentFlowBlock_invest(Bus1_Sink_1) -+163.37733629590875 InvestmentFlowBlock_invest(Bus1_Sink_2) +123.0 InvestmentFlowBlock_invest(Source_Bus1_0) +81.1854659521629 InvestmentFlowBlock_invest(Source_Bus1_1) +40.19082472879356 InvestmentFlowBlock_invest(Source_Bus1_2) ++499.99999999999994 InvestmentFlowBlock_invest(Bus1_Sink_0) ++330.02221931773533 InvestmentFlowBlock_invest(Bus1_Sink_1) ++163.37733629590875 InvestmentFlowBlock_invest(Bus1_Sink_2) +144.99999999999997 GenericInvestmentStorageBlock_invest(storage_0) +95.70644360214325 GenericInvestmentStorageBlock_invest(storage_1) +47.37942752581354 GenericInvestmentStorageBlock_invest(storage_2) @@ -15,8 +15,8 @@ objective: s.t. c_e__equate_InvestmentFlowBlock_invest(Source_Bus1_0)_InvestmentFlowBlock_invest(Bus1_Sink_0)__: --1 InvestmentFlowBlock_invest(Bus1_Sink_0) +2 InvestmentFlowBlock_invest(Source_Bus1_0) +-1 InvestmentFlowBlock_invest(Bus1_Sink_0) = 0 c_e__equate_InvestmentFlowBlock_invest(Source_Bus1_0)_GenericInvestmentStorageBlock_invest(storage_0)__: @@ -24,46 +24,84 @@ c_e__equate_InvestmentFlowBlock_invest(Source_Bus1_0)_GenericInvestmentStorageBl -1 GenericInvestmentStorageBlock_invest(storage_0) = 0 -c_e_BusBlock_balance(Bus1_0_0)_: -+1 flow(storage_Bus1_0_0) -+1 flow(Source_Bus1_0_0) --1 flow(Bus1_storage_0_0) --1 flow(Bus1_Sink_0_0) +c_e_BusBlock_balance(Bus1_0)_: +-1 flow(Bus1_storage_0) +-1 flow(Bus1_Sink_0) ++1 flow(storage_Bus1_0) ++1 flow(Source_Bus1_0) = 0 -c_e_BusBlock_balance(Bus1_0_1)_: -+1 flow(storage_Bus1_0_1) -+1 flow(Source_Bus1_0_1) --1 flow(Bus1_storage_0_1) --1 flow(Bus1_Sink_0_1) +c_e_BusBlock_balance(Bus1_1)_: +-1 flow(Bus1_storage_1) +-1 flow(Bus1_Sink_1) ++1 flow(storage_Bus1_1) ++1 flow(Source_Bus1_1) = 0 -c_e_BusBlock_balance(Bus1_1_2)_: -+1 flow(storage_Bus1_1_2) -+1 flow(Source_Bus1_1_2) --1 flow(Bus1_storage_1_2) --1 flow(Bus1_Sink_1_2) +c_e_BusBlock_balance(Bus1_2)_: +-1 flow(Bus1_storage_2) +-1 flow(Bus1_Sink_2) ++1 flow(storage_Bus1_2) ++1 flow(Source_Bus1_2) = 0 -c_e_BusBlock_balance(Bus1_1_3)_: -+1 flow(storage_Bus1_1_3) -+1 flow(Source_Bus1_1_3) --1 flow(Bus1_storage_1_3) --1 flow(Bus1_Sink_1_3) +c_e_BusBlock_balance(Bus1_3)_: +-1 flow(Bus1_storage_3) +-1 flow(Bus1_Sink_3) ++1 flow(storage_Bus1_3) ++1 flow(Source_Bus1_3) = 0 -c_e_BusBlock_balance(Bus1_2_4)_: -+1 flow(storage_Bus1_2_4) -+1 flow(Source_Bus1_2_4) --1 flow(Bus1_storage_2_4) --1 flow(Bus1_Sink_2_4) +c_e_BusBlock_balance(Bus1_4)_: +-1 flow(Bus1_storage_4) +-1 flow(Bus1_Sink_4) ++1 flow(storage_Bus1_4) ++1 flow(Source_Bus1_4) = 0 -c_e_BusBlock_balance(Bus1_2_5)_: -+1 flow(storage_Bus1_2_5) -+1 flow(Source_Bus1_2_5) --1 flow(Bus1_storage_2_5) --1 flow(Bus1_Sink_2_5) +c_e_BusBlock_balance(Bus1_5)_: +-1 flow(Bus1_storage_5) +-1 flow(Bus1_Sink_5) ++1 flow(storage_Bus1_5) ++1 flow(Source_Bus1_5) += 0 + +c_e_InvestmentFlowBlock_total_rule(storage_Bus1_0)_: +-1 InvestmentFlowBlock_invest(storage_Bus1_0) ++1 InvestmentFlowBlock_total(storage_Bus1_0) += 0 + +c_e_InvestmentFlowBlock_total_rule(storage_Bus1_1)_: +-1 InvestmentFlowBlock_invest(storage_Bus1_1) +-1 InvestmentFlowBlock_total(storage_Bus1_0) ++1 InvestmentFlowBlock_total(storage_Bus1_1) ++1 InvestmentFlowBlock_old(storage_Bus1_1) += 0 + +c_e_InvestmentFlowBlock_total_rule(storage_Bus1_2)_: +-1 InvestmentFlowBlock_invest(storage_Bus1_2) +-1 InvestmentFlowBlock_total(storage_Bus1_1) ++1 InvestmentFlowBlock_total(storage_Bus1_2) ++1 InvestmentFlowBlock_old(storage_Bus1_2) += 0 + +c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: +-1 InvestmentFlowBlock_invest(Source_Bus1_0) ++1 InvestmentFlowBlock_total(Source_Bus1_0) += 0 + +c_e_InvestmentFlowBlock_total_rule(Source_Bus1_1)_: +-1 InvestmentFlowBlock_invest(Source_Bus1_1) +-1 InvestmentFlowBlock_total(Source_Bus1_0) ++1 InvestmentFlowBlock_total(Source_Bus1_1) ++1 InvestmentFlowBlock_old(Source_Bus1_1) += 0 + +c_e_InvestmentFlowBlock_total_rule(Source_Bus1_2)_: +-1 InvestmentFlowBlock_invest(Source_Bus1_2) +-1 InvestmentFlowBlock_total(Source_Bus1_1) ++1 InvestmentFlowBlock_total(Source_Bus1_2) ++1 InvestmentFlowBlock_old(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_total_rule(Bus1_Sink_0)_: @@ -86,60 +124,46 @@ c_e_InvestmentFlowBlock_total_rule(Bus1_Sink_2)_: = 0 c_e_InvestmentFlowBlock_total_rule(Bus1_storage_0)_: -+1 InvestmentFlowBlock_total(Bus1_storage_0) -1 InvestmentFlowBlock_invest(Bus1_storage_0) ++1 InvestmentFlowBlock_total(Bus1_storage_0) = 0 c_e_InvestmentFlowBlock_total_rule(Bus1_storage_1)_: +-1 InvestmentFlowBlock_invest(Bus1_storage_1) -1 InvestmentFlowBlock_total(Bus1_storage_0) +1 InvestmentFlowBlock_total(Bus1_storage_1) --1 InvestmentFlowBlock_invest(Bus1_storage_1) +1 InvestmentFlowBlock_old(Bus1_storage_1) = 0 c_e_InvestmentFlowBlock_total_rule(Bus1_storage_2)_: +-1 InvestmentFlowBlock_invest(Bus1_storage_2) -1 InvestmentFlowBlock_total(Bus1_storage_1) +1 InvestmentFlowBlock_total(Bus1_storage_2) --1 InvestmentFlowBlock_invest(Bus1_storage_2) +1 InvestmentFlowBlock_old(Bus1_storage_2) = 0 -c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: --1 InvestmentFlowBlock_invest(Source_Bus1_0) -+1 InvestmentFlowBlock_total(Source_Bus1_0) +c_e_InvestmentFlowBlock_old_rule_end(storage_Bus1_0)_: ++1 InvestmentFlowBlock_old_end(storage_Bus1_0) = 0 -c_e_InvestmentFlowBlock_total_rule(Source_Bus1_1)_: --1 InvestmentFlowBlock_invest(Source_Bus1_1) --1 InvestmentFlowBlock_total(Source_Bus1_0) -+1 InvestmentFlowBlock_total(Source_Bus1_1) -+1 InvestmentFlowBlock_old(Source_Bus1_1) +c_e_InvestmentFlowBlock_old_rule_end(storage_Bus1_1)_: ++1 InvestmentFlowBlock_old_end(storage_Bus1_1) = 0 -c_e_InvestmentFlowBlock_total_rule(Source_Bus1_2)_: --1 InvestmentFlowBlock_invest(Source_Bus1_2) --1 InvestmentFlowBlock_total(Source_Bus1_1) -+1 InvestmentFlowBlock_total(Source_Bus1_2) -+1 InvestmentFlowBlock_old(Source_Bus1_2) +c_e_InvestmentFlowBlock_old_rule_end(storage_Bus1_2)_: ++1 InvestmentFlowBlock_old_end(storage_Bus1_2) = 0 -c_e_InvestmentFlowBlock_total_rule(storage_Bus1_0)_: -+1 InvestmentFlowBlock_total(storage_Bus1_0) --1 InvestmentFlowBlock_invest(storage_Bus1_0) +c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_0)_: ++1 InvestmentFlowBlock_old_end(Source_Bus1_0) = 0 -c_e_InvestmentFlowBlock_total_rule(storage_Bus1_1)_: --1 InvestmentFlowBlock_total(storage_Bus1_0) -+1 InvestmentFlowBlock_total(storage_Bus1_1) --1 InvestmentFlowBlock_invest(storage_Bus1_1) -+1 InvestmentFlowBlock_old(storage_Bus1_1) +c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_1)_: ++1 InvestmentFlowBlock_old_end(Source_Bus1_1) = 0 -c_e_InvestmentFlowBlock_total_rule(storage_Bus1_2)_: --1 InvestmentFlowBlock_total(storage_Bus1_1) -+1 InvestmentFlowBlock_total(storage_Bus1_2) --1 InvestmentFlowBlock_invest(storage_Bus1_2) -+1 InvestmentFlowBlock_old(storage_Bus1_2) +c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_2)_: ++1 InvestmentFlowBlock_old_end(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_old_rule_end(Bus1_Sink_0)_: @@ -166,28 +190,28 @@ c_e_InvestmentFlowBlock_old_rule_end(Bus1_storage_2)_: +1 InvestmentFlowBlock_old_end(Bus1_storage_2) = 0 -c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_0)_: -+1 InvestmentFlowBlock_old_end(Source_Bus1_0) +c_e_InvestmentFlowBlock_old_rule_exo(storage_Bus1_0)_: ++1 InvestmentFlowBlock_old_exo(storage_Bus1_0) = 0 -c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_1)_: -+1 InvestmentFlowBlock_old_end(Source_Bus1_1) +c_e_InvestmentFlowBlock_old_rule_exo(storage_Bus1_1)_: ++1 InvestmentFlowBlock_old_exo(storage_Bus1_1) = 0 -c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_2)_: -+1 InvestmentFlowBlock_old_end(Source_Bus1_2) +c_e_InvestmentFlowBlock_old_rule_exo(storage_Bus1_2)_: ++1 InvestmentFlowBlock_old_exo(storage_Bus1_2) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_Bus1_0)_: -+1 InvestmentFlowBlock_old_end(storage_Bus1_0) +c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_0)_: ++1 InvestmentFlowBlock_old_exo(Source_Bus1_0) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_Bus1_1)_: -+1 InvestmentFlowBlock_old_end(storage_Bus1_1) +c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_1)_: ++1 InvestmentFlowBlock_old_exo(Source_Bus1_1) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_Bus1_2)_: -+1 InvestmentFlowBlock_old_end(storage_Bus1_2) +c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_2)_: ++1 InvestmentFlowBlock_old_exo(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_old_rule_exo(Bus1_Sink_0)_: @@ -214,34 +238,46 @@ c_e_InvestmentFlowBlock_old_rule_exo(Bus1_storage_2)_: +1 InvestmentFlowBlock_old_exo(Bus1_storage_2) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_0)_: -+1 InvestmentFlowBlock_old_exo(Source_Bus1_0) +c_e_InvestmentFlowBlock_old_rule(storage_Bus1_0)_: ++1 InvestmentFlowBlock_old(storage_Bus1_0) +-1 InvestmentFlowBlock_old_end(storage_Bus1_0) +-1 InvestmentFlowBlock_old_exo(storage_Bus1_0) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_1)_: -+1 InvestmentFlowBlock_old_exo(Source_Bus1_1) +c_e_InvestmentFlowBlock_old_rule(storage_Bus1_1)_: ++1 InvestmentFlowBlock_old(storage_Bus1_1) +-1 InvestmentFlowBlock_old_end(storage_Bus1_1) +-1 InvestmentFlowBlock_old_exo(storage_Bus1_1) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_2)_: -+1 InvestmentFlowBlock_old_exo(Source_Bus1_2) +c_e_InvestmentFlowBlock_old_rule(storage_Bus1_2)_: ++1 InvestmentFlowBlock_old(storage_Bus1_2) +-1 InvestmentFlowBlock_old_end(storage_Bus1_2) +-1 InvestmentFlowBlock_old_exo(storage_Bus1_2) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_Bus1_0)_: -+1 InvestmentFlowBlock_old_exo(storage_Bus1_0) +c_e_InvestmentFlowBlock_old_rule(Source_Bus1_0)_: ++1 InvestmentFlowBlock_old(Source_Bus1_0) +-1 InvestmentFlowBlock_old_end(Source_Bus1_0) +-1 InvestmentFlowBlock_old_exo(Source_Bus1_0) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_Bus1_1)_: -+1 InvestmentFlowBlock_old_exo(storage_Bus1_1) +c_e_InvestmentFlowBlock_old_rule(Source_Bus1_1)_: ++1 InvestmentFlowBlock_old(Source_Bus1_1) +-1 InvestmentFlowBlock_old_end(Source_Bus1_1) +-1 InvestmentFlowBlock_old_exo(Source_Bus1_1) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_Bus1_2)_: -+1 InvestmentFlowBlock_old_exo(storage_Bus1_2) +c_e_InvestmentFlowBlock_old_rule(Source_Bus1_2)_: ++1 InvestmentFlowBlock_old(Source_Bus1_2) +-1 InvestmentFlowBlock_old_end(Source_Bus1_2) +-1 InvestmentFlowBlock_old_exo(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_old_rule(Bus1_Sink_0)_: ++1 InvestmentFlowBlock_old(Bus1_Sink_0) -1 InvestmentFlowBlock_old_end(Bus1_Sink_0) -1 InvestmentFlowBlock_old_exo(Bus1_Sink_0) -+1 InvestmentFlowBlock_old(Bus1_Sink_0) = 0 c_e_InvestmentFlowBlock_old_rule(Bus1_Sink_1)_: @@ -257,9 +293,9 @@ c_e_InvestmentFlowBlock_old_rule(Bus1_Sink_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(Bus1_storage_0)_: ++1 InvestmentFlowBlock_old(Bus1_storage_0) -1 InvestmentFlowBlock_old_end(Bus1_storage_0) -1 InvestmentFlowBlock_old_exo(Bus1_storage_0) -+1 InvestmentFlowBlock_old(Bus1_storage_0) = 0 c_e_InvestmentFlowBlock_old_rule(Bus1_storage_1)_: @@ -274,162 +310,126 @@ c_e_InvestmentFlowBlock_old_rule(Bus1_storage_2)_: -1 InvestmentFlowBlock_old_exo(Bus1_storage_2) = 0 -c_e_InvestmentFlowBlock_old_rule(Source_Bus1_0)_: --1 InvestmentFlowBlock_old_end(Source_Bus1_0) --1 InvestmentFlowBlock_old_exo(Source_Bus1_0) -+1 InvestmentFlowBlock_old(Source_Bus1_0) -= 0 +c_u_InvestmentFlowBlock_max(storage_Bus1_0_0)_: ++1 flow(storage_Bus1_0) +-1 InvestmentFlowBlock_total(storage_Bus1_0) +<= 0 -c_e_InvestmentFlowBlock_old_rule(Source_Bus1_1)_: -+1 InvestmentFlowBlock_old(Source_Bus1_1) --1 InvestmentFlowBlock_old_end(Source_Bus1_1) --1 InvestmentFlowBlock_old_exo(Source_Bus1_1) -= 0 +c_u_InvestmentFlowBlock_max(storage_Bus1_0_1)_: ++1 flow(storage_Bus1_1) +-1 InvestmentFlowBlock_total(storage_Bus1_0) +<= 0 -c_e_InvestmentFlowBlock_old_rule(Source_Bus1_2)_: -+1 InvestmentFlowBlock_old(Source_Bus1_2) --1 InvestmentFlowBlock_old_end(Source_Bus1_2) --1 InvestmentFlowBlock_old_exo(Source_Bus1_2) -= 0 +c_u_InvestmentFlowBlock_max(storage_Bus1_1_2)_: ++1 flow(storage_Bus1_2) +-1 InvestmentFlowBlock_total(storage_Bus1_1) +<= 0 -c_e_InvestmentFlowBlock_old_rule(storage_Bus1_0)_: --1 InvestmentFlowBlock_old_end(storage_Bus1_0) --1 InvestmentFlowBlock_old_exo(storage_Bus1_0) -+1 InvestmentFlowBlock_old(storage_Bus1_0) -= 0 +c_u_InvestmentFlowBlock_max(storage_Bus1_1_3)_: ++1 flow(storage_Bus1_3) +-1 InvestmentFlowBlock_total(storage_Bus1_1) +<= 0 -c_e_InvestmentFlowBlock_old_rule(storage_Bus1_1)_: -+1 InvestmentFlowBlock_old(storage_Bus1_1) --1 InvestmentFlowBlock_old_end(storage_Bus1_1) --1 InvestmentFlowBlock_old_exo(storage_Bus1_1) -= 0 +c_u_InvestmentFlowBlock_max(storage_Bus1_2_4)_: ++1 flow(storage_Bus1_4) +-1 InvestmentFlowBlock_total(storage_Bus1_2) +<= 0 -c_e_InvestmentFlowBlock_old_rule(storage_Bus1_2)_: -+1 InvestmentFlowBlock_old(storage_Bus1_2) --1 InvestmentFlowBlock_old_end(storage_Bus1_2) --1 InvestmentFlowBlock_old_exo(storage_Bus1_2) -= 0 +c_u_InvestmentFlowBlock_max(storage_Bus1_2_5)_: ++1 flow(storage_Bus1_5) +-1 InvestmentFlowBlock_total(storage_Bus1_2) +<= 0 + +c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: ++1 flow(Source_Bus1_0) +-1 InvestmentFlowBlock_total(Source_Bus1_0) +<= 0 + +c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: ++1 flow(Source_Bus1_1) +-1 InvestmentFlowBlock_total(Source_Bus1_0) +<= 0 + +c_u_InvestmentFlowBlock_max(Source_Bus1_1_2)_: ++1 flow(Source_Bus1_2) +-1 InvestmentFlowBlock_total(Source_Bus1_1) +<= 0 + +c_u_InvestmentFlowBlock_max(Source_Bus1_1_3)_: ++1 flow(Source_Bus1_3) +-1 InvestmentFlowBlock_total(Source_Bus1_1) +<= 0 + +c_u_InvestmentFlowBlock_max(Source_Bus1_2_4)_: ++1 flow(Source_Bus1_4) +-1 InvestmentFlowBlock_total(Source_Bus1_2) +<= 0 + +c_u_InvestmentFlowBlock_max(Source_Bus1_2_5)_: ++1 flow(Source_Bus1_5) +-1 InvestmentFlowBlock_total(Source_Bus1_2) +<= 0 c_u_InvestmentFlowBlock_max(Bus1_Sink_0_0)_: -+1 flow(Bus1_Sink_0_0) ++1 flow(Bus1_Sink_0) -1 InvestmentFlowBlock_total(Bus1_Sink_0) <= 0 c_u_InvestmentFlowBlock_max(Bus1_Sink_0_1)_: -+1 flow(Bus1_Sink_0_1) ++1 flow(Bus1_Sink_1) -1 InvestmentFlowBlock_total(Bus1_Sink_0) <= 0 c_u_InvestmentFlowBlock_max(Bus1_Sink_1_2)_: -+1 flow(Bus1_Sink_1_2) ++1 flow(Bus1_Sink_2) -1 InvestmentFlowBlock_total(Bus1_Sink_1) <= 0 c_u_InvestmentFlowBlock_max(Bus1_Sink_1_3)_: -+1 flow(Bus1_Sink_1_3) ++1 flow(Bus1_Sink_3) -1 InvestmentFlowBlock_total(Bus1_Sink_1) <= 0 c_u_InvestmentFlowBlock_max(Bus1_Sink_2_4)_: -+1 flow(Bus1_Sink_2_4) ++1 flow(Bus1_Sink_4) -1 InvestmentFlowBlock_total(Bus1_Sink_2) <= 0 c_u_InvestmentFlowBlock_max(Bus1_Sink_2_5)_: -+1 flow(Bus1_Sink_2_5) ++1 flow(Bus1_Sink_5) -1 InvestmentFlowBlock_total(Bus1_Sink_2) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_0_0)_: -+1 flow(Bus1_storage_0_0) ++1 flow(Bus1_storage_0) -1 InvestmentFlowBlock_total(Bus1_storage_0) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_0_1)_: -+1 flow(Bus1_storage_0_1) ++1 flow(Bus1_storage_1) -1 InvestmentFlowBlock_total(Bus1_storage_0) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_1_2)_: -+1 flow(Bus1_storage_1_2) ++1 flow(Bus1_storage_2) -1 InvestmentFlowBlock_total(Bus1_storage_1) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_1_3)_: -+1 flow(Bus1_storage_1_3) ++1 flow(Bus1_storage_3) -1 InvestmentFlowBlock_total(Bus1_storage_1) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_2_4)_: -+1 flow(Bus1_storage_2_4) ++1 flow(Bus1_storage_4) -1 InvestmentFlowBlock_total(Bus1_storage_2) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_2_5)_: -+1 flow(Bus1_storage_2_5) ++1 flow(Bus1_storage_5) -1 InvestmentFlowBlock_total(Bus1_storage_2) <= 0 -c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) --1 InvestmentFlowBlock_total(Source_Bus1_0) -<= 0 - -c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) --1 InvestmentFlowBlock_total(Source_Bus1_0) -<= 0 - -c_u_InvestmentFlowBlock_max(Source_Bus1_1_2)_: -+1 flow(Source_Bus1_1_2) --1 InvestmentFlowBlock_total(Source_Bus1_1) -<= 0 - -c_u_InvestmentFlowBlock_max(Source_Bus1_1_3)_: -+1 flow(Source_Bus1_1_3) --1 InvestmentFlowBlock_total(Source_Bus1_1) -<= 0 - -c_u_InvestmentFlowBlock_max(Source_Bus1_2_4)_: -+1 flow(Source_Bus1_2_4) --1 InvestmentFlowBlock_total(Source_Bus1_2) -<= 0 - -c_u_InvestmentFlowBlock_max(Source_Bus1_2_5)_: -+1 flow(Source_Bus1_2_5) --1 InvestmentFlowBlock_total(Source_Bus1_2) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_Bus1_0_0)_: -+1 flow(storage_Bus1_0_0) --1 InvestmentFlowBlock_total(storage_Bus1_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_Bus1_0_1)_: -+1 flow(storage_Bus1_0_1) --1 InvestmentFlowBlock_total(storage_Bus1_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_Bus1_1_2)_: -+1 flow(storage_Bus1_1_2) --1 InvestmentFlowBlock_total(storage_Bus1_1) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_Bus1_1_3)_: -+1 flow(storage_Bus1_1_3) --1 InvestmentFlowBlock_total(storage_Bus1_1) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_Bus1_2_4)_: -+1 flow(storage_Bus1_2_4) --1 InvestmentFlowBlock_total(storage_Bus1_2) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_Bus1_2_5)_: -+1 flow(storage_Bus1_2_5) --1 InvestmentFlowBlock_total(storage_Bus1_2) -<= 0 - c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_0)_: -1 GenericInvestmentStorageBlock_invest(storage_0) +1 GenericInvestmentStorageBlock_total(storage_0) @@ -474,9 +474,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_0)_: ++1 GenericInvestmentStorageBlock_old(storage_0) -1 GenericInvestmentStorageBlock_old_end(storage_0) -1 GenericInvestmentStorageBlock_old_exo(storage_0) -+1 GenericInvestmentStorageBlock_old(storage_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_1)_: @@ -496,36 +496,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage_0_1)_: -+1 flow(storage_Bus1_0_1) --1 flow(Bus1_storage_0_1) +-1 flow(Bus1_storage_1) ++1 flow(storage_Bus1_1) -1 GenericInvestmentStorageBlock_storage_content(storage_0) +1 GenericInvestmentStorageBlock_storage_content(storage_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_1_2)_: -+1 flow(storage_Bus1_1_2) --1 flow(Bus1_storage_1_2) +-1 flow(Bus1_storage_2) ++1 flow(storage_Bus1_2) -1 GenericInvestmentStorageBlock_storage_content(storage_1) +1 GenericInvestmentStorageBlock_storage_content(storage_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_1_3)_: -+1 flow(storage_Bus1_1_3) --1 flow(Bus1_storage_1_3) +-1 flow(Bus1_storage_3) ++1 flow(storage_Bus1_3) -1 GenericInvestmentStorageBlock_storage_content(storage_2) +1 GenericInvestmentStorageBlock_storage_content(storage_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_2_4)_: -+1 flow(storage_Bus1_2_4) --1 flow(Bus1_storage_2_4) +-1 flow(Bus1_storage_4) ++1 flow(storage_Bus1_4) -1 GenericInvestmentStorageBlock_storage_content(storage_3) +1 GenericInvestmentStorageBlock_storage_content(storage_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_2_5)_: -+1 flow(storage_Bus1_2_5) --1 flow(Bus1_storage_2_5) +-1 flow(Bus1_storage_5) ++1 flow(storage_Bus1_5) -1 GenericInvestmentStorageBlock_storage_content(storage_4) +1 GenericInvestmentStorageBlock_storage_content(storage_5) = 0 @@ -591,97 +591,98 @@ c_u_GenericInvestmentStorageBlock_max_storage_content(storage_2_5)_: <= 0 bounds - 0 <= InvestmentFlowBlock_invest(Bus1_Sink_0) <= +inf - 0 <= InvestmentFlowBlock_invest(Bus1_Sink_1) <= +inf - 0 <= InvestmentFlowBlock_invest(Bus1_Sink_2) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_invest(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_invest(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_invest(Source_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_Sink_0) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_Sink_1) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_Sink_2) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_storage_0) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_storage_1) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_storage_2) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_1) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_2) <= +inf - 0 <= flow(storage_Bus1_0_0) <= +inf - 0 <= flow(Source_Bus1_0_0) <= +inf - 0 <= flow(Bus1_storage_0_0) <= +inf - 0 <= flow(Bus1_Sink_0_0) <= +inf - 0 <= flow(storage_Bus1_0_1) <= +inf - 0 <= flow(Source_Bus1_0_1) <= +inf - 0 <= flow(Bus1_storage_0_1) <= +inf - 0 <= flow(Bus1_Sink_0_1) <= +inf - 0 <= flow(storage_Bus1_1_2) <= +inf - 0 <= flow(Source_Bus1_1_2) <= +inf - 0 <= flow(Bus1_storage_1_2) <= +inf - 0 <= flow(Bus1_Sink_1_2) <= +inf - 0 <= flow(storage_Bus1_1_3) <= +inf - 0 <= flow(Source_Bus1_1_3) <= +inf - 0 <= flow(Bus1_storage_1_3) <= +inf - 0 <= flow(Bus1_Sink_1_3) <= +inf - 0 <= flow(storage_Bus1_2_4) <= +inf - 0 <= flow(Source_Bus1_2_4) <= +inf - 0 <= flow(Bus1_storage_2_4) <= +inf - 0 <= flow(Bus1_Sink_2_4) <= +inf - 0 <= flow(storage_Bus1_2_5) <= +inf - 0 <= flow(Source_Bus1_2_5) <= +inf - 0 <= flow(Bus1_storage_2_5) <= +inf - 0 <= flow(Bus1_Sink_2_5) <= +inf + 0 <= flow(Bus1_storage_0) <= +inf + 0 <= flow(Bus1_storage_1) <= +inf + 0 <= flow(Bus1_storage_2) <= +inf + 0 <= flow(Bus1_storage_3) <= +inf + 0 <= flow(Bus1_storage_4) <= +inf + 0 <= flow(Bus1_storage_5) <= +inf + 0 <= flow(Bus1_Sink_0) <= +inf + 0 <= flow(Bus1_Sink_1) <= +inf + 0 <= flow(Bus1_Sink_2) <= +inf + 0 <= flow(Bus1_Sink_3) <= +inf + 0 <= flow(Bus1_Sink_4) <= +inf + 0 <= flow(Bus1_Sink_5) <= +inf + 0 <= flow(storage_Bus1_0) <= +inf + 0 <= flow(storage_Bus1_1) <= +inf + 0 <= flow(storage_Bus1_2) <= +inf + 0 <= flow(storage_Bus1_3) <= +inf + 0 <= flow(storage_Bus1_4) <= +inf + 0 <= flow(storage_Bus1_5) <= +inf + 0 <= flow(Source_Bus1_0) <= +inf + 0 <= flow(Source_Bus1_1) <= +inf + 0 <= flow(Source_Bus1_2) <= +inf + 0 <= flow(Source_Bus1_3) <= +inf + 0 <= flow(Source_Bus1_4) <= +inf + 0 <= flow(Source_Bus1_5) <= +inf + 0 <= InvestmentFlowBlock_total(storage_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_total(storage_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_total(storage_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_total(Source_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_total(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_total(Bus1_Sink_0) <= +inf 0 <= InvestmentFlowBlock_total(Bus1_Sink_1) <= +inf - 0 <= InvestmentFlowBlock_old(Bus1_Sink_1) <= +inf 0 <= InvestmentFlowBlock_total(Bus1_Sink_2) <= +inf - 0 <= InvestmentFlowBlock_old(Bus1_Sink_2) <= +inf 0 <= InvestmentFlowBlock_total(Bus1_storage_0) <= +inf - 0 <= InvestmentFlowBlock_invest(Bus1_storage_0) <= +inf 0 <= InvestmentFlowBlock_total(Bus1_storage_1) <= +inf - 0 <= InvestmentFlowBlock_invest(Bus1_storage_1) <= +inf - 0 <= InvestmentFlowBlock_old(Bus1_storage_1) <= +inf 0 <= InvestmentFlowBlock_total(Bus1_storage_2) <= +inf - 0 <= InvestmentFlowBlock_invest(Bus1_storage_2) <= +inf - 0 <= InvestmentFlowBlock_old(Bus1_storage_2) <= +inf - 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_total(Source_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old(Source_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_total(Source_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_old(Source_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_total(storage_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_total(storage_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old(storage_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_old(storage_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_total(storage_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_old(storage_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old(Source_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old(Source_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old(Bus1_Sink_0) <= +inf + 0 <= InvestmentFlowBlock_old(Bus1_Sink_1) <= +inf + 0 <= InvestmentFlowBlock_old(Bus1_Sink_2) <= +inf + 0 <= InvestmentFlowBlock_old(Bus1_storage_0) <= +inf + 0 <= InvestmentFlowBlock_old(Bus1_storage_1) <= +inf + 0 <= InvestmentFlowBlock_old(Bus1_storage_2) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old_end(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old_end(Source_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old_end(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_old_end(Bus1_Sink_0) <= +inf 0 <= InvestmentFlowBlock_old_end(Bus1_Sink_1) <= +inf 0 <= InvestmentFlowBlock_old_end(Bus1_Sink_2) <= +inf 0 <= InvestmentFlowBlock_old_end(Bus1_storage_0) <= +inf 0 <= InvestmentFlowBlock_old_end(Bus1_storage_1) <= +inf 0 <= InvestmentFlowBlock_old_end(Bus1_storage_2) <= +inf - 0 <= InvestmentFlowBlock_old_end(Source_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_old_end(Source_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old_end(Source_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_old_exo(Bus1_Sink_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(Bus1_Sink_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(Bus1_Sink_2) <= +inf 0 <= InvestmentFlowBlock_old_exo(Bus1_storage_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(Bus1_storage_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(Bus1_storage_2) <= +inf - 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_old(Bus1_Sink_0) <= +inf - 0 <= InvestmentFlowBlock_old(Bus1_storage_0) <= +inf - 0 <= InvestmentFlowBlock_old(Source_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_old(storage_Bus1_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_1) <= +inf @@ -689,7 +690,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_2) <= +inf diff --git a/tests/lp_files/converter.lp b/tests/lp_files/converter.lp index e91691132..f72f22c7d 100644 --- a/tests/lp_files/converter.lp +++ b/tests/lp_files/converter.lp @@ -2,134 +2,134 @@ min objective: -+50 flow(powerplantGasBiomass_electricityBus_0_0) -+50 flow(powerplantGasBiomass_electricityBus_0_1) -+50 flow(powerplantGasBiomass_electricityBus_0_2) -+20 flow(powerplantGasBiomass_thermalBus_0_0) -+20 flow(powerplantGasBiomass_thermalBus_0_1) -+20 flow(powerplantGasBiomass_thermalBus_0_2) ++50 flow(powerplantGasBiomass_electricityBus_0) ++50 flow(powerplantGasBiomass_electricityBus_1) ++50 flow(powerplantGasBiomass_electricityBus_2) ++20 flow(powerplantGasBiomass_thermalBus_0) ++20 flow(powerplantGasBiomass_thermalBus_1) ++20 flow(powerplantGasBiomass_thermalBus_2) s.t. -c_e_BusBlock_balance(biomassBus_0_0)_: -+1 flow(biomassBus_powerplantGasBiomass_0_0) +c_e_BusBlock_balance(biomassBus_0)_: ++1 flow(biomassBus_powerplantGasBiomass_0) = 0 -c_e_BusBlock_balance(biomassBus_0_1)_: -+1 flow(biomassBus_powerplantGasBiomass_0_1) +c_e_BusBlock_balance(biomassBus_1)_: ++1 flow(biomassBus_powerplantGasBiomass_1) = 0 -c_e_BusBlock_balance(biomassBus_0_2)_: -+1 flow(biomassBus_powerplantGasBiomass_0_2) +c_e_BusBlock_balance(biomassBus_2)_: ++1 flow(biomassBus_powerplantGasBiomass_2) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(powerplantGasBiomass_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(powerplantGasBiomass_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(powerplantGasBiomass_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(powerplantGasBiomass_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(powerplantGasBiomass_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(powerplantGasBiomass_electricityBus_2) = 0 -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_powerplantGasBiomass_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_powerplantGasBiomass_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_powerplantGasBiomass_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_powerplantGasBiomass_1) = 0 -c_e_BusBlock_balance(gasBus_0_2)_: -+1 flow(gasBus_powerplantGasBiomass_0_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_powerplantGasBiomass_2) = 0 -c_e_BusBlock_balance(thermalBus_0_0)_: -+1 flow(powerplantGasBiomass_thermalBus_0_0) +c_e_BusBlock_balance(thermalBus_0)_: ++1 flow(powerplantGasBiomass_thermalBus_0) = 0 -c_e_BusBlock_balance(thermalBus_0_1)_: -+1 flow(powerplantGasBiomass_thermalBus_0_1) +c_e_BusBlock_balance(thermalBus_1)_: ++1 flow(powerplantGasBiomass_thermalBus_1) = 0 -c_e_BusBlock_balance(thermalBus_0_2)_: -+1 flow(powerplantGasBiomass_thermalBus_0_2) +c_e_BusBlock_balance(thermalBus_2)_: ++1 flow(powerplantGasBiomass_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_0_0)_: --0.1 flow(powerplantGasBiomass_electricityBus_0_0) -+0.3 flow(biomassBus_powerplantGasBiomass_0_0) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_0)_: ++0.3 flow(gasBus_powerplantGasBiomass_0) +-0.4 flow(powerplantGasBiomass_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_0_0)_: --0.4 flow(powerplantGasBiomass_electricityBus_0_0) -+0.3 flow(gasBus_powerplantGasBiomass_0_0) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_0)_: ++0.3 flow(biomassBus_powerplantGasBiomass_0) +-0.1 flow(powerplantGasBiomass_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_0_0)_: --0.1 flow(powerplantGasBiomass_thermalBus_0_0) -+0.5 flow(biomassBus_powerplantGasBiomass_0_0) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_0)_: ++0.5 flow(gasBus_powerplantGasBiomass_0) +-0.4 flow(powerplantGasBiomass_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_0_0)_: --0.4 flow(powerplantGasBiomass_thermalBus_0_0) -+0.5 flow(gasBus_powerplantGasBiomass_0_0) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_0)_: ++0.5 flow(biomassBus_powerplantGasBiomass_0) +-0.1 flow(powerplantGasBiomass_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_0_1)_: --0.1 flow(powerplantGasBiomass_electricityBus_0_1) -+0.3 flow(biomassBus_powerplantGasBiomass_0_1) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_1)_: ++0.3 flow(gasBus_powerplantGasBiomass_1) +-0.4 flow(powerplantGasBiomass_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_0_1)_: --0.4 flow(powerplantGasBiomass_electricityBus_0_1) -+0.3 flow(gasBus_powerplantGasBiomass_0_1) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_1)_: ++0.3 flow(biomassBus_powerplantGasBiomass_1) +-0.1 flow(powerplantGasBiomass_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_0_1)_: --0.1 flow(powerplantGasBiomass_thermalBus_0_1) -+0.5 flow(biomassBus_powerplantGasBiomass_0_1) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_1)_: ++0.5 flow(gasBus_powerplantGasBiomass_1) +-0.4 flow(powerplantGasBiomass_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_0_1)_: --0.4 flow(powerplantGasBiomass_thermalBus_0_1) -+0.5 flow(gasBus_powerplantGasBiomass_0_1) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_1)_: ++0.5 flow(biomassBus_powerplantGasBiomass_1) +-0.1 flow(powerplantGasBiomass_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_0_2)_: --0.1 flow(powerplantGasBiomass_electricityBus_0_2) -+0.3 flow(biomassBus_powerplantGasBiomass_0_2) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_2)_: ++0.3 flow(gasBus_powerplantGasBiomass_2) +-0.4 flow(powerplantGasBiomass_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_0_2)_: --0.4 flow(powerplantGasBiomass_electricityBus_0_2) -+0.3 flow(gasBus_powerplantGasBiomass_0_2) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_2)_: ++0.3 flow(biomassBus_powerplantGasBiomass_2) +-0.1 flow(powerplantGasBiomass_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_0_2)_: --0.1 flow(powerplantGasBiomass_thermalBus_0_2) -+0.5 flow(biomassBus_powerplantGasBiomass_0_2) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_2)_: ++0.5 flow(gasBus_powerplantGasBiomass_2) +-0.4 flow(powerplantGasBiomass_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_0_2)_: --0.4 flow(powerplantGasBiomass_thermalBus_0_2) -+0.5 flow(gasBus_powerplantGasBiomass_0_2) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_2)_: ++0.5 flow(biomassBus_powerplantGasBiomass_2) +-0.1 flow(powerplantGasBiomass_thermalBus_2) = 0 bounds - 0 <= flow(powerplantGasBiomass_electricityBus_0_0) <= +inf - 0 <= flow(powerplantGasBiomass_electricityBus_0_1) <= +inf - 0 <= flow(powerplantGasBiomass_electricityBus_0_2) <= +inf - 0.0 <= flow(powerplantGasBiomass_thermalBus_0_0) <= 50000000000.0 - 0.0 <= flow(powerplantGasBiomass_thermalBus_0_1) <= 50000000000.0 - 0.0 <= flow(powerplantGasBiomass_thermalBus_0_2) <= 50000000000.0 - 0 <= flow(biomassBus_powerplantGasBiomass_0_0) <= +inf - 0 <= flow(biomassBus_powerplantGasBiomass_0_1) <= +inf - 0 <= flow(biomassBus_powerplantGasBiomass_0_2) <= +inf - 0 <= flow(gasBus_powerplantGasBiomass_0_0) <= +inf - 0 <= flow(gasBus_powerplantGasBiomass_0_1) <= +inf - 0 <= flow(gasBus_powerplantGasBiomass_0_2) <= +inf + 0 <= flow(gasBus_powerplantGasBiomass_0) <= +inf + 0 <= flow(gasBus_powerplantGasBiomass_1) <= +inf + 0 <= flow(gasBus_powerplantGasBiomass_2) <= +inf + 0 <= flow(biomassBus_powerplantGasBiomass_0) <= +inf + 0 <= flow(biomassBus_powerplantGasBiomass_1) <= +inf + 0 <= flow(biomassBus_powerplantGasBiomass_2) <= +inf + 0 <= flow(powerplantGasBiomass_electricityBus_0) <= +inf + 0 <= flow(powerplantGasBiomass_electricityBus_1) <= +inf + 0 <= flow(powerplantGasBiomass_electricityBus_2) <= +inf + 0.0 <= flow(powerplantGasBiomass_thermalBus_0) <= 50000000000.0 + 0.0 <= flow(powerplantGasBiomass_thermalBus_1) <= 50000000000.0 + 0.0 <= flow(powerplantGasBiomass_thermalBus_2) <= 50000000000.0 end diff --git a/tests/lp_files/converter_invest.lp b/tests/lp_files/converter_invest.lp index bbcc7ff59..149ac8d30 100644 --- a/tests/lp_files/converter_invest.lp +++ b/tests/lp_files/converter_invest.lp @@ -3,121 +3,121 @@ min objective: +20 InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_0) -+50 flow(powerplant_gas_coal_electricityBus_0_0) -+50 flow(powerplant_gas_coal_electricityBus_0_1) -+50 flow(powerplant_gas_coal_electricityBus_0_2) -+20 flow(powerplant_gas_coal_thermalBus_0_0) -+20 flow(powerplant_gas_coal_thermalBus_0_1) -+20 flow(powerplant_gas_coal_thermalBus_0_2) ++50 flow(powerplant_gas_coal_electricityBus_0) ++50 flow(powerplant_gas_coal_electricityBus_1) ++50 flow(powerplant_gas_coal_electricityBus_2) ++20 flow(powerplant_gas_coal_thermalBus_0) ++20 flow(powerplant_gas_coal_thermalBus_1) ++20 flow(powerplant_gas_coal_thermalBus_2) s.t. -c_e_BusBlock_balance(coalBus_0_0)_: -+1 flow(coalBus_powerplant_gas_coal_0_0) +c_e_BusBlock_balance(coalBus_0)_: ++1 flow(coalBus_powerplant_gas_coal_0) = 0 -c_e_BusBlock_balance(coalBus_0_1)_: -+1 flow(coalBus_powerplant_gas_coal_0_1) +c_e_BusBlock_balance(coalBus_1)_: ++1 flow(coalBus_powerplant_gas_coal_1) = 0 -c_e_BusBlock_balance(coalBus_0_2)_: -+1 flow(coalBus_powerplant_gas_coal_0_2) +c_e_BusBlock_balance(coalBus_2)_: ++1 flow(coalBus_powerplant_gas_coal_2) = 0 -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_powerplant_gas_coal_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_powerplant_gas_coal_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_BusBlock_balance(gasBus_0_2)_: -+1 flow(gasBus_powerplant_gas_coal_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(powerplant_gas_coal_electricityBus_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_powerplant_gas_coal_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(powerplant_gas_coal_electricityBus_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_powerplant_gas_coal_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(powerplant_gas_coal_electricityBus_0_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_powerplant_gas_coal_2) = 0 -c_e_BusBlock_balance(thermalBus_0_0)_: -+1 flow(powerplant_gas_coal_thermalBus_0_0) +c_e_BusBlock_balance(thermalBus_0)_: ++1 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_BusBlock_balance(thermalBus_0_1)_: -+1 flow(powerplant_gas_coal_thermalBus_0_1) +c_e_BusBlock_balance(thermalBus_1)_: ++1 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_BusBlock_balance(thermalBus_0_2)_: -+1 flow(powerplant_gas_coal_thermalBus_0_2) +c_e_BusBlock_balance(thermalBus_2)_: ++1 flow(powerplant_gas_coal_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0_0)_: --0.2 flow(powerplant_gas_coal_electricityBus_0_0) -+0.3 flow(coalBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0)_: ++0.3 flow(coalBus_powerplant_gas_coal_0) +-0.2 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0_0)_: --0.58 flow(powerplant_gas_coal_electricityBus_0_0) -+0.3 flow(gasBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0)_: ++0.3 flow(gasBus_powerplant_gas_coal_0) +-0.58 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0_0)_: --0.2 flow(powerplant_gas_coal_thermalBus_0_0) -+0.5 flow(coalBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0)_: ++0.5 flow(coalBus_powerplant_gas_coal_0) +-0.2 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0_0)_: --0.58 flow(powerplant_gas_coal_thermalBus_0_0) -+0.5 flow(gasBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0)_: ++0.5 flow(gasBus_powerplant_gas_coal_0) +-0.58 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0_1)_: --0.2 flow(powerplant_gas_coal_electricityBus_0_1) -+0.3 flow(coalBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_1)_: ++0.3 flow(coalBus_powerplant_gas_coal_1) +-0.2 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0_1)_: --0.58 flow(powerplant_gas_coal_electricityBus_0_1) -+0.3 flow(gasBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_1)_: ++0.3 flow(gasBus_powerplant_gas_coal_1) +-0.58 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0_1)_: --0.2 flow(powerplant_gas_coal_thermalBus_0_1) -+0.5 flow(coalBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_1)_: ++0.5 flow(coalBus_powerplant_gas_coal_1) +-0.2 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0_1)_: --0.58 flow(powerplant_gas_coal_thermalBus_0_1) -+0.5 flow(gasBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_1)_: ++0.5 flow(gasBus_powerplant_gas_coal_1) +-0.58 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0_2)_: --0.2 flow(powerplant_gas_coal_electricityBus_0_2) -+0.3 flow(coalBus_powerplant_gas_coal_0_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_2)_: ++0.3 flow(coalBus_powerplant_gas_coal_2) +-0.2 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0_2)_: --0.58 flow(powerplant_gas_coal_electricityBus_0_2) -+0.3 flow(gasBus_powerplant_gas_coal_0_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_2)_: ++0.3 flow(gasBus_powerplant_gas_coal_2) +-0.58 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0_2)_: --0.2 flow(powerplant_gas_coal_thermalBus_0_2) -+0.5 flow(coalBus_powerplant_gas_coal_0_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_2)_: ++0.5 flow(coalBus_powerplant_gas_coal_2) +-0.2 flow(powerplant_gas_coal_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0_2)_: --0.58 flow(powerplant_gas_coal_thermalBus_0_2) -+0.5 flow(gasBus_powerplant_gas_coal_0_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_2)_: ++0.5 flow(gasBus_powerplant_gas_coal_2) +-0.58 flow(powerplant_gas_coal_thermalBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(powerplant_gas_coal_electricityBus_0)_: @@ -126,33 +126,33 @@ c_e_InvestmentFlowBlock_total_rule(powerplant_gas_coal_electricityBus_0)_: = 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_0_0)_: -+1 flow(powerplant_gas_coal_electricityBus_0_0) ++1 flow(powerplant_gas_coal_electricityBus_0) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_0_1)_: -+1 flow(powerplant_gas_coal_electricityBus_0_1) ++1 flow(powerplant_gas_coal_electricityBus_1) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_0_2)_: -+1 flow(powerplant_gas_coal_electricityBus_0_2) ++1 flow(powerplant_gas_coal_electricityBus_2) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= 0 bounds 0 <= InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_0) <= 1000 - 0 <= flow(powerplant_gas_coal_electricityBus_0_0) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_0_1) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_0_2) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_0_0) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_0_1) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_0_2) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_0_0) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_0_1) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_0_2) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_0_0) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_0_1) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_0_2) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_0) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_1) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_2) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_0) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_1) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_2) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_0) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_1) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_2) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_0) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_1) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_2) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= +inf end diff --git a/tests/lp_files/converter_invest_multi_period.lp b/tests/lp_files/converter_invest_multi_period.lp index 35ada8c5b..2f618d1bf 100644 --- a/tests/lp_files/converter_invest_multi_period.lp +++ b/tests/lp_files/converter_invest_multi_period.lp @@ -5,235 +5,235 @@ objective: +32.94298610923851 InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_0) +21.74383477344849 InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_1) +10.764274640321037 InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_2) -+50 flow(powerplant_gas_coal_electricityBus_0_0) -+50 flow(powerplant_gas_coal_electricityBus_0_1) -+49.01960784313725 flow(powerplant_gas_coal_electricityBus_1_2) -+49.01960784313725 flow(powerplant_gas_coal_electricityBus_1_3) -+48.058439061899264 flow(powerplant_gas_coal_electricityBus_2_4) -+48.058439061899264 flow(powerplant_gas_coal_electricityBus_2_5) -+20 flow(powerplant_gas_coal_thermalBus_0_0) -+20 flow(powerplant_gas_coal_thermalBus_0_1) -+19.6078431372549 flow(powerplant_gas_coal_thermalBus_1_2) -+19.6078431372549 flow(powerplant_gas_coal_thermalBus_1_3) -+19.223375624759708 flow(powerplant_gas_coal_thermalBus_2_4) -+19.223375624759708 flow(powerplant_gas_coal_thermalBus_2_5) ++50 flow(powerplant_gas_coal_electricityBus_0) ++50 flow(powerplant_gas_coal_electricityBus_1) ++49.01960784313725 flow(powerplant_gas_coal_electricityBus_2) ++49.01960784313725 flow(powerplant_gas_coal_electricityBus_3) ++48.058439061899264 flow(powerplant_gas_coal_electricityBus_4) ++48.058439061899264 flow(powerplant_gas_coal_electricityBus_5) ++20 flow(powerplant_gas_coal_thermalBus_0) ++20 flow(powerplant_gas_coal_thermalBus_1) ++19.6078431372549 flow(powerplant_gas_coal_thermalBus_2) ++19.6078431372549 flow(powerplant_gas_coal_thermalBus_3) ++19.223375624759708 flow(powerplant_gas_coal_thermalBus_4) ++19.223375624759708 flow(powerplant_gas_coal_thermalBus_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(powerplant_gas_coal_electricityBus_0_0) +c_e_BusBlock_balance(coalBus_0)_: ++1 flow(coalBus_powerplant_gas_coal_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(powerplant_gas_coal_electricityBus_0_1) +c_e_BusBlock_balance(coalBus_1)_: ++1 flow(coalBus_powerplant_gas_coal_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(powerplant_gas_coal_electricityBus_1_2) +c_e_BusBlock_balance(coalBus_2)_: ++1 flow(coalBus_powerplant_gas_coal_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(powerplant_gas_coal_electricityBus_1_3) +c_e_BusBlock_balance(coalBus_3)_: ++1 flow(coalBus_powerplant_gas_coal_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(powerplant_gas_coal_electricityBus_2_4) +c_e_BusBlock_balance(coalBus_4)_: ++1 flow(coalBus_powerplant_gas_coal_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(powerplant_gas_coal_electricityBus_2_5) +c_e_BusBlock_balance(coalBus_5)_: ++1 flow(coalBus_powerplant_gas_coal_5) = 0 -c_e_BusBlock_balance(coalBus_0_0)_: -+1 flow(coalBus_powerplant_gas_coal_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_BusBlock_balance(coalBus_0_1)_: -+1 flow(coalBus_powerplant_gas_coal_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_BusBlock_balance(coalBus_1_2)_: -+1 flow(coalBus_powerplant_gas_coal_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_BusBlock_balance(coalBus_1_3)_: -+1 flow(coalBus_powerplant_gas_coal_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(powerplant_gas_coal_electricityBus_3) = 0 -c_e_BusBlock_balance(coalBus_2_4)_: -+1 flow(coalBus_powerplant_gas_coal_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(powerplant_gas_coal_electricityBus_4) = 0 -c_e_BusBlock_balance(coalBus_2_5)_: -+1 flow(coalBus_powerplant_gas_coal_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(powerplant_gas_coal_electricityBus_5) = 0 -c_e_BusBlock_balance(thermalBus_0_0)_: -+1 flow(powerplant_gas_coal_thermalBus_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_powerplant_gas_coal_0) = 0 -c_e_BusBlock_balance(thermalBus_0_1)_: -+1 flow(powerplant_gas_coal_thermalBus_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_powerplant_gas_coal_1) = 0 -c_e_BusBlock_balance(thermalBus_1_2)_: -+1 flow(powerplant_gas_coal_thermalBus_1_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_powerplant_gas_coal_2) = 0 -c_e_BusBlock_balance(thermalBus_1_3)_: -+1 flow(powerplant_gas_coal_thermalBus_1_3) +c_e_BusBlock_balance(gasBus_3)_: ++1 flow(gasBus_powerplant_gas_coal_3) = 0 -c_e_BusBlock_balance(thermalBus_2_4)_: -+1 flow(powerplant_gas_coal_thermalBus_2_4) +c_e_BusBlock_balance(gasBus_4)_: ++1 flow(gasBus_powerplant_gas_coal_4) = 0 -c_e_BusBlock_balance(thermalBus_2_5)_: -+1 flow(powerplant_gas_coal_thermalBus_2_5) +c_e_BusBlock_balance(gasBus_5)_: ++1 flow(gasBus_powerplant_gas_coal_5) = 0 -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_powerplant_gas_coal_0_0) +c_e_BusBlock_balance(thermalBus_0)_: ++1 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_powerplant_gas_coal_0_1) +c_e_BusBlock_balance(thermalBus_1)_: ++1 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_BusBlock_balance(gasBus_1_2)_: -+1 flow(gasBus_powerplant_gas_coal_1_2) +c_e_BusBlock_balance(thermalBus_2)_: ++1 flow(powerplant_gas_coal_thermalBus_2) = 0 -c_e_BusBlock_balance(gasBus_1_3)_: -+1 flow(gasBus_powerplant_gas_coal_1_3) +c_e_BusBlock_balance(thermalBus_3)_: ++1 flow(powerplant_gas_coal_thermalBus_3) = 0 -c_e_BusBlock_balance(gasBus_2_4)_: -+1 flow(gasBus_powerplant_gas_coal_2_4) +c_e_BusBlock_balance(thermalBus_4)_: ++1 flow(powerplant_gas_coal_thermalBus_4) = 0 -c_e_BusBlock_balance(gasBus_2_5)_: -+1 flow(gasBus_powerplant_gas_coal_2_5) +c_e_BusBlock_balance(thermalBus_5)_: ++1 flow(powerplant_gas_coal_thermalBus_5) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0_0)_: --0.2 flow(powerplant_gas_coal_electricityBus_0_0) -+0.3 flow(coalBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0)_: ++0.3 flow(coalBus_powerplant_gas_coal_0) +-0.2 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0_0)_: --0.58 flow(powerplant_gas_coal_electricityBus_0_0) -+0.3 flow(gasBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0)_: ++0.3 flow(gasBus_powerplant_gas_coal_0) +-0.58 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0_0)_: --0.2 flow(powerplant_gas_coal_thermalBus_0_0) -+0.5 flow(coalBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0)_: ++0.5 flow(coalBus_powerplant_gas_coal_0) +-0.2 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0_0)_: --0.58 flow(powerplant_gas_coal_thermalBus_0_0) -+0.5 flow(gasBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0)_: ++0.5 flow(gasBus_powerplant_gas_coal_0) +-0.58 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0_1)_: --0.2 flow(powerplant_gas_coal_electricityBus_0_1) -+0.3 flow(coalBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_1)_: ++0.3 flow(coalBus_powerplant_gas_coal_1) +-0.2 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0_1)_: --0.58 flow(powerplant_gas_coal_electricityBus_0_1) -+0.3 flow(gasBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_1)_: ++0.3 flow(gasBus_powerplant_gas_coal_1) +-0.58 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0_1)_: --0.2 flow(powerplant_gas_coal_thermalBus_0_1) -+0.5 flow(coalBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_1)_: ++0.5 flow(coalBus_powerplant_gas_coal_1) +-0.2 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0_1)_: --0.58 flow(powerplant_gas_coal_thermalBus_0_1) -+0.5 flow(gasBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_1)_: ++0.5 flow(gasBus_powerplant_gas_coal_1) +-0.58 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_1_2)_: --0.2 flow(powerplant_gas_coal_electricityBus_1_2) -+0.3 flow(coalBus_powerplant_gas_coal_1_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_2)_: ++0.3 flow(coalBus_powerplant_gas_coal_2) +-0.2 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_1_2)_: --0.58 flow(powerplant_gas_coal_electricityBus_1_2) -+0.3 flow(gasBus_powerplant_gas_coal_1_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_2)_: ++0.3 flow(gasBus_powerplant_gas_coal_2) +-0.58 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_1_2)_: --0.2 flow(powerplant_gas_coal_thermalBus_1_2) -+0.5 flow(coalBus_powerplant_gas_coal_1_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_2)_: ++0.5 flow(coalBus_powerplant_gas_coal_2) +-0.2 flow(powerplant_gas_coal_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_1_2)_: --0.58 flow(powerplant_gas_coal_thermalBus_1_2) -+0.5 flow(gasBus_powerplant_gas_coal_1_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_2)_: ++0.5 flow(gasBus_powerplant_gas_coal_2) +-0.58 flow(powerplant_gas_coal_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_1_3)_: --0.2 flow(powerplant_gas_coal_electricityBus_1_3) -+0.3 flow(coalBus_powerplant_gas_coal_1_3) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_3)_: ++0.3 flow(coalBus_powerplant_gas_coal_3) +-0.2 flow(powerplant_gas_coal_electricityBus_3) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_1_3)_: --0.58 flow(powerplant_gas_coal_electricityBus_1_3) -+0.3 flow(gasBus_powerplant_gas_coal_1_3) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_3)_: ++0.3 flow(gasBus_powerplant_gas_coal_3) +-0.58 flow(powerplant_gas_coal_electricityBus_3) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_1_3)_: --0.2 flow(powerplant_gas_coal_thermalBus_1_3) -+0.5 flow(coalBus_powerplant_gas_coal_1_3) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_3)_: ++0.5 flow(coalBus_powerplant_gas_coal_3) +-0.2 flow(powerplant_gas_coal_thermalBus_3) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_1_3)_: --0.58 flow(powerplant_gas_coal_thermalBus_1_3) -+0.5 flow(gasBus_powerplant_gas_coal_1_3) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_3)_: ++0.5 flow(gasBus_powerplant_gas_coal_3) +-0.58 flow(powerplant_gas_coal_thermalBus_3) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_2_4)_: --0.2 flow(powerplant_gas_coal_electricityBus_2_4) -+0.3 flow(coalBus_powerplant_gas_coal_2_4) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_4)_: ++0.3 flow(coalBus_powerplant_gas_coal_4) +-0.2 flow(powerplant_gas_coal_electricityBus_4) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_2_4)_: --0.58 flow(powerplant_gas_coal_electricityBus_2_4) -+0.3 flow(gasBus_powerplant_gas_coal_2_4) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_4)_: ++0.3 flow(gasBus_powerplant_gas_coal_4) +-0.58 flow(powerplant_gas_coal_electricityBus_4) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_2_4)_: --0.2 flow(powerplant_gas_coal_thermalBus_2_4) -+0.5 flow(coalBus_powerplant_gas_coal_2_4) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_4)_: ++0.5 flow(coalBus_powerplant_gas_coal_4) +-0.2 flow(powerplant_gas_coal_thermalBus_4) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_2_4)_: --0.58 flow(powerplant_gas_coal_thermalBus_2_4) -+0.5 flow(gasBus_powerplant_gas_coal_2_4) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_4)_: ++0.5 flow(gasBus_powerplant_gas_coal_4) +-0.58 flow(powerplant_gas_coal_thermalBus_4) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_2_5)_: --0.2 flow(powerplant_gas_coal_electricityBus_2_5) -+0.3 flow(coalBus_powerplant_gas_coal_2_5) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_5)_: ++0.3 flow(coalBus_powerplant_gas_coal_5) +-0.2 flow(powerplant_gas_coal_electricityBus_5) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_2_5)_: --0.58 flow(powerplant_gas_coal_electricityBus_2_5) -+0.3 flow(gasBus_powerplant_gas_coal_2_5) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_5)_: ++0.3 flow(gasBus_powerplant_gas_coal_5) +-0.58 flow(powerplant_gas_coal_electricityBus_5) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_2_5)_: --0.2 flow(powerplant_gas_coal_thermalBus_2_5) -+0.5 flow(coalBus_powerplant_gas_coal_2_5) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_5)_: ++0.5 flow(coalBus_powerplant_gas_coal_5) +-0.2 flow(powerplant_gas_coal_thermalBus_5) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_2_5)_: --0.58 flow(powerplant_gas_coal_thermalBus_2_5) -+0.5 flow(gasBus_powerplant_gas_coal_2_5) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_5)_: ++0.5 flow(gasBus_powerplant_gas_coal_5) +-0.58 flow(powerplant_gas_coal_thermalBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(powerplant_gas_coal_electricityBus_0)_: @@ -280,9 +280,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(powerplant_gas_coal_electricityBus_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(powerplant_gas_coal_electricityBus_0)_: ++1 InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_0) -1 InvestmentFlowBlock_old_end(powerplant_gas_coal_electricityBus_0) -1 InvestmentFlowBlock_old_exo(powerplant_gas_coal_electricityBus_0) -+1 InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_0) = 0 c_e_InvestmentFlowBlock_old_rule(powerplant_gas_coal_electricityBus_1)_: @@ -298,32 +298,32 @@ c_e_InvestmentFlowBlock_old_rule(powerplant_gas_coal_electricityBus_2)_: = 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_0_0)_: -+1 flow(powerplant_gas_coal_electricityBus_0_0) ++1 flow(powerplant_gas_coal_electricityBus_0) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_0_1)_: -+1 flow(powerplant_gas_coal_electricityBus_0_1) ++1 flow(powerplant_gas_coal_electricityBus_1) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_1_2)_: -+1 flow(powerplant_gas_coal_electricityBus_1_2) ++1 flow(powerplant_gas_coal_electricityBus_2) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_1_3)_: -+1 flow(powerplant_gas_coal_electricityBus_1_3) ++1 flow(powerplant_gas_coal_electricityBus_3) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_2_4)_: -+1 flow(powerplant_gas_coal_electricityBus_2_4) ++1 flow(powerplant_gas_coal_electricityBus_4) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_2_5)_: -+1 flow(powerplant_gas_coal_electricityBus_2_5) ++1 flow(powerplant_gas_coal_electricityBus_5) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_2) <= 0 @@ -331,34 +331,35 @@ bounds 0 <= InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_0) <= 1000 0 <= InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_1) <= 1000 0 <= InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_2) <= 1000 - 0 <= flow(powerplant_gas_coal_electricityBus_0_0) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_0_1) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_1_2) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_1_3) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_2_4) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_2_5) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_0_0) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_0_1) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_1_2) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_1_3) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_2_4) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_2_5) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_0_0) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_0_1) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_1_2) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_1_3) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_2_4) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_2_5) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_0_0) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_0_1) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_1_2) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_1_3) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_2_4) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_2_5) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_0) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_1) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_2) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_3) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_4) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_5) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_0) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_1) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_2) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_3) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_4) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_5) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_0) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_1) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_2) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_3) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_4) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_5) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_0) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_1) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_2) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_3) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_4) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_5) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(powerplant_gas_coal_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_end(powerplant_gas_coal_electricityBus_1) <= +inf @@ -366,5 +367,4 @@ bounds 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_coal_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_coal_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_coal_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_0) <= +inf end diff --git a/tests/lp_files/converter_invest_with_existing.lp b/tests/lp_files/converter_invest_with_existing.lp index b7d4e5de5..03b081632 100644 --- a/tests/lp_files/converter_invest_with_existing.lp +++ b/tests/lp_files/converter_invest_with_existing.lp @@ -3,121 +3,121 @@ min objective: +20 InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_0) -+50 flow(powerplant_gas_coal_electricityBus_0_0) -+50 flow(powerplant_gas_coal_electricityBus_0_1) -+50 flow(powerplant_gas_coal_electricityBus_0_2) -+20 flow(powerplant_gas_coal_thermalBus_0_0) -+20 flow(powerplant_gas_coal_thermalBus_0_1) -+20 flow(powerplant_gas_coal_thermalBus_0_2) ++50 flow(powerplant_gas_coal_electricityBus_0) ++50 flow(powerplant_gas_coal_electricityBus_1) ++50 flow(powerplant_gas_coal_electricityBus_2) ++20 flow(powerplant_gas_coal_thermalBus_0) ++20 flow(powerplant_gas_coal_thermalBus_1) ++20 flow(powerplant_gas_coal_thermalBus_2) s.t. -c_e_BusBlock_balance(coalBus_0_0)_: -+1 flow(coalBus_powerplant_gas_coal_0_0) +c_e_BusBlock_balance(coalBus_0)_: ++1 flow(coalBus_powerplant_gas_coal_0) = 0 -c_e_BusBlock_balance(coalBus_0_1)_: -+1 flow(coalBus_powerplant_gas_coal_0_1) +c_e_BusBlock_balance(coalBus_1)_: ++1 flow(coalBus_powerplant_gas_coal_1) = 0 -c_e_BusBlock_balance(coalBus_0_2)_: -+1 flow(coalBus_powerplant_gas_coal_0_2) +c_e_BusBlock_balance(coalBus_2)_: ++1 flow(coalBus_powerplant_gas_coal_2) = 0 -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_powerplant_gas_coal_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_powerplant_gas_coal_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_BusBlock_balance(gasBus_0_2)_: -+1 flow(gasBus_powerplant_gas_coal_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(powerplant_gas_coal_electricityBus_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_powerplant_gas_coal_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(powerplant_gas_coal_electricityBus_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_powerplant_gas_coal_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(powerplant_gas_coal_electricityBus_0_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_powerplant_gas_coal_2) = 0 -c_e_BusBlock_balance(thermalBus_0_0)_: -+1 flow(powerplant_gas_coal_thermalBus_0_0) +c_e_BusBlock_balance(thermalBus_0)_: ++1 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_BusBlock_balance(thermalBus_0_1)_: -+1 flow(powerplant_gas_coal_thermalBus_0_1) +c_e_BusBlock_balance(thermalBus_1)_: ++1 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_BusBlock_balance(thermalBus_0_2)_: -+1 flow(powerplant_gas_coal_thermalBus_0_2) +c_e_BusBlock_balance(thermalBus_2)_: ++1 flow(powerplant_gas_coal_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0_0)_: --0.2 flow(powerplant_gas_coal_electricityBus_0_0) -+0.3 flow(coalBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0)_: ++0.3 flow(coalBus_powerplant_gas_coal_0) +-0.2 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0_0)_: --0.58 flow(powerplant_gas_coal_electricityBus_0_0) -+0.3 flow(gasBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0)_: ++0.3 flow(gasBus_powerplant_gas_coal_0) +-0.58 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0_0)_: --0.2 flow(powerplant_gas_coal_thermalBus_0_0) -+0.5 flow(coalBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0)_: ++0.5 flow(coalBus_powerplant_gas_coal_0) +-0.2 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0_0)_: --0.58 flow(powerplant_gas_coal_thermalBus_0_0) -+0.5 flow(gasBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0)_: ++0.5 flow(gasBus_powerplant_gas_coal_0) +-0.58 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0_1)_: --0.2 flow(powerplant_gas_coal_electricityBus_0_1) -+0.3 flow(coalBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_1)_: ++0.3 flow(coalBus_powerplant_gas_coal_1) +-0.2 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0_1)_: --0.58 flow(powerplant_gas_coal_electricityBus_0_1) -+0.3 flow(gasBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_1)_: ++0.3 flow(gasBus_powerplant_gas_coal_1) +-0.58 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0_1)_: --0.2 flow(powerplant_gas_coal_thermalBus_0_1) -+0.5 flow(coalBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_1)_: ++0.5 flow(coalBus_powerplant_gas_coal_1) +-0.2 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0_1)_: --0.58 flow(powerplant_gas_coal_thermalBus_0_1) -+0.5 flow(gasBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_1)_: ++0.5 flow(gasBus_powerplant_gas_coal_1) +-0.58 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0_2)_: --0.2 flow(powerplant_gas_coal_electricityBus_0_2) -+0.3 flow(coalBus_powerplant_gas_coal_0_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_2)_: ++0.3 flow(coalBus_powerplant_gas_coal_2) +-0.2 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0_2)_: --0.58 flow(powerplant_gas_coal_electricityBus_0_2) -+0.3 flow(gasBus_powerplant_gas_coal_0_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_2)_: ++0.3 flow(gasBus_powerplant_gas_coal_2) +-0.58 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0_2)_: --0.2 flow(powerplant_gas_coal_thermalBus_0_2) -+0.5 flow(coalBus_powerplant_gas_coal_0_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_2)_: ++0.5 flow(coalBus_powerplant_gas_coal_2) +-0.2 flow(powerplant_gas_coal_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0_2)_: --0.58 flow(powerplant_gas_coal_thermalBus_0_2) -+0.5 flow(gasBus_powerplant_gas_coal_0_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_2)_: ++0.5 flow(gasBus_powerplant_gas_coal_2) +-0.58 flow(powerplant_gas_coal_thermalBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(powerplant_gas_coal_electricityBus_0)_: @@ -126,33 +126,33 @@ c_e_InvestmentFlowBlock_total_rule(powerplant_gas_coal_electricityBus_0)_: = 200 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_0_0)_: -+1 flow(powerplant_gas_coal_electricityBus_0_0) ++1 flow(powerplant_gas_coal_electricityBus_0) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_0_1)_: -+1 flow(powerplant_gas_coal_electricityBus_0_1) ++1 flow(powerplant_gas_coal_electricityBus_1) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_0_2)_: -+1 flow(powerplant_gas_coal_electricityBus_0_2) ++1 flow(powerplant_gas_coal_electricityBus_2) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= 0 bounds 0 <= InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_0) <= 1000 - 0 <= flow(powerplant_gas_coal_electricityBus_0_0) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_0_1) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_0_2) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_0_0) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_0_1) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_0_2) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_0_0) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_0_1) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_0_2) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_0_0) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_0_1) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_0_2) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_0) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_1) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_2) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_0) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_1) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_2) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_0) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_1) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_2) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_0) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_1) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_2) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= +inf end diff --git a/tests/lp_files/converter_invest_with_existing_multi_period.lp b/tests/lp_files/converter_invest_with_existing_multi_period.lp index e18a16e66..1af877c80 100644 --- a/tests/lp_files/converter_invest_with_existing_multi_period.lp +++ b/tests/lp_files/converter_invest_with_existing_multi_period.lp @@ -5,235 +5,235 @@ objective: +20.0 InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_0) +19.6078431372549 InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_1) +9.706853038245011 InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_2) -+50 flow(powerplant_gas_coal_electricityBus_0_0) -+50 flow(powerplant_gas_coal_electricityBus_0_1) -+49.01960784313725 flow(powerplant_gas_coal_electricityBus_1_2) -+49.01960784313725 flow(powerplant_gas_coal_electricityBus_1_3) -+48.058439061899264 flow(powerplant_gas_coal_electricityBus_2_4) -+48.058439061899264 flow(powerplant_gas_coal_electricityBus_2_5) -+20 flow(powerplant_gas_coal_thermalBus_0_0) -+20 flow(powerplant_gas_coal_thermalBus_0_1) -+19.6078431372549 flow(powerplant_gas_coal_thermalBus_1_2) -+19.6078431372549 flow(powerplant_gas_coal_thermalBus_1_3) -+19.223375624759708 flow(powerplant_gas_coal_thermalBus_2_4) -+19.223375624759708 flow(powerplant_gas_coal_thermalBus_2_5) ++50 flow(powerplant_gas_coal_electricityBus_0) ++50 flow(powerplant_gas_coal_electricityBus_1) ++49.01960784313725 flow(powerplant_gas_coal_electricityBus_2) ++49.01960784313725 flow(powerplant_gas_coal_electricityBus_3) ++48.058439061899264 flow(powerplant_gas_coal_electricityBus_4) ++48.058439061899264 flow(powerplant_gas_coal_electricityBus_5) ++20 flow(powerplant_gas_coal_thermalBus_0) ++20 flow(powerplant_gas_coal_thermalBus_1) ++19.6078431372549 flow(powerplant_gas_coal_thermalBus_2) ++19.6078431372549 flow(powerplant_gas_coal_thermalBus_3) ++19.223375624759708 flow(powerplant_gas_coal_thermalBus_4) ++19.223375624759708 flow(powerplant_gas_coal_thermalBus_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(powerplant_gas_coal_electricityBus_0_0) +c_e_BusBlock_balance(coalBus_0)_: ++1 flow(coalBus_powerplant_gas_coal_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(powerplant_gas_coal_electricityBus_0_1) +c_e_BusBlock_balance(coalBus_1)_: ++1 flow(coalBus_powerplant_gas_coal_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(powerplant_gas_coal_electricityBus_1_2) +c_e_BusBlock_balance(coalBus_2)_: ++1 flow(coalBus_powerplant_gas_coal_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(powerplant_gas_coal_electricityBus_1_3) +c_e_BusBlock_balance(coalBus_3)_: ++1 flow(coalBus_powerplant_gas_coal_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(powerplant_gas_coal_electricityBus_2_4) +c_e_BusBlock_balance(coalBus_4)_: ++1 flow(coalBus_powerplant_gas_coal_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(powerplant_gas_coal_electricityBus_2_5) +c_e_BusBlock_balance(coalBus_5)_: ++1 flow(coalBus_powerplant_gas_coal_5) = 0 -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_powerplant_gas_coal_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_powerplant_gas_coal_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_BusBlock_balance(gasBus_1_2)_: -+1 flow(gasBus_powerplant_gas_coal_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_BusBlock_balance(gasBus_1_3)_: -+1 flow(gasBus_powerplant_gas_coal_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(powerplant_gas_coal_electricityBus_3) = 0 -c_e_BusBlock_balance(gasBus_2_4)_: -+1 flow(gasBus_powerplant_gas_coal_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(powerplant_gas_coal_electricityBus_4) = 0 -c_e_BusBlock_balance(gasBus_2_5)_: -+1 flow(gasBus_powerplant_gas_coal_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(powerplant_gas_coal_electricityBus_5) = 0 -c_e_BusBlock_balance(thermalBus_0_0)_: -+1 flow(powerplant_gas_coal_thermalBus_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_powerplant_gas_coal_0) = 0 -c_e_BusBlock_balance(thermalBus_0_1)_: -+1 flow(powerplant_gas_coal_thermalBus_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_powerplant_gas_coal_1) = 0 -c_e_BusBlock_balance(thermalBus_1_2)_: -+1 flow(powerplant_gas_coal_thermalBus_1_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_powerplant_gas_coal_2) = 0 -c_e_BusBlock_balance(thermalBus_1_3)_: -+1 flow(powerplant_gas_coal_thermalBus_1_3) +c_e_BusBlock_balance(gasBus_3)_: ++1 flow(gasBus_powerplant_gas_coal_3) = 0 -c_e_BusBlock_balance(thermalBus_2_4)_: -+1 flow(powerplant_gas_coal_thermalBus_2_4) +c_e_BusBlock_balance(gasBus_4)_: ++1 flow(gasBus_powerplant_gas_coal_4) = 0 -c_e_BusBlock_balance(thermalBus_2_5)_: -+1 flow(powerplant_gas_coal_thermalBus_2_5) +c_e_BusBlock_balance(gasBus_5)_: ++1 flow(gasBus_powerplant_gas_coal_5) = 0 -c_e_BusBlock_balance(coalBus_0_0)_: -+1 flow(coalBus_powerplant_gas_coal_0_0) +c_e_BusBlock_balance(thermalBus_0)_: ++1 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_BusBlock_balance(coalBus_0_1)_: -+1 flow(coalBus_powerplant_gas_coal_0_1) +c_e_BusBlock_balance(thermalBus_1)_: ++1 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_BusBlock_balance(coalBus_1_2)_: -+1 flow(coalBus_powerplant_gas_coal_1_2) +c_e_BusBlock_balance(thermalBus_2)_: ++1 flow(powerplant_gas_coal_thermalBus_2) = 0 -c_e_BusBlock_balance(coalBus_1_3)_: -+1 flow(coalBus_powerplant_gas_coal_1_3) +c_e_BusBlock_balance(thermalBus_3)_: ++1 flow(powerplant_gas_coal_thermalBus_3) = 0 -c_e_BusBlock_balance(coalBus_2_4)_: -+1 flow(coalBus_powerplant_gas_coal_2_4) +c_e_BusBlock_balance(thermalBus_4)_: ++1 flow(powerplant_gas_coal_thermalBus_4) = 0 -c_e_BusBlock_balance(coalBus_2_5)_: -+1 flow(coalBus_powerplant_gas_coal_2_5) +c_e_BusBlock_balance(thermalBus_5)_: ++1 flow(powerplant_gas_coal_thermalBus_5) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0_0)_: --0.58 flow(powerplant_gas_coal_electricityBus_0_0) -+0.3 flow(gasBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0)_: ++0.3 flow(coalBus_powerplant_gas_coal_0) +-0.2 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0_0)_: --0.2 flow(powerplant_gas_coal_electricityBus_0_0) -+0.3 flow(coalBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0)_: ++0.3 flow(gasBus_powerplant_gas_coal_0) +-0.58 flow(powerplant_gas_coal_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0_0)_: --0.58 flow(powerplant_gas_coal_thermalBus_0_0) -+0.5 flow(gasBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0)_: ++0.5 flow(coalBus_powerplant_gas_coal_0) +-0.2 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0_0)_: --0.2 flow(powerplant_gas_coal_thermalBus_0_0) -+0.5 flow(coalBus_powerplant_gas_coal_0_0) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0)_: ++0.5 flow(gasBus_powerplant_gas_coal_0) +-0.58 flow(powerplant_gas_coal_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_0_1)_: --0.58 flow(powerplant_gas_coal_electricityBus_0_1) -+0.3 flow(gasBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_1)_: ++0.3 flow(coalBus_powerplant_gas_coal_1) +-0.2 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_0_1)_: --0.2 flow(powerplant_gas_coal_electricityBus_0_1) -+0.3 flow(coalBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_1)_: ++0.3 flow(gasBus_powerplant_gas_coal_1) +-0.58 flow(powerplant_gas_coal_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_0_1)_: --0.58 flow(powerplant_gas_coal_thermalBus_0_1) -+0.5 flow(gasBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_1)_: ++0.5 flow(coalBus_powerplant_gas_coal_1) +-0.2 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_0_1)_: --0.2 flow(powerplant_gas_coal_thermalBus_0_1) -+0.5 flow(coalBus_powerplant_gas_coal_0_1) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_1)_: ++0.5 flow(gasBus_powerplant_gas_coal_1) +-0.58 flow(powerplant_gas_coal_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_1_2)_: --0.58 flow(powerplant_gas_coal_electricityBus_1_2) -+0.3 flow(gasBus_powerplant_gas_coal_1_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_2)_: ++0.3 flow(coalBus_powerplant_gas_coal_2) +-0.2 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_1_2)_: --0.2 flow(powerplant_gas_coal_electricityBus_1_2) -+0.3 flow(coalBus_powerplant_gas_coal_1_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_2)_: ++0.3 flow(gasBus_powerplant_gas_coal_2) +-0.58 flow(powerplant_gas_coal_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_1_2)_: --0.58 flow(powerplant_gas_coal_thermalBus_1_2) -+0.5 flow(gasBus_powerplant_gas_coal_1_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_2)_: ++0.5 flow(coalBus_powerplant_gas_coal_2) +-0.2 flow(powerplant_gas_coal_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_1_2)_: --0.2 flow(powerplant_gas_coal_thermalBus_1_2) -+0.5 flow(coalBus_powerplant_gas_coal_1_2) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_2)_: ++0.5 flow(gasBus_powerplant_gas_coal_2) +-0.58 flow(powerplant_gas_coal_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_1_3)_: --0.58 flow(powerplant_gas_coal_electricityBus_1_3) -+0.3 flow(gasBus_powerplant_gas_coal_1_3) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_3)_: ++0.3 flow(coalBus_powerplant_gas_coal_3) +-0.2 flow(powerplant_gas_coal_electricityBus_3) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_1_3)_: --0.2 flow(powerplant_gas_coal_electricityBus_1_3) -+0.3 flow(coalBus_powerplant_gas_coal_1_3) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_3)_: ++0.3 flow(gasBus_powerplant_gas_coal_3) +-0.58 flow(powerplant_gas_coal_electricityBus_3) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_1_3)_: --0.58 flow(powerplant_gas_coal_thermalBus_1_3) -+0.5 flow(gasBus_powerplant_gas_coal_1_3) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_3)_: ++0.5 flow(coalBus_powerplant_gas_coal_3) +-0.2 flow(powerplant_gas_coal_thermalBus_3) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_1_3)_: --0.2 flow(powerplant_gas_coal_thermalBus_1_3) -+0.5 flow(coalBus_powerplant_gas_coal_1_3) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_3)_: ++0.5 flow(gasBus_powerplant_gas_coal_3) +-0.58 flow(powerplant_gas_coal_thermalBus_3) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_2_4)_: --0.58 flow(powerplant_gas_coal_electricityBus_2_4) -+0.3 flow(gasBus_powerplant_gas_coal_2_4) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_4)_: ++0.3 flow(coalBus_powerplant_gas_coal_4) +-0.2 flow(powerplant_gas_coal_electricityBus_4) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_2_4)_: --0.2 flow(powerplant_gas_coal_electricityBus_2_4) -+0.3 flow(coalBus_powerplant_gas_coal_2_4) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_4)_: ++0.3 flow(gasBus_powerplant_gas_coal_4) +-0.58 flow(powerplant_gas_coal_electricityBus_4) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_2_4)_: --0.58 flow(powerplant_gas_coal_thermalBus_2_4) -+0.5 flow(gasBus_powerplant_gas_coal_2_4) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_4)_: ++0.5 flow(coalBus_powerplant_gas_coal_4) +-0.2 flow(powerplant_gas_coal_thermalBus_4) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_2_4)_: --0.2 flow(powerplant_gas_coal_thermalBus_2_4) -+0.5 flow(coalBus_powerplant_gas_coal_2_4) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_4)_: ++0.5 flow(gasBus_powerplant_gas_coal_4) +-0.58 flow(powerplant_gas_coal_thermalBus_4) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_2_5)_: --0.58 flow(powerplant_gas_coal_electricityBus_2_5) -+0.3 flow(gasBus_powerplant_gas_coal_2_5) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_5)_: ++0.3 flow(coalBus_powerplant_gas_coal_5) +-0.2 flow(powerplant_gas_coal_electricityBus_5) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_electricityBus_2_5)_: --0.2 flow(powerplant_gas_coal_electricityBus_2_5) -+0.3 flow(coalBus_powerplant_gas_coal_2_5) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_electricityBus_5)_: ++0.3 flow(gasBus_powerplant_gas_coal_5) +-0.58 flow(powerplant_gas_coal_electricityBus_5) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_2_5)_: --0.58 flow(powerplant_gas_coal_thermalBus_2_5) -+0.5 flow(gasBus_powerplant_gas_coal_2_5) +c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_5)_: ++0.5 flow(coalBus_powerplant_gas_coal_5) +-0.2 flow(powerplant_gas_coal_thermalBus_5) = 0 -c_e_ConverterBlock_relation(powerplant_gas_coal_coalBus_thermalBus_2_5)_: --0.2 flow(powerplant_gas_coal_thermalBus_2_5) -+0.5 flow(coalBus_powerplant_gas_coal_2_5) +c_e_ConverterBlock_relation(powerplant_gas_coal_gasBus_thermalBus_5)_: ++0.5 flow(gasBus_powerplant_gas_coal_5) +-0.58 flow(powerplant_gas_coal_thermalBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(powerplant_gas_coal_electricityBus_0)_: @@ -281,9 +281,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(powerplant_gas_coal_electricityBus_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(powerplant_gas_coal_electricityBus_0)_: ++1 InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_0) -1 InvestmentFlowBlock_old_end(powerplant_gas_coal_electricityBus_0) -1 InvestmentFlowBlock_old_exo(powerplant_gas_coal_electricityBus_0) -+1 InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_0) = 0 c_e_InvestmentFlowBlock_old_rule(powerplant_gas_coal_electricityBus_1)_: @@ -299,32 +299,32 @@ c_e_InvestmentFlowBlock_old_rule(powerplant_gas_coal_electricityBus_2)_: = 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_0_0)_: -+1 flow(powerplant_gas_coal_electricityBus_0_0) ++1 flow(powerplant_gas_coal_electricityBus_0) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_0_1)_: -+1 flow(powerplant_gas_coal_electricityBus_0_1) ++1 flow(powerplant_gas_coal_electricityBus_1) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_1_2)_: -+1 flow(powerplant_gas_coal_electricityBus_1_2) ++1 flow(powerplant_gas_coal_electricityBus_2) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_1_3)_: -+1 flow(powerplant_gas_coal_electricityBus_1_3) ++1 flow(powerplant_gas_coal_electricityBus_3) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_2_4)_: -+1 flow(powerplant_gas_coal_electricityBus_2_4) ++1 flow(powerplant_gas_coal_electricityBus_4) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_coal_electricityBus_2_5)_: -+1 flow(powerplant_gas_coal_electricityBus_2_5) ++1 flow(powerplant_gas_coal_electricityBus_5) -1 InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_2) <= 0 @@ -332,34 +332,35 @@ bounds 0 <= InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_0) <= 1000 0 <= InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_1) <= 1000 0 <= InvestmentFlowBlock_invest(powerplant_gas_coal_electricityBus_2) <= 1000 - 0 <= flow(powerplant_gas_coal_electricityBus_0_0) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_0_1) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_1_2) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_1_3) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_2_4) <= +inf - 0 <= flow(powerplant_gas_coal_electricityBus_2_5) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_0_0) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_0_1) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_1_2) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_1_3) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_2_4) <= +inf - 0 <= flow(powerplant_gas_coal_thermalBus_2_5) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_0_0) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_0_1) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_1_2) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_1_3) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_2_4) <= +inf - 0 <= flow(gasBus_powerplant_gas_coal_2_5) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_0_0) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_0_1) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_1_2) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_1_3) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_2_4) <= +inf - 0 <= flow(coalBus_powerplant_gas_coal_2_5) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_0) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_1) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_2) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_3) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_4) <= +inf + 0 <= flow(gasBus_powerplant_gas_coal_5) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_0) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_1) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_2) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_3) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_4) <= +inf + 0 <= flow(coalBus_powerplant_gas_coal_5) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_0) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_1) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_2) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_3) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_4) <= +inf + 0 <= flow(powerplant_gas_coal_electricityBus_5) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_0) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_1) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_2) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_3) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_4) <= +inf + 0 <= flow(powerplant_gas_coal_thermalBus_5) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_coal_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(powerplant_gas_coal_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_end(powerplant_gas_coal_electricityBus_1) <= +inf @@ -367,5 +368,4 @@ bounds 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_coal_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_coal_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_coal_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(powerplant_gas_coal_electricityBus_0) <= +inf end diff --git a/tests/lp_files/converter_multi_period.lp b/tests/lp_files/converter_multi_period.lp index 0a63e9490..d9be36e15 100644 --- a/tests/lp_files/converter_multi_period.lp +++ b/tests/lp_files/converter_multi_period.lp @@ -2,260 +2,260 @@ min objective: -+50 flow(powerplantGasBiomass_electricityBus_0_0) -+50 flow(powerplantGasBiomass_electricityBus_0_1) -+49.01960784313725 flow(powerplantGasBiomass_electricityBus_1_2) -+49.01960784313725 flow(powerplantGasBiomass_electricityBus_1_3) -+48.058439061899264 flow(powerplantGasBiomass_electricityBus_2_4) -+48.058439061899264 flow(powerplantGasBiomass_electricityBus_2_5) -+20 flow(powerplantGasBiomass_thermalBus_0_0) -+20 flow(powerplantGasBiomass_thermalBus_0_1) -+19.6078431372549 flow(powerplantGasBiomass_thermalBus_1_2) -+19.6078431372549 flow(powerplantGasBiomass_thermalBus_1_3) -+19.223375624759708 flow(powerplantGasBiomass_thermalBus_2_4) -+19.223375624759708 flow(powerplantGasBiomass_thermalBus_2_5) ++50 flow(powerplantGasBiomass_electricityBus_0) ++50 flow(powerplantGasBiomass_electricityBus_1) ++49.01960784313725 flow(powerplantGasBiomass_electricityBus_2) ++49.01960784313725 flow(powerplantGasBiomass_electricityBus_3) ++48.058439061899264 flow(powerplantGasBiomass_electricityBus_4) ++48.058439061899264 flow(powerplantGasBiomass_electricityBus_5) ++20 flow(powerplantGasBiomass_thermalBus_0) ++20 flow(powerplantGasBiomass_thermalBus_1) ++19.6078431372549 flow(powerplantGasBiomass_thermalBus_2) ++19.6078431372549 flow(powerplantGasBiomass_thermalBus_3) ++19.223375624759708 flow(powerplantGasBiomass_thermalBus_4) ++19.223375624759708 flow(powerplantGasBiomass_thermalBus_5) s.t. -c_e_BusBlock_balance(biomassBus_0_0)_: -+1 flow(biomassBus_powerplantGasBiomass_0_0) +c_e_BusBlock_balance(biomassBus_0)_: ++1 flow(biomassBus_powerplantGasBiomass_0) = 0 -c_e_BusBlock_balance(biomassBus_0_1)_: -+1 flow(biomassBus_powerplantGasBiomass_0_1) +c_e_BusBlock_balance(biomassBus_1)_: ++1 flow(biomassBus_powerplantGasBiomass_1) = 0 -c_e_BusBlock_balance(biomassBus_1_2)_: -+1 flow(biomassBus_powerplantGasBiomass_1_2) +c_e_BusBlock_balance(biomassBus_2)_: ++1 flow(biomassBus_powerplantGasBiomass_2) = 0 -c_e_BusBlock_balance(biomassBus_1_3)_: -+1 flow(biomassBus_powerplantGasBiomass_1_3) +c_e_BusBlock_balance(biomassBus_3)_: ++1 flow(biomassBus_powerplantGasBiomass_3) = 0 -c_e_BusBlock_balance(biomassBus_2_4)_: -+1 flow(biomassBus_powerplantGasBiomass_2_4) +c_e_BusBlock_balance(biomassBus_4)_: ++1 flow(biomassBus_powerplantGasBiomass_4) = 0 -c_e_BusBlock_balance(biomassBus_2_5)_: -+1 flow(biomassBus_powerplantGasBiomass_2_5) +c_e_BusBlock_balance(biomassBus_5)_: ++1 flow(biomassBus_powerplantGasBiomass_5) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(powerplantGasBiomass_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(powerplantGasBiomass_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(powerplantGasBiomass_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(powerplantGasBiomass_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(powerplantGasBiomass_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(powerplantGasBiomass_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(powerplantGasBiomass_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(powerplantGasBiomass_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(powerplantGasBiomass_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(powerplantGasBiomass_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(powerplantGasBiomass_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(powerplantGasBiomass_electricityBus_5) = 0 -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_powerplantGasBiomass_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_powerplantGasBiomass_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_powerplantGasBiomass_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_powerplantGasBiomass_1) = 0 -c_e_BusBlock_balance(gasBus_1_2)_: -+1 flow(gasBus_powerplantGasBiomass_1_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_powerplantGasBiomass_2) = 0 -c_e_BusBlock_balance(gasBus_1_3)_: -+1 flow(gasBus_powerplantGasBiomass_1_3) +c_e_BusBlock_balance(gasBus_3)_: ++1 flow(gasBus_powerplantGasBiomass_3) = 0 -c_e_BusBlock_balance(gasBus_2_4)_: -+1 flow(gasBus_powerplantGasBiomass_2_4) +c_e_BusBlock_balance(gasBus_4)_: ++1 flow(gasBus_powerplantGasBiomass_4) = 0 -c_e_BusBlock_balance(gasBus_2_5)_: -+1 flow(gasBus_powerplantGasBiomass_2_5) +c_e_BusBlock_balance(gasBus_5)_: ++1 flow(gasBus_powerplantGasBiomass_5) = 0 -c_e_BusBlock_balance(thermalBus_0_0)_: -+1 flow(powerplantGasBiomass_thermalBus_0_0) +c_e_BusBlock_balance(thermalBus_0)_: ++1 flow(powerplantGasBiomass_thermalBus_0) = 0 -c_e_BusBlock_balance(thermalBus_0_1)_: -+1 flow(powerplantGasBiomass_thermalBus_0_1) +c_e_BusBlock_balance(thermalBus_1)_: ++1 flow(powerplantGasBiomass_thermalBus_1) = 0 -c_e_BusBlock_balance(thermalBus_1_2)_: -+1 flow(powerplantGasBiomass_thermalBus_1_2) +c_e_BusBlock_balance(thermalBus_2)_: ++1 flow(powerplantGasBiomass_thermalBus_2) = 0 -c_e_BusBlock_balance(thermalBus_1_3)_: -+1 flow(powerplantGasBiomass_thermalBus_1_3) +c_e_BusBlock_balance(thermalBus_3)_: ++1 flow(powerplantGasBiomass_thermalBus_3) = 0 -c_e_BusBlock_balance(thermalBus_2_4)_: -+1 flow(powerplantGasBiomass_thermalBus_2_4) +c_e_BusBlock_balance(thermalBus_4)_: ++1 flow(powerplantGasBiomass_thermalBus_4) = 0 -c_e_BusBlock_balance(thermalBus_2_5)_: -+1 flow(powerplantGasBiomass_thermalBus_2_5) +c_e_BusBlock_balance(thermalBus_5)_: ++1 flow(powerplantGasBiomass_thermalBus_5) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_0_0)_: --0.1 flow(powerplantGasBiomass_electricityBus_0_0) -+0.3 flow(biomassBus_powerplantGasBiomass_0_0) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_0)_: ++0.3 flow(gasBus_powerplantGasBiomass_0) +-0.4 flow(powerplantGasBiomass_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_0_0)_: --0.4 flow(powerplantGasBiomass_electricityBus_0_0) -+0.3 flow(gasBus_powerplantGasBiomass_0_0) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_0)_: ++0.3 flow(biomassBus_powerplantGasBiomass_0) +-0.1 flow(powerplantGasBiomass_electricityBus_0) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_0_0)_: --0.1 flow(powerplantGasBiomass_thermalBus_0_0) -+0.5 flow(biomassBus_powerplantGasBiomass_0_0) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_0)_: ++0.5 flow(gasBus_powerplantGasBiomass_0) +-0.4 flow(powerplantGasBiomass_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_0_0)_: --0.4 flow(powerplantGasBiomass_thermalBus_0_0) -+0.5 flow(gasBus_powerplantGasBiomass_0_0) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_0)_: ++0.5 flow(biomassBus_powerplantGasBiomass_0) +-0.1 flow(powerplantGasBiomass_thermalBus_0) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_0_1)_: --0.1 flow(powerplantGasBiomass_electricityBus_0_1) -+0.3 flow(biomassBus_powerplantGasBiomass_0_1) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_1)_: ++0.3 flow(gasBus_powerplantGasBiomass_1) +-0.4 flow(powerplantGasBiomass_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_0_1)_: --0.4 flow(powerplantGasBiomass_electricityBus_0_1) -+0.3 flow(gasBus_powerplantGasBiomass_0_1) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_1)_: ++0.3 flow(biomassBus_powerplantGasBiomass_1) +-0.1 flow(powerplantGasBiomass_electricityBus_1) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_0_1)_: --0.1 flow(powerplantGasBiomass_thermalBus_0_1) -+0.5 flow(biomassBus_powerplantGasBiomass_0_1) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_1)_: ++0.5 flow(gasBus_powerplantGasBiomass_1) +-0.4 flow(powerplantGasBiomass_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_0_1)_: --0.4 flow(powerplantGasBiomass_thermalBus_0_1) -+0.5 flow(gasBus_powerplantGasBiomass_0_1) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_1)_: ++0.5 flow(biomassBus_powerplantGasBiomass_1) +-0.1 flow(powerplantGasBiomass_thermalBus_1) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_1_2)_: --0.1 flow(powerplantGasBiomass_electricityBus_1_2) -+0.3 flow(biomassBus_powerplantGasBiomass_1_2) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_2)_: ++0.3 flow(gasBus_powerplantGasBiomass_2) +-0.4 flow(powerplantGasBiomass_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_1_2)_: --0.4 flow(powerplantGasBiomass_electricityBus_1_2) -+0.3 flow(gasBus_powerplantGasBiomass_1_2) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_2)_: ++0.3 flow(biomassBus_powerplantGasBiomass_2) +-0.1 flow(powerplantGasBiomass_electricityBus_2) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_1_2)_: --0.1 flow(powerplantGasBiomass_thermalBus_1_2) -+0.5 flow(biomassBus_powerplantGasBiomass_1_2) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_2)_: ++0.5 flow(gasBus_powerplantGasBiomass_2) +-0.4 flow(powerplantGasBiomass_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_1_2)_: --0.4 flow(powerplantGasBiomass_thermalBus_1_2) -+0.5 flow(gasBus_powerplantGasBiomass_1_2) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_2)_: ++0.5 flow(biomassBus_powerplantGasBiomass_2) +-0.1 flow(powerplantGasBiomass_thermalBus_2) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_1_3)_: --0.1 flow(powerplantGasBiomass_electricityBus_1_3) -+0.3 flow(biomassBus_powerplantGasBiomass_1_3) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_3)_: ++0.3 flow(gasBus_powerplantGasBiomass_3) +-0.4 flow(powerplantGasBiomass_electricityBus_3) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_1_3)_: --0.4 flow(powerplantGasBiomass_electricityBus_1_3) -+0.3 flow(gasBus_powerplantGasBiomass_1_3) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_3)_: ++0.3 flow(biomassBus_powerplantGasBiomass_3) +-0.1 flow(powerplantGasBiomass_electricityBus_3) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_1_3)_: --0.1 flow(powerplantGasBiomass_thermalBus_1_3) -+0.5 flow(biomassBus_powerplantGasBiomass_1_3) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_3)_: ++0.5 flow(gasBus_powerplantGasBiomass_3) +-0.4 flow(powerplantGasBiomass_thermalBus_3) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_1_3)_: --0.4 flow(powerplantGasBiomass_thermalBus_1_3) -+0.5 flow(gasBus_powerplantGasBiomass_1_3) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_3)_: ++0.5 flow(biomassBus_powerplantGasBiomass_3) +-0.1 flow(powerplantGasBiomass_thermalBus_3) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_2_4)_: --0.1 flow(powerplantGasBiomass_electricityBus_2_4) -+0.3 flow(biomassBus_powerplantGasBiomass_2_4) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_4)_: ++0.3 flow(gasBus_powerplantGasBiomass_4) +-0.4 flow(powerplantGasBiomass_electricityBus_4) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_2_4)_: --0.4 flow(powerplantGasBiomass_electricityBus_2_4) -+0.3 flow(gasBus_powerplantGasBiomass_2_4) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_4)_: ++0.3 flow(biomassBus_powerplantGasBiomass_4) +-0.1 flow(powerplantGasBiomass_electricityBus_4) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_2_4)_: --0.1 flow(powerplantGasBiomass_thermalBus_2_4) -+0.5 flow(biomassBus_powerplantGasBiomass_2_4) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_4)_: ++0.5 flow(gasBus_powerplantGasBiomass_4) +-0.4 flow(powerplantGasBiomass_thermalBus_4) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_2_4)_: --0.4 flow(powerplantGasBiomass_thermalBus_2_4) -+0.5 flow(gasBus_powerplantGasBiomass_2_4) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_4)_: ++0.5 flow(biomassBus_powerplantGasBiomass_4) +-0.1 flow(powerplantGasBiomass_thermalBus_4) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_2_5)_: --0.1 flow(powerplantGasBiomass_electricityBus_2_5) -+0.3 flow(biomassBus_powerplantGasBiomass_2_5) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_5)_: ++0.3 flow(gasBus_powerplantGasBiomass_5) +-0.4 flow(powerplantGasBiomass_electricityBus_5) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_electricityBus_2_5)_: --0.4 flow(powerplantGasBiomass_electricityBus_2_5) -+0.3 flow(gasBus_powerplantGasBiomass_2_5) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_electricityBus_5)_: ++0.3 flow(biomassBus_powerplantGasBiomass_5) +-0.1 flow(powerplantGasBiomass_electricityBus_5) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_2_5)_: --0.1 flow(powerplantGasBiomass_thermalBus_2_5) -+0.5 flow(biomassBus_powerplantGasBiomass_2_5) +c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_5)_: ++0.5 flow(gasBus_powerplantGasBiomass_5) +-0.4 flow(powerplantGasBiomass_thermalBus_5) = 0 -c_e_ConverterBlock_relation(powerplantGasBiomass_gasBus_thermalBus_2_5)_: --0.4 flow(powerplantGasBiomass_thermalBus_2_5) -+0.5 flow(gasBus_powerplantGasBiomass_2_5) +c_e_ConverterBlock_relation(powerplantGasBiomass_biomassBus_thermalBus_5)_: ++0.5 flow(biomassBus_powerplantGasBiomass_5) +-0.1 flow(powerplantGasBiomass_thermalBus_5) = 0 bounds - 0 <= flow(powerplantGasBiomass_electricityBus_0_0) <= +inf - 0 <= flow(powerplantGasBiomass_electricityBus_0_1) <= +inf - 0 <= flow(powerplantGasBiomass_electricityBus_1_2) <= +inf - 0 <= flow(powerplantGasBiomass_electricityBus_1_3) <= +inf - 0 <= flow(powerplantGasBiomass_electricityBus_2_4) <= +inf - 0 <= flow(powerplantGasBiomass_electricityBus_2_5) <= +inf - 0.0 <= flow(powerplantGasBiomass_thermalBus_0_0) <= 50000000000.0 - 0.0 <= flow(powerplantGasBiomass_thermalBus_0_1) <= 50000000000.0 - 0.0 <= flow(powerplantGasBiomass_thermalBus_1_2) <= 50000000000.0 - 0.0 <= flow(powerplantGasBiomass_thermalBus_1_3) <= 50000000000.0 - 0.0 <= flow(powerplantGasBiomass_thermalBus_2_4) <= 50000000000.0 - 0.0 <= flow(powerplantGasBiomass_thermalBus_2_5) <= 50000000000.0 - 0 <= flow(biomassBus_powerplantGasBiomass_0_0) <= +inf - 0 <= flow(biomassBus_powerplantGasBiomass_0_1) <= +inf - 0 <= flow(biomassBus_powerplantGasBiomass_1_2) <= +inf - 0 <= flow(biomassBus_powerplantGasBiomass_1_3) <= +inf - 0 <= flow(biomassBus_powerplantGasBiomass_2_4) <= +inf - 0 <= flow(biomassBus_powerplantGasBiomass_2_5) <= +inf - 0 <= flow(gasBus_powerplantGasBiomass_0_0) <= +inf - 0 <= flow(gasBus_powerplantGasBiomass_0_1) <= +inf - 0 <= flow(gasBus_powerplantGasBiomass_1_2) <= +inf - 0 <= flow(gasBus_powerplantGasBiomass_1_3) <= +inf - 0 <= flow(gasBus_powerplantGasBiomass_2_4) <= +inf - 0 <= flow(gasBus_powerplantGasBiomass_2_5) <= +inf + 0 <= flow(gasBus_powerplantGasBiomass_0) <= +inf + 0 <= flow(gasBus_powerplantGasBiomass_1) <= +inf + 0 <= flow(gasBus_powerplantGasBiomass_2) <= +inf + 0 <= flow(gasBus_powerplantGasBiomass_3) <= +inf + 0 <= flow(gasBus_powerplantGasBiomass_4) <= +inf + 0 <= flow(gasBus_powerplantGasBiomass_5) <= +inf + 0 <= flow(biomassBus_powerplantGasBiomass_0) <= +inf + 0 <= flow(biomassBus_powerplantGasBiomass_1) <= +inf + 0 <= flow(biomassBus_powerplantGasBiomass_2) <= +inf + 0 <= flow(biomassBus_powerplantGasBiomass_3) <= +inf + 0 <= flow(biomassBus_powerplantGasBiomass_4) <= +inf + 0 <= flow(biomassBus_powerplantGasBiomass_5) <= +inf + 0 <= flow(powerplantGasBiomass_electricityBus_0) <= +inf + 0 <= flow(powerplantGasBiomass_electricityBus_1) <= +inf + 0 <= flow(powerplantGasBiomass_electricityBus_2) <= +inf + 0 <= flow(powerplantGasBiomass_electricityBus_3) <= +inf + 0 <= flow(powerplantGasBiomass_electricityBus_4) <= +inf + 0 <= flow(powerplantGasBiomass_electricityBus_5) <= +inf + 0.0 <= flow(powerplantGasBiomass_thermalBus_0) <= 50000000000.0 + 0.0 <= flow(powerplantGasBiomass_thermalBus_1) <= 50000000000.0 + 0.0 <= flow(powerplantGasBiomass_thermalBus_2) <= 50000000000.0 + 0.0 <= flow(powerplantGasBiomass_thermalBus_3) <= 50000000000.0 + 0.0 <= flow(powerplantGasBiomass_thermalBus_4) <= 50000000000.0 + 0.0 <= flow(powerplantGasBiomass_thermalBus_5) <= 50000000000.0 end diff --git a/tests/lp_files/dsm_module_DIW.lp b/tests/lp_files/dsm_module_DIW.lp index 337238871..e3d5eec30 100644 --- a/tests/lp_files/dsm_module_DIW.lp +++ b/tests/lp_files/dsm_module_DIW.lp @@ -3,27 +3,27 @@ min objective: +2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) +2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) +2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) +2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) +2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_0_2)_: -+1 flow(bus_elec_demand_dsm_0_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 c_e_SinkDSMDIWBlock_shift_shed_vars(demand_dsm_0)_: @@ -41,26 +41,26 @@ c_e_SinkDSMDIWBlock_shift_shed_vars(demand_dsm_2)_: c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) -+1 flow(bus_elec_demand_dsm_0_0) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMDIWBlock_dsm_up(demand_dsm_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_1)_: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) -+1 flow(bus_elec_demand_dsm_0_1) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) -1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_2)_: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) -+1 flow(bus_elec_demand_dsm_0_2) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) -1 SinkDSMDIWBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 1 c_e_SinkDSMDIWBlock_dsm_updo_constraint(demand_dsm_0)_: @@ -137,21 +137,21 @@ c_u_SinkDSMDIWBlock_C2_constraint(demand_dsm_2)_: bounds 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_2) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_0) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_1) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf end diff --git a/tests/lp_files/dsm_module_DIW_extended.lp b/tests/lp_files/dsm_module_DIW_extended.lp index 92ce70c7e..88cfa3bb1 100644 --- a/tests/lp_files/dsm_module_DIW_extended.lp +++ b/tests/lp_files/dsm_module_DIW_extended.lp @@ -3,33 +3,33 @@ min objective: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) +100 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) ++100 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) +1 SinkDSMDIWBlock_dsm_up(demand_dsm_0) +1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) -+100 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) +1 SinkDSMDIWBlock_dsm_up(demand_dsm_2) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) -+100 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_0_2)_: -+1 flow(bus_elec_demand_dsm_0_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_0)_: @@ -37,43 +37,43 @@ c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMDIWBlock_dsm_up(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) +-1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 0.9 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_2)_: --1 SinkDSMDIWBlock_dsm_up(demand_dsm_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_0_2) +-1 SinkDSMDIWBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 0.8 c_e_SinkDSMDIWBlock_dsm_updo_constraint(demand_dsm_0)_: -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) -+0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_0) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) ++0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_0) = 0 c_e_SinkDSMDIWBlock_dsm_updo_constraint(demand_dsm_1)_: -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) -+0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_1) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) ++0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_1) = 0 c_e_SinkDSMDIWBlock_dsm_updo_constraint(demand_dsm_2)_: -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) -+0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_2) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) ++0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_2) = 0 c_u_SinkDSMDIWBlock_dsm_up_constraint(demand_dsm_0)_: @@ -115,18 +115,18 @@ c_u_SinkDSMDIWBlock_C2_constraint(demand_dsm_0)_: <= 0.5 c_u_SinkDSMDIWBlock_C2_constraint(demand_dsm_1)_: -+1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) ++1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) <= 0.4 c_u_SinkDSMDIWBlock_C2_constraint(demand_dsm_2)_: -+1 SinkDSMDIWBlock_dsm_up(demand_dsm_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) ++1 SinkDSMDIWBlock_dsm_up(demand_dsm_2) <= 0.5 c_u_SinkDSMDIWBlock_recovery_constraint(demand_dsm_0)_: @@ -159,21 +159,21 @@ c_u_SinkDSMDIWBlock_shed_limit_constraint(demand_dsm_2)_: bounds 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf end diff --git a/tests/lp_files/dsm_module_DIW_extended_multi_period.lp b/tests/lp_files/dsm_module_DIW_extended_multi_period.lp index e247e622e..80272cd99 100644 --- a/tests/lp_files/dsm_module_DIW_extended_multi_period.lp +++ b/tests/lp_files/dsm_module_DIW_extended_multi_period.lp @@ -3,78 +3,78 @@ min objective: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_3) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_4) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_5) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_4) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_5) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_4) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_5) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_0) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_1) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_5) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_0) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_1) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_2) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_5) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_0) ++1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_1) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_2) ++0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_3) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) ++0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_5) +100 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) ++98.0392156862745 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) ++98.0392156862745 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_3) ++96.11687812379853 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_4) ++96.11687812379853 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_5) +1 SinkDSMDIWBlock_dsm_up(demand_dsm_0) +1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_1) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_1) -+1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_1) -+100 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) +0.9803921568627451 SinkDSMDIWBlock_dsm_up(demand_dsm_2) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_2) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_2) -+98.0392156862745 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) +0.9803921568627451 SinkDSMDIWBlock_dsm_up(demand_dsm_3) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_3) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) -+0.9803921568627451 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_3) -+98.0392156862745 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_3) +0.9611687812379853 SinkDSMDIWBlock_dsm_up(demand_dsm_4) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_4) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) -+96.11687812379853 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_4) +0.9611687812379853 SinkDSMDIWBlock_dsm_up(demand_dsm_5) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_5) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_5) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_5) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_5) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_5) -+0.9611687812379853 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_5) -+96.11687812379853 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_5) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_0)_: @@ -82,91 +82,91 @@ c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMDIWBlock_dsm_up(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) +-1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 0.9 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_1_2)_: --1 SinkDSMDIWBlock_dsm_up(demand_dsm_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_1_2) +-1 SinkDSMDIWBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 0.8 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_1_3)_: --1 SinkDSMDIWBlock_dsm_up(demand_dsm_3) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_3) -+1 flow(bus_elec_demand_dsm_1_3) +-1 SinkDSMDIWBlock_dsm_up(demand_dsm_3) ++1 flow(bus_elec_demand_dsm_3) = 0.7 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_2_4)_: --1 SinkDSMDIWBlock_dsm_up(demand_dsm_4) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_4) -+1 flow(bus_elec_demand_dsm_2_4) +-1 SinkDSMDIWBlock_dsm_up(demand_dsm_4) ++1 flow(bus_elec_demand_dsm_4) = 0.7 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_2_5)_: --1 SinkDSMDIWBlock_dsm_up(demand_dsm_5) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_5) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_5) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_5) -+1 flow(bus_elec_demand_dsm_2_5) +-1 SinkDSMDIWBlock_dsm_up(demand_dsm_5) ++1 flow(bus_elec_demand_dsm_5) = 0.7 c_e_SinkDSMDIWBlock_dsm_updo_constraint(demand_dsm_0)_: -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) -+0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_0) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) ++0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_0) = 0 c_e_SinkDSMDIWBlock_dsm_updo_constraint(demand_dsm_1)_: -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) -+0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_1) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) ++0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_1) = 0 c_e_SinkDSMDIWBlock_dsm_updo_constraint(demand_dsm_2)_: -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) -+0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_2) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) ++0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_2) = 0 c_e_SinkDSMDIWBlock_dsm_updo_constraint(demand_dsm_3)_: -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) -+0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_3) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) ++0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_3) = 0 c_e_SinkDSMDIWBlock_dsm_updo_constraint(demand_dsm_4)_: -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) -+0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_4) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_5) ++0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_4) = 0 c_e_SinkDSMDIWBlock_dsm_updo_constraint(demand_dsm_5)_: -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) -+0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_5) -1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_5) ++0.99 SinkDSMDIWBlock_dsm_up(demand_dsm_5) = 0 c_u_SinkDSMDIWBlock_dsm_up_constraint(demand_dsm_0)_: @@ -241,42 +241,42 @@ c_u_SinkDSMDIWBlock_C2_constraint(demand_dsm_0)_: <= 0.5 c_u_SinkDSMDIWBlock_C2_constraint(demand_dsm_1)_: -+1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) ++1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) <= 0.4 c_u_SinkDSMDIWBlock_C2_constraint(demand_dsm_2)_: -+1 SinkDSMDIWBlock_dsm_up(demand_dsm_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) ++1 SinkDSMDIWBlock_dsm_up(demand_dsm_2) <= 0.5 c_u_SinkDSMDIWBlock_C2_constraint(demand_dsm_3)_: -+1 SinkDSMDIWBlock_dsm_up(demand_dsm_3) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_3) ++1 SinkDSMDIWBlock_dsm_up(demand_dsm_3) <= 0.3 c_u_SinkDSMDIWBlock_C2_constraint(demand_dsm_4)_: -+1 SinkDSMDIWBlock_dsm_up(demand_dsm_4) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_4) ++1 SinkDSMDIWBlock_dsm_up(demand_dsm_4) <= 0.3 c_u_SinkDSMDIWBlock_C2_constraint(demand_dsm_5)_: -+1 SinkDSMDIWBlock_dsm_up(demand_dsm_5) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_5) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_5) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_5) ++1 SinkDSMDIWBlock_dsm_up(demand_dsm_5) <= 0.3 c_u_SinkDSMDIWBlock_recovery_constraint(demand_dsm_0)_: @@ -339,57 +339,57 @@ c_u_SinkDSMDIWBlock_shed_limit_constraint(demand_dsm_5)_: bounds 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_4) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_5) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_5) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_4) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_5) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_5) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_5) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_5) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_4) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_5) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_3) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_5) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_5) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_5) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_5) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_5) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_5) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_5) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf end diff --git a/tests/lp_files/dsm_module_DIW_invest.lp b/tests/lp_files/dsm_module_DIW_invest.lp index ee3ccfb2a..4db037a09 100644 --- a/tests/lp_files/dsm_module_DIW_invest.lp +++ b/tests/lp_files/dsm_module_DIW_invest.lp @@ -3,33 +3,33 @@ min objective: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) +100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) ++100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) +1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) +1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) -+100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) +1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) -+100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_0_2)_: -+1 flow(bus_elec_demand_dsm_0_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 c_e_SinkDSMDIWInvestmentBlock_total_dsm_rule(demand_dsm_0)_: @@ -42,43 +42,43 @@ c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_0_2)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_0_2) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 1 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_0)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_1)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_2)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) = 0 c_u_SinkDSMDIWInvestmentBlock_dsm_up_constraint(demand_dsm_0_0)_: @@ -127,19 +127,19 @@ c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_0_0)_: <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_0_1)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_0_2)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_0) <= 0 @@ -162,23 +162,23 @@ c_u_SinkDSMDIWInvestmentBlock_shed_limit_constraint(demand_dsm_0_2)_: bounds 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_0) <= +inf 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_0) <= 100 end diff --git a/tests/lp_files/dsm_module_DIW_invest_multi_period.lp b/tests/lp_files/dsm_module_DIW_invest_multi_period.lp index 1ff5873d6..8f3d611e7 100644 --- a/tests/lp_files/dsm_module_DIW_invest_multi_period.lp +++ b/tests/lp_files/dsm_module_DIW_invest_multi_period.lp @@ -4,81 +4,81 @@ min objective: +2941.5609381007307 ONE_VAR_CONSTANT +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) +100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) ++98.0392156862745 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) ++98.0392156862745 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) ++96.11687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) ++96.11687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) +1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) +1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_1) -+100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) +0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_2) -+98.0392156862745 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) +0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_3) -+98.0392156862745 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) +0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) -+96.11687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) +0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) -+96.11687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) +76.46810240317063 SinkDSMDIWInvestmentBlock_invest(demand_dsm_0) +50.47234572422055 SinkDSMDIWInvestmentBlock_invest(demand_dsm_1) +24.986309764465627 SinkDSMDIWInvestmentBlock_invest(demand_dsm_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMDIWInvestmentBlock_total_dsm_rule(demand_dsm_0)_: @@ -125,9 +125,9 @@ c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule_exo(demand_dsm_2)_: = 0 c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule(demand_dsm_0)_: ++1 SinkDSMDIWInvestmentBlock_old(demand_dsm_0) -1 SinkDSMDIWInvestmentBlock_old_end(demand_dsm_0) -1 SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_0) -+1 SinkDSMDIWInvestmentBlock_old(demand_dsm_0) = 0 c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule(demand_dsm_1)_: @@ -147,91 +147,91 @@ c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_1_2)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_1_2) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 2 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_1_3)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) -+1 flow(bus_elec_demand_dsm_1_3) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) ++1 flow(bus_elec_demand_dsm_3) = 2 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_2_4)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) -+1 flow(bus_elec_demand_dsm_2_4) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) ++1 flow(bus_elec_demand_dsm_4) = 3 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_2_5)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) -+1 flow(bus_elec_demand_dsm_2_5) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) ++1 flow(bus_elec_demand_dsm_5) = 3 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_0)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_1)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_2)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_3)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_4)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_5)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) = 0 c_u_SinkDSMDIWInvestmentBlock_dsm_up_constraint(demand_dsm_0_0)_: @@ -319,46 +319,46 @@ c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_0_0)_: <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_0_1)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_1_2)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_1) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_1_3)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_1) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_2_4)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_2) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_2_5)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_2) <= 0 @@ -416,66 +416,67 @@ c_l_SinkDSMDIWInvestmentBlock_overall_minimum(demand_dsm)_: bounds 1 <= ONE_VAR_CONSTANT <= 1 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) <= +inf 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_0) <= 100 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_1) <= 100 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_2) <= 100 - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_end(demand_dsm_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_end(demand_dsm_1) <= +inf @@ -483,5 +484,4 @@ bounds 0 <= SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_0) <= +inf end diff --git a/tests/lp_files/dsm_module_DIW_invest_multi_period_remaining_value.lp b/tests/lp_files/dsm_module_DIW_invest_multi_period_remaining_value.lp index c4783b7fe..8875230b1 100644 --- a/tests/lp_files/dsm_module_DIW_invest_multi_period_remaining_value.lp +++ b/tests/lp_files/dsm_module_DIW_invest_multi_period_remaining_value.lp @@ -4,81 +4,81 @@ min objective: +2941.5609381007307 ONE_VAR_CONSTANT +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_1) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_2) ++0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_3) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) ++0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) +100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) ++98.0392156862745 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) ++98.0392156862745 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) ++96.11687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) ++96.11687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) +1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) +1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_1) -+100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) +0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_2) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_2) -+98.0392156862745 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) +0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) -+0.9803921568627451 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_3) -+98.0392156862745 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) +0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) -+96.11687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) +0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) -+0.9611687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) -+96.11687812379853 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) +57.62165571222974 SinkDSMDIWInvestmentBlock_invest(demand_dsm_0) +39.8850096825295 SinkDSMDIWInvestmentBlock_invest(demand_dsm_1) +23.833722936524442 SinkDSMDIWInvestmentBlock_invest(demand_dsm_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMDIWInvestmentBlock_total_dsm_rule(demand_dsm_0)_: @@ -125,9 +125,9 @@ c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule_exo(demand_dsm_2)_: = 0 c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule(demand_dsm_0)_: ++1 SinkDSMDIWInvestmentBlock_old(demand_dsm_0) -1 SinkDSMDIWInvestmentBlock_old_end(demand_dsm_0) -1 SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_0) -+1 SinkDSMDIWInvestmentBlock_old(demand_dsm_0) = 0 c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule(demand_dsm_1)_: @@ -147,91 +147,91 @@ c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_1_2)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_1_2) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 2 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_1_3)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) -+1 flow(bus_elec_demand_dsm_1_3) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) ++1 flow(bus_elec_demand_dsm_3) = 2 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_2_4)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) -+1 flow(bus_elec_demand_dsm_2_4) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) ++1 flow(bus_elec_demand_dsm_4) = 3 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_2_5)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) -+1 flow(bus_elec_demand_dsm_2_5) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) ++1 flow(bus_elec_demand_dsm_5) = 3 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_0)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_1)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_2)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_3)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_4)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_5)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) = 0 c_u_SinkDSMDIWInvestmentBlock_dsm_up_constraint(demand_dsm_0_0)_: @@ -319,46 +319,46 @@ c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_0_0)_: <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_0_1)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_1_2)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_1) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_1_3)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_1) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_2_4)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_2) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_2_5)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_2) <= 0 @@ -416,66 +416,67 @@ c_l_SinkDSMDIWInvestmentBlock_overall_minimum(demand_dsm)_: bounds 1 <= ONE_VAR_CONSTANT <= 1 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_0_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_2_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_3_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_4_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_5_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_5) <= +inf 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_0) <= 100 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_1) <= 100 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_2) <= 100 - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_end(demand_dsm_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_end(demand_dsm_1) <= +inf @@ -483,5 +484,4 @@ bounds 0 <= SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_0) <= +inf end diff --git a/tests/lp_files/dsm_module_DIW_multi_period.lp b/tests/lp_files/dsm_module_DIW_multi_period.lp index a1be324b6..55998ee97 100644 --- a/tests/lp_files/dsm_module_DIW_multi_period.lp +++ b/tests/lp_files/dsm_module_DIW_multi_period.lp @@ -3,66 +3,66 @@ min objective: +2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_0) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_0) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_0) +2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_1) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_1) -+2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_1) +1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) -+1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) -+1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) -+1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) -+1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_2) -+1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_2) +1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_3) -+1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_3) -+1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) -+1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) -+1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) -+1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_3) +1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_4) -+1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_4) -+1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_4) -+1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) -+1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) -+1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) +1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_5) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) ++1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) ++1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_3) ++1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_4) +1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_5) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) ++1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) ++1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) ++1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_4) +1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_5) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_0) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_1) ++1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) ++1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) ++1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) +1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_5) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_0) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_1) ++1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_2) ++1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) ++1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) +1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_5) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_0) ++2 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_1) ++1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_2) ++1.9607843137254901 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_3) ++1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) +1.9223375624759707 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_5) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMDIWBlock_shift_shed_vars(demand_dsm_0)_: @@ -92,53 +92,53 @@ c_e_SinkDSMDIWBlock_shift_shed_vars(demand_dsm_5)_: c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) -+1 flow(bus_elec_demand_dsm_0_0) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMDIWBlock_dsm_up(demand_dsm_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_0_1)_: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) -+1 flow(bus_elec_demand_dsm_0_1) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) -1 SinkDSMDIWBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_1_2)_: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) -+1 flow(bus_elec_demand_dsm_1_2) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) -1 SinkDSMDIWBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 1 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_1_3)_: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) -+1 flow(bus_elec_demand_dsm_1_3) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_3) -1 SinkDSMDIWBlock_dsm_up(demand_dsm_3) ++1 flow(bus_elec_demand_dsm_3) = 1 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_2_4)_: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) -+1 flow(bus_elec_demand_dsm_2_4) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_4) -1 SinkDSMDIWBlock_dsm_up(demand_dsm_4) ++1 flow(bus_elec_demand_dsm_4) = 1 c_e_SinkDSMDIWBlock_input_output_relation(demand_dsm_2_5)_: +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_5) +1 SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_5) -+1 flow(bus_elec_demand_dsm_2_5) +1 SinkDSMDIWBlock_dsm_do_shed(demand_dsm_5) -1 SinkDSMDIWBlock_dsm_up(demand_dsm_5) ++1 flow(bus_elec_demand_dsm_5) = 1 c_e_SinkDSMDIWBlock_dsm_updo_constraint(demand_dsm_0)_: @@ -293,47 +293,41 @@ c_u_SinkDSMDIWBlock_C2_constraint(demand_dsm_5)_: bounds 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_0) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_0) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_0) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_0) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_1) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_1) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_2) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_2) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_3) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) <= +inf - 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_0_5) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_4) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_4) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_4) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_3_5) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_4) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_4_5) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_0) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_1) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_2) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_3) <= +inf + 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_4) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shift(demand_dsm_5_5) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_0) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDIWBlock_dsm_do_shed(demand_dsm_2) <= +inf @@ -346,4 +340,10 @@ bounds 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_3) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_4) <= +inf 0 <= SinkDSMDIWBlock_dsm_up(demand_dsm_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf end diff --git a/tests/lp_files/dsm_module_DLR.lp b/tests/lp_files/dsm_module_DLR.lp index e6aa3475a..aadfe6936 100644 --- a/tests/lp_files/dsm_module_DLR.lp +++ b/tests/lp_files/dsm_module_DLR.lp @@ -3,30 +3,30 @@ min objective: +2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) -+2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) +2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) -+2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) ++2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) +2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_0_2)_: -+1 flow(bus_elec_demand_dsm_0_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 c_e_SinkDSMDLRBlock_shift_shed_vars(demand_dsm_1_0)_: @@ -55,41 +55,41 @@ c_e_SinkDSMDLRBlock_shift_shed_vars(demand_dsm_2_2)_: c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) -+1 flow(bus_elec_demand_dsm_0_0) -+1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) -+1 flow(bus_elec_demand_dsm_0_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_2)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) -+1 flow(bus_elec_demand_dsm_0_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) ++1 flow(bus_elec_demand_dsm_2) = 1 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_0)_: @@ -120,13 +120,13 @@ c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_0)_: = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_1)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_2)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_2_0)_: @@ -134,8 +134,8 @@ c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_2_0)_: = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_2_2)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) = 0 c_e_SinkDSMDLRBlock_no_comp_red(demand_dsm_1_2)_: @@ -164,46 +164,46 @@ c_e_SinkDSMDLRBlock_no_comp_inc(demand_dsm_2_2)_: c_u_SinkDSMDLRBlock_availability_red(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= 0.5 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= 0.5 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= 0.5 @@ -214,19 +214,19 @@ c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_0)_: = 0 c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_1)_: --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_0) -1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_1) = 0 c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_2)_: --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_1) -1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_2) = 0 @@ -238,19 +238,19 @@ c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_0)_: = 0 c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_1)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_0) -1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_1) = 0 c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_2)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_1) -1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_2) = 0 @@ -281,71 +281,71 @@ c_u_SinkDSMDLRBlock_dr_storage_limit_inc(demand_dsm_2)_: c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) -+1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= 0.5 c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_1)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= 0.5 c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_2)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= 0.5 bounds 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_2) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_0) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_2) <= +inf diff --git a/tests/lp_files/dsm_module_DLR_delay_time.lp b/tests/lp_files/dsm_module_DLR_delay_time.lp index 21997cf82..8a6a7c3a0 100644 --- a/tests/lp_files/dsm_module_DLR_delay_time.lp +++ b/tests/lp_files/dsm_module_DLR_delay_time.lp @@ -3,30 +3,30 @@ min objective: +2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) -+2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_0) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_0) +2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) -+2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_1) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_1) +2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) ++2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_0) ++2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_1) +2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_2) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_0) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_1) +2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_0_2)_: -+1 flow(bus_elec_demand_dsm_0_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 c_e_SinkDSMDLRBlock_shift_shed_vars(demand_dsm_1_0)_: @@ -55,41 +55,41 @@ c_e_SinkDSMDLRBlock_shift_shed_vars(demand_dsm_3_2)_: c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_0) ++1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_0) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_0) -+1 flow(bus_elec_demand_dsm_0_0) -+1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) --1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_1) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_1) -+1 flow(bus_elec_demand_dsm_0_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_2)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) --1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_2) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_2) -+1 flow(bus_elec_demand_dsm_0_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_2) ++1 flow(bus_elec_demand_dsm_2) = 1 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_0)_: @@ -115,13 +115,13 @@ c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_0)_: = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_1)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_2)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_3_0)_: @@ -162,46 +162,46 @@ c_e_SinkDSMDLRBlock_no_comp_inc(demand_dsm_3_2)_: c_u_SinkDSMDLRBlock_availability_red(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_0) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= 0.5 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= 0.5 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_0) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_1) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_2) <= 0.5 @@ -212,19 +212,19 @@ c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_0)_: = 0 c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_1)_: --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_1) +1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_0) -1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_1) = 0 c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_2)_: --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_2) +1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_1) -1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_2) = 0 @@ -236,19 +236,19 @@ c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_0)_: = 0 c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_1)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_1) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_1) +1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_0) -1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_1) = 0 c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_2)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_2) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_2) +1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_1) -1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_2) = 0 @@ -279,71 +279,71 @@ c_u_SinkDSMDLRBlock_dr_storage_limit_inc(demand_dsm_2)_: c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_0) ++1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_0) -+1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= 0.5 c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_1)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_1) <= 0.5 c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_2)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_3_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_2) <= 0.5 bounds 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_3_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_3_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_3_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_2) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_3_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_1) <= +inf 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_3_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_2) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_3_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_3_1) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_3_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_3_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_0) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_2) <= +inf diff --git a/tests/lp_files/dsm_module_DLR_extended.lp b/tests/lp_files/dsm_module_DLR_extended.lp index 3c09f5fe8..7c0b2198a 100644 --- a/tests/lp_files/dsm_module_DLR_extended.lp +++ b/tests/lp_files/dsm_module_DLR_extended.lp @@ -3,84 +3,84 @@ min objective: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) -+100 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) -+100 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) ++100 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) +100 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_0_2)_: -+1 flow(bus_elec_demand_dsm_0_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_0)_: -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_1)_: -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) ++1 flow(bus_elec_demand_dsm_1) = 0.9 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_2)_: -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_0_2) ++1 flow(bus_elec_demand_dsm_2) = 0.8 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_0)_: @@ -88,13 +88,13 @@ c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_0)_: = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_1)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_2)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_2_0)_: @@ -102,8 +102,8 @@ c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_2_0)_: = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_2_2)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_0)_: @@ -131,46 +131,46 @@ c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_2_2)_: c_u_SinkDSMDLRBlock_availability_red(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= 0.3 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= 0.3 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) <= 0.4 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= 0.4 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= 0.5 @@ -254,53 +254,53 @@ c_u_SinkDSMDLRBlock_dr_yearly_limit_shed(demand_dsm_0)_: c_u_SinkDSMDLRBlock_dr_yearly_limit_red(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) <= 33.33333333333333 c_u_SinkDSMDLRBlock_dr_yearly_limit_inc(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) <= 46.666666666666664 bounds 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= +inf 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_0) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_2) <= +inf diff --git a/tests/lp_files/dsm_module_DLR_extended_multi_period.lp b/tests/lp_files/dsm_module_DLR_extended_multi_period.lp index 1626a1bfd..e086a8428 100644 --- a/tests/lp_files/dsm_module_DLR_extended_multi_period.lp +++ b/tests/lp_files/dsm_module_DLR_extended_multi_period.lp @@ -3,162 +3,162 @@ min objective: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) -+100 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) -+100 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) +0.9803921568627451 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) -+98.0392156862745 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) +0.9803921568627451 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) -+98.0392156862745 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_3) +0.9611687812379853 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) -+96.11687812379853 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_4) +0.9611687812379853 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) -+0.9611687812379853 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) ++0.9611687812379853 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) +0.9611687812379853 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) -+0.9611687812379853 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) ++0.9611687812379853 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_5) ++100 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) ++98.0392156862745 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) ++98.0392156862745 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_3) ++96.11687812379853 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_4) +96.11687812379853 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_5) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_0)_: -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_1)_: -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) ++1 flow(bus_elec_demand_dsm_1) = 0.9 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_1_2)_: -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_1_2) ++1 flow(bus_elec_demand_dsm_2) = 0.8 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_1_3)_: -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_3) -+1 flow(bus_elec_demand_dsm_1_3) ++1 flow(bus_elec_demand_dsm_3) = 0.7 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_2_4)_: -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_4) -+1 flow(bus_elec_demand_dsm_2_4) ++1 flow(bus_elec_demand_dsm_4) = 0.7 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_2_5)_: -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_5) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_5) -+1 flow(bus_elec_demand_dsm_2_5) ++1 flow(bus_elec_demand_dsm_5) = 0.7 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_0)_: @@ -166,28 +166,28 @@ c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_0)_: = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_1)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_2)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_3)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_4)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_5)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_2_0)_: @@ -195,23 +195,23 @@ c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_2_0)_: = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_2_2)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_2_3)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_2_4)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) = 0 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_2_5)_: --1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) +-1.0101010101010102 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_0)_: @@ -269,91 +269,91 @@ c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_2_5)_: c_u_SinkDSMDLRBlock_availability_red(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= 0.3 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= 0.3 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) <= 0.4 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_3)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_3) <= 0.3 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_4)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_4) <= 0.3 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_5)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_5) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_5) <= 0.3 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= 0.4 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_3)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) <= 0.3 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_4)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) <= 0.3 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_5)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) <= 0.3 @@ -524,173 +524,173 @@ c_u_SinkDSMDLRBlock_dr_yearly_limit_shed(demand_dsm_2)_: c_u_SinkDSMDLRBlock_dr_yearly_limit_red(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) <= 31.66666666666667 c_u_SinkDSMDLRBlock_dr_yearly_limit_red(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) <= 31.66666666666667 c_u_SinkDSMDLRBlock_dr_yearly_limit_red(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) <= 31.66666666666667 c_u_SinkDSMDLRBlock_dr_yearly_limit_inc(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) <= 38.33333333333333 c_u_SinkDSMDLRBlock_dr_yearly_limit_inc(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) <= 38.33333333333333 c_u_SinkDSMDLRBlock_dr_yearly_limit_inc(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) <= 38.33333333333333 c_u_SinkDSMDLRBlock_dr_daily_limit_red(demand_dsm_3)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) <= 0.3166666666666667 c_u_SinkDSMDLRBlock_dr_daily_limit_red(demand_dsm_4)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) <= 0.3166666666666667 c_u_SinkDSMDLRBlock_dr_daily_limit_red(demand_dsm_5)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) <= 0.3166666666666667 c_u_SinkDSMDLRBlock_dr_daily_limit_inc(demand_dsm_3)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) <= 0.3833333333333333 c_u_SinkDSMDLRBlock_dr_daily_limit_inc(demand_dsm_4)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) <= 0.3833333333333333 c_u_SinkDSMDLRBlock_dr_daily_limit_inc(demand_dsm_5)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) <= 0.3833333333333333 bounds 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= +inf 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_3) <= +inf 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_3) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_5) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_0) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_2) <= +inf diff --git a/tests/lp_files/dsm_module_DLR_invest.lp b/tests/lp_files/dsm_module_DLR_invest.lp index c7404697f..a694b431c 100644 --- a/tests/lp_files/dsm_module_DLR_invest.lp +++ b/tests/lp_files/dsm_module_DLR_invest.lp @@ -3,45 +3,45 @@ min objective: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) -+100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) -+100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) ++1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) ++100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) +100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_0_2)_: -+1 flow(bus_elec_demand_dsm_0_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 c_e_SinkDSMDLRInvestmentBlock_total_dsm_rule(demand_dsm_0)_: @@ -51,41 +51,41 @@ c_e_SinkDSMDLRInvestmentBlock_total_dsm_rule(demand_dsm_0)_: c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_0_0)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_0_1)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_0_2)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_0_2) ++1 flow(bus_elec_demand_dsm_2) = 1 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_0)_: @@ -93,13 +93,13 @@ c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_1)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_0)_: @@ -107,8 +107,8 @@ c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(demand_dsm_1_0)_: @@ -160,8 +160,8 @@ c_e_SinkDSMDLRInvestmentBlock_no_comp_inc(demand_dsm_2_2)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -169,8 +169,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_0)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -178,8 +178,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_1)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -187,24 +187,24 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_2)_: c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_0_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) <= 0 @@ -296,12 +296,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_yearly_limit_shed(demand_dsm_0)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -309,12 +309,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_0)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -322,12 +322,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_1)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -335,35 +335,35 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_2)_: bounds 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_0) <= +inf 33 <= SinkDSMDLRInvestmentBlock_invest(demand_dsm_0) <= 100 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(demand_dsm_0) <= +inf diff --git a/tests/lp_files/dsm_module_DLR_invest_multi_period.lp b/tests/lp_files/dsm_module_DLR_invest_multi_period.lp index 4bfd30471..c8a023deb 100644 --- a/tests/lp_files/dsm_module_DLR_invest_multi_period.lp +++ b/tests/lp_files/dsm_module_DLR_invest_multi_period.lp @@ -4,58 +4,58 @@ min objective: +2941.5609381007307 ONE_VAR_CONSTANT +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) -+100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) -+100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) +0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) -+98.0392156862745 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) +0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) -+98.0392156862745 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) +0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) -+96.11687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_5) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) ++1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_5) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_5) ++100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) ++98.0392156862745 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) ++98.0392156862745 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) ++96.11687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) +96.11687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_5) +76.46810240317063 SinkDSMDLRInvestmentBlock_invest(demand_dsm_0) +50.47234572422055 SinkDSMDLRInvestmentBlock_invest(demand_dsm_1) @@ -63,28 +63,28 @@ objective: s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMDLRInvestmentBlock_total_dsm_rule(demand_dsm_0)_: @@ -131,9 +131,9 @@ c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule_exo(demand_dsm_2)_: = 0 c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule(demand_dsm_0)_: ++1 SinkDSMDLRInvestmentBlock_old(demand_dsm_0) -1 SinkDSMDLRInvestmentBlock_old_end(demand_dsm_0) -1 SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_0) -+1 SinkDSMDLRInvestmentBlock_old(demand_dsm_0) = 0 c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule(demand_dsm_1)_: @@ -150,80 +150,80 @@ c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule(demand_dsm_2)_: c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_0_0)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_0_1)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_1_2)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_1_2) ++1 flow(bus_elec_demand_dsm_2) = 2 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_1_3)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_3) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) -+1 flow(bus_elec_demand_dsm_1_3) ++1 flow(bus_elec_demand_dsm_3) = 2 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_2_4)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_4) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) -+1 flow(bus_elec_demand_dsm_2_4) ++1 flow(bus_elec_demand_dsm_4) = 3 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_2_5)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_5) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_5) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_5) -+1 flow(bus_elec_demand_dsm_2_5) ++1 flow(bus_elec_demand_dsm_5) = 3 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_0)_: @@ -231,28 +231,28 @@ c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_1)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_3)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_4)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_5)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_0)_: @@ -260,23 +260,23 @@ c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_3)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_4)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_5)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(demand_dsm_1_0)_: @@ -358,8 +358,8 @@ c_e_SinkDSMDLRInvestmentBlock_no_comp_inc(demand_dsm_2_5)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -367,8 +367,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_0)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -376,8 +376,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_1)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_1_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) @@ -385,8 +385,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_1_2)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_1_3)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) @@ -394,8 +394,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_1_3)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_2_4)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) @@ -403,8 +403,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_2_4)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_2_5)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_5) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) @@ -412,48 +412,48 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_2_5)_: c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_1_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_1_3)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_2_4)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_2_5)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) <= 0 @@ -640,12 +640,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_yearly_limit_shed(demand_dsm_2)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -653,12 +653,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_0)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -666,12 +666,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_1)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_1_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) @@ -679,12 +679,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_1_2)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_1_3)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) @@ -692,12 +692,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_1_3)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_2_4)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) @@ -705,12 +705,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_2_4)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_2_5)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_5) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) @@ -735,72 +735,73 @@ c_l_SinkDSMDLRInvestmentBlock_overall_minimum(demand_dsm)_: bounds 1 <= ONE_VAR_CONSTANT <= 1 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_5) <= +inf 33 <= SinkDSMDLRInvestmentBlock_invest(demand_dsm_0) <= 100 33 <= SinkDSMDLRInvestmentBlock_invest(demand_dsm_1) <= 100 33 <= SinkDSMDLRInvestmentBlock_invest(demand_dsm_2) <= 100 - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_end(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_end(demand_dsm_1) <= +inf @@ -808,7 +809,6 @@ bounds 0 <= SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(demand_dsm_2) <= +inf diff --git a/tests/lp_files/dsm_module_DLR_invest_multi_period_remaining_value.lp b/tests/lp_files/dsm_module_DLR_invest_multi_period_remaining_value.lp index 2742536af..c640481b5 100644 --- a/tests/lp_files/dsm_module_DLR_invest_multi_period_remaining_value.lp +++ b/tests/lp_files/dsm_module_DLR_invest_multi_period_remaining_value.lp @@ -4,58 +4,58 @@ min objective: +2941.5609381007307 ONE_VAR_CONSTANT +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) -+100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) -+100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) +0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) -+98.0392156862745 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) +0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) -+0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) -+98.0392156862745 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) +0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) -+96.11687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_5) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) ++1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_5) -+0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) ++0.9803921568627451 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) ++0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) +0.9611687812379853 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_5) ++100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) ++98.0392156862745 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) ++98.0392156862745 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) ++96.11687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) +96.11687812379853 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_5) +57.62165571222974 SinkDSMDLRInvestmentBlock_invest(demand_dsm_0) +39.8850096825295 SinkDSMDLRInvestmentBlock_invest(demand_dsm_1) @@ -63,28 +63,28 @@ objective: s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMDLRInvestmentBlock_total_dsm_rule(demand_dsm_0)_: @@ -131,9 +131,9 @@ c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule_exo(demand_dsm_2)_: = 0 c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule(demand_dsm_0)_: ++1 SinkDSMDLRInvestmentBlock_old(demand_dsm_0) -1 SinkDSMDLRInvestmentBlock_old_end(demand_dsm_0) -1 SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_0) -+1 SinkDSMDLRInvestmentBlock_old(demand_dsm_0) = 0 c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule(demand_dsm_1)_: @@ -150,80 +150,80 @@ c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule(demand_dsm_2)_: c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_0_0)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_0_1)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_1_2)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_1_2) ++1 flow(bus_elec_demand_dsm_2) = 2 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_1_3)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_3) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) -+1 flow(bus_elec_demand_dsm_1_3) ++1 flow(bus_elec_demand_dsm_3) = 2 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_2_4)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_4) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) -+1 flow(bus_elec_demand_dsm_2_4) ++1 flow(bus_elec_demand_dsm_4) = 3 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_2_5)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_5) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_5) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_5) -+1 flow(bus_elec_demand_dsm_2_5) ++1 flow(bus_elec_demand_dsm_5) = 3 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_0)_: @@ -231,28 +231,28 @@ c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_1)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_3)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_4)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_1_5)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_0)_: @@ -260,23 +260,23 @@ c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_3)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_4)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_2_5)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(demand_dsm_1_0)_: @@ -358,8 +358,8 @@ c_e_SinkDSMDLRInvestmentBlock_no_comp_inc(demand_dsm_2_5)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -367,8 +367,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_0)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -376,8 +376,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_0_1)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_1_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) @@ -385,8 +385,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_1_2)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_1_3)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) @@ -394,8 +394,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_1_3)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_2_4)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) @@ -403,8 +403,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_2_4)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_2_5)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_5) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) @@ -412,48 +412,48 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_2_5)_: c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_1_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_1_3)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_2_4)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_2_5)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) <= 0 @@ -640,12 +640,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_yearly_limit_shed(demand_dsm_2)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -653,12 +653,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_0)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_0) @@ -666,12 +666,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_0_1)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_1_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) @@ -679,12 +679,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_1_2)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_1_3)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_1) @@ -692,12 +692,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_1_3)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_2_4)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) @@ -705,12 +705,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_2_4)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_2_5)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_5) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_2) @@ -735,72 +735,73 @@ c_l_SinkDSMDLRInvestmentBlock_overall_minimum(demand_dsm)_: bounds 1 <= ONE_VAR_CONSTANT <= 1 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_5) <= +inf 33 <= SinkDSMDLRInvestmentBlock_invest(demand_dsm_0) <= 100 33 <= SinkDSMDLRInvestmentBlock_invest(demand_dsm_1) <= 100 33 <= SinkDSMDLRInvestmentBlock_invest(demand_dsm_2) <= 100 - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_end(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_end(demand_dsm_1) <= +inf @@ -808,7 +809,6 @@ bounds 0 <= SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(demand_dsm_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(demand_dsm_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(demand_dsm_2) <= +inf diff --git a/tests/lp_files/dsm_module_DLR_multi_period.lp b/tests/lp_files/dsm_module_DLR_multi_period.lp index c9ff2e694..83f0184f5 100644 --- a/tests/lp_files/dsm_module_DLR_multi_period.lp +++ b/tests/lp_files/dsm_module_DLR_multi_period.lp @@ -3,54 +3,54 @@ min objective: +2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) -+2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) +2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) -+2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) -+2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +1.9607843137254901 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1.9607843137254901 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) -+1.9607843137254901 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) -+1.9607843137254901 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) +1.9607843137254901 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) -+1.9607843137254901 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) -+1.9607843137254901 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) -+1.9607843137254901 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) +1.9223375624759707 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) -+1.9223375624759707 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) -+1.9223375624759707 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) -+1.9223375624759707 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) +1.9223375624759707 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) -+1.9223375624759707 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) ++2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++2 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1.9607843137254901 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1.9607843137254901 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) ++1.9223375624759707 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) +1.9223375624759707 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) ++1.9607843137254901 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) ++1.9607843137254901 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) ++1.9223375624759707 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) ++1.9223375624759707 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) ++2 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) ++1.9607843137254901 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) ++1.9607843137254901 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) ++1.9223375624759707 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) +1.9223375624759707 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_5) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMDLRBlock_shift_shed_vars(demand_dsm_1_0)_: @@ -103,80 +103,80 @@ c_e_SinkDSMDLRBlock_shift_shed_vars(demand_dsm_2_5)_: c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) -1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) -+1 flow(bus_elec_demand_dsm_0_0) -+1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) -+1 flow(bus_elec_demand_dsm_0_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_1_2)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) -+1 flow(bus_elec_demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) ++1 flow(bus_elec_demand_dsm_2) = 1 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_1_3)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) -+1 flow(bus_elec_demand_dsm_1_3) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_3) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) ++1 flow(bus_elec_demand_dsm_3) = 1 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_2_4)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) -+1 flow(bus_elec_demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_4) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) ++1 flow(bus_elec_demand_dsm_4) = 1 c_e_SinkDSMDLRBlock_input_output_relation(demand_dsm_2_5)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_5) -+1 flow(bus_elec_demand_dsm_2_5) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_5) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) ++1 flow(bus_elec_demand_dsm_5) = 1 c_e_SinkDSMDLRBlock_capacity_balance_red(demand_dsm_1_0)_: @@ -237,28 +237,28 @@ c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_0)_: = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_1)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_2)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_3)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_4)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_1_5)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_2_0)_: @@ -266,23 +266,23 @@ c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_2_0)_: = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_2_2)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_2_3)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_2_4)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) = 0 c_e_SinkDSMDLRBlock_capacity_balance_inc(demand_dsm_2_5)_: --1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_5) +-1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) = 0 c_e_SinkDSMDLRBlock_no_comp_red(demand_dsm_1_5)_: @@ -311,91 +311,91 @@ c_e_SinkDSMDLRBlock_no_comp_inc(demand_dsm_2_5)_: c_u_SinkDSMDLRBlock_availability_red(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= 0.5 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= 0.5 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) <= 0.5 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_3)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_3) <= 0.5 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_4)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_4) <= 0.5 c_u_SinkDSMDLRBlock_availability_red(demand_dsm_5)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_5) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_5) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_1)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_2)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_3)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_4)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) <= 0.5 c_u_SinkDSMDLRBlock_availability_inc(demand_dsm_5)_: +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) <= 0.5 @@ -406,46 +406,46 @@ c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_0)_: = 0 c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_1)_: --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_0) -1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_1) = 0 c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_2)_: --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_1) -1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_2) = 0 c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_3)_: --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_2) -1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_3) = 0 c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_4)_: --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_3) -1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_4) = 0 c_e_SinkDSMDLRBlock_dr_storage_red(demand_dsm_5)_: --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) --1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) +-1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) +1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_4) -1 SinkDSMDLRBlock_dsm_do_level(demand_dsm_5) = 0 @@ -457,46 +457,46 @@ c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_0)_: = 0 c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_1)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_0) -1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_1) = 0 c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_2)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_1) -1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_2) = 0 c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_3)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_2) -1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_3) = 0 c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_4)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_3) -1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_4) = 0 c_e_SinkDSMDLRBlock_dr_storage_inc(demand_dsm_5)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) -1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_5) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) +1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_4) -1 SinkDSMDLRBlock_dsm_up_level(demand_dsm_5) = 0 @@ -551,137 +551,137 @@ c_u_SinkDSMDLRBlock_dr_storage_limit_inc(demand_dsm_5)_: c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_0)_: +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) +1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) -+1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= 0.5 c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_1)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= 0.5 c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_2)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= 0.5 c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_3)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_3) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) <= 0.5 c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_4)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_4) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) <= 0.5 c_u_SinkDSMDLRBlock_dr_logical_constraint(demand_dsm_5)_: -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) -+1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) -+1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) -+1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) ++1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) +1 SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_5) +1 SinkDSMDLRBlock_dsm_do_shed(demand_dsm_5) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) ++1 SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) ++1 SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) <= 0.5 bounds 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) <= +inf - 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_1_5) <= +inf - 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shift(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_4) <= +inf 0 <= SinkDSMDLRBlock_balance_dsm_up(demand_dsm_2_5) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_0) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_3) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_shed(demand_dsm_5) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_4) <= +inf + 0 <= SinkDSMDLRBlock_dsm_up(demand_dsm_2_5) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_3) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_4) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_1_5) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_0) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_1) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_2) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_3) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_4) <= +inf + 0 <= SinkDSMDLRBlock_balance_dsm_do(demand_dsm_2_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_0) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_1) <= +inf 0 <= SinkDSMDLRBlock_dsm_do_level(demand_dsm_2) <= +inf diff --git a/tests/lp_files/dsm_module_oemof.lp b/tests/lp_files/dsm_module_oemof.lp index 416c4ee1b..a40037672 100644 --- a/tests/lp_files/dsm_module_oemof.lp +++ b/tests/lp_files/dsm_module_oemof.lp @@ -8,16 +8,16 @@ objective: s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_0_2)_: -+1 flow(bus_elec_demand_dsm_0_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 c_e_SinkDSMOemofBlock_shift_shed_vars(demand_dsm_0)_: @@ -34,21 +34,21 @@ c_e_SinkDSMOemofBlock_shift_shed_vars(demand_dsm_2)_: c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMOemofBlock_dsm_up(demand_dsm_0) = 1 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_0_1)_: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) ++1 flow(bus_elec_demand_dsm_1) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) -1 SinkDSMOemofBlock_dsm_up(demand_dsm_1) = 1 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_0_2)_: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_0_2) ++1 flow(bus_elec_demand_dsm_2) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) -1 SinkDSMOemofBlock_dsm_up(demand_dsm_2) = 1 @@ -91,9 +91,9 @@ bounds 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_0) <= +inf 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) <= +inf 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) <= +inf 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) <= +inf diff --git a/tests/lp_files/dsm_module_oemof_extended.lp b/tests/lp_files/dsm_module_oemof_extended.lp index 7d2eda425..6720fe240 100644 --- a/tests/lp_files/dsm_module_oemof_extended.lp +++ b/tests/lp_files/dsm_module_oemof_extended.lp @@ -3,48 +3,48 @@ min objective: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_0) ++1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) ++1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) +100 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) ++100 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) +1 SinkDSMOemofBlock_dsm_up(demand_dsm_0) +1 SinkDSMOemofBlock_dsm_up(demand_dsm_1) -+1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) -+100 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) +1 SinkDSMOemofBlock_dsm_up(demand_dsm_2) -+1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) -+100 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_0_2)_: -+1 flow(bus_elec_demand_dsm_0_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_0) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMOemofBlock_dsm_up(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMOemofBlock_dsm_up(demand_dsm_1) +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) +-1 SinkDSMOemofBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 0.9 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_0_2)_: --1 SinkDSMOemofBlock_dsm_up(demand_dsm_2) +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_0_2) +-1 SinkDSMOemofBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 0.8 c_u_SinkDSMOemofBlock_dsm_up_constraint(demand_dsm_0)_: @@ -76,22 +76,22 @@ c_u_SinkDSMOemofBlock_dsm_down_constraint(demand_dsm_2)_: c_e_SinkDSMOemofBlock_dsm_sum_constraint(demand_dsm_0)_: -1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_0) +-1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) +0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_0) +0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_1) --1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) = 0 bounds 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) <= +inf 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf end diff --git a/tests/lp_files/dsm_module_oemof_extended_multi_period.lp b/tests/lp_files/dsm_module_oemof_extended_multi_period.lp index 745854ca7..1493fdc57 100644 --- a/tests/lp_files/dsm_module_oemof_extended_multi_period.lp +++ b/tests/lp_files/dsm_module_oemof_extended_multi_period.lp @@ -3,90 +3,90 @@ min objective: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_0) ++1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) ++0.9803921568627451 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) ++0.9803921568627451 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_3) ++0.9611687812379853 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_4) ++0.9611687812379853 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_5) +100 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) ++98.0392156862745 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) ++98.0392156862745 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_3) ++96.11687812379853 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_4) ++96.11687812379853 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_5) +1 SinkDSMOemofBlock_dsm_up(demand_dsm_0) +1 SinkDSMOemofBlock_dsm_up(demand_dsm_1) -+1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) -+100 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) +0.9803921568627451 SinkDSMOemofBlock_dsm_up(demand_dsm_2) -+0.9803921568627451 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) -+98.0392156862745 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) +0.9803921568627451 SinkDSMOemofBlock_dsm_up(demand_dsm_3) -+0.9803921568627451 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_3) -+98.0392156862745 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_3) +0.9611687812379853 SinkDSMOemofBlock_dsm_up(demand_dsm_4) -+0.9611687812379853 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_4) -+96.11687812379853 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_4) +0.9611687812379853 SinkDSMOemofBlock_dsm_up(demand_dsm_5) -+0.9611687812379853 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_5) -+96.11687812379853 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_5) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_0) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMOemofBlock_dsm_up(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMOemofBlock_dsm_up(demand_dsm_1) +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) +-1 SinkDSMOemofBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 0.9 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_1_2)_: --1 SinkDSMOemofBlock_dsm_up(demand_dsm_2) +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_1_2) +-1 SinkDSMOemofBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 0.8 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_1_3)_: --1 SinkDSMOemofBlock_dsm_up(demand_dsm_3) +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_3) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_3) -+1 flow(bus_elec_demand_dsm_1_3) +-1 SinkDSMOemofBlock_dsm_up(demand_dsm_3) ++1 flow(bus_elec_demand_dsm_3) = 0.7 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_2_4)_: --1 SinkDSMOemofBlock_dsm_up(demand_dsm_4) +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_4) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_4) -+1 flow(bus_elec_demand_dsm_2_4) +-1 SinkDSMOemofBlock_dsm_up(demand_dsm_4) ++1 flow(bus_elec_demand_dsm_4) = 0.7 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_2_5)_: --1 SinkDSMOemofBlock_dsm_up(demand_dsm_5) +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_5) +1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_5) -+1 flow(bus_elec_demand_dsm_2_5) +-1 SinkDSMOemofBlock_dsm_up(demand_dsm_5) ++1 flow(bus_elec_demand_dsm_5) = 0.7 c_u_SinkDSMOemofBlock_dsm_up_constraint(demand_dsm_0)_: @@ -145,48 +145,48 @@ c_u_SinkDSMOemofBlock_dsm_down_constraint(demand_dsm_5)_: c_e_SinkDSMOemofBlock_dsm_sum_constraint(demand_dsm_0)_: -1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_0) +-1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) +0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_0) +0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_1) --1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) -= 0.0 += 0 c_e_SinkDSMOemofBlock_dsm_sum_constraint(demand_dsm_2)_: -+0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_2) -1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) -+0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_3) -1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_3) -= 0.0 ++0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_2) ++0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_3) += 0 c_e_SinkDSMOemofBlock_dsm_sum_constraint(demand_dsm_4)_: -+0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_4) -1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_4) -+0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_5) -1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_5) -= 0.0 ++0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_4) ++0.99 SinkDSMOemofBlock_dsm_up(demand_dsm_5) += 0 bounds 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_3) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_4) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_5) <= +inf 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_3) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_4) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_5) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_3) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_3) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_3) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_4) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_4) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_5) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_5) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_5) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf end diff --git a/tests/lp_files/dsm_module_oemof_invest.lp b/tests/lp_files/dsm_module_oemof_invest.lp index ca2a89296..fff0830d0 100644 --- a/tests/lp_files/dsm_module_oemof_invest.lp +++ b/tests/lp_files/dsm_module_oemof_invest.lp @@ -3,27 +3,27 @@ min objective: +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) ++1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) ++1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) +100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) ++100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) -+1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) -+100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) -+1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) -+100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_0_2)_: -+1 flow(bus_elec_demand_dsm_0_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 c_e_SinkDSMOemofInvestmentBlock_total_dsm_rule(demand_dsm_0)_: @@ -35,21 +35,21 @@ c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_0_2)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_0_2) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 1 c_u_SinkDSMOemofInvestmentBlock_dsm_up_constraint(demand_dsm_0_0)_: @@ -87,24 +87,24 @@ c_u_SinkDSMOemofInvestmentBlock_dsm_down_constraint(demand_dsm_0_2)_: c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_0)_: -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) +-1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) --1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) = 0 bounds 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_0) <= +inf 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_0) <= 100 end diff --git a/tests/lp_files/dsm_module_oemof_invest_multi_period.lp b/tests/lp_files/dsm_module_oemof_invest_multi_period.lp index 47a17847e..dffeb504a 100644 --- a/tests/lp_files/dsm_module_oemof_invest_multi_period.lp +++ b/tests/lp_files/dsm_module_oemof_invest_multi_period.lp @@ -4,51 +4,51 @@ min objective: +2941.5609381007307 ONE_VAR_CONSTANT +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) ++1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) ++0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) ++0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) ++0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) ++0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) +100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) ++98.0392156862745 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) ++98.0392156862745 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_3) ++96.11687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_4) ++96.11687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_5) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) -+1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) -+100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) +0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) -+0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) -+98.0392156862745 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) +0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) -+0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) -+98.0392156862745 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_3) +0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) -+0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) -+96.11687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_4) +0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) -+0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) -+96.11687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_5) +76.46810240317063 SinkDSMOemofInvestmentBlock_invest(demand_dsm_0) +50.47234572422055 SinkDSMOemofInvestmentBlock_invest(demand_dsm_1) +24.986309764465627 SinkDSMOemofInvestmentBlock_invest(demand_dsm_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMOemofInvestmentBlock_total_dsm_rule(demand_dsm_0)_: @@ -95,9 +95,9 @@ c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule_exo(demand_dsm_2)_: = 0 c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule(demand_dsm_0)_: ++1 SinkDSMOemofInvestmentBlock_old(demand_dsm_0) -1 SinkDSMOemofInvestmentBlock_old_end(demand_dsm_0) -1 SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_0) -+1 SinkDSMOemofInvestmentBlock_old(demand_dsm_0) = 0 c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule(demand_dsm_1)_: @@ -116,42 +116,42 @@ c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_1_2)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_1_2) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 2 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_1_3)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_3) -+1 flow(bus_elec_demand_dsm_1_3) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) ++1 flow(bus_elec_demand_dsm_3) = 2 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_2_4)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_4) -+1 flow(bus_elec_demand_dsm_2_4) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) ++1 flow(bus_elec_demand_dsm_4) = 3 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_2_5)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_5) -+1 flow(bus_elec_demand_dsm_2_5) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) ++1 flow(bus_elec_demand_dsm_5) = 3 c_u_SinkDSMOemofInvestmentBlock_dsm_up_constraint(demand_dsm_0_0)_: @@ -222,23 +222,23 @@ c_u_SinkDSMOemofInvestmentBlock_dsm_down_constraint(demand_dsm_2_5)_: c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_0)_: -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) +-1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) --1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_2)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_4)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) = 0 c_u_SinkDSMOemofInvestmentBlock_overall_dsm_maximum(demand_dsm_0)_: @@ -260,36 +260,37 @@ c_l_SinkDSMOemofInvestmentBlock_overall_minimum(demand_dsm)_: bounds 1 <= ONE_VAR_CONSTANT <= 1 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_5) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_5) <= +inf 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_0) <= 100 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_1) <= 100 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_2) <= 100 - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_2) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_end(demand_dsm_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_end(demand_dsm_1) <= +inf @@ -297,5 +298,4 @@ bounds 0 <= SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_0) <= +inf end diff --git a/tests/lp_files/dsm_module_oemof_invest_multi_period_remaining_value.lp b/tests/lp_files/dsm_module_oemof_invest_multi_period_remaining_value.lp index 5b31f8473..77c32e736 100644 --- a/tests/lp_files/dsm_module_oemof_invest_multi_period_remaining_value.lp +++ b/tests/lp_files/dsm_module_oemof_invest_multi_period_remaining_value.lp @@ -4,51 +4,51 @@ min objective: +2941.5609381007307 ONE_VAR_CONSTANT +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) ++1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) ++0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) ++0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) ++0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) ++0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) +100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_0) ++100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) ++98.0392156862745 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) ++98.0392156862745 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_3) ++96.11687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_4) ++96.11687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_5) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) -+1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) -+100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) +0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) -+0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) -+98.0392156862745 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) +0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) -+0.9803921568627451 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) -+98.0392156862745 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_3) +0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) -+0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) -+96.11687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_4) +0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) -+0.9611687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) -+96.11687812379853 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_5) +57.62165571222974 SinkDSMOemofInvestmentBlock_invest(demand_dsm_0) +39.8850096825295 SinkDSMOemofInvestmentBlock_invest(demand_dsm_1) +23.833722936524442 SinkDSMOemofInvestmentBlock_invest(demand_dsm_2) s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMOemofInvestmentBlock_total_dsm_rule(demand_dsm_0)_: @@ -95,9 +95,9 @@ c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule_exo(demand_dsm_2)_: = 0 c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule(demand_dsm_0)_: ++1 SinkDSMOemofInvestmentBlock_old(demand_dsm_0) -1 SinkDSMOemofInvestmentBlock_old_end(demand_dsm_0) -1 SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_0) -+1 SinkDSMOemofInvestmentBlock_old(demand_dsm_0) = 0 c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule(demand_dsm_1)_: @@ -116,42 +116,42 @@ c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) ++1 flow(bus_elec_demand_dsm_0) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_0_1)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_1_2)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_1_2) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) = 2 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_1_3)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_3) -+1 flow(bus_elec_demand_dsm_1_3) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) ++1 flow(bus_elec_demand_dsm_3) = 2 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_2_4)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_4) -+1 flow(bus_elec_demand_dsm_2_4) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) ++1 flow(bus_elec_demand_dsm_4) = 3 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_2_5)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_5) -+1 flow(bus_elec_demand_dsm_2_5) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) ++1 flow(bus_elec_demand_dsm_5) = 3 c_u_SinkDSMOemofInvestmentBlock_dsm_up_constraint(demand_dsm_0_0)_: @@ -222,23 +222,23 @@ c_u_SinkDSMOemofInvestmentBlock_dsm_down_constraint(demand_dsm_2_5)_: c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_0)_: -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) +-1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) --1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_2)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_4)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) = 0 c_u_SinkDSMOemofInvestmentBlock_overall_dsm_maximum(demand_dsm_0)_: @@ -260,36 +260,37 @@ c_l_SinkDSMOemofInvestmentBlock_overall_minimum(demand_dsm)_: bounds 1 <= ONE_VAR_CONSTANT <= 1 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_5) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_3) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_3) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_3) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_4) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_4) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_4) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_5) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_5) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_5) <= +inf 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_0) <= 100 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_1) <= 100 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_2) <= 100 - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_2) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_end(demand_dsm_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_end(demand_dsm_1) <= +inf @@ -297,5 +298,4 @@ bounds 0 <= SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_0) <= +inf end diff --git a/tests/lp_files/dsm_module_oemof_multi_period.lp b/tests/lp_files/dsm_module_oemof_multi_period.lp index 225e20da6..6ace1e5a3 100644 --- a/tests/lp_files/dsm_module_oemof_multi_period.lp +++ b/tests/lp_files/dsm_module_oemof_multi_period.lp @@ -11,28 +11,28 @@ objective: s.t. -c_e_BusBlock_balance(bus_elec_0_0)_: -+1 flow(bus_elec_demand_dsm_0_0) +c_e_BusBlock_balance(bus_elec_0)_: ++1 flow(bus_elec_demand_dsm_0) = 0 -c_e_BusBlock_balance(bus_elec_0_1)_: -+1 flow(bus_elec_demand_dsm_0_1) +c_e_BusBlock_balance(bus_elec_1)_: ++1 flow(bus_elec_demand_dsm_1) = 0 -c_e_BusBlock_balance(bus_elec_1_2)_: -+1 flow(bus_elec_demand_dsm_1_2) +c_e_BusBlock_balance(bus_elec_2)_: ++1 flow(bus_elec_demand_dsm_2) = 0 -c_e_BusBlock_balance(bus_elec_1_3)_: -+1 flow(bus_elec_demand_dsm_1_3) +c_e_BusBlock_balance(bus_elec_3)_: ++1 flow(bus_elec_demand_dsm_3) = 0 -c_e_BusBlock_balance(bus_elec_2_4)_: -+1 flow(bus_elec_demand_dsm_2_4) +c_e_BusBlock_balance(bus_elec_4)_: ++1 flow(bus_elec_demand_dsm_4) = 0 -c_e_BusBlock_balance(bus_elec_2_5)_: -+1 flow(bus_elec_demand_dsm_2_5) +c_e_BusBlock_balance(bus_elec_5)_: ++1 flow(bus_elec_demand_dsm_5) = 0 c_e_SinkDSMOemofBlock_shift_shed_vars(demand_dsm_0)_: @@ -61,44 +61,44 @@ c_e_SinkDSMOemofBlock_shift_shed_vars(demand_dsm_5)_: c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_0_0)_: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_0) -+1 flow(bus_elec_demand_dsm_0_0) -+1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) -1 SinkDSMOemofBlock_dsm_up(demand_dsm_0) ++1 flow(bus_elec_demand_dsm_0) ++1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) = 1 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_0_1)_: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_1) -+1 flow(bus_elec_demand_dsm_0_1) -+1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) -1 SinkDSMOemofBlock_dsm_up(demand_dsm_1) ++1 flow(bus_elec_demand_dsm_1) ++1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) = 1 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_1_2)_: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_2) -+1 flow(bus_elec_demand_dsm_1_2) -+1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) -1 SinkDSMOemofBlock_dsm_up(demand_dsm_2) ++1 flow(bus_elec_demand_dsm_2) ++1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) = 1 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_1_3)_: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_3) -+1 flow(bus_elec_demand_dsm_1_3) -+1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_3) -1 SinkDSMOemofBlock_dsm_up(demand_dsm_3) ++1 flow(bus_elec_demand_dsm_3) ++1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_3) = 1 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_2_4)_: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_4) -+1 flow(bus_elec_demand_dsm_2_4) -+1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_4) -1 SinkDSMOemofBlock_dsm_up(demand_dsm_4) ++1 flow(bus_elec_demand_dsm_4) ++1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_4) = 1 c_e_SinkDSMOemofBlock_input_output_relation(demand_dsm_2_5)_: +1 SinkDSMOemofBlock_dsm_do_shift(demand_dsm_5) -+1 flow(bus_elec_demand_dsm_2_5) -+1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_5) -1 SinkDSMOemofBlock_dsm_up(demand_dsm_5) ++1 flow(bus_elec_demand_dsm_5) ++1 SinkDSMOemofBlock_dsm_do_shed(demand_dsm_5) = 1 c_u_SinkDSMOemofBlock_dsm_up_constraint(demand_dsm_0)_: @@ -183,22 +183,22 @@ bounds 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_3) <= +inf 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_4) <= +inf 0 <= SinkDSMOemofBlock_dsm_do_shift(demand_dsm_5) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_0) <= +inf - 0 <= flow(bus_elec_demand_dsm_0_1) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_2) <= +inf - 0 <= flow(bus_elec_demand_dsm_1_3) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_4) <= +inf - 0 <= flow(bus_elec_demand_dsm_2_5) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_3) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_4) <= +inf - 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_5) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_0) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_1) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_2) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_3) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_4) <= +inf 0 <= SinkDSMOemofBlock_dsm_up(demand_dsm_5) <= +inf + 0 <= flow(bus_elec_demand_dsm_0) <= +inf + 0 <= flow(bus_elec_demand_dsm_1) <= +inf + 0 <= flow(bus_elec_demand_dsm_2) <= +inf + 0 <= flow(bus_elec_demand_dsm_3) <= +inf + 0 <= flow(bus_elec_demand_dsm_4) <= +inf + 0 <= flow(bus_elec_demand_dsm_5) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_0) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_1) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_2) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_3) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_4) <= +inf + 0 <= SinkDSMOemofBlock_dsm_do_shed(demand_dsm_5) <= +inf end diff --git a/tests/lp_files/emission_budget_limit.lp b/tests/lp_files/emission_budget_limit.lp index cbe106b68..495b4bd48 100644 --- a/tests/lp_files/emission_budget_limit.lp +++ b/tests/lp_files/emission_budget_limit.lp @@ -6,33 +6,33 @@ objective: s.t. -c_u_integral_limit_emission_factor_constraint_: -+0.5 flow(source1_electricityBus_0_0) --1.0 flow(source1_electricityBus_0_1) -+2.0 flow(source1_electricityBus_1_2) -+1 flow(source1_electricityBus_1_3) -+0.5 flow(source1_electricityBus_2_4) -+0.5 flow(source1_electricityBus_2_5) -+3.5 flow(source2_electricityBus_0_0) -+3.5 flow(source2_electricityBus_0_1) -+3.5 flow(source2_electricityBus_1_2) -+3.5 flow(source2_electricityBus_1_3) -+3.5 flow(source2_electricityBus_2_4) -+3.5 flow(source2_electricityBus_2_5) +c_u_integral_limit_emission_factor_upper_limit_: ++0.5 flow(source1_electricityBus_0) +-1.0 flow(source1_electricityBus_1) ++2.0 flow(source1_electricityBus_2) ++1 flow(source1_electricityBus_3) ++0.5 flow(source1_electricityBus_4) ++0.5 flow(source1_electricityBus_5) ++3.5 flow(source2_electricityBus_0) ++3.5 flow(source2_electricityBus_1) ++3.5 flow(source2_electricityBus_2) ++3.5 flow(source2_electricityBus_3) ++3.5 flow(source2_electricityBus_4) ++3.5 flow(source2_electricityBus_5) <= 777 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(source1_electricityBus_0_0) <= 100 - 0 <= flow(source1_electricityBus_0_1) <= 100 - 0 <= flow(source1_electricityBus_1_2) <= 100 - 0 <= flow(source1_electricityBus_1_3) <= 100 - 0 <= flow(source1_electricityBus_2_4) <= 100 - 0 <= flow(source1_electricityBus_2_5) <= 100 - 0 <= flow(source2_electricityBus_0_0) <= 100 - 0 <= flow(source2_electricityBus_0_1) <= 100 - 0 <= flow(source2_electricityBus_1_2) <= 100 - 0 <= flow(source2_electricityBus_1_3) <= 100 - 0 <= flow(source2_electricityBus_2_4) <= 100 - 0 <= flow(source2_electricityBus_2_5) <= 100 + 0 <= flow(source1_electricityBus_0) <= 100 + 0 <= flow(source1_electricityBus_1) <= 100 + 0 <= flow(source1_electricityBus_2) <= 100 + 0 <= flow(source1_electricityBus_3) <= 100 + 0 <= flow(source1_electricityBus_4) <= 100 + 0 <= flow(source1_electricityBus_5) <= 100 + 0 <= flow(source2_electricityBus_0) <= 100 + 0 <= flow(source2_electricityBus_1) <= 100 + 0 <= flow(source2_electricityBus_2) <= 100 + 0 <= flow(source2_electricityBus_3) <= 100 + 0 <= flow(source2_electricityBus_4) <= 100 + 0 <= flow(source2_electricityBus_5) <= 100 end diff --git a/tests/lp_files/emission_limit.lp b/tests/lp_files/emission_limit.lp index 8d00d7c36..380823e3c 100644 --- a/tests/lp_files/emission_limit.lp +++ b/tests/lp_files/emission_limit.lp @@ -6,42 +6,42 @@ objective: s.t. -c_u_integral_limit_emission_factor_constraint_: -+0.5 flow(source1_electricityBus_0_0) --1.0 flow(source1_electricityBus_0_1) -+2.0 flow(source1_electricityBus_0_2) -+3.5 flow(source2_electricityBus_0_0) -+3.5 flow(source2_electricityBus_0_1) -+3.5 flow(source2_electricityBus_0_2) +c_u_integral_limit_emission_factor_upper_limit_: ++0.5 flow(source1_electricityBus_0) +-1.0 flow(source1_electricityBus_1) ++2.0 flow(source1_electricityBus_2) ++3.5 flow(source2_electricityBus_0) ++3.5 flow(source2_electricityBus_1) ++3.5 flow(source2_electricityBus_2) <= 777 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(source1_electricityBus_0_0) -+1 flow(source2_electricityBus_0_0) -+1 flow(source3_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(source1_electricityBus_0) ++1 flow(source2_electricityBus_0) ++1 flow(source3_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(source1_electricityBus_0_1) -+1 flow(source2_electricityBus_0_1) -+1 flow(source3_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(source1_electricityBus_1) ++1 flow(source2_electricityBus_1) ++1 flow(source3_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(source1_electricityBus_0_2) -+1 flow(source2_electricityBus_0_2) -+1 flow(source3_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(source1_electricityBus_2) ++1 flow(source2_electricityBus_2) ++1 flow(source3_electricityBus_2) = 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(source1_electricityBus_0_0) <= 100 - 0 <= flow(source1_electricityBus_0_1) <= 100 - 0 <= flow(source1_electricityBus_0_2) <= 100 - 0 <= flow(source2_electricityBus_0_0) <= 100 - 0 <= flow(source2_electricityBus_0_1) <= 100 - 0 <= flow(source2_electricityBus_0_2) <= 100 - 0 <= flow(source3_electricityBus_0_0) <= 100 - 0 <= flow(source3_electricityBus_0_1) <= 100 - 0 <= flow(source3_electricityBus_0_2) <= 100 + 0 <= flow(source1_electricityBus_0) <= 100 + 0 <= flow(source1_electricityBus_1) <= 100 + 0 <= flow(source1_electricityBus_2) <= 100 + 0 <= flow(source2_electricityBus_0) <= 100 + 0 <= flow(source2_electricityBus_1) <= 100 + 0 <= flow(source2_electricityBus_2) <= 100 + 0 <= flow(source3_electricityBus_0) <= 100 + 0 <= flow(source3_electricityBus_1) <= 100 + 0 <= flow(source3_electricityBus_2) <= 100 end diff --git a/tests/lp_files/emission_limit_lower.lp b/tests/lp_files/emission_limit_lower.lp new file mode 100644 index 000000000..92fa30731 --- /dev/null +++ b/tests/lp_files/emission_limit_lower.lp @@ -0,0 +1,38 @@ +\* Source Pyomo model name=Model *\ + +min +objective: ++0 ONE_VAR_CONSTANT + +s.t. + +c_l_integral_limit_emission_factor_lower_limit_: ++0.8 flow(source1_electricityBus_0) ++0.8 flow(source1_electricityBus_1) ++0.8 flow(source1_electricityBus_2) +>= 777 + +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(source1_electricityBus_0) ++1 flow(source2_electricityBus_0) += 0 + +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(source1_electricityBus_1) ++1 flow(source2_electricityBus_1) += 0 + +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(source1_electricityBus_2) ++1 flow(source2_electricityBus_2) += 0 + +bounds + 1 <= ONE_VAR_CONSTANT <= 1 + 0 <= flow(source1_electricityBus_0) <= 100 + 0 <= flow(source1_electricityBus_1) <= 100 + 0 <= flow(source1_electricityBus_2) <= 100 + 0 <= flow(source2_electricityBus_0) <= 100 + 0 <= flow(source2_electricityBus_1) <= 100 + 0 <= flow(source2_electricityBus_2) <= 100 +end diff --git a/tests/lp_files/emission_limit_no_error.lp b/tests/lp_files/emission_limit_no_error.lp index 564aadb05..4a2fe33bc 100644 --- a/tests/lp_files/emission_limit_no_error.lp +++ b/tests/lp_files/emission_limit_no_error.lp @@ -6,33 +6,33 @@ objective: s.t. -c_u_integral_limit_emission_factor_constraint_: -+0.8 flow(source1_electricityBus_0_0) -+0.8 flow(source1_electricityBus_0_1) -+0.8 flow(source1_electricityBus_0_2) +c_u_integral_limit_emission_factor_upper_limit_: ++0.8 flow(source1_electricityBus_0) ++0.8 flow(source1_electricityBus_1) ++0.8 flow(source1_electricityBus_2) <= 777 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(source1_electricityBus_0_0) -+1 flow(source2_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(source1_electricityBus_0) ++1 flow(source2_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(source1_electricityBus_0_1) -+1 flow(source2_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(source1_electricityBus_1) ++1 flow(source2_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(source1_electricityBus_0_2) -+1 flow(source2_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(source1_electricityBus_2) ++1 flow(source2_electricityBus_2) = 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(source1_electricityBus_0_0) <= 100 - 0 <= flow(source1_electricityBus_0_1) <= 100 - 0 <= flow(source1_electricityBus_0_2) <= 100 - 0 <= flow(source2_electricityBus_0_0) <= 100 - 0 <= flow(source2_electricityBus_0_1) <= 100 - 0 <= flow(source2_electricityBus_0_2) <= 100 + 0 <= flow(source1_electricityBus_0) <= 100 + 0 <= flow(source1_electricityBus_1) <= 100 + 0 <= flow(source1_electricityBus_2) <= 100 + 0 <= flow(source2_electricityBus_0) <= 100 + 0 <= flow(source2_electricityBus_1) <= 100 + 0 <= flow(source2_electricityBus_2) <= 100 end diff --git a/tests/lp_files/equate_flows.lp b/tests/lp_files/equate_flows.lp index 950d932e8..cbde310e2 100644 --- a/tests/lp_files/equate_flows.lp +++ b/tests/lp_files/equate_flows.lp @@ -2,62 +2,62 @@ min objective: -+2 flow(Bus1_Sink_0_0) -+2 flow(Bus1_Sink_0_1) -+2 flow(Bus1_Sink_0_2) -+2 flow(Source1_Bus1_0_0) -+2 flow(Source1_Bus1_0_1) -+2 flow(Source1_Bus1_0_2) -+10 flow(Source2_Bus1_0_0) -+10 flow(Source2_Bus1_0_1) -+10 flow(Source2_Bus1_0_2) ++2 flow(Bus1_Sink_0) ++2 flow(Bus1_Sink_1) ++2 flow(Bus1_Sink_2) ++2 flow(Source1_Bus1_0) ++2 flow(Source1_Bus1_1) ++2 flow(Source1_Bus1_2) ++10 flow(Source2_Bus1_0) ++10 flow(Source2_Bus1_1) ++10 flow(Source2_Bus1_2) s.t. -c_e_equate_flows(0_0)_: --1 flow(Bus1_Sink_0_0) -+2 flow(Source1_Bus1_0_0) -+2 flow(Source2_Bus1_0_0) +c_e_equate_flows(0)_: +-1 flow(Bus1_Sink_0) ++2 flow(Source1_Bus1_0) ++2 flow(Source2_Bus1_0) = 0 -c_e_equate_flows(0_1)_: --1 flow(Bus1_Sink_0_1) -+2 flow(Source1_Bus1_0_1) -+2 flow(Source2_Bus1_0_1) +c_e_equate_flows(1)_: +-1 flow(Bus1_Sink_1) ++2 flow(Source1_Bus1_1) ++2 flow(Source2_Bus1_1) = 0 -c_e_equate_flows(0_2)_: --1 flow(Bus1_Sink_0_2) -+2 flow(Source1_Bus1_0_2) -+2 flow(Source2_Bus1_0_2) +c_e_equate_flows(2)_: +-1 flow(Bus1_Sink_2) ++2 flow(Source1_Bus1_2) ++2 flow(Source2_Bus1_2) = 0 -c_e_BusBlock_balance(Bus1_0_0)_: --1 flow(Bus1_Sink_0_0) -+1 flow(Source1_Bus1_0_0) -+1 flow(Source2_Bus1_0_0) +c_e_BusBlock_balance(Bus1_0)_: +-1 flow(Bus1_Sink_0) ++1 flow(Source1_Bus1_0) ++1 flow(Source2_Bus1_0) = 0 -c_e_BusBlock_balance(Bus1_0_1)_: --1 flow(Bus1_Sink_0_1) -+1 flow(Source1_Bus1_0_1) -+1 flow(Source2_Bus1_0_1) +c_e_BusBlock_balance(Bus1_1)_: +-1 flow(Bus1_Sink_1) ++1 flow(Source1_Bus1_1) ++1 flow(Source2_Bus1_1) = 0 -c_e_BusBlock_balance(Bus1_0_2)_: --1 flow(Bus1_Sink_0_2) -+1 flow(Source1_Bus1_0_2) -+1 flow(Source2_Bus1_0_2) +c_e_BusBlock_balance(Bus1_2)_: +-1 flow(Bus1_Sink_2) ++1 flow(Source1_Bus1_2) ++1 flow(Source2_Bus1_2) = 0 bounds - 0 <= flow(Bus1_Sink_0_0) <= 300 - 0 <= flow(Bus1_Sink_0_1) <= 300 - 0 <= flow(Bus1_Sink_0_2) <= 300 - 0 <= flow(Source1_Bus1_0_0) <= 400 - 0 <= flow(Source1_Bus1_0_1) <= 400 - 0 <= flow(Source1_Bus1_0_2) <= 400 - 0 <= flow(Source2_Bus1_0_0) <= 200 - 0 <= flow(Source2_Bus1_0_1) <= 200 - 0 <= flow(Source2_Bus1_0_2) <= 200 + 0 <= flow(Bus1_Sink_0) <= 300 + 0 <= flow(Bus1_Sink_1) <= 300 + 0 <= flow(Bus1_Sink_2) <= 300 + 0 <= flow(Source1_Bus1_0) <= 400 + 0 <= flow(Source1_Bus1_1) <= 400 + 0 <= flow(Source1_Bus1_2) <= 400 + 0 <= flow(Source2_Bus1_0) <= 200 + 0 <= flow(Source2_Bus1_1) <= 200 + 0 <= flow(Source2_Bus1_2) <= 200 end diff --git a/tests/lp_files/fixed_costs_sources.lp b/tests/lp_files/fixed_costs_sources.lp index 004e64ad8..20fdfeb81 100644 --- a/tests/lp_files/fixed_costs_sources.lp +++ b/tests/lp_files/fixed_costs_sources.lp @@ -3,89 +3,89 @@ min objective: +235.90542099192615 ONE_VAR_CONSTANT -+25 flow(pv_forever_electricityBus_0_0) -+25 flow(pv_forever_electricityBus_0_1) -+24.509803921568626 flow(pv_forever_electricityBus_1_2) -+24.509803921568626 flow(pv_forever_electricityBus_1_3) -+24.029219530949632 flow(pv_forever_electricityBus_2_4) -+24.029219530949632 flow(pv_forever_electricityBus_2_5) -+25 flow(pv_with_lifetime_electricityBus_0_0) -+25 flow(pv_with_lifetime_electricityBus_0_1) -+24.509803921568626 flow(pv_with_lifetime_electricityBus_1_2) -+24.509803921568626 flow(pv_with_lifetime_electricityBus_1_3) -+24.029219530949632 flow(pv_with_lifetime_electricityBus_2_4) -+24.029219530949632 flow(pv_with_lifetime_electricityBus_2_5) -+25 flow(pv_with_lifetime_and_age_electricityBus_0_0) -+25 flow(pv_with_lifetime_and_age_electricityBus_0_1) -+24.509803921568626 flow(pv_with_lifetime_and_age_electricityBus_1_2) -+24.509803921568626 flow(pv_with_lifetime_and_age_electricityBus_1_3) -+24.029219530949632 flow(pv_with_lifetime_and_age_electricityBus_2_4) -+24.029219530949632 flow(pv_with_lifetime_and_age_electricityBus_2_5) ++25 flow(pv_forever_electricityBus_0) ++25 flow(pv_forever_electricityBus_1) ++24.509803921568626 flow(pv_forever_electricityBus_2) ++24.509803921568626 flow(pv_forever_electricityBus_3) ++24.029219530949632 flow(pv_forever_electricityBus_4) ++24.029219530949632 flow(pv_forever_electricityBus_5) ++25 flow(pv_with_lifetime_electricityBus_0) ++25 flow(pv_with_lifetime_electricityBus_1) ++24.509803921568626 flow(pv_with_lifetime_electricityBus_2) ++24.509803921568626 flow(pv_with_lifetime_electricityBus_3) ++24.029219530949632 flow(pv_with_lifetime_electricityBus_4) ++24.029219530949632 flow(pv_with_lifetime_electricityBus_5) ++25 flow(pv_with_lifetime_and_age_electricityBus_0) ++25 flow(pv_with_lifetime_and_age_electricityBus_1) ++24.509803921568626 flow(pv_with_lifetime_and_age_electricityBus_2) ++24.509803921568626 flow(pv_with_lifetime_and_age_electricityBus_3) ++24.029219530949632 flow(pv_with_lifetime_and_age_electricityBus_4) ++24.029219530949632 flow(pv_with_lifetime_and_age_electricityBus_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(pv_forever_electricityBus_0_0) -+1 flow(pv_with_lifetime_electricityBus_0_0) -+1 flow(pv_with_lifetime_and_age_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(pv_forever_electricityBus_0) ++1 flow(pv_with_lifetime_electricityBus_0) ++1 flow(pv_with_lifetime_and_age_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(pv_forever_electricityBus_0_1) -+1 flow(pv_with_lifetime_electricityBus_0_1) -+1 flow(pv_with_lifetime_and_age_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(pv_forever_electricityBus_1) ++1 flow(pv_with_lifetime_electricityBus_1) ++1 flow(pv_with_lifetime_and_age_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(pv_forever_electricityBus_1_2) -+1 flow(pv_with_lifetime_electricityBus_1_2) -+1 flow(pv_with_lifetime_and_age_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(pv_forever_electricityBus_2) ++1 flow(pv_with_lifetime_electricityBus_2) ++1 flow(pv_with_lifetime_and_age_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(pv_forever_electricityBus_1_3) -+1 flow(pv_with_lifetime_electricityBus_1_3) -+1 flow(pv_with_lifetime_and_age_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(pv_forever_electricityBus_3) ++1 flow(pv_with_lifetime_electricityBus_3) ++1 flow(pv_with_lifetime_and_age_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(pv_forever_electricityBus_2_4) -+1 flow(pv_with_lifetime_electricityBus_2_4) -+1 flow(pv_with_lifetime_and_age_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(pv_forever_electricityBus_4) ++1 flow(pv_with_lifetime_electricityBus_4) ++1 flow(pv_with_lifetime_and_age_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(pv_forever_electricityBus_2_5) -+1 flow(pv_with_lifetime_electricityBus_2_5) -+1 flow(pv_with_lifetime_and_age_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(pv_forever_electricityBus_5) ++1 flow(pv_with_lifetime_electricityBus_5) ++1 flow(pv_with_lifetime_and_age_electricityBus_5) = 0 c_e_SimpleFlowBlock_lifetime_age_output(pv_with_lifetime_and_age_electricityBus_2_4)_: -+1 flow(pv_with_lifetime_and_age_electricityBus_2_4) ++1 flow(pv_with_lifetime_and_age_electricityBus_4) = 0 c_e_SimpleFlowBlock_lifetime_age_output(pv_with_lifetime_and_age_electricityBus_2_5)_: -+1 flow(pv_with_lifetime_and_age_electricityBus_2_5) ++1 flow(pv_with_lifetime_and_age_electricityBus_5) = 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(pv_forever_electricityBus_0_0) <= 8.0 - 0 <= flow(pv_forever_electricityBus_0_1) <= 8.0 - 0 <= flow(pv_forever_electricityBus_1_2) <= 8.0 - 0 <= flow(pv_forever_electricityBus_1_3) <= 8.0 - 0 <= flow(pv_forever_electricityBus_2_4) <= 8.0 - 0 <= flow(pv_forever_electricityBus_2_5) <= 8.0 - 0 <= flow(pv_with_lifetime_electricityBus_0_0) <= 8.0 - 0 <= flow(pv_with_lifetime_electricityBus_0_1) <= 8.0 - 0 <= flow(pv_with_lifetime_electricityBus_1_2) <= 8.0 - 0 <= flow(pv_with_lifetime_electricityBus_1_3) <= 8.0 - 0 <= flow(pv_with_lifetime_electricityBus_2_4) <= 8.0 - 0 <= flow(pv_with_lifetime_electricityBus_2_5) <= 8.0 - 0 <= flow(pv_with_lifetime_and_age_electricityBus_0_0) <= 8.0 - 0 <= flow(pv_with_lifetime_and_age_electricityBus_0_1) <= 8.0 - 0 <= flow(pv_with_lifetime_and_age_electricityBus_1_2) <= 8.0 - 0 <= flow(pv_with_lifetime_and_age_electricityBus_1_3) <= 8.0 - 0 <= flow(pv_with_lifetime_and_age_electricityBus_2_4) <= 8.0 - 0 <= flow(pv_with_lifetime_and_age_electricityBus_2_5) <= 8.0 + 0 <= flow(pv_forever_electricityBus_0) <= 8.0 + 0 <= flow(pv_forever_electricityBus_1) <= 8.0 + 0 <= flow(pv_forever_electricityBus_2) <= 8.0 + 0 <= flow(pv_forever_electricityBus_3) <= 8.0 + 0 <= flow(pv_forever_electricityBus_4) <= 8.0 + 0 <= flow(pv_forever_electricityBus_5) <= 8.0 + 0 <= flow(pv_with_lifetime_electricityBus_0) <= 8.0 + 0 <= flow(pv_with_lifetime_electricityBus_1) <= 8.0 + 0 <= flow(pv_with_lifetime_electricityBus_2) <= 8.0 + 0 <= flow(pv_with_lifetime_electricityBus_3) <= 8.0 + 0 <= flow(pv_with_lifetime_electricityBus_4) <= 8.0 + 0 <= flow(pv_with_lifetime_electricityBus_5) <= 8.0 + 0 <= flow(pv_with_lifetime_and_age_electricityBus_0) <= 8.0 + 0 <= flow(pv_with_lifetime_and_age_electricityBus_1) <= 8.0 + 0 <= flow(pv_with_lifetime_and_age_electricityBus_2) <= 8.0 + 0 <= flow(pv_with_lifetime_and_age_electricityBus_3) <= 8.0 + 0 <= flow(pv_with_lifetime_and_age_electricityBus_4) <= 8.0 + 0 <= flow(pv_with_lifetime_and_age_electricityBus_5) <= 8.0 end diff --git a/tests/lp_files/fixed_source_invest_sink.lp b/tests/lp_files/fixed_source_invest_sink.lp index 7e36eb90b..1a836007d 100644 --- a/tests/lp_files/fixed_source_invest_sink.lp +++ b/tests/lp_files/fixed_source_invest_sink.lp @@ -3,22 +3,22 @@ min objective: +500 InvestmentFlowBlock_invest(electricityBus_excess_0) -+25 flow(electricityBus_excess_0_0) -+25 flow(electricityBus_excess_0_1) -+25 flow(electricityBus_excess_0_2) ++25 flow(electricityBus_excess_0) ++25 flow(electricityBus_excess_1) ++25 flow(electricityBus_excess_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_excess_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_excess_0) = -12000000.0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_excess_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_excess_1) = -16000000.0 -c_e_BusBlock_balance(electricityBus_0_2)_: --1 flow(electricityBus_excess_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_excess_2) = -14000000.0 c_e_InvestmentFlowBlock_total_rule(electricityBus_excess_0)_: @@ -27,31 +27,31 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_excess_0)_: = 50 c_u_InvestmentFlowBlock_max(electricityBus_excess_0_0)_: -+1 flow(electricityBus_excess_0_0) ++1 flow(electricityBus_excess_0) -0.8 InvestmentFlowBlock_total(electricityBus_excess_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_excess_0_1)_: -+1 flow(electricityBus_excess_0_1) ++1 flow(electricityBus_excess_1) -0.8 InvestmentFlowBlock_total(electricityBus_excess_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_excess_0_2)_: -+1 flow(electricityBus_excess_0_2) ++1 flow(electricityBus_excess_2) -0.8 InvestmentFlowBlock_total(electricityBus_excess_0) <= 0 c_u_InvestmentFlowBlock_full_load_time_max(electricityBus_excess)_: -+1 flow(electricityBus_excess_0_0) -+1 flow(electricityBus_excess_0_1) -+1 flow(electricityBus_excess_0_2) ++1 flow(electricityBus_excess_0) ++1 flow(electricityBus_excess_1) ++1 flow(electricityBus_excess_2) -2.3 InvestmentFlowBlock_total(electricityBus_excess_0) <= 0 bounds 0 <= InvestmentFlowBlock_invest(electricityBus_excess_0) <= 1000000.0 - 0 <= flow(electricityBus_excess_0_0) <= +inf - 0 <= flow(electricityBus_excess_0_1) <= +inf - 0 <= flow(electricityBus_excess_0_2) <= +inf + 0 <= flow(electricityBus_excess_0) <= +inf + 0 <= flow(electricityBus_excess_1) <= +inf + 0 <= flow(electricityBus_excess_2) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_excess_0) <= +inf end diff --git a/tests/lp_files/fixed_source_invest_sink_multi_period.lp b/tests/lp_files/fixed_source_invest_sink_multi_period.lp index af511ec32..3959ce6eb 100644 --- a/tests/lp_files/fixed_source_invest_sink_multi_period.lp +++ b/tests/lp_files/fixed_source_invest_sink_multi_period.lp @@ -5,37 +5,37 @@ objective: +88.1844182057801 InvestmentFlowBlock_invest(electricityBus_excess_0) +58.20563481102971 InvestmentFlowBlock_invest(electricityBus_excess_1) +28.814670698529593 InvestmentFlowBlock_invest(electricityBus_excess_2) -+25 flow(electricityBus_excess_0_0) -+25 flow(electricityBus_excess_0_1) -+24.509803921568626 flow(electricityBus_excess_1_2) -+24.509803921568626 flow(electricityBus_excess_1_3) -+24.029219530949632 flow(electricityBus_excess_2_4) -+24.029219530949632 flow(electricityBus_excess_2_5) ++25 flow(electricityBus_excess_0) ++25 flow(electricityBus_excess_1) ++24.509803921568626 flow(electricityBus_excess_2) ++24.509803921568626 flow(electricityBus_excess_3) ++24.029219530949632 flow(electricityBus_excess_4) ++24.029219530949632 flow(electricityBus_excess_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_excess_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_excess_0) = -12000000.0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_excess_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_excess_1) = -16000000.0 -c_e_BusBlock_balance(electricityBus_1_2)_: --1 flow(electricityBus_excess_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_excess_2) = -14000000.0 -c_e_BusBlock_balance(electricityBus_1_3)_: --1 flow(electricityBus_excess_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_excess_3) = -18000000.0 -c_e_BusBlock_balance(electricityBus_2_4)_: --1 flow(electricityBus_excess_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_excess_4) = -18000000.0 -c_e_BusBlock_balance(electricityBus_2_5)_: --1 flow(electricityBus_excess_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_excess_5) = -18000000.0 c_e_InvestmentFlowBlock_total_rule(electricityBus_excess_0)_: @@ -82,9 +82,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_excess_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_excess_0)_: ++1 InvestmentFlowBlock_old(electricityBus_excess_0) -1 InvestmentFlowBlock_old_end(electricityBus_excess_0) -1 InvestmentFlowBlock_old_exo(electricityBus_excess_0) -+1 InvestmentFlowBlock_old(electricityBus_excess_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_excess_1)_: @@ -100,61 +100,62 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_excess_2)_: = 0 c_u_InvestmentFlowBlock_max(electricityBus_excess_0_0)_: -+1 flow(electricityBus_excess_0_0) ++1 flow(electricityBus_excess_0) -0.8 InvestmentFlowBlock_total(electricityBus_excess_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_excess_0_1)_: -+1 flow(electricityBus_excess_0_1) ++1 flow(electricityBus_excess_1) -0.8 InvestmentFlowBlock_total(electricityBus_excess_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_excess_1_2)_: -+1 flow(electricityBus_excess_1_2) ++1 flow(electricityBus_excess_2) -0.8 InvestmentFlowBlock_total(electricityBus_excess_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_excess_1_3)_: -+1 flow(electricityBus_excess_1_3) ++1 flow(electricityBus_excess_3) -0.8 InvestmentFlowBlock_total(electricityBus_excess_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_excess_2_4)_: -+1 flow(electricityBus_excess_2_4) ++1 flow(electricityBus_excess_4) -0.8 InvestmentFlowBlock_total(electricityBus_excess_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_excess_2_5)_: -+1 flow(electricityBus_excess_2_5) ++1 flow(electricityBus_excess_5) -0.8 InvestmentFlowBlock_total(electricityBus_excess_2) <= 0 c_u_InvestmentFlowBlock_full_load_time_max(electricityBus_excess)_: -+1 flow(electricityBus_excess_0_0) -+1 flow(electricityBus_excess_0_1) -+1 flow(electricityBus_excess_1_2) -+1 flow(electricityBus_excess_1_3) -+1 flow(electricityBus_excess_2_4) -+1 flow(electricityBus_excess_2_5) ++1 flow(electricityBus_excess_0) ++1 flow(electricityBus_excess_1) ++1 flow(electricityBus_excess_2) ++1 flow(electricityBus_excess_3) ++1 flow(electricityBus_excess_4) ++1 flow(electricityBus_excess_5) -2.3 InvestmentFlowBlock_total(electricityBus_excess_0) -2.3 InvestmentFlowBlock_total(electricityBus_excess_1) -2.3 InvestmentFlowBlock_total(electricityBus_excess_2) -<= 0.0 +<= 0 bounds 0 <= InvestmentFlowBlock_invest(electricityBus_excess_0) <= 1000000.0 0 <= InvestmentFlowBlock_invest(electricityBus_excess_1) <= 1000000.0 0 <= InvestmentFlowBlock_invest(electricityBus_excess_2) <= 1000000.0 - 0 <= flow(electricityBus_excess_0_0) <= +inf - 0 <= flow(electricityBus_excess_0_1) <= +inf - 0 <= flow(electricityBus_excess_1_2) <= +inf - 0 <= flow(electricityBus_excess_1_3) <= +inf - 0 <= flow(electricityBus_excess_2_4) <= +inf - 0 <= flow(electricityBus_excess_2_5) <= +inf + 0 <= flow(electricityBus_excess_0) <= +inf + 0 <= flow(electricityBus_excess_1) <= +inf + 0 <= flow(electricityBus_excess_2) <= +inf + 0 <= flow(electricityBus_excess_3) <= +inf + 0 <= flow(electricityBus_excess_4) <= +inf + 0 <= flow(electricityBus_excess_5) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_excess_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_excess_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_excess_1) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_excess_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_excess_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_excess_1) <= +inf 0 <= InvestmentFlowBlock_old(electricityBus_excess_2) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_excess_0) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_excess_1) <= +inf @@ -162,5 +163,4 @@ bounds 0 <= InvestmentFlowBlock_old_exo(electricityBus_excess_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_excess_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_excess_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_excess_0) <= +inf end diff --git a/tests/lp_files/fixed_source_variable_sink.lp b/tests/lp_files/fixed_source_variable_sink.lp index 064e7f06a..b2da930f0 100644 --- a/tests/lp_files/fixed_source_variable_sink.lp +++ b/tests/lp_files/fixed_source_variable_sink.lp @@ -2,26 +2,26 @@ min objective: -+40 flow(electricityBus_excess_0_0) -+40 flow(electricityBus_excess_0_1) -+40 flow(electricityBus_excess_0_2) ++40 flow(electricityBus_excess_0) ++40 flow(electricityBus_excess_1) ++40 flow(electricityBus_excess_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_excess_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_excess_0) = -430000.0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_excess_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_excess_1) = -720000.0 -c_e_BusBlock_balance(electricityBus_0_2)_: --1 flow(electricityBus_excess_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_excess_2) = -290000.0 bounds - 0 <= flow(electricityBus_excess_0_0) <= +inf - 0 <= flow(electricityBus_excess_0_1) <= +inf - 0 <= flow(electricityBus_excess_0_2) <= +inf + 0 <= flow(electricityBus_excess_0) <= +inf + 0 <= flow(electricityBus_excess_1) <= +inf + 0 <= flow(electricityBus_excess_2) <= +inf end diff --git a/tests/lp_files/fixed_source_variable_sink_multi_period.lp b/tests/lp_files/fixed_source_variable_sink_multi_period.lp index f86665232..c4b93ed4b 100644 --- a/tests/lp_files/fixed_source_variable_sink_multi_period.lp +++ b/tests/lp_files/fixed_source_variable_sink_multi_period.lp @@ -2,44 +2,44 @@ min objective: -+40 flow(electricityBus_excess_0_0) -+40 flow(electricityBus_excess_0_1) -+39.2156862745098 flow(electricityBus_excess_1_2) -+39.2156862745098 flow(electricityBus_excess_1_3) -+38.446751249519416 flow(electricityBus_excess_2_4) -+38.446751249519416 flow(electricityBus_excess_2_5) ++40 flow(electricityBus_excess_0) ++40 flow(electricityBus_excess_1) ++39.2156862745098 flow(electricityBus_excess_2) ++39.2156862745098 flow(electricityBus_excess_3) ++38.446751249519416 flow(electricityBus_excess_4) ++38.446751249519416 flow(electricityBus_excess_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_excess_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_excess_0) = -430000.0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_excess_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_excess_1) = -720000.0 -c_e_BusBlock_balance(electricityBus_1_2)_: --1 flow(electricityBus_excess_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_excess_2) = -290000.0 -c_e_BusBlock_balance(electricityBus_1_3)_: --1 flow(electricityBus_excess_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_excess_3) = -330000.0 -c_e_BusBlock_balance(electricityBus_2_4)_: --1 flow(electricityBus_excess_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_excess_4) = -330000.0 -c_e_BusBlock_balance(electricityBus_2_5)_: --1 flow(electricityBus_excess_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_excess_5) = -330000.0 bounds - 0 <= flow(electricityBus_excess_0_0) <= +inf - 0 <= flow(electricityBus_excess_0_1) <= +inf - 0 <= flow(electricityBus_excess_1_2) <= +inf - 0 <= flow(electricityBus_excess_1_3) <= +inf - 0 <= flow(electricityBus_excess_2_4) <= +inf - 0 <= flow(electricityBus_excess_2_5) <= +inf + 0 <= flow(electricityBus_excess_0) <= +inf + 0 <= flow(electricityBus_excess_1) <= +inf + 0 <= flow(electricityBus_excess_2) <= +inf + 0 <= flow(electricityBus_excess_3) <= +inf + 0 <= flow(electricityBus_excess_4) <= +inf + 0 <= flow(electricityBus_excess_5) <= +inf end diff --git a/tests/lp_files/flow_count_limit.lp b/tests/lp_files/flow_count_limit.lp index b4e80d20e..499d88d04 100644 --- a/tests/lp_files/flow_count_limit.lp +++ b/tests/lp_files/flow_count_limit.lp @@ -24,25 +24,25 @@ c_e_emission_factor_constraint(2)_: -1 emission_factor(2) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(source4_electricityBus_0_0) -+1 flow(source2_electricityBus_0_0) -+1 flow(source1_electricityBus_0_0) -+1 flow(source3_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(source1_electricityBus_0) ++1 flow(source2_electricityBus_0) ++1 flow(source3_electricityBus_0) ++1 flow(source4_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(source4_electricityBus_0_1) -+1 flow(source2_electricityBus_0_1) -+1 flow(source1_electricityBus_0_1) -+1 flow(source3_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(source1_electricityBus_1) ++1 flow(source2_electricityBus_1) ++1 flow(source3_electricityBus_1) ++1 flow(source4_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(source4_electricityBus_0_2) -+1 flow(source2_electricityBus_0_2) -+1 flow(source1_electricityBus_0_2) -+1 flow(source3_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(source1_electricityBus_2) ++1 flow(source2_electricityBus_2) ++1 flow(source3_electricityBus_2) ++1 flow(source4_electricityBus_2) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_0)_: @@ -60,21 +60,6 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_2)_: +1 NonConvexFlowBlock_status_nominal(source1_electricityBus_2) = 0 -c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_0)_: -+1 NonConvexFlowBlock_status_nominal(source3_electricityBus_0) --100 NonConvexFlowBlock_status(source3_electricityBus_0) -= 0 - -c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_1)_: -+1 NonConvexFlowBlock_status_nominal(source3_electricityBus_1) --100 NonConvexFlowBlock_status(source3_electricityBus_1) -= 0 - -c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_2)_: -+1 NonConvexFlowBlock_status_nominal(source3_electricityBus_2) --100 NonConvexFlowBlock_status(source3_electricityBus_2) -= 0 - c_e_NonConvexFlowBlock_status_nominal_constraint(source2_electricityBus_0)_: -100 NonConvexFlowBlock_status(source2_electricityBus_0) +1 NonConvexFlowBlock_status_nominal(source2_electricityBus_0) @@ -90,128 +75,143 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(source2_electricityBus_2)_: +1 NonConvexFlowBlock_status_nominal(source2_electricityBus_2) = 0 -c_u_NonConvexFlowBlock_min(source1_electricityBus_0_0)_: --1 flow(source1_electricityBus_0_0) +c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_0)_: +-100 NonConvexFlowBlock_status(source3_electricityBus_0) ++1 NonConvexFlowBlock_status_nominal(source3_electricityBus_0) += 0 + +c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_1)_: +-100 NonConvexFlowBlock_status(source3_electricityBus_1) ++1 NonConvexFlowBlock_status_nominal(source3_electricityBus_1) += 0 + +c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_2)_: +-100 NonConvexFlowBlock_status(source3_electricityBus_2) ++1 NonConvexFlowBlock_status_nominal(source3_electricityBus_2) += 0 + +c_u_NonConvexFlowBlock_min(source1_electricityBus_0)_: +-1 flow(source1_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_min(source1_electricityBus_0_1)_: --1 flow(source1_electricityBus_0_1) +c_u_NonConvexFlowBlock_min(source1_electricityBus_1)_: +-1 flow(source1_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_min(source1_electricityBus_0_2)_: --1 flow(source1_electricityBus_0_2) +c_u_NonConvexFlowBlock_min(source1_electricityBus_2)_: +-1 flow(source1_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_min(source3_electricityBus_0_0)_: --1 flow(source3_electricityBus_0_0) +c_u_NonConvexFlowBlock_min(source2_electricityBus_0)_: +-1 flow(source2_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_min(source3_electricityBus_0_1)_: --1 flow(source3_electricityBus_0_1) +c_u_NonConvexFlowBlock_min(source2_electricityBus_1)_: +-1 flow(source2_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_min(source3_electricityBus_0_2)_: --1 flow(source3_electricityBus_0_2) +c_u_NonConvexFlowBlock_min(source2_electricityBus_2)_: +-1 flow(source2_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_min(source2_electricityBus_0_0)_: --1 flow(source2_electricityBus_0_0) +c_u_NonConvexFlowBlock_min(source3_electricityBus_0)_: +-1 flow(source3_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_min(source2_electricityBus_0_1)_: --1 flow(source2_electricityBus_0_1) +c_u_NonConvexFlowBlock_min(source3_electricityBus_1)_: +-1 flow(source3_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_min(source2_electricityBus_0_2)_: --1 flow(source2_electricityBus_0_2) +c_u_NonConvexFlowBlock_min(source3_electricityBus_2)_: +-1 flow(source3_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_max(source1_electricityBus_0_0)_: -+1 flow(source1_electricityBus_0_0) +c_u_NonConvexFlowBlock_max(source1_electricityBus_0)_: ++1 flow(source1_electricityBus_0) -1 NonConvexFlowBlock_status_nominal(source1_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_max(source1_electricityBus_0_1)_: -+1 flow(source1_electricityBus_0_1) +c_u_NonConvexFlowBlock_max(source1_electricityBus_1)_: ++1 flow(source1_electricityBus_1) -1 NonConvexFlowBlock_status_nominal(source1_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_max(source1_electricityBus_0_2)_: -+1 flow(source1_electricityBus_0_2) +c_u_NonConvexFlowBlock_max(source1_electricityBus_2)_: ++1 flow(source1_electricityBus_2) -1 NonConvexFlowBlock_status_nominal(source1_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_max(source3_electricityBus_0_0)_: -+1 flow(source3_electricityBus_0_0) --1 NonConvexFlowBlock_status_nominal(source3_electricityBus_0) +c_u_NonConvexFlowBlock_max(source2_electricityBus_0)_: ++1 flow(source2_electricityBus_0) +-1 NonConvexFlowBlock_status_nominal(source2_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_max(source3_electricityBus_0_1)_: -+1 flow(source3_electricityBus_0_1) --1 NonConvexFlowBlock_status_nominal(source3_electricityBus_1) +c_u_NonConvexFlowBlock_max(source2_electricityBus_1)_: ++1 flow(source2_electricityBus_1) +-1 NonConvexFlowBlock_status_nominal(source2_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_max(source3_electricityBus_0_2)_: -+1 flow(source3_electricityBus_0_2) --1 NonConvexFlowBlock_status_nominal(source3_electricityBus_2) +c_u_NonConvexFlowBlock_max(source2_electricityBus_2)_: ++1 flow(source2_electricityBus_2) +-1 NonConvexFlowBlock_status_nominal(source2_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_max(source2_electricityBus_0_0)_: -+1 flow(source2_electricityBus_0_0) --1 NonConvexFlowBlock_status_nominal(source2_electricityBus_0) +c_u_NonConvexFlowBlock_max(source3_electricityBus_0)_: ++1 flow(source3_electricityBus_0) +-1 NonConvexFlowBlock_status_nominal(source3_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_max(source2_electricityBus_0_1)_: -+1 flow(source2_electricityBus_0_1) --1 NonConvexFlowBlock_status_nominal(source2_electricityBus_1) +c_u_NonConvexFlowBlock_max(source3_electricityBus_1)_: ++1 flow(source3_electricityBus_1) +-1 NonConvexFlowBlock_status_nominal(source3_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_max(source2_electricityBus_0_2)_: -+1 flow(source2_electricityBus_0_2) --1 NonConvexFlowBlock_status_nominal(source2_electricityBus_2) +c_u_NonConvexFlowBlock_max(source3_electricityBus_2)_: ++1 flow(source3_electricityBus_2) +-1 NonConvexFlowBlock_status_nominal(source3_electricityBus_2) <= 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 0 <= NonConvexFlowBlock_status(source1_electricityBus_0) <= 1 - 0 <= NonConvexFlowBlock_status(source2_electricityBus_0) <= 1 - 1 <= emission_factor(0) <= 2 0 <= NonConvexFlowBlock_status(source1_electricityBus_1) <= 1 - 0 <= NonConvexFlowBlock_status(source2_electricityBus_1) <= 1 - 1 <= emission_factor(1) <= 2 0 <= NonConvexFlowBlock_status(source1_electricityBus_2) <= 1 + 0 <= NonConvexFlowBlock_status(source2_electricityBus_0) <= 1 + 0 <= NonConvexFlowBlock_status(source2_electricityBus_1) <= 1 0 <= NonConvexFlowBlock_status(source2_electricityBus_2) <= 1 + 0 <= NonConvexFlowBlock_status(source3_electricityBus_0) <= 1 + 0 <= NonConvexFlowBlock_status(source3_electricityBus_1) <= 1 + 0 <= NonConvexFlowBlock_status(source3_electricityBus_2) <= 1 + 1 <= emission_factor(0) <= 2 + 1 <= emission_factor(1) <= 2 1 <= emission_factor(2) <= 2 - 30.0 <= flow(source4_electricityBus_0_0) <= 100 - 0 <= flow(source2_electricityBus_0_0) <= 100 - 0 <= flow(source1_electricityBus_0_0) <= 100 - 0 <= flow(source3_electricityBus_0_0) <= 100 - 30.0 <= flow(source4_electricityBus_0_1) <= 100 - 0 <= flow(source2_electricityBus_0_1) <= 100 - 0 <= flow(source1_electricityBus_0_1) <= 100 - 0 <= flow(source3_electricityBus_0_1) <= 100 - 30.0 <= flow(source4_electricityBus_0_2) <= 100 - 0 <= flow(source2_electricityBus_0_2) <= 100 - 0 <= flow(source1_electricityBus_0_2) <= 100 - 0 <= flow(source3_electricityBus_0_2) <= 100 + 0 <= flow(source1_electricityBus_0) <= 100 + 0 <= flow(source1_electricityBus_1) <= 100 + 0 <= flow(source1_electricityBus_2) <= 100 + 0 <= flow(source2_electricityBus_0) <= 100 + 0 <= flow(source2_electricityBus_1) <= 100 + 0 <= flow(source2_electricityBus_2) <= 100 + 0 <= flow(source3_electricityBus_0) <= 100 + 0 <= flow(source3_electricityBus_1) <= 100 + 0 <= flow(source3_electricityBus_2) <= 100 + 30.0 <= flow(source4_electricityBus_0) <= 100 + 30.0 <= flow(source4_electricityBus_1) <= 100 + 30.0 <= flow(source4_electricityBus_2) <= 100 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_0) <= +inf 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_1) <= +inf 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_2) <= +inf - 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_0) <= +inf - 0 <= NonConvexFlowBlock_status(source3_electricityBus_0) <= 1 - 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_1) <= +inf - 0 <= NonConvexFlowBlock_status(source3_electricityBus_1) <= 1 - 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_2) <= +inf - 0 <= NonConvexFlowBlock_status(source3_electricityBus_2) <= 1 0 <= NonConvexFlowBlock_status_nominal(source2_electricityBus_0) <= +inf 0 <= NonConvexFlowBlock_status_nominal(source2_electricityBus_1) <= +inf 0 <= NonConvexFlowBlock_status_nominal(source2_electricityBus_2) <= +inf + 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_0) <= +inf + 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_1) <= +inf + 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_2) <= +inf binary NonConvexFlowBlock_status(source1_electricityBus_0) - NonConvexFlowBlock_status(source2_electricityBus_0) NonConvexFlowBlock_status(source1_electricityBus_1) - NonConvexFlowBlock_status(source2_electricityBus_1) NonConvexFlowBlock_status(source1_electricityBus_2) + NonConvexFlowBlock_status(source2_electricityBus_0) + NonConvexFlowBlock_status(source2_electricityBus_1) NonConvexFlowBlock_status(source2_electricityBus_2) NonConvexFlowBlock_status(source3_electricityBus_0) NonConvexFlowBlock_status(source3_electricityBus_1) diff --git a/tests/lp_files/flow_count_limit_multi_period.lp b/tests/lp_files/flow_count_limit_multi_period.lp index 3532a0b18..27e0d980b 100644 --- a/tests/lp_files/flow_count_limit_multi_period.lp +++ b/tests/lp_files/flow_count_limit_multi_period.lp @@ -7,99 +7,69 @@ objective: s.t. c_e_emission_factor_constraint(0)_: -+1 NonConvexFlowBlock_status(source1_electricityBus_0) +1 NonConvexFlowBlock_status(source2_electricityBus_0) ++1 NonConvexFlowBlock_status(source1_electricityBus_0) -1 emission_factor(0) = 0 c_e_emission_factor_constraint(1)_: -+1 NonConvexFlowBlock_status(source1_electricityBus_1) +1 NonConvexFlowBlock_status(source2_electricityBus_1) ++1 NonConvexFlowBlock_status(source1_electricityBus_1) -1 emission_factor(1) = 0 c_e_emission_factor_constraint(2)_: -+1 NonConvexFlowBlock_status(source1_electricityBus_2) +1 NonConvexFlowBlock_status(source2_electricityBus_2) ++1 NonConvexFlowBlock_status(source1_electricityBus_2) -1 emission_factor(2) = 0 c_e_emission_factor_constraint(3)_: -+1 NonConvexFlowBlock_status(source1_electricityBus_3) +1 NonConvexFlowBlock_status(source2_electricityBus_3) ++1 NonConvexFlowBlock_status(source1_electricityBus_3) -1 emission_factor(3) = 0 c_e_emission_factor_constraint(4)_: -+1 NonConvexFlowBlock_status(source1_electricityBus_4) +1 NonConvexFlowBlock_status(source2_electricityBus_4) ++1 NonConvexFlowBlock_status(source1_electricityBus_4) -1 emission_factor(4) = 0 c_e_emission_factor_constraint(5)_: -+1 NonConvexFlowBlock_status(source1_electricityBus_5) +1 NonConvexFlowBlock_status(source2_electricityBus_5) ++1 NonConvexFlowBlock_status(source1_electricityBus_5) -1 emission_factor(5) = 0 -c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_0)_: --100 NonConvexFlowBlock_status(source1_electricityBus_0) -+1 NonConvexFlowBlock_status_nominal(source1_electricityBus_0) -= 0 - -c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_1)_: --100 NonConvexFlowBlock_status(source1_electricityBus_1) -+1 NonConvexFlowBlock_status_nominal(source1_electricityBus_1) -= 0 - -c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_2)_: --100 NonConvexFlowBlock_status(source1_electricityBus_2) -+1 NonConvexFlowBlock_status_nominal(source1_electricityBus_2) -= 0 - -c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_3)_: --100 NonConvexFlowBlock_status(source1_electricityBus_3) -+1 NonConvexFlowBlock_status_nominal(source1_electricityBus_3) -= 0 - -c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_4)_: --100 NonConvexFlowBlock_status(source1_electricityBus_4) -+1 NonConvexFlowBlock_status_nominal(source1_electricityBus_4) -= 0 - -c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_5)_: --100 NonConvexFlowBlock_status(source1_electricityBus_5) -+1 NonConvexFlowBlock_status_nominal(source1_electricityBus_5) -= 0 - c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_0)_: -+1 NonConvexFlowBlock_status_nominal(source3_electricityBus_0) -100 NonConvexFlowBlock_status(source3_electricityBus_0) ++1 NonConvexFlowBlock_status_nominal(source3_electricityBus_0) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_1)_: -+1 NonConvexFlowBlock_status_nominal(source3_electricityBus_1) -100 NonConvexFlowBlock_status(source3_electricityBus_1) ++1 NonConvexFlowBlock_status_nominal(source3_electricityBus_1) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_2)_: -+1 NonConvexFlowBlock_status_nominal(source3_electricityBus_2) -100 NonConvexFlowBlock_status(source3_electricityBus_2) ++1 NonConvexFlowBlock_status_nominal(source3_electricityBus_2) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_3)_: -+1 NonConvexFlowBlock_status_nominal(source3_electricityBus_3) -100 NonConvexFlowBlock_status(source3_electricityBus_3) ++1 NonConvexFlowBlock_status_nominal(source3_electricityBus_3) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_4)_: -+1 NonConvexFlowBlock_status_nominal(source3_electricityBus_4) -100 NonConvexFlowBlock_status(source3_electricityBus_4) ++1 NonConvexFlowBlock_status_nominal(source3_electricityBus_4) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(source3_electricityBus_5)_: -+1 NonConvexFlowBlock_status_nominal(source3_electricityBus_5) -100 NonConvexFlowBlock_status(source3_electricityBus_5) ++1 NonConvexFlowBlock_status_nominal(source3_electricityBus_5) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(source2_electricityBus_0)_: @@ -132,247 +102,277 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(source2_electricityBus_5)_: +1 NonConvexFlowBlock_status_nominal(source2_electricityBus_5) = 0 -c_u_NonConvexFlowBlock_min(source1_electricityBus_0_0)_: --1 flow(source1_electricityBus_0_0) -<= 0 +c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_0)_: +-100 NonConvexFlowBlock_status(source1_electricityBus_0) ++1 NonConvexFlowBlock_status_nominal(source1_electricityBus_0) += 0 -c_u_NonConvexFlowBlock_min(source1_electricityBus_0_1)_: --1 flow(source1_electricityBus_0_1) -<= 0 +c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_1)_: +-100 NonConvexFlowBlock_status(source1_electricityBus_1) ++1 NonConvexFlowBlock_status_nominal(source1_electricityBus_1) += 0 -c_u_NonConvexFlowBlock_min(source1_electricityBus_1_2)_: --1 flow(source1_electricityBus_1_2) -<= 0 +c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_2)_: +-100 NonConvexFlowBlock_status(source1_electricityBus_2) ++1 NonConvexFlowBlock_status_nominal(source1_electricityBus_2) += 0 -c_u_NonConvexFlowBlock_min(source1_electricityBus_1_3)_: --1 flow(source1_electricityBus_1_3) -<= 0 +c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_3)_: +-100 NonConvexFlowBlock_status(source1_electricityBus_3) ++1 NonConvexFlowBlock_status_nominal(source1_electricityBus_3) += 0 -c_u_NonConvexFlowBlock_min(source1_electricityBus_2_4)_: --1 flow(source1_electricityBus_2_4) -<= 0 +c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_4)_: +-100 NonConvexFlowBlock_status(source1_electricityBus_4) ++1 NonConvexFlowBlock_status_nominal(source1_electricityBus_4) += 0 -c_u_NonConvexFlowBlock_min(source1_electricityBus_2_5)_: --1 flow(source1_electricityBus_2_5) -<= 0 +c_e_NonConvexFlowBlock_status_nominal_constraint(source1_electricityBus_5)_: +-100 NonConvexFlowBlock_status(source1_electricityBus_5) ++1 NonConvexFlowBlock_status_nominal(source1_electricityBus_5) += 0 -c_u_NonConvexFlowBlock_min(source3_electricityBus_0_0)_: --1 flow(source3_electricityBus_0_0) +c_u_NonConvexFlowBlock_min(source3_electricityBus_0)_: +-1 flow(source3_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_min(source3_electricityBus_0_1)_: --1 flow(source3_electricityBus_0_1) +c_u_NonConvexFlowBlock_min(source3_electricityBus_1)_: +-1 flow(source3_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_min(source3_electricityBus_1_2)_: --1 flow(source3_electricityBus_1_2) +c_u_NonConvexFlowBlock_min(source3_electricityBus_2)_: +-1 flow(source3_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_min(source3_electricityBus_1_3)_: --1 flow(source3_electricityBus_1_3) +c_u_NonConvexFlowBlock_min(source3_electricityBus_3)_: +-1 flow(source3_electricityBus_3) <= 0 -c_u_NonConvexFlowBlock_min(source3_electricityBus_2_4)_: --1 flow(source3_electricityBus_2_4) +c_u_NonConvexFlowBlock_min(source3_electricityBus_4)_: +-1 flow(source3_electricityBus_4) <= 0 -c_u_NonConvexFlowBlock_min(source3_electricityBus_2_5)_: --1 flow(source3_electricityBus_2_5) +c_u_NonConvexFlowBlock_min(source3_electricityBus_5)_: +-1 flow(source3_electricityBus_5) <= 0 -c_u_NonConvexFlowBlock_min(source2_electricityBus_0_0)_: --1 flow(source2_electricityBus_0_0) +c_u_NonConvexFlowBlock_min(source2_electricityBus_0)_: +-1 flow(source2_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_min(source2_electricityBus_0_1)_: --1 flow(source2_electricityBus_0_1) +c_u_NonConvexFlowBlock_min(source2_electricityBus_1)_: +-1 flow(source2_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_min(source2_electricityBus_1_2)_: --1 flow(source2_electricityBus_1_2) +c_u_NonConvexFlowBlock_min(source2_electricityBus_2)_: +-1 flow(source2_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_min(source2_electricityBus_1_3)_: --1 flow(source2_electricityBus_1_3) +c_u_NonConvexFlowBlock_min(source2_electricityBus_3)_: +-1 flow(source2_electricityBus_3) <= 0 -c_u_NonConvexFlowBlock_min(source2_electricityBus_2_4)_: --1 flow(source2_electricityBus_2_4) +c_u_NonConvexFlowBlock_min(source2_electricityBus_4)_: +-1 flow(source2_electricityBus_4) <= 0 -c_u_NonConvexFlowBlock_min(source2_electricityBus_2_5)_: --1 flow(source2_electricityBus_2_5) +c_u_NonConvexFlowBlock_min(source2_electricityBus_5)_: +-1 flow(source2_electricityBus_5) <= 0 -c_u_NonConvexFlowBlock_max(source1_electricityBus_0_0)_: --1 NonConvexFlowBlock_status_nominal(source1_electricityBus_0) -+1 flow(source1_electricityBus_0_0) +c_u_NonConvexFlowBlock_min(source1_electricityBus_0)_: +-1 flow(source1_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_max(source1_electricityBus_0_1)_: --1 NonConvexFlowBlock_status_nominal(source1_electricityBus_1) -+1 flow(source1_electricityBus_0_1) +c_u_NonConvexFlowBlock_min(source1_electricityBus_1)_: +-1 flow(source1_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_max(source1_electricityBus_1_2)_: --1 NonConvexFlowBlock_status_nominal(source1_electricityBus_2) -+1 flow(source1_electricityBus_1_2) +c_u_NonConvexFlowBlock_min(source1_electricityBus_2)_: +-1 flow(source1_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_max(source1_electricityBus_1_3)_: --1 NonConvexFlowBlock_status_nominal(source1_electricityBus_3) -+1 flow(source1_electricityBus_1_3) +c_u_NonConvexFlowBlock_min(source1_electricityBus_3)_: +-1 flow(source1_electricityBus_3) <= 0 -c_u_NonConvexFlowBlock_max(source1_electricityBus_2_4)_: --1 NonConvexFlowBlock_status_nominal(source1_electricityBus_4) -+1 flow(source1_electricityBus_2_4) +c_u_NonConvexFlowBlock_min(source1_electricityBus_4)_: +-1 flow(source1_electricityBus_4) <= 0 -c_u_NonConvexFlowBlock_max(source1_electricityBus_2_5)_: --1 NonConvexFlowBlock_status_nominal(source1_electricityBus_5) -+1 flow(source1_electricityBus_2_5) +c_u_NonConvexFlowBlock_min(source1_electricityBus_5)_: +-1 flow(source1_electricityBus_5) <= 0 -c_u_NonConvexFlowBlock_max(source3_electricityBus_0_0)_: +c_u_NonConvexFlowBlock_max(source3_electricityBus_0)_: -1 NonConvexFlowBlock_status_nominal(source3_electricityBus_0) -+1 flow(source3_electricityBus_0_0) ++1 flow(source3_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_max(source3_electricityBus_0_1)_: +c_u_NonConvexFlowBlock_max(source3_electricityBus_1)_: -1 NonConvexFlowBlock_status_nominal(source3_electricityBus_1) -+1 flow(source3_electricityBus_0_1) ++1 flow(source3_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_max(source3_electricityBus_1_2)_: +c_u_NonConvexFlowBlock_max(source3_electricityBus_2)_: -1 NonConvexFlowBlock_status_nominal(source3_electricityBus_2) -+1 flow(source3_electricityBus_1_2) ++1 flow(source3_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_max(source3_electricityBus_1_3)_: +c_u_NonConvexFlowBlock_max(source3_electricityBus_3)_: -1 NonConvexFlowBlock_status_nominal(source3_electricityBus_3) -+1 flow(source3_electricityBus_1_3) ++1 flow(source3_electricityBus_3) <= 0 -c_u_NonConvexFlowBlock_max(source3_electricityBus_2_4)_: +c_u_NonConvexFlowBlock_max(source3_electricityBus_4)_: -1 NonConvexFlowBlock_status_nominal(source3_electricityBus_4) -+1 flow(source3_electricityBus_2_4) ++1 flow(source3_electricityBus_4) <= 0 -c_u_NonConvexFlowBlock_max(source3_electricityBus_2_5)_: +c_u_NonConvexFlowBlock_max(source3_electricityBus_5)_: -1 NonConvexFlowBlock_status_nominal(source3_electricityBus_5) -+1 flow(source3_electricityBus_2_5) ++1 flow(source3_electricityBus_5) <= 0 -c_u_NonConvexFlowBlock_max(source2_electricityBus_0_0)_: +c_u_NonConvexFlowBlock_max(source2_electricityBus_0)_: -1 NonConvexFlowBlock_status_nominal(source2_electricityBus_0) -+1 flow(source2_electricityBus_0_0) ++1 flow(source2_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_max(source2_electricityBus_0_1)_: +c_u_NonConvexFlowBlock_max(source2_electricityBus_1)_: -1 NonConvexFlowBlock_status_nominal(source2_electricityBus_1) -+1 flow(source2_electricityBus_0_1) ++1 flow(source2_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_max(source2_electricityBus_1_2)_: +c_u_NonConvexFlowBlock_max(source2_electricityBus_2)_: -1 NonConvexFlowBlock_status_nominal(source2_electricityBus_2) -+1 flow(source2_electricityBus_1_2) ++1 flow(source2_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_max(source2_electricityBus_1_3)_: +c_u_NonConvexFlowBlock_max(source2_electricityBus_3)_: -1 NonConvexFlowBlock_status_nominal(source2_electricityBus_3) -+1 flow(source2_electricityBus_1_3) ++1 flow(source2_electricityBus_3) <= 0 -c_u_NonConvexFlowBlock_max(source2_electricityBus_2_4)_: +c_u_NonConvexFlowBlock_max(source2_electricityBus_4)_: -1 NonConvexFlowBlock_status_nominal(source2_electricityBus_4) -+1 flow(source2_electricityBus_2_4) ++1 flow(source2_electricityBus_4) <= 0 -c_u_NonConvexFlowBlock_max(source2_electricityBus_2_5)_: +c_u_NonConvexFlowBlock_max(source2_electricityBus_5)_: -1 NonConvexFlowBlock_status_nominal(source2_electricityBus_5) -+1 flow(source2_electricityBus_2_5) ++1 flow(source2_electricityBus_5) +<= 0 + +c_u_NonConvexFlowBlock_max(source1_electricityBus_0)_: +-1 NonConvexFlowBlock_status_nominal(source1_electricityBus_0) ++1 flow(source1_electricityBus_0) +<= 0 + +c_u_NonConvexFlowBlock_max(source1_electricityBus_1)_: +-1 NonConvexFlowBlock_status_nominal(source1_electricityBus_1) ++1 flow(source1_electricityBus_1) +<= 0 + +c_u_NonConvexFlowBlock_max(source1_electricityBus_2)_: +-1 NonConvexFlowBlock_status_nominal(source1_electricityBus_2) ++1 flow(source1_electricityBus_2) +<= 0 + +c_u_NonConvexFlowBlock_max(source1_electricityBus_3)_: +-1 NonConvexFlowBlock_status_nominal(source1_electricityBus_3) ++1 flow(source1_electricityBus_3) +<= 0 + +c_u_NonConvexFlowBlock_max(source1_electricityBus_4)_: +-1 NonConvexFlowBlock_status_nominal(source1_electricityBus_4) ++1 flow(source1_electricityBus_4) +<= 0 + +c_u_NonConvexFlowBlock_max(source1_electricityBus_5)_: +-1 NonConvexFlowBlock_status_nominal(source1_electricityBus_5) ++1 flow(source1_electricityBus_5) <= 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= NonConvexFlowBlock_status(source1_electricityBus_0) <= 1 + 0 <= NonConvexFlowBlock_status(source3_electricityBus_0) <= 1 + 0 <= NonConvexFlowBlock_status(source3_electricityBus_1) <= 1 + 0 <= NonConvexFlowBlock_status(source3_electricityBus_2) <= 1 + 0 <= NonConvexFlowBlock_status(source3_electricityBus_3) <= 1 + 0 <= NonConvexFlowBlock_status(source3_electricityBus_4) <= 1 + 0 <= NonConvexFlowBlock_status(source3_electricityBus_5) <= 1 0 <= NonConvexFlowBlock_status(source2_electricityBus_0) <= 1 - 1 <= emission_factor(0) <= 2 - 0 <= NonConvexFlowBlock_status(source1_electricityBus_1) <= 1 0 <= NonConvexFlowBlock_status(source2_electricityBus_1) <= 1 - 1 <= emission_factor(1) <= 2 - 0 <= NonConvexFlowBlock_status(source1_electricityBus_2) <= 1 0 <= NonConvexFlowBlock_status(source2_electricityBus_2) <= 1 - 1 <= emission_factor(2) <= 2 - 0 <= NonConvexFlowBlock_status(source1_electricityBus_3) <= 1 0 <= NonConvexFlowBlock_status(source2_electricityBus_3) <= 1 - 1 <= emission_factor(3) <= 2 - 0 <= NonConvexFlowBlock_status(source1_electricityBus_4) <= 1 0 <= NonConvexFlowBlock_status(source2_electricityBus_4) <= 1 - 1 <= emission_factor(4) <= 2 - 0 <= NonConvexFlowBlock_status(source1_electricityBus_5) <= 1 0 <= NonConvexFlowBlock_status(source2_electricityBus_5) <= 1 + 0 <= NonConvexFlowBlock_status(source1_electricityBus_0) <= 1 + 0 <= NonConvexFlowBlock_status(source1_electricityBus_1) <= 1 + 0 <= NonConvexFlowBlock_status(source1_electricityBus_2) <= 1 + 0 <= NonConvexFlowBlock_status(source1_electricityBus_3) <= 1 + 0 <= NonConvexFlowBlock_status(source1_electricityBus_4) <= 1 + 0 <= NonConvexFlowBlock_status(source1_electricityBus_5) <= 1 + 1 <= emission_factor(0) <= 2 + 1 <= emission_factor(1) <= 2 + 1 <= emission_factor(2) <= 2 + 1 <= emission_factor(3) <= 2 + 1 <= emission_factor(4) <= 2 1 <= emission_factor(5) <= 2 - 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_0) <= +inf - 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_1) <= +inf - 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_2) <= +inf - 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_3) <= +inf - 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_4) <= +inf - 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_5) <= +inf 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_0) <= +inf - 0 <= NonConvexFlowBlock_status(source3_electricityBus_0) <= 1 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_1) <= +inf - 0 <= NonConvexFlowBlock_status(source3_electricityBus_1) <= 1 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_2) <= +inf - 0 <= NonConvexFlowBlock_status(source3_electricityBus_2) <= 1 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_3) <= +inf - 0 <= NonConvexFlowBlock_status(source3_electricityBus_3) <= 1 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_4) <= +inf - 0 <= NonConvexFlowBlock_status(source3_electricityBus_4) <= 1 0 <= NonConvexFlowBlock_status_nominal(source3_electricityBus_5) <= +inf - 0 <= NonConvexFlowBlock_status(source3_electricityBus_5) <= 1 0 <= NonConvexFlowBlock_status_nominal(source2_electricityBus_0) <= +inf 0 <= NonConvexFlowBlock_status_nominal(source2_electricityBus_1) <= +inf 0 <= NonConvexFlowBlock_status_nominal(source2_electricityBus_2) <= +inf 0 <= NonConvexFlowBlock_status_nominal(source2_electricityBus_3) <= +inf 0 <= NonConvexFlowBlock_status_nominal(source2_electricityBus_4) <= +inf 0 <= NonConvexFlowBlock_status_nominal(source2_electricityBus_5) <= +inf - 0 <= flow(source1_electricityBus_0_0) <= 100 - 0 <= flow(source1_electricityBus_0_1) <= 100 - 0 <= flow(source1_electricityBus_1_2) <= 100 - 0 <= flow(source1_electricityBus_1_3) <= 100 - 0 <= flow(source1_electricityBus_2_4) <= 100 - 0 <= flow(source1_electricityBus_2_5) <= 100 - 0 <= flow(source3_electricityBus_0_0) <= 100 - 0 <= flow(source3_electricityBus_0_1) <= 100 - 0 <= flow(source3_electricityBus_1_2) <= 100 - 0 <= flow(source3_electricityBus_1_3) <= 100 - 0 <= flow(source3_electricityBus_2_4) <= 100 - 0 <= flow(source3_electricityBus_2_5) <= 100 - 0 <= flow(source2_electricityBus_0_0) <= 100 - 0 <= flow(source2_electricityBus_0_1) <= 100 - 0 <= flow(source2_electricityBus_1_2) <= 100 - 0 <= flow(source2_electricityBus_1_3) <= 100 - 0 <= flow(source2_electricityBus_2_4) <= 100 - 0 <= flow(source2_electricityBus_2_5) <= 100 + 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_0) <= +inf + 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_1) <= +inf + 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_2) <= +inf + 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_3) <= +inf + 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_4) <= +inf + 0 <= NonConvexFlowBlock_status_nominal(source1_electricityBus_5) <= +inf + 0 <= flow(source1_electricityBus_0) <= 100 + 0 <= flow(source1_electricityBus_1) <= 100 + 0 <= flow(source1_electricityBus_2) <= 100 + 0 <= flow(source1_electricityBus_3) <= 100 + 0 <= flow(source1_electricityBus_4) <= 100 + 0 <= flow(source1_electricityBus_5) <= 100 + 0 <= flow(source2_electricityBus_0) <= 100 + 0 <= flow(source2_electricityBus_1) <= 100 + 0 <= flow(source2_electricityBus_2) <= 100 + 0 <= flow(source2_electricityBus_3) <= 100 + 0 <= flow(source2_electricityBus_4) <= 100 + 0 <= flow(source2_electricityBus_5) <= 100 + 0 <= flow(source3_electricityBus_0) <= 100 + 0 <= flow(source3_electricityBus_1) <= 100 + 0 <= flow(source3_electricityBus_2) <= 100 + 0 <= flow(source3_electricityBus_3) <= 100 + 0 <= flow(source3_electricityBus_4) <= 100 + 0 <= flow(source3_electricityBus_5) <= 100 binary - NonConvexFlowBlock_status(source1_electricityBus_0) - NonConvexFlowBlock_status(source2_electricityBus_0) - NonConvexFlowBlock_status(source1_electricityBus_1) - NonConvexFlowBlock_status(source2_electricityBus_1) - NonConvexFlowBlock_status(source1_electricityBus_2) - NonConvexFlowBlock_status(source2_electricityBus_2) - NonConvexFlowBlock_status(source1_electricityBus_3) - NonConvexFlowBlock_status(source2_electricityBus_3) - NonConvexFlowBlock_status(source1_electricityBus_4) - NonConvexFlowBlock_status(source2_electricityBus_4) - NonConvexFlowBlock_status(source1_electricityBus_5) - NonConvexFlowBlock_status(source2_electricityBus_5) NonConvexFlowBlock_status(source3_electricityBus_0) NonConvexFlowBlock_status(source3_electricityBus_1) NonConvexFlowBlock_status(source3_electricityBus_2) NonConvexFlowBlock_status(source3_electricityBus_3) NonConvexFlowBlock_status(source3_electricityBus_4) NonConvexFlowBlock_status(source3_electricityBus_5) + NonConvexFlowBlock_status(source2_electricityBus_0) + NonConvexFlowBlock_status(source2_electricityBus_1) + NonConvexFlowBlock_status(source2_electricityBus_2) + NonConvexFlowBlock_status(source2_electricityBus_3) + NonConvexFlowBlock_status(source2_electricityBus_4) + NonConvexFlowBlock_status(source2_electricityBus_5) + NonConvexFlowBlock_status(source1_electricityBus_0) + NonConvexFlowBlock_status(source1_electricityBus_1) + NonConvexFlowBlock_status(source1_electricityBus_2) + NonConvexFlowBlock_status(source1_electricityBus_3) + NonConvexFlowBlock_status(source1_electricityBus_4) + NonConvexFlowBlock_status(source1_electricityBus_5) end diff --git a/tests/lp_files/flow_invest_with_offset.lp b/tests/lp_files/flow_invest_with_offset.lp index 168b31a8a..78a06691f 100644 --- a/tests/lp_files/flow_invest_with_offset.lp +++ b/tests/lp_files/flow_invest_with_offset.lp @@ -4,22 +4,22 @@ min objective: +500 InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_0) +34 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) -+25 flow(source_nonconvex_invest_electricityBus_0_0) -+25 flow(source_nonconvex_invest_electricityBus_0_1) -+25 flow(source_nonconvex_invest_electricityBus_0_2) ++25 flow(source_nonconvex_invest_electricityBus_0) ++25 flow(source_nonconvex_invest_electricityBus_1) ++25 flow(source_nonconvex_invest_electricityBus_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(source_nonconvex_invest_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(source_nonconvex_invest_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(source_nonconvex_invest_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(source_nonconvex_invest_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(source_nonconvex_invest_electricityBus_2) = 0 c_u_InvestmentFlowBlock_minimum_rule(source_nonconvex_invest_electricityBus_0)_: @@ -38,33 +38,33 @@ c_e_InvestmentFlowBlock_total_rule(source_nonconvex_invest_electricityBus_0)_: = 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_0)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) ++1 flow(source_nonconvex_invest_electricityBus_0) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_1)_: -+1 flow(source_nonconvex_invest_electricityBus_0_1) ++1 flow(source_nonconvex_invest_electricityBus_1) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_2)_: -+1 flow(source_nonconvex_invest_electricityBus_0_2) ++1 flow(source_nonconvex_invest_electricityBus_2) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_full_load_time_max(source_nonconvex_invest_electricityBus)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) -+1 flow(source_nonconvex_invest_electricityBus_0_1) -+1 flow(source_nonconvex_invest_electricityBus_0_2) ++1 flow(source_nonconvex_invest_electricityBus_0) ++1 flow(source_nonconvex_invest_electricityBus_1) ++1 flow(source_nonconvex_invest_electricityBus_2) -2.3 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 bounds 0 <= InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_0) <= 20 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) <= 1 - 0 <= flow(source_nonconvex_invest_electricityBus_0_0) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_0_1) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_0_2) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_0) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_1) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= +inf binary InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) diff --git a/tests/lp_files/flow_invest_with_offset_multi_period.lp b/tests/lp_files/flow_invest_with_offset_multi_period.lp index 5e4510206..fafc4b0e0 100644 --- a/tests/lp_files/flow_invest_with_offset_multi_period.lp +++ b/tests/lp_files/flow_invest_with_offset_multi_period.lp @@ -3,42 +3,42 @@ min objective: +88.1844182057801 InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_0) -+34 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) +58.20563481102971 InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_1) -+33.33333333333333 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) +28.814670698529593 InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_2) ++34 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) ++33.33333333333333 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) +32.6797385620915 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_2) -+25 flow(source_nonconvex_invest_electricityBus_0_0) -+25 flow(source_nonconvex_invest_electricityBus_0_1) -+24.509803921568626 flow(source_nonconvex_invest_electricityBus_1_2) -+24.509803921568626 flow(source_nonconvex_invest_electricityBus_1_3) -+24.029219530949632 flow(source_nonconvex_invest_electricityBus_2_4) -+24.029219530949632 flow(source_nonconvex_invest_electricityBus_2_5) ++25 flow(source_nonconvex_invest_electricityBus_0) ++25 flow(source_nonconvex_invest_electricityBus_1) ++24.509803921568626 flow(source_nonconvex_invest_electricityBus_2) ++24.509803921568626 flow(source_nonconvex_invest_electricityBus_3) ++24.029219530949632 flow(source_nonconvex_invest_electricityBus_4) ++24.029219530949632 flow(source_nonconvex_invest_electricityBus_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(source_nonconvex_invest_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(source_nonconvex_invest_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(source_nonconvex_invest_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(source_nonconvex_invest_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(source_nonconvex_invest_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(source_nonconvex_invest_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(source_nonconvex_invest_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(source_nonconvex_invest_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(source_nonconvex_invest_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(source_nonconvex_invest_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(source_nonconvex_invest_electricityBus_5) = 0 c_u_InvestmentFlowBlock_minimum_rule(source_nonconvex_invest_electricityBus_0)_: @@ -115,9 +115,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(source_nonconvex_invest_electricityBus_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(source_nonconvex_invest_electricityBus_0)_: ++1 InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) -1 InvestmentFlowBlock_old_end(source_nonconvex_invest_electricityBus_0) -1 InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_0) -+1 InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) = 0 c_e_InvestmentFlowBlock_old_rule(source_nonconvex_invest_electricityBus_1)_: @@ -133,64 +133,65 @@ c_e_InvestmentFlowBlock_old_rule(source_nonconvex_invest_electricityBus_2)_: = 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_0)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) ++1 flow(source_nonconvex_invest_electricityBus_0) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_1)_: -+1 flow(source_nonconvex_invest_electricityBus_0_1) ++1 flow(source_nonconvex_invest_electricityBus_1) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_1_2)_: -+1 flow(source_nonconvex_invest_electricityBus_1_2) ++1 flow(source_nonconvex_invest_electricityBus_2) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_1_3)_: -+1 flow(source_nonconvex_invest_electricityBus_1_3) ++1 flow(source_nonconvex_invest_electricityBus_3) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_2_4)_: -+1 flow(source_nonconvex_invest_electricityBus_2_4) ++1 flow(source_nonconvex_invest_electricityBus_4) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_2_5)_: -+1 flow(source_nonconvex_invest_electricityBus_2_5) ++1 flow(source_nonconvex_invest_electricityBus_5) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_full_load_time_max(source_nonconvex_invest_electricityBus)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) -+1 flow(source_nonconvex_invest_electricityBus_0_1) -+1 flow(source_nonconvex_invest_electricityBus_1_2) -+1 flow(source_nonconvex_invest_electricityBus_1_3) -+1 flow(source_nonconvex_invest_electricityBus_2_4) -+1 flow(source_nonconvex_invest_electricityBus_2_5) ++1 flow(source_nonconvex_invest_electricityBus_0) ++1 flow(source_nonconvex_invest_electricityBus_1) ++1 flow(source_nonconvex_invest_electricityBus_2) ++1 flow(source_nonconvex_invest_electricityBus_3) ++1 flow(source_nonconvex_invest_electricityBus_4) ++1 flow(source_nonconvex_invest_electricityBus_5) -2.3 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) -2.3 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) -2.3 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) -<= 0.0 +<= 0 bounds 0 <= InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_0) <= 20 - 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) <= 1 0 <= InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_1) <= 20 - 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) <= 1 0 <= InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_2) <= 20 + 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) <= 1 + 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) <= 1 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_2) <= 1 - 0 <= flow(source_nonconvex_invest_electricityBus_0_0) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_0_1) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_1_2) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_1_3) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_2_4) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_2_5) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_0) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_1) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_2) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_3) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_4) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_5) <= +inf 0 <= InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(source_nonconvex_invest_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_end(source_nonconvex_invest_electricityBus_1) <= +inf @@ -198,7 +199,6 @@ bounds 0 <= InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) <= +inf binary InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) diff --git a/tests/lp_files/flow_invest_with_offset_multi_period_remaining_value.lp b/tests/lp_files/flow_invest_with_offset_multi_period_remaining_value.lp index 5e4510206..fafc4b0e0 100644 --- a/tests/lp_files/flow_invest_with_offset_multi_period_remaining_value.lp +++ b/tests/lp_files/flow_invest_with_offset_multi_period_remaining_value.lp @@ -3,42 +3,42 @@ min objective: +88.1844182057801 InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_0) -+34 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) +58.20563481102971 InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_1) -+33.33333333333333 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) +28.814670698529593 InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_2) ++34 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) ++33.33333333333333 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) +32.6797385620915 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_2) -+25 flow(source_nonconvex_invest_electricityBus_0_0) -+25 flow(source_nonconvex_invest_electricityBus_0_1) -+24.509803921568626 flow(source_nonconvex_invest_electricityBus_1_2) -+24.509803921568626 flow(source_nonconvex_invest_electricityBus_1_3) -+24.029219530949632 flow(source_nonconvex_invest_electricityBus_2_4) -+24.029219530949632 flow(source_nonconvex_invest_electricityBus_2_5) ++25 flow(source_nonconvex_invest_electricityBus_0) ++25 flow(source_nonconvex_invest_electricityBus_1) ++24.509803921568626 flow(source_nonconvex_invest_electricityBus_2) ++24.509803921568626 flow(source_nonconvex_invest_electricityBus_3) ++24.029219530949632 flow(source_nonconvex_invest_electricityBus_4) ++24.029219530949632 flow(source_nonconvex_invest_electricityBus_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(source_nonconvex_invest_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(source_nonconvex_invest_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(source_nonconvex_invest_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(source_nonconvex_invest_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(source_nonconvex_invest_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(source_nonconvex_invest_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(source_nonconvex_invest_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(source_nonconvex_invest_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(source_nonconvex_invest_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(source_nonconvex_invest_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(source_nonconvex_invest_electricityBus_5) = 0 c_u_InvestmentFlowBlock_minimum_rule(source_nonconvex_invest_electricityBus_0)_: @@ -115,9 +115,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(source_nonconvex_invest_electricityBus_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(source_nonconvex_invest_electricityBus_0)_: ++1 InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) -1 InvestmentFlowBlock_old_end(source_nonconvex_invest_electricityBus_0) -1 InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_0) -+1 InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) = 0 c_e_InvestmentFlowBlock_old_rule(source_nonconvex_invest_electricityBus_1)_: @@ -133,64 +133,65 @@ c_e_InvestmentFlowBlock_old_rule(source_nonconvex_invest_electricityBus_2)_: = 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_0)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) ++1 flow(source_nonconvex_invest_electricityBus_0) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_1)_: -+1 flow(source_nonconvex_invest_electricityBus_0_1) ++1 flow(source_nonconvex_invest_electricityBus_1) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_1_2)_: -+1 flow(source_nonconvex_invest_electricityBus_1_2) ++1 flow(source_nonconvex_invest_electricityBus_2) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_1_3)_: -+1 flow(source_nonconvex_invest_electricityBus_1_3) ++1 flow(source_nonconvex_invest_electricityBus_3) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_2_4)_: -+1 flow(source_nonconvex_invest_electricityBus_2_4) ++1 flow(source_nonconvex_invest_electricityBus_4) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_2_5)_: -+1 flow(source_nonconvex_invest_electricityBus_2_5) ++1 flow(source_nonconvex_invest_electricityBus_5) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_full_load_time_max(source_nonconvex_invest_electricityBus)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) -+1 flow(source_nonconvex_invest_electricityBus_0_1) -+1 flow(source_nonconvex_invest_electricityBus_1_2) -+1 flow(source_nonconvex_invest_electricityBus_1_3) -+1 flow(source_nonconvex_invest_electricityBus_2_4) -+1 flow(source_nonconvex_invest_electricityBus_2_5) ++1 flow(source_nonconvex_invest_electricityBus_0) ++1 flow(source_nonconvex_invest_electricityBus_1) ++1 flow(source_nonconvex_invest_electricityBus_2) ++1 flow(source_nonconvex_invest_electricityBus_3) ++1 flow(source_nonconvex_invest_electricityBus_4) ++1 flow(source_nonconvex_invest_electricityBus_5) -2.3 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) -2.3 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) -2.3 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) -<= 0.0 +<= 0 bounds 0 <= InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_0) <= 20 - 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) <= 1 0 <= InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_1) <= 20 - 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) <= 1 0 <= InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_2) <= 20 + 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) <= 1 + 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) <= 1 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_2) <= 1 - 0 <= flow(source_nonconvex_invest_electricityBus_0_0) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_0_1) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_1_2) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_1_3) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_2_4) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_2_5) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_0) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_1) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_2) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_3) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_4) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_5) <= +inf 0 <= InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(source_nonconvex_invest_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_end(source_nonconvex_invest_electricityBus_1) <= +inf @@ -198,7 +199,6 @@ bounds 0 <= InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) <= +inf binary InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) diff --git a/tests/lp_files/flow_invest_with_offset_no_minimum.lp b/tests/lp_files/flow_invest_with_offset_no_minimum.lp index ead5cfa51..dbc64c216 100644 --- a/tests/lp_files/flow_invest_with_offset_no_minimum.lp +++ b/tests/lp_files/flow_invest_with_offset_no_minimum.lp @@ -4,22 +4,22 @@ min objective: +500 InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_0) +34 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) -+25 flow(source_nonconvex_invest_electricityBus_0_0) -+25 flow(source_nonconvex_invest_electricityBus_0_1) -+25 flow(source_nonconvex_invest_electricityBus_0_2) ++25 flow(source_nonconvex_invest_electricityBus_0) ++25 flow(source_nonconvex_invest_electricityBus_1) ++25 flow(source_nonconvex_invest_electricityBus_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(source_nonconvex_invest_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(source_nonconvex_invest_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(source_nonconvex_invest_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(source_nonconvex_invest_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(source_nonconvex_invest_electricityBus_2) = 0 c_u_InvestmentFlowBlock_minimum_rule(source_nonconvex_invest_electricityBus_0)_: @@ -37,33 +37,33 @@ c_e_InvestmentFlowBlock_total_rule(source_nonconvex_invest_electricityBus_0)_: = 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_0)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) ++1 flow(source_nonconvex_invest_electricityBus_0) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_1)_: -+1 flow(source_nonconvex_invest_electricityBus_0_1) ++1 flow(source_nonconvex_invest_electricityBus_1) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_2)_: -+1 flow(source_nonconvex_invest_electricityBus_0_2) ++1 flow(source_nonconvex_invest_electricityBus_2) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_full_load_time_max(source_nonconvex_invest_electricityBus)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) -+1 flow(source_nonconvex_invest_electricityBus_0_1) -+1 flow(source_nonconvex_invest_electricityBus_0_2) ++1 flow(source_nonconvex_invest_electricityBus_0) ++1 flow(source_nonconvex_invest_electricityBus_1) ++1 flow(source_nonconvex_invest_electricityBus_2) -2.3 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 bounds 0 <= InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_0) <= 1234 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) <= 1 - 0 <= flow(source_nonconvex_invest_electricityBus_0_0) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_0_1) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_0_2) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_0) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_1) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= +inf binary InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) diff --git a/tests/lp_files/flow_invest_with_offset_no_minimum_multi_period.lp b/tests/lp_files/flow_invest_with_offset_no_minimum_multi_period.lp index 6ff9b91de..a589a982e 100644 --- a/tests/lp_files/flow_invest_with_offset_no_minimum_multi_period.lp +++ b/tests/lp_files/flow_invest_with_offset_no_minimum_multi_period.lp @@ -3,42 +3,42 @@ min objective: +88.1844182057801 InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_0) -+34 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) +58.20563481102971 InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_1) -+33.33333333333333 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) +28.814670698529593 InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_2) ++34 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) ++33.33333333333333 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) +32.6797385620915 InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_2) -+25 flow(source_nonconvex_invest_electricityBus_0_0) -+25 flow(source_nonconvex_invest_electricityBus_0_1) -+24.509803921568626 flow(source_nonconvex_invest_electricityBus_1_2) -+24.509803921568626 flow(source_nonconvex_invest_electricityBus_1_3) -+24.029219530949632 flow(source_nonconvex_invest_electricityBus_2_4) -+24.029219530949632 flow(source_nonconvex_invest_electricityBus_2_5) ++25 flow(source_nonconvex_invest_electricityBus_0) ++25 flow(source_nonconvex_invest_electricityBus_1) ++24.509803921568626 flow(source_nonconvex_invest_electricityBus_2) ++24.509803921568626 flow(source_nonconvex_invest_electricityBus_3) ++24.029219530949632 flow(source_nonconvex_invest_electricityBus_4) ++24.029219530949632 flow(source_nonconvex_invest_electricityBus_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(source_nonconvex_invest_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(source_nonconvex_invest_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(source_nonconvex_invest_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(source_nonconvex_invest_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(source_nonconvex_invest_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(source_nonconvex_invest_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(source_nonconvex_invest_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(source_nonconvex_invest_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(source_nonconvex_invest_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(source_nonconvex_invest_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(source_nonconvex_invest_electricityBus_5) = 0 c_u_InvestmentFlowBlock_minimum_rule(source_nonconvex_invest_electricityBus_0)_: @@ -112,9 +112,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(source_nonconvex_invest_electricityBus_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(source_nonconvex_invest_electricityBus_0)_: ++1 InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) -1 InvestmentFlowBlock_old_end(source_nonconvex_invest_electricityBus_0) -1 InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_0) -+1 InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) = 0 c_e_InvestmentFlowBlock_old_rule(source_nonconvex_invest_electricityBus_1)_: @@ -130,64 +130,65 @@ c_e_InvestmentFlowBlock_old_rule(source_nonconvex_invest_electricityBus_2)_: = 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_0)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) ++1 flow(source_nonconvex_invest_electricityBus_0) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_0_1)_: -+1 flow(source_nonconvex_invest_electricityBus_0_1) ++1 flow(source_nonconvex_invest_electricityBus_1) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_1_2)_: -+1 flow(source_nonconvex_invest_electricityBus_1_2) ++1 flow(source_nonconvex_invest_electricityBus_2) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_1_3)_: -+1 flow(source_nonconvex_invest_electricityBus_1_3) ++1 flow(source_nonconvex_invest_electricityBus_3) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_2_4)_: -+1 flow(source_nonconvex_invest_electricityBus_2_4) ++1 flow(source_nonconvex_invest_electricityBus_4) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(source_nonconvex_invest_electricityBus_2_5)_: -+1 flow(source_nonconvex_invest_electricityBus_2_5) ++1 flow(source_nonconvex_invest_electricityBus_5) -0.8 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_full_load_time_max(source_nonconvex_invest_electricityBus)_: -+1 flow(source_nonconvex_invest_electricityBus_0_0) -+1 flow(source_nonconvex_invest_electricityBus_0_1) -+1 flow(source_nonconvex_invest_electricityBus_1_2) -+1 flow(source_nonconvex_invest_electricityBus_1_3) -+1 flow(source_nonconvex_invest_electricityBus_2_4) -+1 flow(source_nonconvex_invest_electricityBus_2_5) ++1 flow(source_nonconvex_invest_electricityBus_0) ++1 flow(source_nonconvex_invest_electricityBus_1) ++1 flow(source_nonconvex_invest_electricityBus_2) ++1 flow(source_nonconvex_invest_electricityBus_3) ++1 flow(source_nonconvex_invest_electricityBus_4) ++1 flow(source_nonconvex_invest_electricityBus_5) -2.3 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) -2.3 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) -2.3 InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) -<= 0.0 +<= 0 bounds 0 <= InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_0) <= 1234 - 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) <= 1 0 <= InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_1) <= 1234 - 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) <= 1 0 <= InvestmentFlowBlock_invest(source_nonconvex_invest_electricityBus_2) <= 1234 + 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) <= 1 + 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) <= 1 0 <= InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_2) <= 1 - 0 <= flow(source_nonconvex_invest_electricityBus_0_0) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_0_1) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_1_2) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_1_3) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_2_4) <= +inf - 0 <= flow(source_nonconvex_invest_electricityBus_2_5) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_0) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_1) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_2) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_3) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_4) <= +inf + 0 <= flow(source_nonconvex_invest_electricityBus_5) <= +inf 0 <= InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(source_nonconvex_invest_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(source_nonconvex_invest_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_end(source_nonconvex_invest_electricityBus_1) <= +inf @@ -195,7 +196,6 @@ bounds 0 <= InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(source_nonconvex_invest_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(source_nonconvex_invest_electricityBus_0) <= +inf binary InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_0) InvestmentFlowBlock_invest_status(source_nonconvex_invest_electricityBus_1) diff --git a/tests/lp_files/flow_invest_without_offset.lp b/tests/lp_files/flow_invest_without_offset.lp index 0e52141d3..7f02b3885 100644 --- a/tests/lp_files/flow_invest_without_offset.lp +++ b/tests/lp_files/flow_invest_without_offset.lp @@ -3,22 +3,22 @@ min objective: +500 InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_0) -+25 flow(electricityBus_sink_nonconvex_invest_0_0) -+25 flow(electricityBus_sink_nonconvex_invest_0_1) -+25 flow(electricityBus_sink_nonconvex_invest_0_2) ++25 flow(electricityBus_sink_nonconvex_invest_0) ++25 flow(electricityBus_sink_nonconvex_invest_1) ++25 flow(electricityBus_sink_nonconvex_invest_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(electricityBus_sink_nonconvex_invest_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(electricityBus_sink_nonconvex_invest_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(electricityBus_sink_nonconvex_invest_2) = 0 c_u_InvestmentFlowBlock_minimum_rule(electricityBus_sink_nonconvex_invest_0)_: @@ -37,32 +37,32 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_sink_nonconvex_invest_0)_: = 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_0_0)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_0) ++1 flow(electricityBus_sink_nonconvex_invest_0) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_0_1)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_1) ++1 flow(electricityBus_sink_nonconvex_invest_1) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_0_2)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_2) ++1 flow(electricityBus_sink_nonconvex_invest_2) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) <= 0 c_u_InvestmentFlowBlock_full_load_time_max(electricityBus_sink_nonconvex_invest)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_0) -+1 flow(electricityBus_sink_nonconvex_invest_0_1) -+1 flow(electricityBus_sink_nonconvex_invest_0_2) ++1 flow(electricityBus_sink_nonconvex_invest_0) ++1 flow(electricityBus_sink_nonconvex_invest_1) ++1 flow(electricityBus_sink_nonconvex_invest_2) -2.3 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) <= 0 bounds 0 <= InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_0) <= 172 - 0 <= flow(electricityBus_sink_nonconvex_invest_0_0) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_0_1) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_0_2) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_0) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_1) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_2) <= +inf 0 <= InvestmentFlowBlock_invest_status(electricityBus_sink_nonconvex_invest_0) <= 1 0 <= InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) <= +inf binary diff --git a/tests/lp_files/flow_invest_without_offset_multi_period.lp b/tests/lp_files/flow_invest_without_offset_multi_period.lp index 40b7e34a1..527720e56 100644 --- a/tests/lp_files/flow_invest_without_offset_multi_period.lp +++ b/tests/lp_files/flow_invest_without_offset_multi_period.lp @@ -5,37 +5,37 @@ objective: +88.1844182057801 InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_0) +58.20563481102971 InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_1) +28.814670698529593 InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_2) -+25 flow(electricityBus_sink_nonconvex_invest_0_0) -+25 flow(electricityBus_sink_nonconvex_invest_0_1) -+24.509803921568626 flow(electricityBus_sink_nonconvex_invest_1_2) -+24.509803921568626 flow(electricityBus_sink_nonconvex_invest_1_3) -+24.029219530949632 flow(electricityBus_sink_nonconvex_invest_2_4) -+24.029219530949632 flow(electricityBus_sink_nonconvex_invest_2_5) ++25 flow(electricityBus_sink_nonconvex_invest_0) ++25 flow(electricityBus_sink_nonconvex_invest_1) ++24.509803921568626 flow(electricityBus_sink_nonconvex_invest_2) ++24.509803921568626 flow(electricityBus_sink_nonconvex_invest_3) ++24.029219530949632 flow(electricityBus_sink_nonconvex_invest_4) ++24.029219530949632 flow(electricityBus_sink_nonconvex_invest_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(electricityBus_sink_nonconvex_invest_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(electricityBus_sink_nonconvex_invest_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(electricityBus_sink_nonconvex_invest_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(electricityBus_sink_nonconvex_invest_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(electricityBus_sink_nonconvex_invest_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(electricityBus_sink_nonconvex_invest_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(electricityBus_sink_nonconvex_invest_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(electricityBus_sink_nonconvex_invest_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(electricityBus_sink_nonconvex_invest_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(electricityBus_sink_nonconvex_invest_5) = 0 c_u_InvestmentFlowBlock_minimum_rule(electricityBus_sink_nonconvex_invest_0)_: @@ -112,9 +112,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_sink_nonconvex_invest_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_sink_nonconvex_invest_0)_: ++1 InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_0) -1 InvestmentFlowBlock_old_end(electricityBus_sink_nonconvex_invest_0) -1 InvestmentFlowBlock_old_exo(electricityBus_sink_nonconvex_invest_0) -+1 InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_sink_nonconvex_invest_1)_: @@ -130,64 +130,65 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_sink_nonconvex_invest_2)_: = 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_0_0)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_0) ++1 flow(electricityBus_sink_nonconvex_invest_0) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_0_1)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_1) ++1 flow(electricityBus_sink_nonconvex_invest_1) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_1_2)_: -+1 flow(electricityBus_sink_nonconvex_invest_1_2) ++1 flow(electricityBus_sink_nonconvex_invest_2) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_1_3)_: -+1 flow(electricityBus_sink_nonconvex_invest_1_3) ++1 flow(electricityBus_sink_nonconvex_invest_3) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_2_4)_: -+1 flow(electricityBus_sink_nonconvex_invest_2_4) ++1 flow(electricityBus_sink_nonconvex_invest_4) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_2_5)_: -+1 flow(electricityBus_sink_nonconvex_invest_2_5) ++1 flow(electricityBus_sink_nonconvex_invest_5) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_2) <= 0 c_u_InvestmentFlowBlock_full_load_time_max(electricityBus_sink_nonconvex_invest)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_0) -+1 flow(electricityBus_sink_nonconvex_invest_0_1) -+1 flow(electricityBus_sink_nonconvex_invest_1_2) -+1 flow(electricityBus_sink_nonconvex_invest_1_3) -+1 flow(electricityBus_sink_nonconvex_invest_2_4) -+1 flow(electricityBus_sink_nonconvex_invest_2_5) ++1 flow(electricityBus_sink_nonconvex_invest_0) ++1 flow(electricityBus_sink_nonconvex_invest_1) ++1 flow(electricityBus_sink_nonconvex_invest_2) ++1 flow(electricityBus_sink_nonconvex_invest_3) ++1 flow(electricityBus_sink_nonconvex_invest_4) ++1 flow(electricityBus_sink_nonconvex_invest_5) -2.3 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) -2.3 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_1) -2.3 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_2) -<= 0.0 +<= 0 bounds 0 <= InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_0) <= 172 0 <= InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_1) <= 172 0 <= InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_2) <= 172 - 0 <= flow(electricityBus_sink_nonconvex_invest_0_0) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_0_1) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_1_2) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_1_3) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_2_4) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_2_5) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_0) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_1) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_2) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_3) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_4) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_5) <= +inf 0 <= InvestmentFlowBlock_invest_status(electricityBus_sink_nonconvex_invest_0) <= 1 0 <= InvestmentFlowBlock_invest_status(electricityBus_sink_nonconvex_invest_1) <= 1 0 <= InvestmentFlowBlock_invest_status(electricityBus_sink_nonconvex_invest_2) <= 1 0 <= InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_1) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_1) <= +inf 0 <= InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_2) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_sink_nonconvex_invest_0) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_sink_nonconvex_invest_1) <= +inf @@ -195,7 +196,6 @@ bounds 0 <= InvestmentFlowBlock_old_exo(electricityBus_sink_nonconvex_invest_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_sink_nonconvex_invest_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_sink_nonconvex_invest_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_0) <= +inf binary InvestmentFlowBlock_invest_status(electricityBus_sink_nonconvex_invest_0) InvestmentFlowBlock_invest_status(electricityBus_sink_nonconvex_invest_1) diff --git a/tests/lp_files/flow_invest_without_offset_multi_period_remaining_value.lp b/tests/lp_files/flow_invest_without_offset_multi_period_remaining_value.lp index 40b7e34a1..527720e56 100644 --- a/tests/lp_files/flow_invest_without_offset_multi_period_remaining_value.lp +++ b/tests/lp_files/flow_invest_without_offset_multi_period_remaining_value.lp @@ -5,37 +5,37 @@ objective: +88.1844182057801 InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_0) +58.20563481102971 InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_1) +28.814670698529593 InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_2) -+25 flow(electricityBus_sink_nonconvex_invest_0_0) -+25 flow(electricityBus_sink_nonconvex_invest_0_1) -+24.509803921568626 flow(electricityBus_sink_nonconvex_invest_1_2) -+24.509803921568626 flow(electricityBus_sink_nonconvex_invest_1_3) -+24.029219530949632 flow(electricityBus_sink_nonconvex_invest_2_4) -+24.029219530949632 flow(electricityBus_sink_nonconvex_invest_2_5) ++25 flow(electricityBus_sink_nonconvex_invest_0) ++25 flow(electricityBus_sink_nonconvex_invest_1) ++24.509803921568626 flow(electricityBus_sink_nonconvex_invest_2) ++24.509803921568626 flow(electricityBus_sink_nonconvex_invest_3) ++24.029219530949632 flow(electricityBus_sink_nonconvex_invest_4) ++24.029219530949632 flow(electricityBus_sink_nonconvex_invest_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(electricityBus_sink_nonconvex_invest_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(electricityBus_sink_nonconvex_invest_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(electricityBus_sink_nonconvex_invest_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(electricityBus_sink_nonconvex_invest_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(electricityBus_sink_nonconvex_invest_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(electricityBus_sink_nonconvex_invest_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(electricityBus_sink_nonconvex_invest_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(electricityBus_sink_nonconvex_invest_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(electricityBus_sink_nonconvex_invest_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(electricityBus_sink_nonconvex_invest_5) = 0 c_u_InvestmentFlowBlock_minimum_rule(electricityBus_sink_nonconvex_invest_0)_: @@ -112,9 +112,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_sink_nonconvex_invest_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_sink_nonconvex_invest_0)_: ++1 InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_0) -1 InvestmentFlowBlock_old_end(electricityBus_sink_nonconvex_invest_0) -1 InvestmentFlowBlock_old_exo(electricityBus_sink_nonconvex_invest_0) -+1 InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_sink_nonconvex_invest_1)_: @@ -130,64 +130,65 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_sink_nonconvex_invest_2)_: = 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_0_0)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_0) ++1 flow(electricityBus_sink_nonconvex_invest_0) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_0_1)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_1) ++1 flow(electricityBus_sink_nonconvex_invest_1) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_1_2)_: -+1 flow(electricityBus_sink_nonconvex_invest_1_2) ++1 flow(electricityBus_sink_nonconvex_invest_2) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_1_3)_: -+1 flow(electricityBus_sink_nonconvex_invest_1_3) ++1 flow(electricityBus_sink_nonconvex_invest_3) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_2_4)_: -+1 flow(electricityBus_sink_nonconvex_invest_2_4) ++1 flow(electricityBus_sink_nonconvex_invest_4) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_sink_nonconvex_invest_2_5)_: -+1 flow(electricityBus_sink_nonconvex_invest_2_5) ++1 flow(electricityBus_sink_nonconvex_invest_5) -0.8 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_2) <= 0 c_u_InvestmentFlowBlock_full_load_time_max(electricityBus_sink_nonconvex_invest)_: -+1 flow(electricityBus_sink_nonconvex_invest_0_0) -+1 flow(electricityBus_sink_nonconvex_invest_0_1) -+1 flow(electricityBus_sink_nonconvex_invest_1_2) -+1 flow(electricityBus_sink_nonconvex_invest_1_3) -+1 flow(electricityBus_sink_nonconvex_invest_2_4) -+1 flow(electricityBus_sink_nonconvex_invest_2_5) ++1 flow(electricityBus_sink_nonconvex_invest_0) ++1 flow(electricityBus_sink_nonconvex_invest_1) ++1 flow(electricityBus_sink_nonconvex_invest_2) ++1 flow(electricityBus_sink_nonconvex_invest_3) ++1 flow(electricityBus_sink_nonconvex_invest_4) ++1 flow(electricityBus_sink_nonconvex_invest_5) -2.3 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) -2.3 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_1) -2.3 InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_2) -<= 0.0 +<= 0 bounds 0 <= InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_0) <= 172 0 <= InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_1) <= 172 0 <= InvestmentFlowBlock_invest(electricityBus_sink_nonconvex_invest_2) <= 172 - 0 <= flow(electricityBus_sink_nonconvex_invest_0_0) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_0_1) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_1_2) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_1_3) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_2_4) <= +inf - 0 <= flow(electricityBus_sink_nonconvex_invest_2_5) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_0) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_1) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_2) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_3) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_4) <= +inf + 0 <= flow(electricityBus_sink_nonconvex_invest_5) <= +inf 0 <= InvestmentFlowBlock_invest_status(electricityBus_sink_nonconvex_invest_0) <= 1 0 <= InvestmentFlowBlock_invest_status(electricityBus_sink_nonconvex_invest_1) <= 1 0 <= InvestmentFlowBlock_invest_status(electricityBus_sink_nonconvex_invest_2) <= 1 0 <= InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_1) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_sink_nonconvex_invest_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_1) <= +inf 0 <= InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_2) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_sink_nonconvex_invest_0) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_sink_nonconvex_invest_1) <= +inf @@ -195,7 +196,6 @@ bounds 0 <= InvestmentFlowBlock_old_exo(electricityBus_sink_nonconvex_invest_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_sink_nonconvex_invest_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_sink_nonconvex_invest_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_sink_nonconvex_invest_0) <= +inf binary InvestmentFlowBlock_invest_status(electricityBus_sink_nonconvex_invest_0) InvestmentFlowBlock_invest_status(electricityBus_sink_nonconvex_invest_1) diff --git a/tests/lp_files/flow_nonconvex_invest_bounded_converter.lp b/tests/lp_files/flow_nonconvex_invest_bounded_converter.lp index 7e8e1e56d..c1d0128ae 100644 --- a/tests/lp_files/flow_nonconvex_invest_bounded_converter.lp +++ b/tests/lp_files/flow_nonconvex_invest_bounded_converter.lp @@ -2,50 +2,50 @@ min objective: -+25 flow(converter_nonconvex_invest_electricityBus_0_0) -+25 flow(converter_nonconvex_invest_electricityBus_0_1) -+25 flow(converter_nonconvex_invest_electricityBus_0_2) ++25 flow(converter_nonconvex_invest_electricityBus_0) ++25 flow(converter_nonconvex_invest_electricityBus_1) ++25 flow(converter_nonconvex_invest_electricityBus_2) +500 InvestNonConvexFlowBlock_invest(converter_nonconvex_invest_electricityBus_0) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(converter_nonconvex_invest_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(converter_nonconvex_invest_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(converter_nonconvex_invest_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(converter_nonconvex_invest_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(converter_nonconvex_invest_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(converter_nonconvex_invest_electricityBus_2) = 0 -c_e_BusBlock_balance(fuelBus_0_0)_: -+1 flow(fuelBus_converter_nonconvex_invest_0_0) +c_e_BusBlock_balance(fuelBus_0)_: ++1 flow(fuelBus_converter_nonconvex_invest_0) = 0 -c_e_BusBlock_balance(fuelBus_0_1)_: -+1 flow(fuelBus_converter_nonconvex_invest_0_1) +c_e_BusBlock_balance(fuelBus_1)_: ++1 flow(fuelBus_converter_nonconvex_invest_1) = 0 -c_e_BusBlock_balance(fuelBus_0_2)_: -+1 flow(fuelBus_converter_nonconvex_invest_0_2) +c_e_BusBlock_balance(fuelBus_2)_: ++1 flow(fuelBus_converter_nonconvex_invest_2) = 0 -c_e_ConverterBlock_relation(converter_nonconvex_invest_fuelBus_electricityBus_0_0)_: --1 flow(converter_nonconvex_invest_electricityBus_0_0) -+0.5 flow(fuelBus_converter_nonconvex_invest_0_0) +c_e_ConverterBlock_relation(converter_nonconvex_invest_fuelBus_electricityBus_0)_: ++0.5 flow(fuelBus_converter_nonconvex_invest_0) +-1 flow(converter_nonconvex_invest_electricityBus_0) = 0 -c_e_ConverterBlock_relation(converter_nonconvex_invest_fuelBus_electricityBus_0_1)_: --1 flow(converter_nonconvex_invest_electricityBus_0_1) -+0.5 flow(fuelBus_converter_nonconvex_invest_0_1) +c_e_ConverterBlock_relation(converter_nonconvex_invest_fuelBus_electricityBus_1)_: ++0.5 flow(fuelBus_converter_nonconvex_invest_1) +-1 flow(converter_nonconvex_invest_electricityBus_1) = 0 -c_e_ConverterBlock_relation(converter_nonconvex_invest_fuelBus_electricityBus_0_2)_: --1 flow(converter_nonconvex_invest_electricityBus_0_2) -+0.5 flow(fuelBus_converter_nonconvex_invest_0_2) +c_e_ConverterBlock_relation(converter_nonconvex_invest_fuelBus_electricityBus_2)_: ++0.5 flow(fuelBus_converter_nonconvex_invest_2) +-1 flow(converter_nonconvex_invest_electricityBus_2) = 0 c_l_InvestNonConvexFlowBlock_minimum_investment(converter_nonconvex_invest_electricityBus_0)_: @@ -56,33 +56,33 @@ c_u_InvestNonConvexFlowBlock_maximum_investment(converter_nonconvex_invest_elect +1 InvestNonConvexFlowBlock_invest(converter_nonconvex_invest_electricityBus_0) <= 1234 -c_u_InvestNonConvexFlowBlock_min(converter_nonconvex_invest_electricityBus_0_0)_: --1 flow(converter_nonconvex_invest_electricityBus_0_0) +c_u_InvestNonConvexFlowBlock_min(converter_nonconvex_invest_electricityBus_0)_: +-1 flow(converter_nonconvex_invest_electricityBus_0) +0.25 InvestNonConvexFlowBlock_status_nominal(converter_nonconvex_invest_electricityBus_0) <= 0 -c_u_InvestNonConvexFlowBlock_min(converter_nonconvex_invest_electricityBus_0_1)_: --1 flow(converter_nonconvex_invest_electricityBus_0_1) +c_u_InvestNonConvexFlowBlock_min(converter_nonconvex_invest_electricityBus_1)_: +-1 flow(converter_nonconvex_invest_electricityBus_1) +0.25 InvestNonConvexFlowBlock_status_nominal(converter_nonconvex_invest_electricityBus_1) <= 0 -c_u_InvestNonConvexFlowBlock_min(converter_nonconvex_invest_electricityBus_0_2)_: --1 flow(converter_nonconvex_invest_electricityBus_0_2) +c_u_InvestNonConvexFlowBlock_min(converter_nonconvex_invest_electricityBus_2)_: +-1 flow(converter_nonconvex_invest_electricityBus_2) +0.25 InvestNonConvexFlowBlock_status_nominal(converter_nonconvex_invest_electricityBus_2) <= 0 -c_u_InvestNonConvexFlowBlock_max(converter_nonconvex_invest_electricityBus_0_0)_: -+1 flow(converter_nonconvex_invest_electricityBus_0_0) +c_u_InvestNonConvexFlowBlock_max(converter_nonconvex_invest_electricityBus_0)_: ++1 flow(converter_nonconvex_invest_electricityBus_0) -0.5 InvestNonConvexFlowBlock_status_nominal(converter_nonconvex_invest_electricityBus_0) <= 0 -c_u_InvestNonConvexFlowBlock_max(converter_nonconvex_invest_electricityBus_0_1)_: -+1 flow(converter_nonconvex_invest_electricityBus_0_1) +c_u_InvestNonConvexFlowBlock_max(converter_nonconvex_invest_electricityBus_1)_: ++1 flow(converter_nonconvex_invest_electricityBus_1) -0.5 InvestNonConvexFlowBlock_status_nominal(converter_nonconvex_invest_electricityBus_1) <= 0 -c_u_InvestNonConvexFlowBlock_max(converter_nonconvex_invest_electricityBus_0_2)_: -+1 flow(converter_nonconvex_invest_electricityBus_0_2) +c_u_InvestNonConvexFlowBlock_max(converter_nonconvex_invest_electricityBus_2)_: ++1 flow(converter_nonconvex_invest_electricityBus_2) -0.5 InvestNonConvexFlowBlock_status_nominal(converter_nonconvex_invest_electricityBus_2) <= 0 @@ -135,13 +135,13 @@ c_u_InvestNonConvexFlowBlock_invest_nc_three(converter_nonconvex_invest_electric <= 1234 bounds - 0 <= flow(converter_nonconvex_invest_electricityBus_0_0) <= +inf - 0 <= flow(converter_nonconvex_invest_electricityBus_0_1) <= +inf - 0 <= flow(converter_nonconvex_invest_electricityBus_0_2) <= +inf + 0 <= flow(fuelBus_converter_nonconvex_invest_0) <= +inf + 0 <= flow(fuelBus_converter_nonconvex_invest_1) <= +inf + 0 <= flow(fuelBus_converter_nonconvex_invest_2) <= +inf + 0 <= flow(converter_nonconvex_invest_electricityBus_0) <= +inf + 0 <= flow(converter_nonconvex_invest_electricityBus_1) <= +inf + 0 <= flow(converter_nonconvex_invest_electricityBus_2) <= +inf 0 <= InvestNonConvexFlowBlock_invest(converter_nonconvex_invest_electricityBus_0) <= 1234 - 0 <= flow(fuelBus_converter_nonconvex_invest_0_0) <= +inf - 0 <= flow(fuelBus_converter_nonconvex_invest_0_1) <= +inf - 0 <= flow(fuelBus_converter_nonconvex_invest_0_2) <= +inf 0 <= InvestNonConvexFlowBlock_status_nominal(converter_nonconvex_invest_electricityBus_0) <= +inf 0 <= InvestNonConvexFlowBlock_status_nominal(converter_nonconvex_invest_electricityBus_1) <= +inf 0 <= InvestNonConvexFlowBlock_status_nominal(converter_nonconvex_invest_electricityBus_2) <= +inf diff --git a/tests/lp_files/flow_reaching_lifetime.lp b/tests/lp_files/flow_reaching_lifetime.lp index e4b063214..343cf5573 100644 --- a/tests/lp_files/flow_reaching_lifetime.lp +++ b/tests/lp_files/flow_reaching_lifetime.lp @@ -2,52 +2,52 @@ min objective: -+25 flow(electricityBus_excess_0_0) -+25 flow(electricityBus_excess_0_1) -+24.509803921568626 flow(electricityBus_excess_1_2) -+24.509803921568626 flow(electricityBus_excess_1_3) -+24.029219530949632 flow(electricityBus_excess_2_4) -+24.029219530949632 flow(electricityBus_excess_2_5) ++25 flow(electricityBus_excess_0) ++25 flow(electricityBus_excess_1) ++24.509803921568626 flow(electricityBus_excess_2) ++24.509803921568626 flow(electricityBus_excess_3) ++24.029219530949632 flow(electricityBus_excess_4) ++24.029219530949632 flow(electricityBus_excess_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(electricityBus_excess_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(electricityBus_excess_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(electricityBus_excess_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(electricityBus_excess_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(electricityBus_excess_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(electricityBus_excess_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(electricityBus_excess_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(electricityBus_excess_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(electricityBus_excess_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(electricityBus_excess_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(electricityBus_excess_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(electricityBus_excess_5) = 0 c_e_SimpleFlowBlock_lifetime_output(electricityBus_excess_2_4)_: -+1 flow(electricityBus_excess_2_4) ++1 flow(electricityBus_excess_4) = 0 c_e_SimpleFlowBlock_lifetime_output(electricityBus_excess_2_5)_: -+1 flow(electricityBus_excess_2_5) ++1 flow(electricityBus_excess_5) = 0 bounds - 0 <= flow(electricityBus_excess_0_0) <= 8.0 - 0 <= flow(electricityBus_excess_0_1) <= 8.0 - 0 <= flow(electricityBus_excess_1_2) <= 8.0 - 0 <= flow(electricityBus_excess_1_3) <= 8.0 - 0 <= flow(electricityBus_excess_2_4) <= 8.0 - 0 <= flow(electricityBus_excess_2_5) <= 8.0 + 0 <= flow(electricityBus_excess_0) <= 8.0 + 0 <= flow(electricityBus_excess_1) <= 8.0 + 0 <= flow(electricityBus_excess_2) <= 8.0 + 0 <= flow(electricityBus_excess_3) <= 8.0 + 0 <= flow(electricityBus_excess_4) <= 8.0 + 0 <= flow(electricityBus_excess_5) <= 8.0 end diff --git a/tests/lp_files/flow_reaching_lifetime_initial_age.lp b/tests/lp_files/flow_reaching_lifetime_initial_age.lp index 61f0a0a7a..e1f5c8da4 100644 --- a/tests/lp_files/flow_reaching_lifetime_initial_age.lp +++ b/tests/lp_files/flow_reaching_lifetime_initial_age.lp @@ -2,60 +2,60 @@ min objective: -+25 flow(electricityBus_excess_0_0) -+25 flow(electricityBus_excess_0_1) -+24.509803921568626 flow(electricityBus_excess_1_2) -+24.509803921568626 flow(electricityBus_excess_1_3) -+24.029219530949632 flow(electricityBus_excess_2_4) -+24.029219530949632 flow(electricityBus_excess_2_5) ++25 flow(electricityBus_excess_0) ++25 flow(electricityBus_excess_1) ++24.509803921568626 flow(electricityBus_excess_2) ++24.509803921568626 flow(electricityBus_excess_3) ++24.029219530949632 flow(electricityBus_excess_4) ++24.029219530949632 flow(electricityBus_excess_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(electricityBus_excess_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(electricityBus_excess_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(electricityBus_excess_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(electricityBus_excess_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(electricityBus_excess_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(electricityBus_excess_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(electricityBus_excess_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(electricityBus_excess_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(electricityBus_excess_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(electricityBus_excess_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(electricityBus_excess_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(electricityBus_excess_5) = 0 c_e_SimpleFlowBlock_lifetime_age_output(electricityBus_excess_1_2)_: -+1 flow(electricityBus_excess_1_2) ++1 flow(electricityBus_excess_2) = 0 c_e_SimpleFlowBlock_lifetime_age_output(electricityBus_excess_1_3)_: -+1 flow(electricityBus_excess_1_3) ++1 flow(electricityBus_excess_3) = 0 c_e_SimpleFlowBlock_lifetime_age_output(electricityBus_excess_2_4)_: -+1 flow(electricityBus_excess_2_4) ++1 flow(electricityBus_excess_4) = 0 c_e_SimpleFlowBlock_lifetime_age_output(electricityBus_excess_2_5)_: -+1 flow(electricityBus_excess_2_5) ++1 flow(electricityBus_excess_5) = 0 bounds - 0 <= flow(electricityBus_excess_0_0) <= 8.0 - 0 <= flow(electricityBus_excess_0_1) <= 8.0 - 0 <= flow(electricityBus_excess_1_2) <= 8.0 - 0 <= flow(electricityBus_excess_1_3) <= 8.0 - 0 <= flow(electricityBus_excess_2_4) <= 8.0 - 0 <= flow(electricityBus_excess_2_5) <= 8.0 + 0 <= flow(electricityBus_excess_0) <= 8.0 + 0 <= flow(electricityBus_excess_1) <= 8.0 + 0 <= flow(electricityBus_excess_2) <= 8.0 + 0 <= flow(electricityBus_excess_3) <= 8.0 + 0 <= flow(electricityBus_excess_4) <= 8.0 + 0 <= flow(electricityBus_excess_5) <= 8.0 end diff --git a/tests/lp_files/generic_invest_limit.lp b/tests/lp_files/generic_invest_limit.lp index f8598642b..0a0387c16 100644 --- a/tests/lp_files/generic_invest_limit.lp +++ b/tests/lp_files/generic_invest_limit.lp @@ -2,38 +2,38 @@ min objective: -+100 InvestmentFlowBlock_invest(source_1_bus_1_0) -+75 InvestmentFlowBlock_invest(source_2_bus_1_0) +50 InvestmentFlowBlock_invest(source_0_bus_1_0) ++75 InvestmentFlowBlock_invest(source_2_bus_1_0) ++100 InvestmentFlowBlock_invest(source_1_bus_1_0) s.t. c_u_invest_limit_space_constraint_: -+1 InvestmentFlowBlock_invest(source_1_bus_1_0) +4 InvestmentFlowBlock_invest(source_0_bus_1_0) ++1 InvestmentFlowBlock_invest(source_1_bus_1_0) <= 20 -c_e_BusBlock_balance(bus_1_0_0)_: -+1 flow(source_0_bus_1_0_0) -+1 flow(source_2_bus_1_0_0) -+1 flow(source_1_bus_1_0_0) +c_e_BusBlock_balance(bus_1_0)_: ++1 flow(source_0_bus_1_0) ++1 flow(source_1_bus_1_0) ++1 flow(source_2_bus_1_0) = 0 -c_e_BusBlock_balance(bus_1_0_1)_: -+1 flow(source_0_bus_1_0_1) -+1 flow(source_2_bus_1_0_1) -+1 flow(source_1_bus_1_0_1) +c_e_BusBlock_balance(bus_1_1)_: ++1 flow(source_0_bus_1_1) ++1 flow(source_1_bus_1_1) ++1 flow(source_2_bus_1_1) = 0 -c_e_BusBlock_balance(bus_1_0_2)_: -+1 flow(source_0_bus_1_0_2) -+1 flow(source_2_bus_1_0_2) -+1 flow(source_1_bus_1_0_2) +c_e_BusBlock_balance(bus_1_2)_: ++1 flow(source_0_bus_1_2) ++1 flow(source_1_bus_1_2) ++1 flow(source_2_bus_1_2) = 0 -c_e_InvestmentFlowBlock_total_rule(source_1_bus_1_0)_: --1 InvestmentFlowBlock_invest(source_1_bus_1_0) -+1 InvestmentFlowBlock_total(source_1_bus_1_0) +c_e_InvestmentFlowBlock_total_rule(source_0_bus_1_0)_: +-1 InvestmentFlowBlock_invest(source_0_bus_1_0) ++1 InvestmentFlowBlock_total(source_0_bus_1_0) = 0 c_e_InvestmentFlowBlock_total_rule(source_2_bus_1_0)_: @@ -41,70 +41,70 @@ c_e_InvestmentFlowBlock_total_rule(source_2_bus_1_0)_: +1 InvestmentFlowBlock_total(source_2_bus_1_0) = 0 -c_e_InvestmentFlowBlock_total_rule(source_0_bus_1_0)_: --1 InvestmentFlowBlock_invest(source_0_bus_1_0) -+1 InvestmentFlowBlock_total(source_0_bus_1_0) +c_e_InvestmentFlowBlock_total_rule(source_1_bus_1_0)_: +-1 InvestmentFlowBlock_invest(source_1_bus_1_0) ++1 InvestmentFlowBlock_total(source_1_bus_1_0) = 0 -c_u_InvestmentFlowBlock_max(source_1_bus_1_0_0)_: -+1 flow(source_1_bus_1_0_0) --1 InvestmentFlowBlock_total(source_1_bus_1_0) +c_u_InvestmentFlowBlock_max(source_0_bus_1_0_0)_: ++1 flow(source_0_bus_1_0) +-1 InvestmentFlowBlock_total(source_0_bus_1_0) <= 0 -c_u_InvestmentFlowBlock_max(source_1_bus_1_0_1)_: -+1 flow(source_1_bus_1_0_1) --1 InvestmentFlowBlock_total(source_1_bus_1_0) +c_u_InvestmentFlowBlock_max(source_0_bus_1_0_1)_: ++1 flow(source_0_bus_1_1) +-1 InvestmentFlowBlock_total(source_0_bus_1_0) <= 0 -c_u_InvestmentFlowBlock_max(source_1_bus_1_0_2)_: -+1 flow(source_1_bus_1_0_2) --1 InvestmentFlowBlock_total(source_1_bus_1_0) +c_u_InvestmentFlowBlock_max(source_0_bus_1_0_2)_: ++1 flow(source_0_bus_1_2) +-1 InvestmentFlowBlock_total(source_0_bus_1_0) <= 0 c_u_InvestmentFlowBlock_max(source_2_bus_1_0_0)_: -+1 flow(source_2_bus_1_0_0) ++1 flow(source_2_bus_1_0) -1 InvestmentFlowBlock_total(source_2_bus_1_0) <= 0 c_u_InvestmentFlowBlock_max(source_2_bus_1_0_1)_: -+1 flow(source_2_bus_1_0_1) ++1 flow(source_2_bus_1_1) -1 InvestmentFlowBlock_total(source_2_bus_1_0) <= 0 c_u_InvestmentFlowBlock_max(source_2_bus_1_0_2)_: -+1 flow(source_2_bus_1_0_2) ++1 flow(source_2_bus_1_2) -1 InvestmentFlowBlock_total(source_2_bus_1_0) <= 0 -c_u_InvestmentFlowBlock_max(source_0_bus_1_0_0)_: -+1 flow(source_0_bus_1_0_0) --1 InvestmentFlowBlock_total(source_0_bus_1_0) +c_u_InvestmentFlowBlock_max(source_1_bus_1_0_0)_: ++1 flow(source_1_bus_1_0) +-1 InvestmentFlowBlock_total(source_1_bus_1_0) <= 0 -c_u_InvestmentFlowBlock_max(source_0_bus_1_0_1)_: -+1 flow(source_0_bus_1_0_1) --1 InvestmentFlowBlock_total(source_0_bus_1_0) +c_u_InvestmentFlowBlock_max(source_1_bus_1_0_1)_: ++1 flow(source_1_bus_1_1) +-1 InvestmentFlowBlock_total(source_1_bus_1_0) <= 0 -c_u_InvestmentFlowBlock_max(source_0_bus_1_0_2)_: -+1 flow(source_0_bus_1_0_2) --1 InvestmentFlowBlock_total(source_0_bus_1_0) +c_u_InvestmentFlowBlock_max(source_1_bus_1_0_2)_: ++1 flow(source_1_bus_1_2) +-1 InvestmentFlowBlock_total(source_1_bus_1_0) <= 0 bounds - 0 <= InvestmentFlowBlock_invest(source_1_bus_1_0) <= +inf - 0 <= InvestmentFlowBlock_invest(source_2_bus_1_0) <= +inf 0 <= InvestmentFlowBlock_invest(source_0_bus_1_0) <= +inf - 0 <= flow(source_0_bus_1_0_0) <= +inf - 0 <= flow(source_2_bus_1_0_0) <= +inf - 0 <= flow(source_1_bus_1_0_0) <= +inf - 0 <= flow(source_0_bus_1_0_1) <= +inf - 0 <= flow(source_2_bus_1_0_1) <= +inf - 0 <= flow(source_1_bus_1_0_1) <= +inf - 0 <= flow(source_0_bus_1_0_2) <= +inf - 0 <= flow(source_2_bus_1_0_2) <= +inf - 0 <= flow(source_1_bus_1_0_2) <= +inf - 0 <= InvestmentFlowBlock_total(source_1_bus_1_0) <= +inf - 0 <= InvestmentFlowBlock_total(source_2_bus_1_0) <= +inf + 0 <= InvestmentFlowBlock_invest(source_2_bus_1_0) <= +inf + 0 <= InvestmentFlowBlock_invest(source_1_bus_1_0) <= +inf + 0 <= flow(source_0_bus_1_0) <= +inf + 0 <= flow(source_0_bus_1_1) <= +inf + 0 <= flow(source_0_bus_1_2) <= +inf + 0 <= flow(source_1_bus_1_0) <= +inf + 0 <= flow(source_1_bus_1_1) <= +inf + 0 <= flow(source_1_bus_1_2) <= +inf + 0 <= flow(source_2_bus_1_0) <= +inf + 0 <= flow(source_2_bus_1_1) <= +inf + 0 <= flow(source_2_bus_1_2) <= +inf 0 <= InvestmentFlowBlock_total(source_0_bus_1_0) <= +inf + 0 <= InvestmentFlowBlock_total(source_2_bus_1_0) <= +inf + 0 <= InvestmentFlowBlock_total(source_1_bus_1_0) <= +inf end diff --git a/tests/lp_files/inactivity_costs.lp b/tests/lp_files/inactivity_costs.lp index 16ed152a4..13af5cc7b 100644 --- a/tests/lp_files/inactivity_costs.lp +++ b/tests/lp_files/inactivity_costs.lp @@ -3,25 +3,25 @@ min objective: +6 ONE_VAR_CONSTANT -+10 flow(cheap_plant_inactivity_costs_Bus_C_0_0) -+10 flow(cheap_plant_inactivity_costs_Bus_C_0_1) -+10 flow(cheap_plant_inactivity_costs_Bus_C_0_2) ++10 flow(cheap_plant_inactivity_costs_Bus_C_0) ++10 flow(cheap_plant_inactivity_costs_Bus_C_1) ++10 flow(cheap_plant_inactivity_costs_Bus_C_2) -2 NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_0) -2 NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_1) -2 NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_2) s.t. -c_e_BusBlock_balance(Bus_C_0_0)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_0_0) +c_e_BusBlock_balance(Bus_C_0)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_0) = 0 -c_e_BusBlock_balance(Bus_C_0_1)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_0_1) +c_e_BusBlock_balance(Bus_C_1)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_1) = 0 -c_e_BusBlock_balance(Bus_C_0_2)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_0_2) +c_e_BusBlock_balance(Bus_C_2)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_2) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_inactivity_costs_Bus_C_0)_: @@ -39,41 +39,41 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_inactivity_costs_Bu +1 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_2) = 0 -c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_0_0)_: --1 flow(cheap_plant_inactivity_costs_Bus_C_0_0) +c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_0)_: +-1 flow(cheap_plant_inactivity_costs_Bus_C_0) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_0_1)_: --1 flow(cheap_plant_inactivity_costs_Bus_C_0_1) +c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_1)_: +-1 flow(cheap_plant_inactivity_costs_Bus_C_1) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_0_2)_: --1 flow(cheap_plant_inactivity_costs_Bus_C_0_2) +c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_2)_: +-1 flow(cheap_plant_inactivity_costs_Bus_C_2) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_0_0)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_0_0) +c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_0)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_0) -1 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_0_1)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_0_1) +c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_1)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_1) -1 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_0_2)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_0_2) +c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_2)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_2) -1 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_2) <= 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(cheap_plant_inactivity_costs_Bus_C_0_0) <= 10.0 - 0 <= flow(cheap_plant_inactivity_costs_Bus_C_0_1) <= 10.0 - 0 <= flow(cheap_plant_inactivity_costs_Bus_C_0_2) <= 10.0 + 0 <= flow(cheap_plant_inactivity_costs_Bus_C_0) <= 10.0 + 0 <= flow(cheap_plant_inactivity_costs_Bus_C_1) <= 10.0 + 0 <= flow(cheap_plant_inactivity_costs_Bus_C_2) <= 10.0 0 <= NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_1) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_2) <= 1 diff --git a/tests/lp_files/inactivity_costs_multi_period.lp b/tests/lp_files/inactivity_costs_multi_period.lp index b9a6b5800..532b6b432 100644 --- a/tests/lp_files/inactivity_costs_multi_period.lp +++ b/tests/lp_files/inactivity_costs_multi_period.lp @@ -3,12 +3,12 @@ min objective: +11.766243752402922 ONE_VAR_CONSTANT -+10 flow(cheap_plant_inactivity_costs_Bus_C_0_0) -+10 flow(cheap_plant_inactivity_costs_Bus_C_0_1) -+9.80392156862745 flow(cheap_plant_inactivity_costs_Bus_C_1_2) -+9.80392156862745 flow(cheap_plant_inactivity_costs_Bus_C_1_3) -+9.611687812379854 flow(cheap_plant_inactivity_costs_Bus_C_2_4) -+9.611687812379854 flow(cheap_plant_inactivity_costs_Bus_C_2_5) ++10 flow(cheap_plant_inactivity_costs_Bus_C_0) ++10 flow(cheap_plant_inactivity_costs_Bus_C_1) ++9.80392156862745 flow(cheap_plant_inactivity_costs_Bus_C_2) ++9.80392156862745 flow(cheap_plant_inactivity_costs_Bus_C_3) ++9.611687812379854 flow(cheap_plant_inactivity_costs_Bus_C_4) ++9.611687812379854 flow(cheap_plant_inactivity_costs_Bus_C_5) -2 NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_0) -2 NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_1) -1.9607843137254901 NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_2) @@ -18,28 +18,28 @@ objective: s.t. -c_e_BusBlock_balance(Bus_C_0_0)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_0_0) +c_e_BusBlock_balance(Bus_C_0)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_0) = 0 -c_e_BusBlock_balance(Bus_C_0_1)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_0_1) +c_e_BusBlock_balance(Bus_C_1)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_1) = 0 -c_e_BusBlock_balance(Bus_C_1_2)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_1_2) +c_e_BusBlock_balance(Bus_C_2)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_2) = 0 -c_e_BusBlock_balance(Bus_C_1_3)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_1_3) +c_e_BusBlock_balance(Bus_C_3)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_3) = 0 -c_e_BusBlock_balance(Bus_C_2_4)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_2_4) +c_e_BusBlock_balance(Bus_C_4)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_4) = 0 -c_e_BusBlock_balance(Bus_C_2_5)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_2_5) +c_e_BusBlock_balance(Bus_C_5)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_5) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_inactivity_costs_Bus_C_0)_: @@ -72,74 +72,74 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_inactivity_costs_Bu +1 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_5) = 0 -c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_0_0)_: --1 flow(cheap_plant_inactivity_costs_Bus_C_0_0) +c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_0)_: +-1 flow(cheap_plant_inactivity_costs_Bus_C_0) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_0_1)_: --1 flow(cheap_plant_inactivity_costs_Bus_C_0_1) +c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_1)_: +-1 flow(cheap_plant_inactivity_costs_Bus_C_1) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_1_2)_: --1 flow(cheap_plant_inactivity_costs_Bus_C_1_2) +c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_2)_: +-1 flow(cheap_plant_inactivity_costs_Bus_C_2) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_1_3)_: --1 flow(cheap_plant_inactivity_costs_Bus_C_1_3) +c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_3)_: +-1 flow(cheap_plant_inactivity_costs_Bus_C_3) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_3) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_2_4)_: --1 flow(cheap_plant_inactivity_costs_Bus_C_2_4) +c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_4)_: +-1 flow(cheap_plant_inactivity_costs_Bus_C_4) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_4) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_2_5)_: --1 flow(cheap_plant_inactivity_costs_Bus_C_2_5) +c_u_NonConvexFlowBlock_min(cheap_plant_inactivity_costs_Bus_C_5)_: +-1 flow(cheap_plant_inactivity_costs_Bus_C_5) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_5) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_0_0)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_0_0) +c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_0)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_0) -1 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_0_1)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_0_1) +c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_1)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_1) -1 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_1_2)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_1_2) +c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_2)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_2) -1 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_1_3)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_1_3) +c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_3)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_3) -1 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_3) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_2_4)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_2_4) +c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_4)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_4) -1 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_4) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_2_5)_: -+1 flow(cheap_plant_inactivity_costs_Bus_C_2_5) +c_u_NonConvexFlowBlock_max(cheap_plant_inactivity_costs_Bus_C_5)_: ++1 flow(cheap_plant_inactivity_costs_Bus_C_5) -1 NonConvexFlowBlock_status_nominal(cheap_plant_inactivity_costs_Bus_C_5) <= 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(cheap_plant_inactivity_costs_Bus_C_0_0) <= 10.0 - 0 <= flow(cheap_plant_inactivity_costs_Bus_C_0_1) <= 10.0 - 0 <= flow(cheap_plant_inactivity_costs_Bus_C_1_2) <= 10.0 - 0 <= flow(cheap_plant_inactivity_costs_Bus_C_1_3) <= 10.0 - 0 <= flow(cheap_plant_inactivity_costs_Bus_C_2_4) <= 10.0 - 0 <= flow(cheap_plant_inactivity_costs_Bus_C_2_5) <= 10.0 + 0 <= flow(cheap_plant_inactivity_costs_Bus_C_0) <= 10.0 + 0 <= flow(cheap_plant_inactivity_costs_Bus_C_1) <= 10.0 + 0 <= flow(cheap_plant_inactivity_costs_Bus_C_2) <= 10.0 + 0 <= flow(cheap_plant_inactivity_costs_Bus_C_3) <= 10.0 + 0 <= flow(cheap_plant_inactivity_costs_Bus_C_4) <= 10.0 + 0 <= flow(cheap_plant_inactivity_costs_Bus_C_5) <= 10.0 0 <= NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_1) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_inactivity_costs_Bus_C_2) <= 1 diff --git a/tests/lp_files/integer_source.lp b/tests/lp_files/integer_source.lp index 7a28ce404..5cd5960d1 100644 --- a/tests/lp_files/integer_source.lp +++ b/tests/lp_files/integer_source.lp @@ -2,43 +2,43 @@ min objective: -+25 flow(electricityBus_excess_0_0) -+25 flow(electricityBus_excess_0_1) -+25 flow(electricityBus_excess_0_2) ++25 flow(electricityBus_excess_0) ++25 flow(electricityBus_excess_1) ++25 flow(electricityBus_excess_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(electricityBus_excess_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(electricityBus_excess_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(electricityBus_excess_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(electricityBus_excess_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(electricityBus_excess_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(electricityBus_excess_2) = 0 -c_e_SimpleFlowBlock_integer_flow_constr(electricityBus_excess_0_0)_: --1 flow(electricityBus_excess_0_0) +c_e_SimpleFlowBlock_integer_flow_constr(electricityBus_excess_0)_: +-1 flow(electricityBus_excess_0) +1 SimpleFlowBlock_integer_flow(electricityBus_excess_0) = 0 -c_e_SimpleFlowBlock_integer_flow_constr(electricityBus_excess_0_1)_: --1 flow(electricityBus_excess_0_1) +c_e_SimpleFlowBlock_integer_flow_constr(electricityBus_excess_1)_: +-1 flow(electricityBus_excess_1) +1 SimpleFlowBlock_integer_flow(electricityBus_excess_1) = 0 -c_e_SimpleFlowBlock_integer_flow_constr(electricityBus_excess_0_2)_: --1 flow(electricityBus_excess_0_2) +c_e_SimpleFlowBlock_integer_flow_constr(electricityBus_excess_2)_: +-1 flow(electricityBus_excess_2) +1 SimpleFlowBlock_integer_flow(electricityBus_excess_2) = 0 bounds - 0 <= flow(electricityBus_excess_0_0) <= 10 - 0 <= flow(electricityBus_excess_0_1) <= 10 - 0 <= flow(electricityBus_excess_0_2) <= 10 + 0 <= flow(electricityBus_excess_0) <= 10 + 0 <= flow(electricityBus_excess_1) <= 10 + 0 <= flow(electricityBus_excess_2) <= 10 0 <= SimpleFlowBlock_integer_flow(electricityBus_excess_0) <= +inf 0 <= SimpleFlowBlock_integer_flow(electricityBus_excess_1) <= +inf 0 <= SimpleFlowBlock_integer_flow(electricityBus_excess_2) <= +inf diff --git a/tests/lp_files/invest_non_convex_flow.lp b/tests/lp_files/invest_non_convex_flow.lp index 17d43149a..7258edf67 100644 --- a/tests/lp_files/invest_non_convex_flow.lp +++ b/tests/lp_files/invest_non_convex_flow.lp @@ -2,41 +2,41 @@ min objective: -+8 flow(b1_b2_0_0) -+8 flow(b1_b2_0_1) -+8 flow(b1_b2_0_2) ++8 flow(b1_b2_0) ++8 flow(b1_b2_1) ++8 flow(b1_b2_2) +0.75 InvestNonConvexFlowBlock_invest(b1_b2_0) s.t. -c_e_BusBlock_balance(b2_0_0)_: -+1 flow(b1_b2_0_0) --1 flow(b2_b1_0_0) +c_e_BusBlock_balance(b1_0)_: +-1 flow(b1_b2_0) ++1 flow(b2_b1_0) = 0 -c_e_BusBlock_balance(b2_0_1)_: -+1 flow(b1_b2_0_1) --1 flow(b2_b1_0_1) +c_e_BusBlock_balance(b1_1)_: +-1 flow(b1_b2_1) ++1 flow(b2_b1_1) = 0 -c_e_BusBlock_balance(b2_0_2)_: -+1 flow(b1_b2_0_2) --1 flow(b2_b1_0_2) +c_e_BusBlock_balance(b1_2)_: +-1 flow(b1_b2_2) ++1 flow(b2_b1_2) = 0 -c_e_BusBlock_balance(b1_0_0)_: --1 flow(b1_b2_0_0) -+1 flow(b2_b1_0_0) +c_e_BusBlock_balance(b2_0)_: ++1 flow(b1_b2_0) +-1 flow(b2_b1_0) = 0 -c_e_BusBlock_balance(b1_0_1)_: --1 flow(b1_b2_0_1) -+1 flow(b2_b1_0_1) +c_e_BusBlock_balance(b2_1)_: ++1 flow(b1_b2_1) +-1 flow(b2_b1_1) = 0 -c_e_BusBlock_balance(b1_0_2)_: --1 flow(b1_b2_0_2) -+1 flow(b2_b1_0_2) +c_e_BusBlock_balance(b2_2)_: ++1 flow(b1_b2_2) +-1 flow(b2_b1_2) = 0 c_l_InvestNonConvexFlowBlock_minimum_investment(b1_b2_0)_: @@ -47,33 +47,33 @@ c_u_InvestNonConvexFlowBlock_maximum_investment(b1_b2_0)_: +1 InvestNonConvexFlowBlock_invest(b1_b2_0) <= 10 -c_u_InvestNonConvexFlowBlock_min(b1_b2_0_0)_: --1 flow(b1_b2_0_0) +c_u_InvestNonConvexFlowBlock_min(b1_b2_0)_: +-1 flow(b1_b2_0) +0.25 InvestNonConvexFlowBlock_status_nominal(b1_b2_0) <= 0 -c_u_InvestNonConvexFlowBlock_min(b1_b2_0_1)_: --1 flow(b1_b2_0_1) +c_u_InvestNonConvexFlowBlock_min(b1_b2_1)_: +-1 flow(b1_b2_1) +0.25 InvestNonConvexFlowBlock_status_nominal(b1_b2_1) <= 0 -c_u_InvestNonConvexFlowBlock_min(b1_b2_0_2)_: --1 flow(b1_b2_0_2) +c_u_InvestNonConvexFlowBlock_min(b1_b2_2)_: +-1 flow(b1_b2_2) +0.25 InvestNonConvexFlowBlock_status_nominal(b1_b2_2) <= 0 -c_u_InvestNonConvexFlowBlock_max(b1_b2_0_0)_: -+1 flow(b1_b2_0_0) +c_u_InvestNonConvexFlowBlock_max(b1_b2_0)_: ++1 flow(b1_b2_0) -0.5 InvestNonConvexFlowBlock_status_nominal(b1_b2_0) <= 0 -c_u_InvestNonConvexFlowBlock_max(b1_b2_0_1)_: -+1 flow(b1_b2_0_1) +c_u_InvestNonConvexFlowBlock_max(b1_b2_1)_: ++1 flow(b1_b2_1) -0.5 InvestNonConvexFlowBlock_status_nominal(b1_b2_1) <= 0 -c_u_InvestNonConvexFlowBlock_max(b1_b2_0_2)_: -+1 flow(b1_b2_0_2) +c_u_InvestNonConvexFlowBlock_max(b1_b2_2)_: ++1 flow(b1_b2_2) -0.5 InvestNonConvexFlowBlock_status_nominal(b1_b2_2) <= 0 @@ -126,13 +126,13 @@ c_u_InvestNonConvexFlowBlock_invest_nc_three(b1_b2_0_2)_: <= 10 bounds - 0 <= flow(b1_b2_0_0) <= +inf - 0 <= flow(b1_b2_0_1) <= +inf - 0 <= flow(b1_b2_0_2) <= +inf + 0 <= flow(b1_b2_0) <= +inf + 0 <= flow(b1_b2_1) <= +inf + 0 <= flow(b1_b2_2) <= +inf + 0 <= flow(b2_b1_0) <= +inf + 0 <= flow(b2_b1_1) <= +inf + 0 <= flow(b2_b1_2) <= +inf 0 <= InvestNonConvexFlowBlock_invest(b1_b2_0) <= 10 - 0 <= flow(b2_b1_0_0) <= +inf - 0 <= flow(b2_b1_0_1) <= +inf - 0 <= flow(b2_b1_0_2) <= +inf 0 <= InvestNonConvexFlowBlock_status_nominal(b1_b2_0) <= +inf 0 <= InvestNonConvexFlowBlock_status_nominal(b1_b2_1) <= +inf 0 <= InvestNonConvexFlowBlock_status_nominal(b1_b2_2) <= +inf diff --git a/tests/lp_files/invest_source_fixed_sink.lp b/tests/lp_files/invest_source_fixed_sink.lp index f7749fb18..6ceeb2ded 100644 --- a/tests/lp_files/invest_source_fixed_sink.lp +++ b/tests/lp_files/invest_source_fixed_sink.lp @@ -3,22 +3,22 @@ min objective: +123 InvestmentFlowBlock_invest(pv_electricityBus_0) -+13 flow(pv_electricityBus_0_0) -+13 flow(pv_electricityBus_0_1) -+13 flow(pv_electricityBus_0_2) ++13 flow(pv_electricityBus_0) ++13 flow(pv_electricityBus_1) ++13 flow(pv_electricityBus_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(pv_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(pv_electricityBus_0) = 50000.0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(pv_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(pv_electricityBus_1) = 80000.0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(pv_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(pv_electricityBus_2) = 30000.0 c_e_InvestmentFlowBlock_total_rule(pv_electricityBus_0)_: @@ -27,24 +27,24 @@ c_e_InvestmentFlowBlock_total_rule(pv_electricityBus_0)_: = 0 c_u_InvestmentFlowBlock_max(pv_electricityBus_0_0)_: -+1 flow(pv_electricityBus_0_0) ++1 flow(pv_electricityBus_0) -45 InvestmentFlowBlock_total(pv_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(pv_electricityBus_0_1)_: -+1 flow(pv_electricityBus_0_1) ++1 flow(pv_electricityBus_1) -83 InvestmentFlowBlock_total(pv_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(pv_electricityBus_0_2)_: -+1 flow(pv_electricityBus_0_2) ++1 flow(pv_electricityBus_2) -65 InvestmentFlowBlock_total(pv_electricityBus_0) <= 0 bounds 0 <= InvestmentFlowBlock_invest(pv_electricityBus_0) <= +inf - 0 <= flow(pv_electricityBus_0_0) <= +inf - 0 <= flow(pv_electricityBus_0_1) <= +inf - 0 <= flow(pv_electricityBus_0_2) <= +inf + 0 <= flow(pv_electricityBus_0) <= +inf + 0 <= flow(pv_electricityBus_1) <= +inf + 0 <= flow(pv_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_total(pv_electricityBus_0) <= +inf end diff --git a/tests/lp_files/invest_source_fixed_sink_multi_period.lp b/tests/lp_files/invest_source_fixed_sink_multi_period.lp index b549928ee..70844ad2a 100644 --- a/tests/lp_files/invest_source_fixed_sink_multi_period.lp +++ b/tests/lp_files/invest_source_fixed_sink_multi_period.lp @@ -5,37 +5,37 @@ objective: +18.16879316506207 InvestmentFlowBlock_invest(pv_electricityBus_0) +11.99221088531737 InvestmentFlowBlock_invest(pv_electricityBus_1) +5.93673806203831 InvestmentFlowBlock_invest(pv_electricityBus_2) -+13 flow(pv_electricityBus_0_0) -+13 flow(pv_electricityBus_0_1) -+12.745098039215685 flow(pv_electricityBus_1_2) -+12.745098039215685 flow(pv_electricityBus_1_3) -+12.49519415609381 flow(pv_electricityBus_2_4) -+12.49519415609381 flow(pv_electricityBus_2_5) ++13 flow(pv_electricityBus_0) ++13 flow(pv_electricityBus_1) ++12.745098039215685 flow(pv_electricityBus_2) ++12.745098039215685 flow(pv_electricityBus_3) ++12.49519415609381 flow(pv_electricityBus_4) ++12.49519415609381 flow(pv_electricityBus_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(pv_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(pv_electricityBus_0) = 50000.0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(pv_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(pv_electricityBus_1) = 80000.0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(pv_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(pv_electricityBus_2) = 30000.0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(pv_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(pv_electricityBus_3) = 60000.0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(pv_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(pv_electricityBus_4) = 70000.0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(pv_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(pv_electricityBus_5) = 20000.0 c_e_InvestmentFlowBlock_total_rule(pv_electricityBus_0)_: @@ -82,9 +82,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(pv_electricityBus_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(pv_electricityBus_0)_: ++1 InvestmentFlowBlock_old(pv_electricityBus_0) -1 InvestmentFlowBlock_old_end(pv_electricityBus_0) -1 InvestmentFlowBlock_old_exo(pv_electricityBus_0) -+1 InvestmentFlowBlock_old(pv_electricityBus_0) = 0 c_e_InvestmentFlowBlock_old_rule(pv_electricityBus_1)_: @@ -100,32 +100,32 @@ c_e_InvestmentFlowBlock_old_rule(pv_electricityBus_2)_: = 0 c_u_InvestmentFlowBlock_max(pv_electricityBus_0_0)_: -+1 flow(pv_electricityBus_0_0) ++1 flow(pv_electricityBus_0) -45 InvestmentFlowBlock_total(pv_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(pv_electricityBus_0_1)_: -+1 flow(pv_electricityBus_0_1) ++1 flow(pv_electricityBus_1) -83 InvestmentFlowBlock_total(pv_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(pv_electricityBus_1_2)_: -+1 flow(pv_electricityBus_1_2) ++1 flow(pv_electricityBus_2) -65 InvestmentFlowBlock_total(pv_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(pv_electricityBus_1_3)_: -+1 flow(pv_electricityBus_1_3) ++1 flow(pv_electricityBus_3) -67 InvestmentFlowBlock_total(pv_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(pv_electricityBus_2_4)_: -+1 flow(pv_electricityBus_2_4) ++1 flow(pv_electricityBus_4) -33 InvestmentFlowBlock_total(pv_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(pv_electricityBus_2_5)_: -+1 flow(pv_electricityBus_2_5) ++1 flow(pv_electricityBus_5) -96 InvestmentFlowBlock_total(pv_electricityBus_2) <= 0 @@ -133,16 +133,17 @@ bounds 0 <= InvestmentFlowBlock_invest(pv_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_invest(pv_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_invest(pv_electricityBus_2) <= +inf - 0 <= flow(pv_electricityBus_0_0) <= +inf - 0 <= flow(pv_electricityBus_0_1) <= +inf - 0 <= flow(pv_electricityBus_1_2) <= +inf - 0 <= flow(pv_electricityBus_1_3) <= +inf - 0 <= flow(pv_electricityBus_2_4) <= +inf - 0 <= flow(pv_electricityBus_2_5) <= +inf + 0 <= flow(pv_electricityBus_0) <= +inf + 0 <= flow(pv_electricityBus_1) <= +inf + 0 <= flow(pv_electricityBus_2) <= +inf + 0 <= flow(pv_electricityBus_3) <= +inf + 0 <= flow(pv_electricityBus_4) <= +inf + 0 <= flow(pv_electricityBus_5) <= +inf 0 <= InvestmentFlowBlock_total(pv_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(pv_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(pv_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(pv_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(pv_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(pv_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old(pv_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(pv_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_end(pv_electricityBus_1) <= +inf @@ -150,5 +151,4 @@ bounds 0 <= InvestmentFlowBlock_old_exo(pv_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(pv_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(pv_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(pv_electricityBus_0) <= +inf end diff --git a/tests/lp_files/investment_limit.lp b/tests/lp_files/investment_limit.lp index c52f8973b..f2569b9a4 100644 --- a/tests/lp_files/investment_limit.lp +++ b/tests/lp_files/investment_limit.lp @@ -12,82 +12,82 @@ c_u_investment_limit_: +145 GenericInvestmentStorageBlock_invest(storage_invest_limit_0) <= 900 -c_e_BusBlock_balance(Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) -+1 flow(storage_invest_limit_Bus1_0_0) --1 flow(Bus1_storage_invest_limit_0_0) +c_e_BusBlock_balance(Bus1_0)_: +-1 flow(Bus1_storage_invest_limit_0) ++1 flow(storage_invest_limit_Bus1_0) ++1 flow(Source_Bus1_0) = 0 -c_e_BusBlock_balance(Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) -+1 flow(storage_invest_limit_Bus1_0_1) --1 flow(Bus1_storage_invest_limit_0_1) +c_e_BusBlock_balance(Bus1_1)_: +-1 flow(Bus1_storage_invest_limit_1) ++1 flow(storage_invest_limit_Bus1_1) ++1 flow(Source_Bus1_1) = 0 -c_e_BusBlock_balance(Bus1_0_2)_: -+1 flow(Source_Bus1_0_2) -+1 flow(storage_invest_limit_Bus1_0_2) --1 flow(Bus1_storage_invest_limit_0_2) +c_e_BusBlock_balance(Bus1_2)_: +-1 flow(Bus1_storage_invest_limit_2) ++1 flow(storage_invest_limit_Bus1_2) ++1 flow(Source_Bus1_2) = 0 -c_e_InvestmentFlowBlock_total_rule(Bus1_storage_invest_limit_0)_: -+1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) --1 InvestmentFlowBlock_invest(Bus1_storage_invest_limit_0) +c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: +-1 InvestmentFlowBlock_invest(Source_Bus1_0) ++1 InvestmentFlowBlock_total(Source_Bus1_0) = 0 c_e_InvestmentFlowBlock_total_rule(storage_invest_limit_Bus1_0)_: -+1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) -1 InvestmentFlowBlock_invest(storage_invest_limit_Bus1_0) ++1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) = 0 -c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: --1 InvestmentFlowBlock_invest(Source_Bus1_0) -+1 InvestmentFlowBlock_total(Source_Bus1_0) +c_e_InvestmentFlowBlock_total_rule(Bus1_storage_invest_limit_0)_: +-1 InvestmentFlowBlock_invest(Bus1_storage_invest_limit_0) ++1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) = 0 -c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_0_0)_: -+1 flow(Bus1_storage_invest_limit_0_0) --1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) +c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: ++1 flow(Source_Bus1_0) +-1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 -c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_0_1)_: -+1 flow(Bus1_storage_invest_limit_0_1) --1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) +c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: ++1 flow(Source_Bus1_1) +-1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 -c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_0_2)_: -+1 flow(Bus1_storage_invest_limit_0_2) --1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) +c_u_InvestmentFlowBlock_max(Source_Bus1_0_2)_: ++1 flow(Source_Bus1_2) +-1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(storage_invest_limit_Bus1_0_0)_: -+1 flow(storage_invest_limit_Bus1_0_0) ++1 flow(storage_invest_limit_Bus1_0) -1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(storage_invest_limit_Bus1_0_1)_: -+1 flow(storage_invest_limit_Bus1_0_1) ++1 flow(storage_invest_limit_Bus1_1) -1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(storage_invest_limit_Bus1_0_2)_: -+1 flow(storage_invest_limit_Bus1_0_2) ++1 flow(storage_invest_limit_Bus1_2) -1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) <= 0 -c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) --1 InvestmentFlowBlock_total(Source_Bus1_0) +c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_0_0)_: ++1 flow(Bus1_storage_invest_limit_0) +-1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) <= 0 -c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) --1 InvestmentFlowBlock_total(Source_Bus1_0) +c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_0_1)_: ++1 flow(Bus1_storage_invest_limit_1) +-1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) <= 0 -c_u_InvestmentFlowBlock_max(Source_Bus1_0_2)_: -+1 flow(Source_Bus1_0_2) --1 InvestmentFlowBlock_total(Source_Bus1_0) +c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_0_2)_: ++1 flow(Bus1_storage_invest_limit_2) +-1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) <= 0 c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_invest_limit_0)_: @@ -101,22 +101,22 @@ c_u_GenericInvestmentStorageBlock_init_content_limit(storage_invest_limit)_: <= 0 c_e_GenericInvestmentStorageBlock_balance_first(storage_invest_limit)_: -+1 flow(storage_invest_limit_Bus1_0_0) --1 flow(Bus1_storage_invest_limit_0_0) +-1 flow(Bus1_storage_invest_limit_0) ++1 flow(storage_invest_limit_Bus1_0) -1 GenericInvestmentStorageBlock_init_content(storage_invest_limit) +1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_0) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_invest_limit_0_1)_: -+1 flow(storage_invest_limit_Bus1_0_1) --1 flow(Bus1_storage_invest_limit_0_1) +-1 flow(Bus1_storage_invest_limit_1) ++1 flow(storage_invest_limit_Bus1_1) -1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_0) +1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_invest_limit_0_2)_: -+1 flow(storage_invest_limit_Bus1_0_2) --1 flow(Bus1_storage_invest_limit_0_2) +-1 flow(Bus1_storage_invest_limit_2) ++1 flow(storage_invest_limit_Bus1_2) -1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_1) +1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_2) = 0 @@ -153,21 +153,21 @@ c_u_GenericInvestmentStorageBlock_max_storage_content(storage_invest_limit_0_2)_ bounds 0 <= InvestmentFlowBlock_invest(Source_Bus1_0) <= +inf - 0 <= GenericInvestmentStorageBlock_invest(storage_invest_limit_0) <= +inf - 0 <= flow(Source_Bus1_0_0) <= +inf - 0 <= flow(storage_invest_limit_Bus1_0_0) <= +inf - 0 <= flow(Bus1_storage_invest_limit_0_0) <= +inf - 0 <= flow(Source_Bus1_0_1) <= +inf - 0 <= flow(storage_invest_limit_Bus1_0_1) <= +inf - 0 <= flow(Bus1_storage_invest_limit_0_1) <= +inf - 0 <= flow(Source_Bus1_0_2) <= +inf - 0 <= flow(storage_invest_limit_Bus1_0_2) <= +inf - 0 <= flow(Bus1_storage_invest_limit_0_2) <= +inf - 0 <= InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) <= +inf - 0 <= InvestmentFlowBlock_invest(Bus1_storage_invest_limit_0) <= +inf - 0 <= InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_invest(storage_invest_limit_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_storage_invest_limit_0) <= +inf + 0 <= GenericInvestmentStorageBlock_invest(storage_invest_limit_0) <= +inf + 0 <= flow(Bus1_storage_invest_limit_0) <= +inf + 0 <= flow(Bus1_storage_invest_limit_1) <= +inf + 0 <= flow(Bus1_storage_invest_limit_2) <= +inf + 0 <= flow(storage_invest_limit_Bus1_0) <= +inf + 0 <= flow(storage_invest_limit_Bus1_1) <= +inf + 0 <= flow(storage_invest_limit_Bus1_2) <= +inf + 0 <= flow(Source_Bus1_0) <= +inf + 0 <= flow(Source_Bus1_1) <= +inf + 0 <= flow(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_invest_limit_0) <= +inf 0 <= GenericInvestmentStorageBlock_init_content(storage_invest_limit) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_invest_limit_0) <= +inf diff --git a/tests/lp_files/investment_limit_with_dsm_DIW.lp b/tests/lp_files/investment_limit_with_dsm_DIW.lp index 2f1f88c0f..f3074c71e 100644 --- a/tests/lp_files/investment_limit_with_dsm_DIW.lp +++ b/tests/lp_files/investment_limit_with_dsm_DIW.lp @@ -4,17 +4,17 @@ min objective: +123 InvestmentFlowBlock_invest(Source_Bus1_0) +0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_2) +0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) +0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_0) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) +0.5 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) +0.5 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) +0.5 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_2) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) +100 SinkDSMDIWInvestmentBlock_invest(sink_dsm_DIW_0) s.t. @@ -24,19 +24,19 @@ c_u_investment_limit_: +100 SinkDSMDIWInvestmentBlock_invest(sink_dsm_DIW_0) <= 900 -c_e_BusBlock_balance(Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) --1 flow(Bus1_sink_dsm_DIW_0_0) +c_e_BusBlock_balance(Bus1_0)_: +-1 flow(Bus1_sink_dsm_DIW_0) ++1 flow(Source_Bus1_0) = 0 -c_e_BusBlock_balance(Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) --1 flow(Bus1_sink_dsm_DIW_0_1) +c_e_BusBlock_balance(Bus1_1)_: +-1 flow(Bus1_sink_dsm_DIW_1) ++1 flow(Source_Bus1_1) = 0 -c_e_BusBlock_balance(Bus1_0_2)_: -+1 flow(Source_Bus1_0_2) --1 flow(Bus1_sink_dsm_DIW_0_2) +c_e_BusBlock_balance(Bus1_2)_: +-1 flow(Bus1_sink_dsm_DIW_2) ++1 flow(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: @@ -45,17 +45,17 @@ c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: = 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) ++1 flow(Source_Bus1_0) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) ++1 flow(Source_Bus1_1) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_2)_: -+1 flow(Source_Bus1_0_2) ++1 flow(Source_Bus1_2) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 @@ -79,45 +79,45 @@ c_e_SinkDSMDIWInvestmentBlock_shift_shed_vars(sink_dsm_DIW_2)_: c_e_SinkDSMDIWInvestmentBlock_input_output_relation(sink_dsm_DIW_0_0)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) --1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) -+1 flow(Bus1_sink_dsm_DIW_0_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) +-1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) ++1 flow(Bus1_sink_dsm_DIW_0) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(sink_dsm_DIW_0_1)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) -+1 flow(Bus1_sink_dsm_DIW_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_1) +-1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) ++1 flow(Bus1_sink_dsm_DIW_1) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(sink_dsm_DIW_0_2)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) -+1 flow(Bus1_sink_dsm_DIW_0_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_2) +-1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) ++1 flow(Bus1_sink_dsm_DIW_2) = 1 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(sink_dsm_DIW_0)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(sink_dsm_DIW_1)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(sink_dsm_DIW_2)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) = 0 c_u_SinkDSMDIWInvestmentBlock_dsm_up_constraint(sink_dsm_DIW_0_0)_: @@ -138,74 +138,74 @@ c_u_SinkDSMDIWInvestmentBlock_dsm_up_constraint(sink_dsm_DIW_0_2)_: c_u_SinkDSMDIWInvestmentBlock_dsm_do_constraint(sink_dsm_DIW_0_0)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_dsm_do_constraint(sink_dsm_DIW_0_1)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_1) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_dsm_do_constraint(sink_dsm_DIW_0_2)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_2) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(sink_dsm_DIW_0_0)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) +1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) -0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(sink_dsm_DIW_0_1)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(sink_dsm_DIW_0_2)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) <= 0 bounds 0 <= InvestmentFlowBlock_invest(Source_Bus1_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) <= +inf 33 <= SinkDSMDIWInvestmentBlock_invest(sink_dsm_DIW_0) <= 100 - 0 <= flow(Source_Bus1_0_0) <= +inf - 0 <= flow(Bus1_sink_dsm_DIW_0_0) <= +inf - 0 <= flow(Source_Bus1_0_1) <= +inf - 0 <= flow(Bus1_sink_dsm_DIW_0_1) <= +inf - 0 <= flow(Source_Bus1_0_2) <= +inf - 0 <= flow(Bus1_sink_dsm_DIW_0_2) <= +inf + 0 <= flow(Bus1_sink_dsm_DIW_0) <= +inf + 0 <= flow(Bus1_sink_dsm_DIW_1) <= +inf + 0 <= flow(Bus1_sink_dsm_DIW_2) <= +inf + 0 <= flow(Source_Bus1_0) <= +inf + 0 <= flow(Source_Bus1_1) <= +inf + 0 <= flow(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_2) <= +inf end diff --git a/tests/lp_files/investment_limit_with_dsm_DLR.lp b/tests/lp_files/investment_limit_with_dsm_DLR.lp index d6d74c5de..c92d6003a 100644 --- a/tests/lp_files/investment_limit_with_dsm_DLR.lp +++ b/tests/lp_files/investment_limit_with_dsm_DLR.lp @@ -4,17 +4,17 @@ min objective: +123 InvestmentFlowBlock_invest(Source_Bus1_0) +0.5 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_0) ++0.5 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) ++0.5 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) +0.5 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_0) ++0.5 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) ++0.5 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) +0.5 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) -+0.5 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) +0.5 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) -+0.5 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) -+0.5 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) -+0.5 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) +0.5 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) ++0.5 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) ++0.5 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) +0.5 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) -+0.5 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) -+0.5 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) +100 SinkDSMDLRInvestmentBlock_invest(sink_dsm_DLR_0) s.t. @@ -24,19 +24,19 @@ c_u_investment_limit_: +100 SinkDSMDLRInvestmentBlock_invest(sink_dsm_DLR_0) <= 900 -c_e_BusBlock_balance(Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) --1 flow(Bus1_sink_dsm_DLR_0_0) +c_e_BusBlock_balance(Bus1_0)_: +-1 flow(Bus1_sink_dsm_DLR_0) ++1 flow(Source_Bus1_0) = 0 -c_e_BusBlock_balance(Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) --1 flow(Bus1_sink_dsm_DLR_0_1) +c_e_BusBlock_balance(Bus1_1)_: +-1 flow(Bus1_sink_dsm_DLR_1) ++1 flow(Source_Bus1_1) = 0 -c_e_BusBlock_balance(Bus1_0_2)_: -+1 flow(Source_Bus1_0_2) --1 flow(Bus1_sink_dsm_DLR_0_2) +c_e_BusBlock_balance(Bus1_2)_: +-1 flow(Bus1_sink_dsm_DLR_2) ++1 flow(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: @@ -45,17 +45,17 @@ c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: = 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) ++1 flow(Source_Bus1_0) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) ++1 flow(Source_Bus1_1) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_2)_: -+1 flow(Source_Bus1_0_2) ++1 flow(Source_Bus1_2) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 @@ -79,28 +79,28 @@ c_e_SinkDSMDLRInvestmentBlock_shift_shed_vars(sink_dsm_DLR_1_2)_: c_e_SinkDSMDLRInvestmentBlock_input_output_relation(sink_dsm_DLR_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) -1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) -+1 flow(Bus1_sink_dsm_DLR_0_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) ++1 flow(Bus1_sink_dsm_DLR_0) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(sink_dsm_DLR_0_1)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) -+1 flow(Bus1_sink_dsm_DLR_0_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_1) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) ++1 flow(Bus1_sink_dsm_DLR_1) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(sink_dsm_DLR_0_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) -+1 flow(Bus1_sink_dsm_DLR_0_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_2) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) ++1 flow(Bus1_sink_dsm_DLR_2) = 1 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(sink_dsm_DLR_1_0)_: @@ -122,13 +122,13 @@ c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(sink_dsm_DLR_1_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(sink_dsm_DLR_1_1)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(sink_dsm_DLR_1_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) = 0 c_e_SinkDSMDLRInvestmentBlock_no_comp_red(sink_dsm_DLR_1_2)_: @@ -142,22 +142,22 @@ c_e_SinkDSMDLRInvestmentBlock_no_comp_inc(sink_dsm_DLR_1_2)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(sink_dsm_DLR_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_0) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_red(sink_dsm_DLR_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_1) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_red(sink_dsm_DLR_0_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_2) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(sink_dsm_DLR_0_0)_: @@ -184,15 +184,15 @@ c_e_SinkDSMDLRInvestmentBlock_dr_storage_red(sink_dsm_DLR_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_red(sink_dsm_DLR_1)_: --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_0) -1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_1) = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_red(sink_dsm_DLR_2)_: --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_1) -1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_2) = 0 @@ -203,15 +203,15 @@ c_e_SinkDSMDLRInvestmentBlock_dr_storage_inc(sink_dsm_DLR_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_inc(sink_dsm_DLR_1)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) -1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_0) -1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_1) = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_inc(sink_dsm_DLR_2)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) -1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_1) -1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_2) = 0 @@ -249,56 +249,56 @@ c_u_SinkDSMDLRInvestmentBlock_dr_storage_limit_inc(sink_dsm_DLR_0_2)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(sink_dsm_DLR_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) -0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(sink_dsm_DLR_0_1)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_1) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(sink_dsm_DLR_0_2)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_2) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) <= 0 bounds 0 <= InvestmentFlowBlock_invest(Source_Bus1_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) <= +inf 33 <= SinkDSMDLRInvestmentBlock_invest(sink_dsm_DLR_0) <= 100 - 0 <= flow(Source_Bus1_0_0) <= +inf - 0 <= flow(Bus1_sink_dsm_DLR_0_0) <= +inf - 0 <= flow(Source_Bus1_0_1) <= +inf - 0 <= flow(Bus1_sink_dsm_DLR_0_1) <= +inf - 0 <= flow(Source_Bus1_0_2) <= +inf - 0 <= flow(Bus1_sink_dsm_DLR_0_2) <= +inf + 0 <= flow(Bus1_sink_dsm_DLR_0) <= +inf + 0 <= flow(Bus1_sink_dsm_DLR_1) <= +inf + 0 <= flow(Bus1_sink_dsm_DLR_2) <= +inf + 0 <= flow(Source_Bus1_0) <= +inf + 0 <= flow(Source_Bus1_1) <= +inf + 0 <= flow(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_2) <= +inf diff --git a/tests/lp_files/investment_limit_with_dsm_oemof.lp b/tests/lp_files/investment_limit_with_dsm_oemof.lp index ecfc14250..b02c8cc22 100644 --- a/tests/lp_files/investment_limit_with_dsm_oemof.lp +++ b/tests/lp_files/investment_limit_with_dsm_oemof.lp @@ -4,11 +4,11 @@ min objective: +123 InvestmentFlowBlock_invest(Source_Bus1_0) +0.5 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_0) ++0.5 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) ++0.5 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_2) +0.5 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_0) +0.5 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_1) -+0.5 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) +0.5 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_2) -+0.5 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_2) +100 SinkDSMOemofInvestmentBlock_invest(sink_dsm_oemof_0) s.t. @@ -18,19 +18,19 @@ c_u_investment_limit_: +100 SinkDSMOemofInvestmentBlock_invest(sink_dsm_oemof_0) <= 900 -c_e_BusBlock_balance(Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) --1 flow(Bus1_sink_dsm_oemof_0_0) +c_e_BusBlock_balance(Bus1_0)_: +-1 flow(Bus1_sink_dsm_oemof_0) ++1 flow(Source_Bus1_0) = 0 -c_e_BusBlock_balance(Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) --1 flow(Bus1_sink_dsm_oemof_0_1) +c_e_BusBlock_balance(Bus1_1)_: +-1 flow(Bus1_sink_dsm_oemof_1) ++1 flow(Source_Bus1_1) = 0 -c_e_BusBlock_balance(Bus1_0_2)_: -+1 flow(Source_Bus1_0_2) --1 flow(Bus1_sink_dsm_oemof_0_2) +c_e_BusBlock_balance(Bus1_2)_: +-1 flow(Bus1_sink_dsm_oemof_2) ++1 flow(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: @@ -39,17 +39,17 @@ c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: = 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) ++1 flow(Source_Bus1_0) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) ++1 flow(Source_Bus1_1) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_2)_: -+1 flow(Source_Bus1_0_2) ++1 flow(Source_Bus1_2) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 @@ -73,21 +73,21 @@ c_e_SinkDSMOemofInvestmentBlock_shift_shed_vars(sink_dsm_oemof_2)_: c_e_SinkDSMOemofInvestmentBlock_input_output_relation(sink_dsm_oemof_0_0)_: +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_0) -1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_0) -+1 flow(Bus1_sink_dsm_oemof_0_0) ++1 flow(Bus1_sink_dsm_oemof_0) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_0) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(sink_dsm_oemof_0_1)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) -+1 flow(Bus1_sink_dsm_oemof_0_1) +-1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_1) ++1 flow(Bus1_sink_dsm_oemof_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_1) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(sink_dsm_oemof_0_2)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_2) -+1 flow(Bus1_sink_dsm_oemof_0_2) +-1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_2) ++1 flow(Bus1_sink_dsm_oemof_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_2) = 1 @@ -126,26 +126,26 @@ c_u_SinkDSMOemofInvestmentBlock_dsm_down_constraint(sink_dsm_oemof_0_2)_: c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(sink_dsm_oemof_0)_: -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_0) +-1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) +1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_0) +1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_1) --1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) = 0 bounds 0 <= InvestmentFlowBlock_invest(Source_Bus1_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_2) <= +inf 33 <= SinkDSMOemofInvestmentBlock_invest(sink_dsm_oemof_0) <= 100 - 0 <= flow(Source_Bus1_0_0) <= +inf - 0 <= flow(Bus1_sink_dsm_oemof_0_0) <= +inf - 0 <= flow(Source_Bus1_0_1) <= +inf - 0 <= flow(Bus1_sink_dsm_oemof_0_1) <= +inf - 0 <= flow(Source_Bus1_0_2) <= +inf - 0 <= flow(Bus1_sink_dsm_oemof_0_2) <= +inf + 0 <= flow(Bus1_sink_dsm_oemof_0) <= +inf + 0 <= flow(Bus1_sink_dsm_oemof_1) <= +inf + 0 <= flow(Bus1_sink_dsm_oemof_2) <= +inf + 0 <= flow(Source_Bus1_0) <= +inf + 0 <= flow(Source_Bus1_1) <= +inf + 0 <= flow(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(sink_dsm_oemof_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_0) <= +inf diff --git a/tests/lp_files/linear_converter.lp b/tests/lp_files/linear_converter.lp index 86eddb60f..b7c1b8106 100644 --- a/tests/lp_files/linear_converter.lp +++ b/tests/lp_files/linear_converter.lp @@ -2,56 +2,56 @@ min objective: -+50 flow(powerplantGas_electricity_0_0) -+50 flow(powerplantGas_electricity_0_1) -+50 flow(powerplantGas_electricity_0_2) ++50 flow(powerplantGas_electricity_0) ++50 flow(powerplantGas_electricity_1) ++50 flow(powerplantGas_electricity_2) s.t. -c_e_BusBlock_balance(gas_0_0)_: -+1 flow(gas_powerplantGas_0_0) +c_e_BusBlock_balance(electricity_0)_: ++1 flow(powerplantGas_electricity_0) = 0 -c_e_BusBlock_balance(gas_0_1)_: -+1 flow(gas_powerplantGas_0_1) +c_e_BusBlock_balance(electricity_1)_: ++1 flow(powerplantGas_electricity_1) = 0 -c_e_BusBlock_balance(gas_0_2)_: -+1 flow(gas_powerplantGas_0_2) +c_e_BusBlock_balance(electricity_2)_: ++1 flow(powerplantGas_electricity_2) = 0 -c_e_BusBlock_balance(electricity_0_0)_: -+1 flow(powerplantGas_electricity_0_0) +c_e_BusBlock_balance(gas_0)_: ++1 flow(gas_powerplantGas_0) = 0 -c_e_BusBlock_balance(electricity_0_1)_: -+1 flow(powerplantGas_electricity_0_1) +c_e_BusBlock_balance(gas_1)_: ++1 flow(gas_powerplantGas_1) = 0 -c_e_BusBlock_balance(electricity_0_2)_: -+1 flow(powerplantGas_electricity_0_2) +c_e_BusBlock_balance(gas_2)_: ++1 flow(gas_powerplantGas_2) = 0 -c_e_ConverterBlock_relation(powerplantGas_gas_electricity_0_0)_: --1 flow(powerplantGas_electricity_0_0) -+0.58 flow(gas_powerplantGas_0_0) +c_e_ConverterBlock_relation(powerplantGas_gas_electricity_0)_: ++0.58 flow(gas_powerplantGas_0) +-1 flow(powerplantGas_electricity_0) = 0 -c_e_ConverterBlock_relation(powerplantGas_gas_electricity_0_1)_: --1 flow(powerplantGas_electricity_0_1) -+0.58 flow(gas_powerplantGas_0_1) +c_e_ConverterBlock_relation(powerplantGas_gas_electricity_1)_: ++0.58 flow(gas_powerplantGas_1) +-1 flow(powerplantGas_electricity_1) = 0 -c_e_ConverterBlock_relation(powerplantGas_gas_electricity_0_2)_: --1 flow(powerplantGas_electricity_0_2) -+0.58 flow(gas_powerplantGas_0_2) +c_e_ConverterBlock_relation(powerplantGas_gas_electricity_2)_: ++0.58 flow(gas_powerplantGas_2) +-1 flow(powerplantGas_electricity_2) = 0 bounds - 0.0 <= flow(powerplantGas_electricity_0_0) <= 100000000000.0 - 0.0 <= flow(powerplantGas_electricity_0_1) <= 100000000000.0 - 0.0 <= flow(powerplantGas_electricity_0_2) <= 100000000000.0 - 0 <= flow(gas_powerplantGas_0_0) <= +inf - 0 <= flow(gas_powerplantGas_0_1) <= +inf - 0 <= flow(gas_powerplantGas_0_2) <= +inf + 0 <= flow(gas_powerplantGas_0) <= +inf + 0 <= flow(gas_powerplantGas_1) <= +inf + 0 <= flow(gas_powerplantGas_2) <= +inf + 0.0 <= flow(powerplantGas_electricity_0) <= 100000000000.0 + 0.0 <= flow(powerplantGas_electricity_1) <= 100000000000.0 + 0.0 <= flow(powerplantGas_electricity_2) <= 100000000000.0 end diff --git a/tests/lp_files/linear_converter_chp.lp b/tests/lp_files/linear_converter_chp.lp index adf6125be..643270948 100644 --- a/tests/lp_files/linear_converter_chp.lp +++ b/tests/lp_files/linear_converter_chp.lp @@ -2,86 +2,86 @@ min objective: -+50 flow(gasBus_CHPpowerplantGas_0_0) -+50 flow(gasBus_CHPpowerplantGas_0_1) -+50 flow(gasBus_CHPpowerplantGas_0_2) ++50 flow(gasBus_CHPpowerplantGas_0) ++50 flow(gasBus_CHPpowerplantGas_1) ++50 flow(gasBus_CHPpowerplantGas_2) s.t. -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_CHPpowerplantGas_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(CHPpowerplantGas_electricityBus_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_CHPpowerplantGas_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(CHPpowerplantGas_electricityBus_1) = 0 -c_e_BusBlock_balance(gasBus_0_2)_: -+1 flow(gasBus_CHPpowerplantGas_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(CHPpowerplantGas_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(CHPpowerplantGas_electricityBus_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_CHPpowerplantGas_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(CHPpowerplantGas_electricityBus_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_CHPpowerplantGas_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(CHPpowerplantGas_electricityBus_0_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_CHPpowerplantGas_2) = 0 -c_e_BusBlock_balance(heatBus_0_0)_: -+1 flow(CHPpowerplantGas_heatBus_0_0) +c_e_BusBlock_balance(heatBus_0)_: ++1 flow(CHPpowerplantGas_heatBus_0) = 0 -c_e_BusBlock_balance(heatBus_0_1)_: -+1 flow(CHPpowerplantGas_heatBus_0_1) +c_e_BusBlock_balance(heatBus_1)_: ++1 flow(CHPpowerplantGas_heatBus_1) = 0 -c_e_BusBlock_balance(heatBus_0_2)_: -+1 flow(CHPpowerplantGas_heatBus_0_2) +c_e_BusBlock_balance(heatBus_2)_: ++1 flow(CHPpowerplantGas_heatBus_2) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_0_0)_: -+0.4 flow(gasBus_CHPpowerplantGas_0_0) --1 flow(CHPpowerplantGas_electricityBus_0_0) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_0)_: ++0.4 flow(gasBus_CHPpowerplantGas_0) +-1 flow(CHPpowerplantGas_electricityBus_0) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_0_0)_: -+0.5 flow(gasBus_CHPpowerplantGas_0_0) --1 flow(CHPpowerplantGas_heatBus_0_0) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_0)_: ++0.5 flow(gasBus_CHPpowerplantGas_0) +-1 flow(CHPpowerplantGas_heatBus_0) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_0_1)_: -+0.4 flow(gasBus_CHPpowerplantGas_0_1) --1 flow(CHPpowerplantGas_electricityBus_0_1) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_1)_: ++0.4 flow(gasBus_CHPpowerplantGas_1) +-1 flow(CHPpowerplantGas_electricityBus_1) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_0_1)_: -+0.5 flow(gasBus_CHPpowerplantGas_0_1) --1 flow(CHPpowerplantGas_heatBus_0_1) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_1)_: ++0.5 flow(gasBus_CHPpowerplantGas_1) +-1 flow(CHPpowerplantGas_heatBus_1) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_0_2)_: -+0.4 flow(gasBus_CHPpowerplantGas_0_2) --1 flow(CHPpowerplantGas_electricityBus_0_2) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_2)_: ++0.4 flow(gasBus_CHPpowerplantGas_2) +-1 flow(CHPpowerplantGas_electricityBus_2) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_0_2)_: -+0.5 flow(gasBus_CHPpowerplantGas_0_2) --1 flow(CHPpowerplantGas_heatBus_0_2) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_2)_: ++0.5 flow(gasBus_CHPpowerplantGas_2) +-1 flow(CHPpowerplantGas_heatBus_2) = 0 bounds - 0.0 <= flow(gasBus_CHPpowerplantGas_0_0) <= 100000000000.0 - 0.0 <= flow(gasBus_CHPpowerplantGas_0_1) <= 100000000000.0 - 0.0 <= flow(gasBus_CHPpowerplantGas_0_2) <= 100000000000.0 - 0 <= flow(CHPpowerplantGas_electricityBus_0_0) <= +inf - 0 <= flow(CHPpowerplantGas_electricityBus_0_1) <= +inf - 0 <= flow(CHPpowerplantGas_electricityBus_0_2) <= +inf - 0 <= flow(CHPpowerplantGas_heatBus_0_0) <= +inf - 0 <= flow(CHPpowerplantGas_heatBus_0_1) <= +inf - 0 <= flow(CHPpowerplantGas_heatBus_0_2) <= +inf + 0.0 <= flow(gasBus_CHPpowerplantGas_0) <= 100000000000.0 + 0.0 <= flow(gasBus_CHPpowerplantGas_1) <= 100000000000.0 + 0.0 <= flow(gasBus_CHPpowerplantGas_2) <= 100000000000.0 + 0 <= flow(CHPpowerplantGas_electricityBus_0) <= +inf + 0 <= flow(CHPpowerplantGas_electricityBus_1) <= +inf + 0 <= flow(CHPpowerplantGas_electricityBus_2) <= +inf + 0 <= flow(CHPpowerplantGas_heatBus_0) <= +inf + 0 <= flow(CHPpowerplantGas_heatBus_1) <= +inf + 0 <= flow(CHPpowerplantGas_heatBus_2) <= +inf end diff --git a/tests/lp_files/linear_converter_chp_invest.lp b/tests/lp_files/linear_converter_chp_invest.lp index 5043bc0be..c2815a08d 100644 --- a/tests/lp_files/linear_converter_chp_invest.lp +++ b/tests/lp_files/linear_converter_chp_invest.lp @@ -3,76 +3,76 @@ min objective: +20 InvestmentFlowBlock_invest(gasBus_chp_powerplant_gas_0) -+50 flow(gasBus_chp_powerplant_gas_0_0) -+50 flow(gasBus_chp_powerplant_gas_0_1) -+50 flow(gasBus_chp_powerplant_gas_0_2) ++50 flow(gasBus_chp_powerplant_gas_0) ++50 flow(gasBus_chp_powerplant_gas_1) ++50 flow(gasBus_chp_powerplant_gas_2) s.t. -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_chp_powerplant_gas_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(chp_powerplant_gas_electricityBus_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_chp_powerplant_gas_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(chp_powerplant_gas_electricityBus_1) = 0 -c_e_BusBlock_balance(gasBus_0_2)_: -+1 flow(gasBus_chp_powerplant_gas_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(chp_powerplant_gas_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(chp_powerplant_gas_electricityBus_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_chp_powerplant_gas_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(chp_powerplant_gas_electricityBus_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_chp_powerplant_gas_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(chp_powerplant_gas_electricityBus_0_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_chp_powerplant_gas_2) = 0 -c_e_BusBlock_balance(heatBus_0_0)_: -+1 flow(chp_powerplant_gas_heatBus_0_0) +c_e_BusBlock_balance(heatBus_0)_: ++1 flow(chp_powerplant_gas_heatBus_0) = 0 -c_e_BusBlock_balance(heatBus_0_1)_: -+1 flow(chp_powerplant_gas_heatBus_0_1) +c_e_BusBlock_balance(heatBus_1)_: ++1 flow(chp_powerplant_gas_heatBus_1) = 0 -c_e_BusBlock_balance(heatBus_0_2)_: -+1 flow(chp_powerplant_gas_heatBus_0_2) +c_e_BusBlock_balance(heatBus_2)_: ++1 flow(chp_powerplant_gas_heatBus_2) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_0_0)_: -+0.4 flow(gasBus_chp_powerplant_gas_0_0) --1 flow(chp_powerplant_gas_electricityBus_0_0) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_0)_: ++0.4 flow(gasBus_chp_powerplant_gas_0) +-1 flow(chp_powerplant_gas_electricityBus_0) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_0_0)_: -+0.5 flow(gasBus_chp_powerplant_gas_0_0) --1 flow(chp_powerplant_gas_heatBus_0_0) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_0)_: ++0.5 flow(gasBus_chp_powerplant_gas_0) +-1 flow(chp_powerplant_gas_heatBus_0) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_0_1)_: -+0.4 flow(gasBus_chp_powerplant_gas_0_1) --1 flow(chp_powerplant_gas_electricityBus_0_1) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_1)_: ++0.4 flow(gasBus_chp_powerplant_gas_1) +-1 flow(chp_powerplant_gas_electricityBus_1) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_0_1)_: -+0.5 flow(gasBus_chp_powerplant_gas_0_1) --1 flow(chp_powerplant_gas_heatBus_0_1) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_1)_: ++0.5 flow(gasBus_chp_powerplant_gas_1) +-1 flow(chp_powerplant_gas_heatBus_1) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_0_2)_: -+0.4 flow(gasBus_chp_powerplant_gas_0_2) --1 flow(chp_powerplant_gas_electricityBus_0_2) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_2)_: ++0.4 flow(gasBus_chp_powerplant_gas_2) +-1 flow(chp_powerplant_gas_electricityBus_2) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_0_2)_: -+0.5 flow(gasBus_chp_powerplant_gas_0_2) --1 flow(chp_powerplant_gas_heatBus_0_2) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_2)_: ++0.5 flow(gasBus_chp_powerplant_gas_2) +-1 flow(chp_powerplant_gas_heatBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(gasBus_chp_powerplant_gas_0)_: @@ -81,30 +81,30 @@ c_e_InvestmentFlowBlock_total_rule(gasBus_chp_powerplant_gas_0)_: = 0 c_u_InvestmentFlowBlock_max(gasBus_chp_powerplant_gas_0_0)_: -+1 flow(gasBus_chp_powerplant_gas_0_0) ++1 flow(gasBus_chp_powerplant_gas_0) -1 InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_0) <= 0 c_u_InvestmentFlowBlock_max(gasBus_chp_powerplant_gas_0_1)_: -+1 flow(gasBus_chp_powerplant_gas_0_1) ++1 flow(gasBus_chp_powerplant_gas_1) -1 InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_0) <= 0 c_u_InvestmentFlowBlock_max(gasBus_chp_powerplant_gas_0_2)_: -+1 flow(gasBus_chp_powerplant_gas_0_2) ++1 flow(gasBus_chp_powerplant_gas_2) -1 InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_0) <= 0 bounds 0 <= InvestmentFlowBlock_invest(gasBus_chp_powerplant_gas_0) <= 1000 - 0 <= flow(gasBus_chp_powerplant_gas_0_0) <= +inf - 0 <= flow(gasBus_chp_powerplant_gas_0_1) <= +inf - 0 <= flow(gasBus_chp_powerplant_gas_0_2) <= +inf - 0 <= flow(chp_powerplant_gas_electricityBus_0_0) <= +inf - 0 <= flow(chp_powerplant_gas_electricityBus_0_1) <= +inf - 0 <= flow(chp_powerplant_gas_electricityBus_0_2) <= +inf - 0 <= flow(chp_powerplant_gas_heatBus_0_0) <= +inf - 0 <= flow(chp_powerplant_gas_heatBus_0_1) <= +inf - 0 <= flow(chp_powerplant_gas_heatBus_0_2) <= +inf + 0 <= flow(gasBus_chp_powerplant_gas_0) <= +inf + 0 <= flow(gasBus_chp_powerplant_gas_1) <= +inf + 0 <= flow(gasBus_chp_powerplant_gas_2) <= +inf + 0 <= flow(chp_powerplant_gas_electricityBus_0) <= +inf + 0 <= flow(chp_powerplant_gas_electricityBus_1) <= +inf + 0 <= flow(chp_powerplant_gas_electricityBus_2) <= +inf + 0 <= flow(chp_powerplant_gas_heatBus_0) <= +inf + 0 <= flow(chp_powerplant_gas_heatBus_1) <= +inf + 0 <= flow(chp_powerplant_gas_heatBus_2) <= +inf 0 <= InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_0) <= +inf end diff --git a/tests/lp_files/linear_converter_chp_invest_multi_period.lp b/tests/lp_files/linear_converter_chp_invest_multi_period.lp index 9a52152a5..6b77d3ba5 100644 --- a/tests/lp_files/linear_converter_chp_invest_multi_period.lp +++ b/tests/lp_files/linear_converter_chp_invest_multi_period.lp @@ -5,145 +5,145 @@ objective: +1.8354884429290608 InvestmentFlowBlock_invest(gasBus_chp_powerplant_gas_0) +1.2115039389350062 InvestmentFlowBlock_invest(gasBus_chp_powerplant_gas_1) +0.5997544252153503 InvestmentFlowBlock_invest(gasBus_chp_powerplant_gas_2) -+50 flow(gasBus_chp_powerplant_gas_0_0) -+50 flow(gasBus_chp_powerplant_gas_0_1) -+49.01960784313725 flow(gasBus_chp_powerplant_gas_1_2) -+49.01960784313725 flow(gasBus_chp_powerplant_gas_1_3) -+48.058439061899264 flow(gasBus_chp_powerplant_gas_2_4) -+48.058439061899264 flow(gasBus_chp_powerplant_gas_2_5) ++50 flow(gasBus_chp_powerplant_gas_0) ++50 flow(gasBus_chp_powerplant_gas_1) ++49.01960784313725 flow(gasBus_chp_powerplant_gas_2) ++49.01960784313725 flow(gasBus_chp_powerplant_gas_3) ++48.058439061899264 flow(gasBus_chp_powerplant_gas_4) ++48.058439061899264 flow(gasBus_chp_powerplant_gas_5) s.t. -c_e_BusBlock_balance(heatBus_0_0)_: -+1 flow(chp_powerplant_gas_heatBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(chp_powerplant_gas_electricityBus_0) = 0 -c_e_BusBlock_balance(heatBus_0_1)_: -+1 flow(chp_powerplant_gas_heatBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(chp_powerplant_gas_electricityBus_1) = 0 -c_e_BusBlock_balance(heatBus_1_2)_: -+1 flow(chp_powerplant_gas_heatBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(chp_powerplant_gas_electricityBus_2) = 0 -c_e_BusBlock_balance(heatBus_1_3)_: -+1 flow(chp_powerplant_gas_heatBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(chp_powerplant_gas_electricityBus_3) = 0 -c_e_BusBlock_balance(heatBus_2_4)_: -+1 flow(chp_powerplant_gas_heatBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(chp_powerplant_gas_electricityBus_4) = 0 -c_e_BusBlock_balance(heatBus_2_5)_: -+1 flow(chp_powerplant_gas_heatBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(chp_powerplant_gas_electricityBus_5) = 0 -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_chp_powerplant_gas_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_chp_powerplant_gas_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_chp_powerplant_gas_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_chp_powerplant_gas_1) = 0 -c_e_BusBlock_balance(gasBus_1_2)_: -+1 flow(gasBus_chp_powerplant_gas_1_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_chp_powerplant_gas_2) = 0 -c_e_BusBlock_balance(gasBus_1_3)_: -+1 flow(gasBus_chp_powerplant_gas_1_3) +c_e_BusBlock_balance(gasBus_3)_: ++1 flow(gasBus_chp_powerplant_gas_3) = 0 -c_e_BusBlock_balance(gasBus_2_4)_: -+1 flow(gasBus_chp_powerplant_gas_2_4) +c_e_BusBlock_balance(gasBus_4)_: ++1 flow(gasBus_chp_powerplant_gas_4) = 0 -c_e_BusBlock_balance(gasBus_2_5)_: -+1 flow(gasBus_chp_powerplant_gas_2_5) +c_e_BusBlock_balance(gasBus_5)_: ++1 flow(gasBus_chp_powerplant_gas_5) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(chp_powerplant_gas_electricityBus_0_0) +c_e_BusBlock_balance(heatBus_0)_: ++1 flow(chp_powerplant_gas_heatBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(chp_powerplant_gas_electricityBus_0_1) +c_e_BusBlock_balance(heatBus_1)_: ++1 flow(chp_powerplant_gas_heatBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(chp_powerplant_gas_electricityBus_1_2) +c_e_BusBlock_balance(heatBus_2)_: ++1 flow(chp_powerplant_gas_heatBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(chp_powerplant_gas_electricityBus_1_3) +c_e_BusBlock_balance(heatBus_3)_: ++1 flow(chp_powerplant_gas_heatBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(chp_powerplant_gas_electricityBus_2_4) +c_e_BusBlock_balance(heatBus_4)_: ++1 flow(chp_powerplant_gas_heatBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(chp_powerplant_gas_electricityBus_2_5) +c_e_BusBlock_balance(heatBus_5)_: ++1 flow(chp_powerplant_gas_heatBus_5) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_0_0)_: -+0.4 flow(gasBus_chp_powerplant_gas_0_0) --1 flow(chp_powerplant_gas_electricityBus_0_0) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_0)_: ++0.4 flow(gasBus_chp_powerplant_gas_0) +-1 flow(chp_powerplant_gas_electricityBus_0) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_0_0)_: -+0.5 flow(gasBus_chp_powerplant_gas_0_0) --1 flow(chp_powerplant_gas_heatBus_0_0) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_0)_: ++0.5 flow(gasBus_chp_powerplant_gas_0) +-1 flow(chp_powerplant_gas_heatBus_0) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_0_1)_: -+0.4 flow(gasBus_chp_powerplant_gas_0_1) --1 flow(chp_powerplant_gas_electricityBus_0_1) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_1)_: ++0.4 flow(gasBus_chp_powerplant_gas_1) +-1 flow(chp_powerplant_gas_electricityBus_1) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_0_1)_: -+0.5 flow(gasBus_chp_powerplant_gas_0_1) --1 flow(chp_powerplant_gas_heatBus_0_1) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_1)_: ++0.5 flow(gasBus_chp_powerplant_gas_1) +-1 flow(chp_powerplant_gas_heatBus_1) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_1_2)_: -+0.4 flow(gasBus_chp_powerplant_gas_1_2) --1 flow(chp_powerplant_gas_electricityBus_1_2) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_2)_: ++0.4 flow(gasBus_chp_powerplant_gas_2) +-1 flow(chp_powerplant_gas_electricityBus_2) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_1_2)_: -+0.5 flow(gasBus_chp_powerplant_gas_1_2) --1 flow(chp_powerplant_gas_heatBus_1_2) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_2)_: ++0.5 flow(gasBus_chp_powerplant_gas_2) +-1 flow(chp_powerplant_gas_heatBus_2) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_1_3)_: -+0.4 flow(gasBus_chp_powerplant_gas_1_3) --1 flow(chp_powerplant_gas_electricityBus_1_3) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_3)_: ++0.4 flow(gasBus_chp_powerplant_gas_3) +-1 flow(chp_powerplant_gas_electricityBus_3) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_1_3)_: -+0.5 flow(gasBus_chp_powerplant_gas_1_3) --1 flow(chp_powerplant_gas_heatBus_1_3) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_3)_: ++0.5 flow(gasBus_chp_powerplant_gas_3) +-1 flow(chp_powerplant_gas_heatBus_3) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_2_4)_: -+0.4 flow(gasBus_chp_powerplant_gas_2_4) --1 flow(chp_powerplant_gas_electricityBus_2_4) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_4)_: ++0.4 flow(gasBus_chp_powerplant_gas_4) +-1 flow(chp_powerplant_gas_electricityBus_4) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_2_4)_: -+0.5 flow(gasBus_chp_powerplant_gas_2_4) --1 flow(chp_powerplant_gas_heatBus_2_4) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_4)_: ++0.5 flow(gasBus_chp_powerplant_gas_4) +-1 flow(chp_powerplant_gas_heatBus_4) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_2_5)_: -+0.4 flow(gasBus_chp_powerplant_gas_2_5) --1 flow(chp_powerplant_gas_electricityBus_2_5) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_electricityBus_5)_: ++0.4 flow(gasBus_chp_powerplant_gas_5) +-1 flow(chp_powerplant_gas_electricityBus_5) = 0 -c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_2_5)_: -+0.5 flow(gasBus_chp_powerplant_gas_2_5) --1 flow(chp_powerplant_gas_heatBus_2_5) +c_e_ConverterBlock_relation(chp_powerplant_gas_gasBus_heatBus_5)_: ++0.5 flow(gasBus_chp_powerplant_gas_5) +-1 flow(chp_powerplant_gas_heatBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(gasBus_chp_powerplant_gas_0)_: @@ -190,9 +190,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(gasBus_chp_powerplant_gas_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(gasBus_chp_powerplant_gas_0)_: ++1 InvestmentFlowBlock_old(gasBus_chp_powerplant_gas_0) -1 InvestmentFlowBlock_old_end(gasBus_chp_powerplant_gas_0) -1 InvestmentFlowBlock_old_exo(gasBus_chp_powerplant_gas_0) -+1 InvestmentFlowBlock_old(gasBus_chp_powerplant_gas_0) = 0 c_e_InvestmentFlowBlock_old_rule(gasBus_chp_powerplant_gas_1)_: @@ -208,32 +208,32 @@ c_e_InvestmentFlowBlock_old_rule(gasBus_chp_powerplant_gas_2)_: = 0 c_u_InvestmentFlowBlock_max(gasBus_chp_powerplant_gas_0_0)_: -+1 flow(gasBus_chp_powerplant_gas_0_0) ++1 flow(gasBus_chp_powerplant_gas_0) -1 InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_0) <= 0 c_u_InvestmentFlowBlock_max(gasBus_chp_powerplant_gas_0_1)_: -+1 flow(gasBus_chp_powerplant_gas_0_1) ++1 flow(gasBus_chp_powerplant_gas_1) -1 InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_0) <= 0 c_u_InvestmentFlowBlock_max(gasBus_chp_powerplant_gas_1_2)_: -+1 flow(gasBus_chp_powerplant_gas_1_2) ++1 flow(gasBus_chp_powerplant_gas_2) -1 InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_1) <= 0 c_u_InvestmentFlowBlock_max(gasBus_chp_powerplant_gas_1_3)_: -+1 flow(gasBus_chp_powerplant_gas_1_3) ++1 flow(gasBus_chp_powerplant_gas_3) -1 InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_1) <= 0 c_u_InvestmentFlowBlock_max(gasBus_chp_powerplant_gas_2_4)_: -+1 flow(gasBus_chp_powerplant_gas_2_4) ++1 flow(gasBus_chp_powerplant_gas_4) -1 InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_2) <= 0 c_u_InvestmentFlowBlock_max(gasBus_chp_powerplant_gas_2_5)_: -+1 flow(gasBus_chp_powerplant_gas_2_5) ++1 flow(gasBus_chp_powerplant_gas_5) -1 InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_2) <= 0 @@ -241,28 +241,29 @@ bounds 0 <= InvestmentFlowBlock_invest(gasBus_chp_powerplant_gas_0) <= 1000 0 <= InvestmentFlowBlock_invest(gasBus_chp_powerplant_gas_1) <= 1000 0 <= InvestmentFlowBlock_invest(gasBus_chp_powerplant_gas_2) <= 1000 - 0 <= flow(gasBus_chp_powerplant_gas_0_0) <= +inf - 0 <= flow(gasBus_chp_powerplant_gas_0_1) <= +inf - 0 <= flow(gasBus_chp_powerplant_gas_1_2) <= +inf - 0 <= flow(gasBus_chp_powerplant_gas_1_3) <= +inf - 0 <= flow(gasBus_chp_powerplant_gas_2_4) <= +inf - 0 <= flow(gasBus_chp_powerplant_gas_2_5) <= +inf - 0 <= flow(chp_powerplant_gas_heatBus_0_0) <= +inf - 0 <= flow(chp_powerplant_gas_heatBus_0_1) <= +inf - 0 <= flow(chp_powerplant_gas_heatBus_1_2) <= +inf - 0 <= flow(chp_powerplant_gas_heatBus_1_3) <= +inf - 0 <= flow(chp_powerplant_gas_heatBus_2_4) <= +inf - 0 <= flow(chp_powerplant_gas_heatBus_2_5) <= +inf - 0 <= flow(chp_powerplant_gas_electricityBus_0_0) <= +inf - 0 <= flow(chp_powerplant_gas_electricityBus_0_1) <= +inf - 0 <= flow(chp_powerplant_gas_electricityBus_1_2) <= +inf - 0 <= flow(chp_powerplant_gas_electricityBus_1_3) <= +inf - 0 <= flow(chp_powerplant_gas_electricityBus_2_4) <= +inf - 0 <= flow(chp_powerplant_gas_electricityBus_2_5) <= +inf + 0 <= flow(gasBus_chp_powerplant_gas_0) <= +inf + 0 <= flow(gasBus_chp_powerplant_gas_1) <= +inf + 0 <= flow(gasBus_chp_powerplant_gas_2) <= +inf + 0 <= flow(gasBus_chp_powerplant_gas_3) <= +inf + 0 <= flow(gasBus_chp_powerplant_gas_4) <= +inf + 0 <= flow(gasBus_chp_powerplant_gas_5) <= +inf + 0 <= flow(chp_powerplant_gas_electricityBus_0) <= +inf + 0 <= flow(chp_powerplant_gas_electricityBus_1) <= +inf + 0 <= flow(chp_powerplant_gas_electricityBus_2) <= +inf + 0 <= flow(chp_powerplant_gas_electricityBus_3) <= +inf + 0 <= flow(chp_powerplant_gas_electricityBus_4) <= +inf + 0 <= flow(chp_powerplant_gas_electricityBus_5) <= +inf + 0 <= flow(chp_powerplant_gas_heatBus_0) <= +inf + 0 <= flow(chp_powerplant_gas_heatBus_1) <= +inf + 0 <= flow(chp_powerplant_gas_heatBus_2) <= +inf + 0 <= flow(chp_powerplant_gas_heatBus_3) <= +inf + 0 <= flow(chp_powerplant_gas_heatBus_4) <= +inf + 0 <= flow(chp_powerplant_gas_heatBus_5) <= +inf 0 <= InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_0) <= +inf 0 <= InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_1) <= +inf - 0 <= InvestmentFlowBlock_old(gasBus_chp_powerplant_gas_1) <= +inf 0 <= InvestmentFlowBlock_total(gasBus_chp_powerplant_gas_2) <= +inf + 0 <= InvestmentFlowBlock_old(gasBus_chp_powerplant_gas_0) <= +inf + 0 <= InvestmentFlowBlock_old(gasBus_chp_powerplant_gas_1) <= +inf 0 <= InvestmentFlowBlock_old(gasBus_chp_powerplant_gas_2) <= +inf 0 <= InvestmentFlowBlock_old_end(gasBus_chp_powerplant_gas_0) <= +inf 0 <= InvestmentFlowBlock_old_end(gasBus_chp_powerplant_gas_1) <= +inf @@ -270,5 +271,4 @@ bounds 0 <= InvestmentFlowBlock_old_exo(gasBus_chp_powerplant_gas_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(gasBus_chp_powerplant_gas_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(gasBus_chp_powerplant_gas_2) <= +inf - 0 <= InvestmentFlowBlock_old(gasBus_chp_powerplant_gas_0) <= +inf end diff --git a/tests/lp_files/linear_converter_chp_multi_period.lp b/tests/lp_files/linear_converter_chp_multi_period.lp index a79705ef9..4c5dd87f5 100644 --- a/tests/lp_files/linear_converter_chp_multi_period.lp +++ b/tests/lp_files/linear_converter_chp_multi_period.lp @@ -2,164 +2,164 @@ min objective: -+50 flow(gasBus_CHPpowerplantGas_0_0) -+50 flow(gasBus_CHPpowerplantGas_0_1) -+49.01960784313725 flow(gasBus_CHPpowerplantGas_1_2) -+49.01960784313725 flow(gasBus_CHPpowerplantGas_1_3) -+48.058439061899264 flow(gasBus_CHPpowerplantGas_2_4) -+48.058439061899264 flow(gasBus_CHPpowerplantGas_2_5) ++50 flow(gasBus_CHPpowerplantGas_0) ++50 flow(gasBus_CHPpowerplantGas_1) ++49.01960784313725 flow(gasBus_CHPpowerplantGas_2) ++49.01960784313725 flow(gasBus_CHPpowerplantGas_3) ++48.058439061899264 flow(gasBus_CHPpowerplantGas_4) ++48.058439061899264 flow(gasBus_CHPpowerplantGas_5) s.t. -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_CHPpowerplantGas_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(CHPpowerplantGas_electricityBus_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_CHPpowerplantGas_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(CHPpowerplantGas_electricityBus_1) = 0 -c_e_BusBlock_balance(gasBus_1_2)_: -+1 flow(gasBus_CHPpowerplantGas_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(CHPpowerplantGas_electricityBus_2) = 0 -c_e_BusBlock_balance(gasBus_1_3)_: -+1 flow(gasBus_CHPpowerplantGas_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(CHPpowerplantGas_electricityBus_3) = 0 -c_e_BusBlock_balance(gasBus_2_4)_: -+1 flow(gasBus_CHPpowerplantGas_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(CHPpowerplantGas_electricityBus_4) = 0 -c_e_BusBlock_balance(gasBus_2_5)_: -+1 flow(gasBus_CHPpowerplantGas_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(CHPpowerplantGas_electricityBus_5) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(CHPpowerplantGas_electricityBus_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_CHPpowerplantGas_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(CHPpowerplantGas_electricityBus_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_CHPpowerplantGas_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(CHPpowerplantGas_electricityBus_1_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_CHPpowerplantGas_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(CHPpowerplantGas_electricityBus_1_3) +c_e_BusBlock_balance(gasBus_3)_: ++1 flow(gasBus_CHPpowerplantGas_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(CHPpowerplantGas_electricityBus_2_4) +c_e_BusBlock_balance(gasBus_4)_: ++1 flow(gasBus_CHPpowerplantGas_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(CHPpowerplantGas_electricityBus_2_5) +c_e_BusBlock_balance(gasBus_5)_: ++1 flow(gasBus_CHPpowerplantGas_5) = 0 -c_e_BusBlock_balance(heatBus_0_0)_: -+1 flow(CHPpowerplantGas_heatBus_0_0) +c_e_BusBlock_balance(heatBus_0)_: ++1 flow(CHPpowerplantGas_heatBus_0) = 0 -c_e_BusBlock_balance(heatBus_0_1)_: -+1 flow(CHPpowerplantGas_heatBus_0_1) +c_e_BusBlock_balance(heatBus_1)_: ++1 flow(CHPpowerplantGas_heatBus_1) = 0 -c_e_BusBlock_balance(heatBus_1_2)_: -+1 flow(CHPpowerplantGas_heatBus_1_2) +c_e_BusBlock_balance(heatBus_2)_: ++1 flow(CHPpowerplantGas_heatBus_2) = 0 -c_e_BusBlock_balance(heatBus_1_3)_: -+1 flow(CHPpowerplantGas_heatBus_1_3) +c_e_BusBlock_balance(heatBus_3)_: ++1 flow(CHPpowerplantGas_heatBus_3) = 0 -c_e_BusBlock_balance(heatBus_2_4)_: -+1 flow(CHPpowerplantGas_heatBus_2_4) +c_e_BusBlock_balance(heatBus_4)_: ++1 flow(CHPpowerplantGas_heatBus_4) = 0 -c_e_BusBlock_balance(heatBus_2_5)_: -+1 flow(CHPpowerplantGas_heatBus_2_5) +c_e_BusBlock_balance(heatBus_5)_: ++1 flow(CHPpowerplantGas_heatBus_5) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_0_0)_: -+0.4 flow(gasBus_CHPpowerplantGas_0_0) --1 flow(CHPpowerplantGas_electricityBus_0_0) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_0)_: ++0.4 flow(gasBus_CHPpowerplantGas_0) +-1 flow(CHPpowerplantGas_electricityBus_0) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_0_0)_: -+0.5 flow(gasBus_CHPpowerplantGas_0_0) --1 flow(CHPpowerplantGas_heatBus_0_0) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_0)_: ++0.5 flow(gasBus_CHPpowerplantGas_0) +-1 flow(CHPpowerplantGas_heatBus_0) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_0_1)_: -+0.4 flow(gasBus_CHPpowerplantGas_0_1) --1 flow(CHPpowerplantGas_electricityBus_0_1) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_1)_: ++0.4 flow(gasBus_CHPpowerplantGas_1) +-1 flow(CHPpowerplantGas_electricityBus_1) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_0_1)_: -+0.5 flow(gasBus_CHPpowerplantGas_0_1) --1 flow(CHPpowerplantGas_heatBus_0_1) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_1)_: ++0.5 flow(gasBus_CHPpowerplantGas_1) +-1 flow(CHPpowerplantGas_heatBus_1) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_1_2)_: -+0.4 flow(gasBus_CHPpowerplantGas_1_2) --1 flow(CHPpowerplantGas_electricityBus_1_2) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_2)_: ++0.4 flow(gasBus_CHPpowerplantGas_2) +-1 flow(CHPpowerplantGas_electricityBus_2) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_1_2)_: -+0.5 flow(gasBus_CHPpowerplantGas_1_2) --1 flow(CHPpowerplantGas_heatBus_1_2) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_2)_: ++0.5 flow(gasBus_CHPpowerplantGas_2) +-1 flow(CHPpowerplantGas_heatBus_2) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_1_3)_: -+0.4 flow(gasBus_CHPpowerplantGas_1_3) --1 flow(CHPpowerplantGas_electricityBus_1_3) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_3)_: ++0.4 flow(gasBus_CHPpowerplantGas_3) +-1 flow(CHPpowerplantGas_electricityBus_3) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_1_3)_: -+0.5 flow(gasBus_CHPpowerplantGas_1_3) --1 flow(CHPpowerplantGas_heatBus_1_3) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_3)_: ++0.5 flow(gasBus_CHPpowerplantGas_3) +-1 flow(CHPpowerplantGas_heatBus_3) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_2_4)_: -+0.4 flow(gasBus_CHPpowerplantGas_2_4) --1 flow(CHPpowerplantGas_electricityBus_2_4) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_4)_: ++0.4 flow(gasBus_CHPpowerplantGas_4) +-1 flow(CHPpowerplantGas_electricityBus_4) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_2_4)_: -+0.5 flow(gasBus_CHPpowerplantGas_2_4) --1 flow(CHPpowerplantGas_heatBus_2_4) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_4)_: ++0.5 flow(gasBus_CHPpowerplantGas_4) +-1 flow(CHPpowerplantGas_heatBus_4) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_2_5)_: -+0.4 flow(gasBus_CHPpowerplantGas_2_5) --1 flow(CHPpowerplantGas_electricityBus_2_5) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_electricityBus_5)_: ++0.4 flow(gasBus_CHPpowerplantGas_5) +-1 flow(CHPpowerplantGas_electricityBus_5) = 0 -c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_2_5)_: -+0.5 flow(gasBus_CHPpowerplantGas_2_5) --1 flow(CHPpowerplantGas_heatBus_2_5) +c_e_ConverterBlock_relation(CHPpowerplantGas_gasBus_heatBus_5)_: ++0.5 flow(gasBus_CHPpowerplantGas_5) +-1 flow(CHPpowerplantGas_heatBus_5) = 0 bounds - 0.0 <= flow(gasBus_CHPpowerplantGas_0_0) <= 100000000000.0 - 0.0 <= flow(gasBus_CHPpowerplantGas_0_1) <= 100000000000.0 - 0.0 <= flow(gasBus_CHPpowerplantGas_1_2) <= 100000000000.0 - 0.0 <= flow(gasBus_CHPpowerplantGas_1_3) <= 100000000000.0 - 0.0 <= flow(gasBus_CHPpowerplantGas_2_4) <= 100000000000.0 - 0.0 <= flow(gasBus_CHPpowerplantGas_2_5) <= 100000000000.0 - 0 <= flow(CHPpowerplantGas_electricityBus_0_0) <= +inf - 0 <= flow(CHPpowerplantGas_electricityBus_0_1) <= +inf - 0 <= flow(CHPpowerplantGas_electricityBus_1_2) <= +inf - 0 <= flow(CHPpowerplantGas_electricityBus_1_3) <= +inf - 0 <= flow(CHPpowerplantGas_electricityBus_2_4) <= +inf - 0 <= flow(CHPpowerplantGas_electricityBus_2_5) <= +inf - 0 <= flow(CHPpowerplantGas_heatBus_0_0) <= +inf - 0 <= flow(CHPpowerplantGas_heatBus_0_1) <= +inf - 0 <= flow(CHPpowerplantGas_heatBus_1_2) <= +inf - 0 <= flow(CHPpowerplantGas_heatBus_1_3) <= +inf - 0 <= flow(CHPpowerplantGas_heatBus_2_4) <= +inf - 0 <= flow(CHPpowerplantGas_heatBus_2_5) <= +inf + 0.0 <= flow(gasBus_CHPpowerplantGas_0) <= 100000000000.0 + 0.0 <= flow(gasBus_CHPpowerplantGas_1) <= 100000000000.0 + 0.0 <= flow(gasBus_CHPpowerplantGas_2) <= 100000000000.0 + 0.0 <= flow(gasBus_CHPpowerplantGas_3) <= 100000000000.0 + 0.0 <= flow(gasBus_CHPpowerplantGas_4) <= 100000000000.0 + 0.0 <= flow(gasBus_CHPpowerplantGas_5) <= 100000000000.0 + 0 <= flow(CHPpowerplantGas_electricityBus_0) <= +inf + 0 <= flow(CHPpowerplantGas_electricityBus_1) <= +inf + 0 <= flow(CHPpowerplantGas_electricityBus_2) <= +inf + 0 <= flow(CHPpowerplantGas_electricityBus_3) <= +inf + 0 <= flow(CHPpowerplantGas_electricityBus_4) <= +inf + 0 <= flow(CHPpowerplantGas_electricityBus_5) <= +inf + 0 <= flow(CHPpowerplantGas_heatBus_0) <= +inf + 0 <= flow(CHPpowerplantGas_heatBus_1) <= +inf + 0 <= flow(CHPpowerplantGas_heatBus_2) <= +inf + 0 <= flow(CHPpowerplantGas_heatBus_3) <= +inf + 0 <= flow(CHPpowerplantGas_heatBus_4) <= +inf + 0 <= flow(CHPpowerplantGas_heatBus_5) <= +inf end diff --git a/tests/lp_files/linear_converter_invest.lp b/tests/lp_files/linear_converter_invest.lp index f8eee0a23..c3d16e484 100644 --- a/tests/lp_files/linear_converter_invest.lp +++ b/tests/lp_files/linear_converter_invest.lp @@ -3,49 +3,49 @@ min objective: +20 InvestmentFlowBlock_invest(powerplant_gas_electricity_0) -+50 flow(powerplant_gas_electricity_0_0) -+50 flow(powerplant_gas_electricity_0_1) -+50 flow(powerplant_gas_electricity_0_2) ++50 flow(powerplant_gas_electricity_0) ++50 flow(powerplant_gas_electricity_1) ++50 flow(powerplant_gas_electricity_2) s.t. -c_e_BusBlock_balance(gas_0_0)_: -+1 flow(gas_powerplant_gas_0_0) +c_e_BusBlock_balance(electricity_0)_: ++1 flow(powerplant_gas_electricity_0) = 0 -c_e_BusBlock_balance(gas_0_1)_: -+1 flow(gas_powerplant_gas_0_1) +c_e_BusBlock_balance(electricity_1)_: ++1 flow(powerplant_gas_electricity_1) = 0 -c_e_BusBlock_balance(gas_0_2)_: -+1 flow(gas_powerplant_gas_0_2) +c_e_BusBlock_balance(electricity_2)_: ++1 flow(powerplant_gas_electricity_2) = 0 -c_e_BusBlock_balance(electricity_0_0)_: -+1 flow(powerplant_gas_electricity_0_0) +c_e_BusBlock_balance(gas_0)_: ++1 flow(gas_powerplant_gas_0) = 0 -c_e_BusBlock_balance(electricity_0_1)_: -+1 flow(powerplant_gas_electricity_0_1) +c_e_BusBlock_balance(gas_1)_: ++1 flow(gas_powerplant_gas_1) = 0 -c_e_BusBlock_balance(electricity_0_2)_: -+1 flow(powerplant_gas_electricity_0_2) +c_e_BusBlock_balance(gas_2)_: ++1 flow(gas_powerplant_gas_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0_0)_: --1 flow(powerplant_gas_electricity_0_0) -+0.58 flow(gas_powerplant_gas_0_0) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0)_: ++0.58 flow(gas_powerplant_gas_0) +-1 flow(powerplant_gas_electricity_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0_1)_: --1 flow(powerplant_gas_electricity_0_1) -+0.58 flow(gas_powerplant_gas_0_1) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_1)_: ++0.58 flow(gas_powerplant_gas_1) +-1 flow(powerplant_gas_electricity_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0_2)_: --1 flow(powerplant_gas_electricity_0_2) -+0.58 flow(gas_powerplant_gas_0_2) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_2)_: ++0.58 flow(gas_powerplant_gas_2) +-1 flow(powerplant_gas_electricity_2) = 0 c_e_InvestmentFlowBlock_total_rule(powerplant_gas_electricity_0)_: @@ -54,27 +54,27 @@ c_e_InvestmentFlowBlock_total_rule(powerplant_gas_electricity_0)_: = 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_0_0)_: -+1 flow(powerplant_gas_electricity_0_0) ++1 flow(powerplant_gas_electricity_0) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_0_1)_: -+1 flow(powerplant_gas_electricity_0_1) ++1 flow(powerplant_gas_electricity_1) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_0_2)_: -+1 flow(powerplant_gas_electricity_0_2) ++1 flow(powerplant_gas_electricity_2) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= 0 bounds 0 <= InvestmentFlowBlock_invest(powerplant_gas_electricity_0) <= 1000 - 0 <= flow(powerplant_gas_electricity_0_0) <= +inf - 0 <= flow(powerplant_gas_electricity_0_1) <= +inf - 0 <= flow(powerplant_gas_electricity_0_2) <= +inf - 0 <= flow(gas_powerplant_gas_0_0) <= +inf - 0 <= flow(gas_powerplant_gas_0_1) <= +inf - 0 <= flow(gas_powerplant_gas_0_2) <= +inf + 0 <= flow(gas_powerplant_gas_0) <= +inf + 0 <= flow(gas_powerplant_gas_1) <= +inf + 0 <= flow(gas_powerplant_gas_2) <= +inf + 0 <= flow(powerplant_gas_electricity_0) <= +inf + 0 <= flow(powerplant_gas_electricity_1) <= +inf + 0 <= flow(powerplant_gas_electricity_2) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= +inf end diff --git a/tests/lp_files/linear_converter_invest_multi_period.lp b/tests/lp_files/linear_converter_invest_multi_period.lp index 325b7b0a1..334a7f5dd 100644 --- a/tests/lp_files/linear_converter_invest_multi_period.lp +++ b/tests/lp_files/linear_converter_invest_multi_period.lp @@ -5,91 +5,91 @@ objective: +2.1084501918380276 InvestmentFlowBlock_invest(powerplant_gas_electricity_0) +1.3916708232625816 InvestmentFlowBlock_invest(powerplant_gas_electricity_1) +0.6889459521101896 InvestmentFlowBlock_invest(powerplant_gas_electricity_2) -+50 flow(powerplant_gas_electricity_0_0) -+50 flow(powerplant_gas_electricity_0_1) -+49.01960784313725 flow(powerplant_gas_electricity_1_2) -+49.01960784313725 flow(powerplant_gas_electricity_1_3) -+48.058439061899264 flow(powerplant_gas_electricity_2_4) -+48.058439061899264 flow(powerplant_gas_electricity_2_5) ++50 flow(powerplant_gas_electricity_0) ++50 flow(powerplant_gas_electricity_1) ++49.01960784313725 flow(powerplant_gas_electricity_2) ++49.01960784313725 flow(powerplant_gas_electricity_3) ++48.058439061899264 flow(powerplant_gas_electricity_4) ++48.058439061899264 flow(powerplant_gas_electricity_5) s.t. -c_e_BusBlock_balance(electricity_0_0)_: -+1 flow(powerplant_gas_electricity_0_0) +c_e_BusBlock_balance(electricity_0)_: ++1 flow(powerplant_gas_electricity_0) = 0 -c_e_BusBlock_balance(electricity_0_1)_: -+1 flow(powerplant_gas_electricity_0_1) +c_e_BusBlock_balance(electricity_1)_: ++1 flow(powerplant_gas_electricity_1) = 0 -c_e_BusBlock_balance(electricity_1_2)_: -+1 flow(powerplant_gas_electricity_1_2) +c_e_BusBlock_balance(electricity_2)_: ++1 flow(powerplant_gas_electricity_2) = 0 -c_e_BusBlock_balance(electricity_1_3)_: -+1 flow(powerplant_gas_electricity_1_3) +c_e_BusBlock_balance(electricity_3)_: ++1 flow(powerplant_gas_electricity_3) = 0 -c_e_BusBlock_balance(electricity_2_4)_: -+1 flow(powerplant_gas_electricity_2_4) +c_e_BusBlock_balance(electricity_4)_: ++1 flow(powerplant_gas_electricity_4) = 0 -c_e_BusBlock_balance(electricity_2_5)_: -+1 flow(powerplant_gas_electricity_2_5) +c_e_BusBlock_balance(electricity_5)_: ++1 flow(powerplant_gas_electricity_5) = 0 -c_e_BusBlock_balance(gas_0_0)_: -+1 flow(gas_powerplant_gas_0_0) +c_e_BusBlock_balance(gas_0)_: ++1 flow(gas_powerplant_gas_0) = 0 -c_e_BusBlock_balance(gas_0_1)_: -+1 flow(gas_powerplant_gas_0_1) +c_e_BusBlock_balance(gas_1)_: ++1 flow(gas_powerplant_gas_1) = 0 -c_e_BusBlock_balance(gas_1_2)_: -+1 flow(gas_powerplant_gas_1_2) +c_e_BusBlock_balance(gas_2)_: ++1 flow(gas_powerplant_gas_2) = 0 -c_e_BusBlock_balance(gas_1_3)_: -+1 flow(gas_powerplant_gas_1_3) +c_e_BusBlock_balance(gas_3)_: ++1 flow(gas_powerplant_gas_3) = 0 -c_e_BusBlock_balance(gas_2_4)_: -+1 flow(gas_powerplant_gas_2_4) +c_e_BusBlock_balance(gas_4)_: ++1 flow(gas_powerplant_gas_4) = 0 -c_e_BusBlock_balance(gas_2_5)_: -+1 flow(gas_powerplant_gas_2_5) +c_e_BusBlock_balance(gas_5)_: ++1 flow(gas_powerplant_gas_5) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0_0)_: --1 flow(powerplant_gas_electricity_0_0) -+0.58 flow(gas_powerplant_gas_0_0) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0)_: ++0.58 flow(gas_powerplant_gas_0) +-1 flow(powerplant_gas_electricity_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0_1)_: --1 flow(powerplant_gas_electricity_0_1) -+0.58 flow(gas_powerplant_gas_0_1) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_1)_: ++0.58 flow(gas_powerplant_gas_1) +-1 flow(powerplant_gas_electricity_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_1_2)_: --1 flow(powerplant_gas_electricity_1_2) -+0.58 flow(gas_powerplant_gas_1_2) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_2)_: ++0.58 flow(gas_powerplant_gas_2) +-1 flow(powerplant_gas_electricity_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_1_3)_: --1 flow(powerplant_gas_electricity_1_3) -+0.58 flow(gas_powerplant_gas_1_3) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_3)_: ++0.58 flow(gas_powerplant_gas_3) +-1 flow(powerplant_gas_electricity_3) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_2_4)_: --1 flow(powerplant_gas_electricity_2_4) -+0.58 flow(gas_powerplant_gas_2_4) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_4)_: ++0.58 flow(gas_powerplant_gas_4) +-1 flow(powerplant_gas_electricity_4) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_2_5)_: --1 flow(powerplant_gas_electricity_2_5) -+0.58 flow(gas_powerplant_gas_2_5) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_5)_: ++0.58 flow(gas_powerplant_gas_5) +-1 flow(powerplant_gas_electricity_5) = 0 c_e_InvestmentFlowBlock_total_rule(powerplant_gas_electricity_0)_: @@ -136,9 +136,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(powerplant_gas_electricity_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(powerplant_gas_electricity_0)_: ++1 InvestmentFlowBlock_old(powerplant_gas_electricity_0) -1 InvestmentFlowBlock_old_end(powerplant_gas_electricity_0) -1 InvestmentFlowBlock_old_exo(powerplant_gas_electricity_0) -+1 InvestmentFlowBlock_old(powerplant_gas_electricity_0) = 0 c_e_InvestmentFlowBlock_old_rule(powerplant_gas_electricity_1)_: @@ -154,32 +154,32 @@ c_e_InvestmentFlowBlock_old_rule(powerplant_gas_electricity_2)_: = 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_0_0)_: -+1 flow(powerplant_gas_electricity_0_0) ++1 flow(powerplant_gas_electricity_0) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_0_1)_: -+1 flow(powerplant_gas_electricity_0_1) ++1 flow(powerplant_gas_electricity_1) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_1_2)_: -+1 flow(powerplant_gas_electricity_1_2) ++1 flow(powerplant_gas_electricity_2) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_1) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_1_3)_: -+1 flow(powerplant_gas_electricity_1_3) ++1 flow(powerplant_gas_electricity_3) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_1) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_2_4)_: -+1 flow(powerplant_gas_electricity_2_4) ++1 flow(powerplant_gas_electricity_4) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_2) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_2_5)_: -+1 flow(powerplant_gas_electricity_2_5) ++1 flow(powerplant_gas_electricity_5) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_2) <= 0 @@ -203,22 +203,23 @@ bounds 0 <= InvestmentFlowBlock_invest(powerplant_gas_electricity_0) <= 1000 0 <= InvestmentFlowBlock_invest(powerplant_gas_electricity_1) <= 1000 0 <= InvestmentFlowBlock_invest(powerplant_gas_electricity_2) <= 1000 - 0 <= flow(powerplant_gas_electricity_0_0) <= +inf - 0 <= flow(powerplant_gas_electricity_0_1) <= +inf - 0 <= flow(powerplant_gas_electricity_1_2) <= +inf - 0 <= flow(powerplant_gas_electricity_1_3) <= +inf - 0 <= flow(powerplant_gas_electricity_2_4) <= +inf - 0 <= flow(powerplant_gas_electricity_2_5) <= +inf - 0 <= flow(gas_powerplant_gas_0_0) <= +inf - 0 <= flow(gas_powerplant_gas_0_1) <= +inf - 0 <= flow(gas_powerplant_gas_1_2) <= +inf - 0 <= flow(gas_powerplant_gas_1_3) <= +inf - 0 <= flow(gas_powerplant_gas_2_4) <= +inf - 0 <= flow(gas_powerplant_gas_2_5) <= +inf + 0 <= flow(gas_powerplant_gas_0) <= +inf + 0 <= flow(gas_powerplant_gas_1) <= +inf + 0 <= flow(gas_powerplant_gas_2) <= +inf + 0 <= flow(gas_powerplant_gas_3) <= +inf + 0 <= flow(gas_powerplant_gas_4) <= +inf + 0 <= flow(gas_powerplant_gas_5) <= +inf + 0 <= flow(powerplant_gas_electricity_0) <= +inf + 0 <= flow(powerplant_gas_electricity_1) <= +inf + 0 <= flow(powerplant_gas_electricity_2) <= +inf + 0 <= flow(powerplant_gas_electricity_3) <= +inf + 0 <= flow(powerplant_gas_electricity_4) <= +inf + 0 <= flow(powerplant_gas_electricity_5) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_electricity_1) <= +inf - 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_1) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_electricity_2) <= +inf + 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_0) <= +inf + 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_1) <= +inf 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_2) <= +inf 0 <= InvestmentFlowBlock_old_end(powerplant_gas_electricity_0) <= +inf 0 <= InvestmentFlowBlock_old_end(powerplant_gas_electricity_1) <= +inf @@ -226,5 +227,4 @@ bounds 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_electricity_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_electricity_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_electricity_2) <= +inf - 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_0) <= +inf end diff --git a/tests/lp_files/linear_converter_invest_multi_period_old.lp b/tests/lp_files/linear_converter_invest_multi_period_old.lp index 5ddc28a1f..5d1d5b398 100644 --- a/tests/lp_files/linear_converter_invest_multi_period_old.lp +++ b/tests/lp_files/linear_converter_invest_multi_period_old.lp @@ -5,91 +5,91 @@ objective: +20.0 InvestmentFlowBlock_invest(powerplant_gas_electricity_0) +19.6078431372549 InvestmentFlowBlock_invest(powerplant_gas_electricity_1) +9.706853038245011 InvestmentFlowBlock_invest(powerplant_gas_electricity_2) -+50 flow(powerplant_gas_electricity_0_0) -+50 flow(powerplant_gas_electricity_0_1) -+49.01960784313725 flow(powerplant_gas_electricity_1_2) -+49.01960784313725 flow(powerplant_gas_electricity_1_3) -+48.058439061899264 flow(powerplant_gas_electricity_2_4) -+48.058439061899264 flow(powerplant_gas_electricity_2_5) ++50 flow(powerplant_gas_electricity_0) ++50 flow(powerplant_gas_electricity_1) ++49.01960784313725 flow(powerplant_gas_electricity_2) ++49.01960784313725 flow(powerplant_gas_electricity_3) ++48.058439061899264 flow(powerplant_gas_electricity_4) ++48.058439061899264 flow(powerplant_gas_electricity_5) s.t. -c_e_BusBlock_balance(electricity_0_0)_: -+1 flow(powerplant_gas_electricity_0_0) +c_e_BusBlock_balance(electricity_0)_: ++1 flow(powerplant_gas_electricity_0) = 0 -c_e_BusBlock_balance(electricity_0_1)_: -+1 flow(powerplant_gas_electricity_0_1) +c_e_BusBlock_balance(electricity_1)_: ++1 flow(powerplant_gas_electricity_1) = 0 -c_e_BusBlock_balance(electricity_1_2)_: -+1 flow(powerplant_gas_electricity_1_2) +c_e_BusBlock_balance(electricity_2)_: ++1 flow(powerplant_gas_electricity_2) = 0 -c_e_BusBlock_balance(electricity_1_3)_: -+1 flow(powerplant_gas_electricity_1_3) +c_e_BusBlock_balance(electricity_3)_: ++1 flow(powerplant_gas_electricity_3) = 0 -c_e_BusBlock_balance(electricity_2_4)_: -+1 flow(powerplant_gas_electricity_2_4) +c_e_BusBlock_balance(electricity_4)_: ++1 flow(powerplant_gas_electricity_4) = 0 -c_e_BusBlock_balance(electricity_2_5)_: -+1 flow(powerplant_gas_electricity_2_5) +c_e_BusBlock_balance(electricity_5)_: ++1 flow(powerplant_gas_electricity_5) = 0 -c_e_BusBlock_balance(gas_0_0)_: -+1 flow(gas_powerplant_gas_0_0) +c_e_BusBlock_balance(gas_0)_: ++1 flow(gas_powerplant_gas_0) = 0 -c_e_BusBlock_balance(gas_0_1)_: -+1 flow(gas_powerplant_gas_0_1) +c_e_BusBlock_balance(gas_1)_: ++1 flow(gas_powerplant_gas_1) = 0 -c_e_BusBlock_balance(gas_1_2)_: -+1 flow(gas_powerplant_gas_1_2) +c_e_BusBlock_balance(gas_2)_: ++1 flow(gas_powerplant_gas_2) = 0 -c_e_BusBlock_balance(gas_1_3)_: -+1 flow(gas_powerplant_gas_1_3) +c_e_BusBlock_balance(gas_3)_: ++1 flow(gas_powerplant_gas_3) = 0 -c_e_BusBlock_balance(gas_2_4)_: -+1 flow(gas_powerplant_gas_2_4) +c_e_BusBlock_balance(gas_4)_: ++1 flow(gas_powerplant_gas_4) = 0 -c_e_BusBlock_balance(gas_2_5)_: -+1 flow(gas_powerplant_gas_2_5) +c_e_BusBlock_balance(gas_5)_: ++1 flow(gas_powerplant_gas_5) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0_0)_: --1 flow(powerplant_gas_electricity_0_0) -+0.58 flow(gas_powerplant_gas_0_0) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0)_: ++0.58 flow(gas_powerplant_gas_0) +-1 flow(powerplant_gas_electricity_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0_1)_: --1 flow(powerplant_gas_electricity_0_1) -+0.58 flow(gas_powerplant_gas_0_1) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_1)_: ++0.58 flow(gas_powerplant_gas_1) +-1 flow(powerplant_gas_electricity_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_1_2)_: --1 flow(powerplant_gas_electricity_1_2) -+0.58 flow(gas_powerplant_gas_1_2) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_2)_: ++0.58 flow(gas_powerplant_gas_2) +-1 flow(powerplant_gas_electricity_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_1_3)_: --1 flow(powerplant_gas_electricity_1_3) -+0.58 flow(gas_powerplant_gas_1_3) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_3)_: ++0.58 flow(gas_powerplant_gas_3) +-1 flow(powerplant_gas_electricity_3) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_2_4)_: --1 flow(powerplant_gas_electricity_2_4) -+0.58 flow(gas_powerplant_gas_2_4) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_4)_: ++0.58 flow(gas_powerplant_gas_4) +-1 flow(powerplant_gas_electricity_4) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_2_5)_: --1 flow(powerplant_gas_electricity_2_5) -+0.58 flow(gas_powerplant_gas_2_5) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_5)_: ++0.58 flow(gas_powerplant_gas_5) +-1 flow(powerplant_gas_electricity_5) = 0 c_e_InvestmentFlowBlock_total_rule(powerplant_gas_electricity_0)_: @@ -137,9 +137,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(powerplant_gas_electricity_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(powerplant_gas_electricity_0)_: ++1 InvestmentFlowBlock_old(powerplant_gas_electricity_0) -1 InvestmentFlowBlock_old_end(powerplant_gas_electricity_0) -1 InvestmentFlowBlock_old_exo(powerplant_gas_electricity_0) -+1 InvestmentFlowBlock_old(powerplant_gas_electricity_0) = 0 c_e_InvestmentFlowBlock_old_rule(powerplant_gas_electricity_1)_: @@ -155,32 +155,32 @@ c_e_InvestmentFlowBlock_old_rule(powerplant_gas_electricity_2)_: = 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_0_0)_: -+1 flow(powerplant_gas_electricity_0_0) ++1 flow(powerplant_gas_electricity_0) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_0_1)_: -+1 flow(powerplant_gas_electricity_0_1) ++1 flow(powerplant_gas_electricity_1) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_1_2)_: -+1 flow(powerplant_gas_electricity_1_2) ++1 flow(powerplant_gas_electricity_2) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_1) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_1_3)_: -+1 flow(powerplant_gas_electricity_1_3) ++1 flow(powerplant_gas_electricity_3) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_1) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_2_4)_: -+1 flow(powerplant_gas_electricity_2_4) ++1 flow(powerplant_gas_electricity_4) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_2) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_2_5)_: -+1 flow(powerplant_gas_electricity_2_5) ++1 flow(powerplant_gas_electricity_5) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_2) <= 0 @@ -204,22 +204,23 @@ bounds 0 <= InvestmentFlowBlock_invest(powerplant_gas_electricity_0) <= 1000 0 <= InvestmentFlowBlock_invest(powerplant_gas_electricity_1) <= 1000 0 <= InvestmentFlowBlock_invest(powerplant_gas_electricity_2) <= 1000 - 0 <= flow(powerplant_gas_electricity_0_0) <= +inf - 0 <= flow(powerplant_gas_electricity_0_1) <= +inf - 0 <= flow(powerplant_gas_electricity_1_2) <= +inf - 0 <= flow(powerplant_gas_electricity_1_3) <= +inf - 0 <= flow(powerplant_gas_electricity_2_4) <= +inf - 0 <= flow(powerplant_gas_electricity_2_5) <= +inf - 0 <= flow(gas_powerplant_gas_0_0) <= +inf - 0 <= flow(gas_powerplant_gas_0_1) <= +inf - 0 <= flow(gas_powerplant_gas_1_2) <= +inf - 0 <= flow(gas_powerplant_gas_1_3) <= +inf - 0 <= flow(gas_powerplant_gas_2_4) <= +inf - 0 <= flow(gas_powerplant_gas_2_5) <= +inf + 0 <= flow(gas_powerplant_gas_0) <= +inf + 0 <= flow(gas_powerplant_gas_1) <= +inf + 0 <= flow(gas_powerplant_gas_2) <= +inf + 0 <= flow(gas_powerplant_gas_3) <= +inf + 0 <= flow(gas_powerplant_gas_4) <= +inf + 0 <= flow(gas_powerplant_gas_5) <= +inf + 0 <= flow(powerplant_gas_electricity_0) <= +inf + 0 <= flow(powerplant_gas_electricity_1) <= +inf + 0 <= flow(powerplant_gas_electricity_2) <= +inf + 0 <= flow(powerplant_gas_electricity_3) <= +inf + 0 <= flow(powerplant_gas_electricity_4) <= +inf + 0 <= flow(powerplant_gas_electricity_5) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_electricity_1) <= +inf - 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_1) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_electricity_2) <= +inf + 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_0) <= +inf + 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_1) <= +inf 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_2) <= +inf 0 <= InvestmentFlowBlock_old_end(powerplant_gas_electricity_0) <= +inf 0 <= InvestmentFlowBlock_old_end(powerplant_gas_electricity_1) <= +inf @@ -227,5 +228,4 @@ bounds 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_electricity_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_electricity_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_electricity_2) <= +inf - 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_0) <= +inf end diff --git a/tests/lp_files/linear_converter_invest_multi_period_remaining_value.lp b/tests/lp_files/linear_converter_invest_multi_period_remaining_value.lp index 87890c538..459a82634 100644 --- a/tests/lp_files/linear_converter_invest_multi_period_remaining_value.lp +++ b/tests/lp_files/linear_converter_invest_multi_period_remaining_value.lp @@ -5,91 +5,91 @@ objective: +0.22380552274393728 InvestmentFlowBlock_invest(powerplant_gas_electricity_0) +0.37976494755240464 InvestmentFlowBlock_invest(powerplant_gas_electricity_1) +0.6200513568991706 InvestmentFlowBlock_invest(powerplant_gas_electricity_2) -+50 flow(powerplant_gas_electricity_0_0) -+50 flow(powerplant_gas_electricity_0_1) -+49.01960784313725 flow(powerplant_gas_electricity_1_2) -+49.01960784313725 flow(powerplant_gas_electricity_1_3) -+48.058439061899264 flow(powerplant_gas_electricity_2_4) -+48.058439061899264 flow(powerplant_gas_electricity_2_5) ++50 flow(powerplant_gas_electricity_0) ++50 flow(powerplant_gas_electricity_1) ++49.01960784313725 flow(powerplant_gas_electricity_2) ++49.01960784313725 flow(powerplant_gas_electricity_3) ++48.058439061899264 flow(powerplant_gas_electricity_4) ++48.058439061899264 flow(powerplant_gas_electricity_5) s.t. -c_e_BusBlock_balance(gas_0_0)_: -+1 flow(gas_powerplant_gas_0_0) +c_e_BusBlock_balance(electricity_0)_: ++1 flow(powerplant_gas_electricity_0) = 0 -c_e_BusBlock_balance(gas_0_1)_: -+1 flow(gas_powerplant_gas_0_1) +c_e_BusBlock_balance(electricity_1)_: ++1 flow(powerplant_gas_electricity_1) = 0 -c_e_BusBlock_balance(gas_1_2)_: -+1 flow(gas_powerplant_gas_1_2) +c_e_BusBlock_balance(electricity_2)_: ++1 flow(powerplant_gas_electricity_2) = 0 -c_e_BusBlock_balance(gas_1_3)_: -+1 flow(gas_powerplant_gas_1_3) +c_e_BusBlock_balance(electricity_3)_: ++1 flow(powerplant_gas_electricity_3) = 0 -c_e_BusBlock_balance(gas_2_4)_: -+1 flow(gas_powerplant_gas_2_4) +c_e_BusBlock_balance(electricity_4)_: ++1 flow(powerplant_gas_electricity_4) = 0 -c_e_BusBlock_balance(gas_2_5)_: -+1 flow(gas_powerplant_gas_2_5) +c_e_BusBlock_balance(electricity_5)_: ++1 flow(powerplant_gas_electricity_5) = 0 -c_e_BusBlock_balance(electricity_0_0)_: -+1 flow(powerplant_gas_electricity_0_0) +c_e_BusBlock_balance(gas_0)_: ++1 flow(gas_powerplant_gas_0) = 0 -c_e_BusBlock_balance(electricity_0_1)_: -+1 flow(powerplant_gas_electricity_0_1) +c_e_BusBlock_balance(gas_1)_: ++1 flow(gas_powerplant_gas_1) = 0 -c_e_BusBlock_balance(electricity_1_2)_: -+1 flow(powerplant_gas_electricity_1_2) +c_e_BusBlock_balance(gas_2)_: ++1 flow(gas_powerplant_gas_2) = 0 -c_e_BusBlock_balance(electricity_1_3)_: -+1 flow(powerplant_gas_electricity_1_3) +c_e_BusBlock_balance(gas_3)_: ++1 flow(gas_powerplant_gas_3) = 0 -c_e_BusBlock_balance(electricity_2_4)_: -+1 flow(powerplant_gas_electricity_2_4) +c_e_BusBlock_balance(gas_4)_: ++1 flow(gas_powerplant_gas_4) = 0 -c_e_BusBlock_balance(electricity_2_5)_: -+1 flow(powerplant_gas_electricity_2_5) +c_e_BusBlock_balance(gas_5)_: ++1 flow(gas_powerplant_gas_5) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0_0)_: --1 flow(powerplant_gas_electricity_0_0) -+0.58 flow(gas_powerplant_gas_0_0) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0)_: ++0.58 flow(gas_powerplant_gas_0) +-1 flow(powerplant_gas_electricity_0) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_0_1)_: --1 flow(powerplant_gas_electricity_0_1) -+0.58 flow(gas_powerplant_gas_0_1) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_1)_: ++0.58 flow(gas_powerplant_gas_1) +-1 flow(powerplant_gas_electricity_1) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_1_2)_: --1 flow(powerplant_gas_electricity_1_2) -+0.58 flow(gas_powerplant_gas_1_2) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_2)_: ++0.58 flow(gas_powerplant_gas_2) +-1 flow(powerplant_gas_electricity_2) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_1_3)_: --1 flow(powerplant_gas_electricity_1_3) -+0.58 flow(gas_powerplant_gas_1_3) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_3)_: ++0.58 flow(gas_powerplant_gas_3) +-1 flow(powerplant_gas_electricity_3) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_2_4)_: --1 flow(powerplant_gas_electricity_2_4) -+0.58 flow(gas_powerplant_gas_2_4) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_4)_: ++0.58 flow(gas_powerplant_gas_4) +-1 flow(powerplant_gas_electricity_4) = 0 -c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_2_5)_: --1 flow(powerplant_gas_electricity_2_5) -+0.58 flow(gas_powerplant_gas_2_5) +c_e_ConverterBlock_relation(powerplant_gas_gas_electricity_5)_: ++0.58 flow(gas_powerplant_gas_5) +-1 flow(powerplant_gas_electricity_5) = 0 c_e_InvestmentFlowBlock_total_rule(powerplant_gas_electricity_0)_: @@ -136,9 +136,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(powerplant_gas_electricity_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(powerplant_gas_electricity_0)_: ++1 InvestmentFlowBlock_old(powerplant_gas_electricity_0) -1 InvestmentFlowBlock_old_end(powerplant_gas_electricity_0) -1 InvestmentFlowBlock_old_exo(powerplant_gas_electricity_0) -+1 InvestmentFlowBlock_old(powerplant_gas_electricity_0) = 0 c_e_InvestmentFlowBlock_old_rule(powerplant_gas_electricity_1)_: @@ -154,32 +154,32 @@ c_e_InvestmentFlowBlock_old_rule(powerplant_gas_electricity_2)_: = 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_0_0)_: -+1 flow(powerplant_gas_electricity_0_0) ++1 flow(powerplant_gas_electricity_0) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_0_1)_: -+1 flow(powerplant_gas_electricity_0_1) ++1 flow(powerplant_gas_electricity_1) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_1_2)_: -+1 flow(powerplant_gas_electricity_1_2) ++1 flow(powerplant_gas_electricity_2) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_1) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_1_3)_: -+1 flow(powerplant_gas_electricity_1_3) ++1 flow(powerplant_gas_electricity_3) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_1) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_2_4)_: -+1 flow(powerplant_gas_electricity_2_4) ++1 flow(powerplant_gas_electricity_4) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_2) <= 0 c_u_InvestmentFlowBlock_max(powerplant_gas_electricity_2_5)_: -+1 flow(powerplant_gas_electricity_2_5) ++1 flow(powerplant_gas_electricity_5) -1 InvestmentFlowBlock_total(powerplant_gas_electricity_2) <= 0 @@ -203,22 +203,23 @@ bounds 0 <= InvestmentFlowBlock_invest(powerplant_gas_electricity_0) <= 1000 0 <= InvestmentFlowBlock_invest(powerplant_gas_electricity_1) <= 1000 0 <= InvestmentFlowBlock_invest(powerplant_gas_electricity_2) <= 1000 - 0 <= flow(powerplant_gas_electricity_0_0) <= +inf - 0 <= flow(powerplant_gas_electricity_0_1) <= +inf - 0 <= flow(powerplant_gas_electricity_1_2) <= +inf - 0 <= flow(powerplant_gas_electricity_1_3) <= +inf - 0 <= flow(powerplant_gas_electricity_2_4) <= +inf - 0 <= flow(powerplant_gas_electricity_2_5) <= +inf - 0 <= flow(gas_powerplant_gas_0_0) <= +inf - 0 <= flow(gas_powerplant_gas_0_1) <= +inf - 0 <= flow(gas_powerplant_gas_1_2) <= +inf - 0 <= flow(gas_powerplant_gas_1_3) <= +inf - 0 <= flow(gas_powerplant_gas_2_4) <= +inf - 0 <= flow(gas_powerplant_gas_2_5) <= +inf + 0 <= flow(gas_powerplant_gas_0) <= +inf + 0 <= flow(gas_powerplant_gas_1) <= +inf + 0 <= flow(gas_powerplant_gas_2) <= +inf + 0 <= flow(gas_powerplant_gas_3) <= +inf + 0 <= flow(gas_powerplant_gas_4) <= +inf + 0 <= flow(gas_powerplant_gas_5) <= +inf + 0 <= flow(powerplant_gas_electricity_0) <= +inf + 0 <= flow(powerplant_gas_electricity_1) <= +inf + 0 <= flow(powerplant_gas_electricity_2) <= +inf + 0 <= flow(powerplant_gas_electricity_3) <= +inf + 0 <= flow(powerplant_gas_electricity_4) <= +inf + 0 <= flow(powerplant_gas_electricity_5) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_electricity_0) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_electricity_1) <= +inf - 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_1) <= +inf 0 <= InvestmentFlowBlock_total(powerplant_gas_electricity_2) <= +inf + 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_0) <= +inf + 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_1) <= +inf 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_2) <= +inf 0 <= InvestmentFlowBlock_old_end(powerplant_gas_electricity_0) <= +inf 0 <= InvestmentFlowBlock_old_end(powerplant_gas_electricity_1) <= +inf @@ -226,5 +227,4 @@ bounds 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_electricity_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_electricity_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(powerplant_gas_electricity_2) <= +inf - 0 <= InvestmentFlowBlock_old(powerplant_gas_electricity_0) <= +inf end diff --git a/tests/lp_files/linear_converter_multi_period.lp b/tests/lp_files/linear_converter_multi_period.lp index 0f7933422..31957b90a 100644 --- a/tests/lp_files/linear_converter_multi_period.lp +++ b/tests/lp_files/linear_converter_multi_period.lp @@ -2,104 +2,104 @@ min objective: -+50 flow(powerplantGas_electricity_0_0) -+50 flow(powerplantGas_electricity_0_1) -+49.01960784313725 flow(powerplantGas_electricity_1_2) -+49.01960784313725 flow(powerplantGas_electricity_1_3) -+48.058439061899264 flow(powerplantGas_electricity_2_4) -+48.058439061899264 flow(powerplantGas_electricity_2_5) ++50 flow(powerplantGas_electricity_0) ++50 flow(powerplantGas_electricity_1) ++49.01960784313725 flow(powerplantGas_electricity_2) ++49.01960784313725 flow(powerplantGas_electricity_3) ++48.058439061899264 flow(powerplantGas_electricity_4) ++48.058439061899264 flow(powerplantGas_electricity_5) s.t. -c_e_BusBlock_balance(gas_0_0)_: -+1 flow(gas_powerplantGas_0_0) +c_e_BusBlock_balance(electricity_0)_: ++1 flow(powerplantGas_electricity_0) = 0 -c_e_BusBlock_balance(gas_0_1)_: -+1 flow(gas_powerplantGas_0_1) +c_e_BusBlock_balance(electricity_1)_: ++1 flow(powerplantGas_electricity_1) = 0 -c_e_BusBlock_balance(gas_1_2)_: -+1 flow(gas_powerplantGas_1_2) +c_e_BusBlock_balance(electricity_2)_: ++1 flow(powerplantGas_electricity_2) = 0 -c_e_BusBlock_balance(gas_1_3)_: -+1 flow(gas_powerplantGas_1_3) +c_e_BusBlock_balance(electricity_3)_: ++1 flow(powerplantGas_electricity_3) = 0 -c_e_BusBlock_balance(gas_2_4)_: -+1 flow(gas_powerplantGas_2_4) +c_e_BusBlock_balance(electricity_4)_: ++1 flow(powerplantGas_electricity_4) = 0 -c_e_BusBlock_balance(gas_2_5)_: -+1 flow(gas_powerplantGas_2_5) +c_e_BusBlock_balance(electricity_5)_: ++1 flow(powerplantGas_electricity_5) = 0 -c_e_BusBlock_balance(electricity_0_0)_: -+1 flow(powerplantGas_electricity_0_0) +c_e_BusBlock_balance(gas_0)_: ++1 flow(gas_powerplantGas_0) = 0 -c_e_BusBlock_balance(electricity_0_1)_: -+1 flow(powerplantGas_electricity_0_1) +c_e_BusBlock_balance(gas_1)_: ++1 flow(gas_powerplantGas_1) = 0 -c_e_BusBlock_balance(electricity_1_2)_: -+1 flow(powerplantGas_electricity_1_2) +c_e_BusBlock_balance(gas_2)_: ++1 flow(gas_powerplantGas_2) = 0 -c_e_BusBlock_balance(electricity_1_3)_: -+1 flow(powerplantGas_electricity_1_3) +c_e_BusBlock_balance(gas_3)_: ++1 flow(gas_powerplantGas_3) = 0 -c_e_BusBlock_balance(electricity_2_4)_: -+1 flow(powerplantGas_electricity_2_4) +c_e_BusBlock_balance(gas_4)_: ++1 flow(gas_powerplantGas_4) = 0 -c_e_BusBlock_balance(electricity_2_5)_: -+1 flow(powerplantGas_electricity_2_5) +c_e_BusBlock_balance(gas_5)_: ++1 flow(gas_powerplantGas_5) = 0 -c_e_ConverterBlock_relation(powerplantGas_gas_electricity_0_0)_: --1 flow(powerplantGas_electricity_0_0) -+0.58 flow(gas_powerplantGas_0_0) +c_e_ConverterBlock_relation(powerplantGas_gas_electricity_0)_: ++0.58 flow(gas_powerplantGas_0) +-1 flow(powerplantGas_electricity_0) = 0 -c_e_ConverterBlock_relation(powerplantGas_gas_electricity_0_1)_: --1 flow(powerplantGas_electricity_0_1) -+0.58 flow(gas_powerplantGas_0_1) +c_e_ConverterBlock_relation(powerplantGas_gas_electricity_1)_: ++0.58 flow(gas_powerplantGas_1) +-1 flow(powerplantGas_electricity_1) = 0 -c_e_ConverterBlock_relation(powerplantGas_gas_electricity_1_2)_: --1 flow(powerplantGas_electricity_1_2) -+0.58 flow(gas_powerplantGas_1_2) +c_e_ConverterBlock_relation(powerplantGas_gas_electricity_2)_: ++0.58 flow(gas_powerplantGas_2) +-1 flow(powerplantGas_electricity_2) = 0 -c_e_ConverterBlock_relation(powerplantGas_gas_electricity_1_3)_: --1 flow(powerplantGas_electricity_1_3) -+0.58 flow(gas_powerplantGas_1_3) +c_e_ConverterBlock_relation(powerplantGas_gas_electricity_3)_: ++0.58 flow(gas_powerplantGas_3) +-1 flow(powerplantGas_electricity_3) = 0 -c_e_ConverterBlock_relation(powerplantGas_gas_electricity_2_4)_: --1 flow(powerplantGas_electricity_2_4) -+0.58 flow(gas_powerplantGas_2_4) +c_e_ConverterBlock_relation(powerplantGas_gas_electricity_4)_: ++0.58 flow(gas_powerplantGas_4) +-1 flow(powerplantGas_electricity_4) = 0 -c_e_ConverterBlock_relation(powerplantGas_gas_electricity_2_5)_: --1 flow(powerplantGas_electricity_2_5) -+0.58 flow(gas_powerplantGas_2_5) +c_e_ConverterBlock_relation(powerplantGas_gas_electricity_5)_: ++0.58 flow(gas_powerplantGas_5) +-1 flow(powerplantGas_electricity_5) = 0 bounds - 0.0 <= flow(powerplantGas_electricity_0_0) <= 100000000000.0 - 0.0 <= flow(powerplantGas_electricity_0_1) <= 100000000000.0 - 0.0 <= flow(powerplantGas_electricity_1_2) <= 100000000000.0 - 0.0 <= flow(powerplantGas_electricity_1_3) <= 100000000000.0 - 0.0 <= flow(powerplantGas_electricity_2_4) <= 100000000000.0 - 0.0 <= flow(powerplantGas_electricity_2_5) <= 100000000000.0 - 0 <= flow(gas_powerplantGas_0_0) <= +inf - 0 <= flow(gas_powerplantGas_0_1) <= +inf - 0 <= flow(gas_powerplantGas_1_2) <= +inf - 0 <= flow(gas_powerplantGas_1_3) <= +inf - 0 <= flow(gas_powerplantGas_2_4) <= +inf - 0 <= flow(gas_powerplantGas_2_5) <= +inf + 0 <= flow(gas_powerplantGas_0) <= +inf + 0 <= flow(gas_powerplantGas_1) <= +inf + 0 <= flow(gas_powerplantGas_2) <= +inf + 0 <= flow(gas_powerplantGas_3) <= +inf + 0 <= flow(gas_powerplantGas_4) <= +inf + 0 <= flow(gas_powerplantGas_5) <= +inf + 0.0 <= flow(powerplantGas_electricity_0) <= 100000000000.0 + 0.0 <= flow(powerplantGas_electricity_1) <= 100000000000.0 + 0.0 <= flow(powerplantGas_electricity_2) <= 100000000000.0 + 0.0 <= flow(powerplantGas_electricity_3) <= 100000000000.0 + 0.0 <= flow(powerplantGas_electricity_4) <= 100000000000.0 + 0.0 <= flow(powerplantGas_electricity_5) <= 100000000000.0 end diff --git a/tests/lp_files/link.lp b/tests/lp_files/link.lp index 7abe6bd3e..9a156077e 100644 --- a/tests/lp_files/link.lp +++ b/tests/lp_files/link.lp @@ -1,83 +1,83 @@ \* Source Pyomo model name=Model *\ -min +min objective: +0 ONE_VAR_CONSTANT s.t. -c_e_BusBlock_balance(el1_0_0)_: --1 flow(el1_link_0_0) -+1 flow(link_el1_0_0) +c_e_BusBlock_balance(el1_0)_: +-1 flow(el1_link_0) ++1 flow(link_el1_0) = 0 -c_e_BusBlock_balance(el1_0_1)_: --1 flow(el1_link_0_1) -+1 flow(link_el1_0_1) +c_e_BusBlock_balance(el1_1)_: +-1 flow(el1_link_1) ++1 flow(link_el1_1) = 0 -c_e_BusBlock_balance(el1_0_2)_: --1 flow(el1_link_0_2) -+1 flow(link_el1_0_2) +c_e_BusBlock_balance(el1_2)_: +-1 flow(el1_link_2) ++1 flow(link_el1_2) = 0 -c_e_BusBlock_balance(el2_0_0)_: --1 flow(el2_link_0_0) -+1 flow(link_el2_0_0) +c_e_BusBlock_balance(el2_0)_: +-1 flow(el2_link_0) ++1 flow(link_el2_0) = 0 -c_e_BusBlock_balance(el2_0_1)_: --1 flow(el2_link_0_1) -+1 flow(link_el2_0_1) +c_e_BusBlock_balance(el2_1)_: +-1 flow(el2_link_1) ++1 flow(link_el2_1) = 0 -c_e_BusBlock_balance(el2_0_2)_: --1 flow(el2_link_0_2) -+1 flow(link_el2_0_2) +c_e_BusBlock_balance(el2_2)_: +-1 flow(el2_link_2) ++1 flow(link_el2_2) = 0 -c_e_LinkBlock_relation(link_el1_el2_0_0)_: --0.75 flow(el1_link_0_0) -+1 flow(link_el2_0_0) +c_e_LinkBlock_relation(link_el1_el2_0)_: +-0.75 flow(el1_link_0) ++1 flow(link_el2_0) = 0 -c_e_LinkBlock_relation(link_el1_el2_0_1)_: --0.75 flow(el1_link_0_1) -+1 flow(link_el2_0_1) +c_e_LinkBlock_relation(link_el2_el1_0)_: +-0.5 flow(el2_link_0) ++1 flow(link_el1_0) = 0 -c_e_LinkBlock_relation(link_el1_el2_0_2)_: --0.75 flow(el1_link_0_2) -+1 flow(link_el2_0_2) +c_e_LinkBlock_relation(link_el1_el2_1)_: +-0.75 flow(el1_link_1) ++1 flow(link_el2_1) = 0 -c_e_LinkBlock_relation(link_el2_el1_0_0)_: --0.5 flow(el2_link_0_0) -+1 flow(link_el1_0_0) +c_e_LinkBlock_relation(link_el2_el1_1)_: +-0.5 flow(el2_link_1) ++1 flow(link_el1_1) = 0 -c_e_LinkBlock_relation(link_el2_el1_0_1)_: --0.5 flow(el2_link_0_1) -+1 flow(link_el1_0_1) +c_e_LinkBlock_relation(link_el1_el2_2)_: +-0.75 flow(el1_link_2) ++1 flow(link_el2_2) = 0 -c_e_LinkBlock_relation(link_el2_el1_0_2)_: --0.5 flow(el2_link_0_2) -+1 flow(link_el1_0_2) +c_e_LinkBlock_relation(link_el2_el1_2)_: +-0.5 flow(el2_link_2) ++1 flow(link_el1_2) = 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(el1_link_0_0) <= 4 - 0 <= flow(el1_link_0_1) <= 4 - 0 <= flow(el1_link_0_2) <= 4 - 0 <= flow(el2_link_0_0) <= 2 - 0 <= flow(el2_link_0_1) <= 2 - 0 <= flow(el2_link_0_2) <= 2 - 0 <= flow(link_el1_0_0) <= +inf - 0 <= flow(link_el1_0_1) <= +inf - 0 <= flow(link_el1_0_2) <= +inf - 0 <= flow(link_el2_0_0) <= +inf - 0 <= flow(link_el2_0_1) <= +inf - 0 <= flow(link_el2_0_2) <= +inf + 0 <= flow(el1_link_0) <= 4 + 0 <= flow(el1_link_1) <= 4 + 0 <= flow(el1_link_2) <= 4 + 0 <= flow(el2_link_0) <= 2 + 0 <= flow(el2_link_1) <= 2 + 0 <= flow(el2_link_2) <= 2 + 0 <= flow(link_el1_0) <= +inf + 0 <= flow(link_el1_1) <= +inf + 0 <= flow(link_el1_2) <= +inf + 0 <= flow(link_el2_0) <= +inf + 0 <= flow(link_el2_1) <= +inf + 0 <= flow(link_el2_2) <= +inf end diff --git a/tests/lp_files/max_source_min_sink.lp b/tests/lp_files/max_source_min_sink.lp index 21c940c64..f1af87a78 100644 --- a/tests/lp_files/max_source_min_sink.lp +++ b/tests/lp_files/max_source_min_sink.lp @@ -2,32 +2,32 @@ min objective: -+14 flow(electricityBus_minDemand_0_0) -+14 flow(electricityBus_minDemand_0_1) -+14 flow(electricityBus_minDemand_0_2) ++14 flow(electricityBus_minDemand_0) ++14 flow(electricityBus_minDemand_1) ++14 flow(electricityBus_minDemand_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_minDemand_0_0) -+1 flow(wind_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_minDemand_0) ++1 flow(wind_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_minDemand_0_1) -+1 flow(wind_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_minDemand_1) ++1 flow(wind_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: --1 flow(electricityBus_minDemand_0_2) -+1 flow(wind_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_minDemand_2) ++1 flow(wind_electricityBus_2) = 0 bounds - 45.36 <= flow(electricityBus_minDemand_0_0) <= 54 - 50.76 <= flow(electricityBus_minDemand_0_1) <= 54 - 31.86 <= flow(electricityBus_minDemand_0_2) <= 54 - 0 <= flow(wind_electricityBus_0_0) <= 45.9 - 0 <= flow(wind_electricityBus_0_1) <= 51.3 - 0 <= flow(wind_electricityBus_0_2) <= 32.94 + 45.36 <= flow(electricityBus_minDemand_0) <= 54 + 50.76 <= flow(electricityBus_minDemand_1) <= 54 + 31.86 <= flow(electricityBus_minDemand_2) <= 54 + 0 <= flow(wind_electricityBus_0) <= 45.9 + 0 <= flow(wind_electricityBus_1) <= 51.3 + 0 <= flow(wind_electricityBus_2) <= 32.94 end diff --git a/tests/lp_files/max_source_min_sink_multi_period.lp b/tests/lp_files/max_source_min_sink_multi_period.lp index db3e1ab0e..16a2c50ed 100644 --- a/tests/lp_files/max_source_min_sink_multi_period.lp +++ b/tests/lp_files/max_source_min_sink_multi_period.lp @@ -2,56 +2,56 @@ min objective: -+14 flow(electricityBus_minDemand_0_0) -+14 flow(electricityBus_minDemand_0_1) -+13.72549019607843 flow(electricityBus_minDemand_1_2) -+13.72549019607843 flow(electricityBus_minDemand_1_3) -+13.456362937331795 flow(electricityBus_minDemand_2_4) -+13.456362937331795 flow(electricityBus_minDemand_2_5) ++14 flow(electricityBus_minDemand_0) ++14 flow(electricityBus_minDemand_1) ++13.72549019607843 flow(electricityBus_minDemand_2) ++13.72549019607843 flow(electricityBus_minDemand_3) ++13.456362937331795 flow(electricityBus_minDemand_4) ++13.456362937331795 flow(electricityBus_minDemand_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_minDemand_0_0) -+1 flow(wind_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_minDemand_0) ++1 flow(wind_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_minDemand_0_1) -+1 flow(wind_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_minDemand_1) ++1 flow(wind_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: --1 flow(electricityBus_minDemand_1_2) -+1 flow(wind_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_minDemand_2) ++1 flow(wind_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: --1 flow(electricityBus_minDemand_1_3) -+1 flow(wind_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_minDemand_3) ++1 flow(wind_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: --1 flow(electricityBus_minDemand_2_4) -+1 flow(wind_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_minDemand_4) ++1 flow(wind_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: --1 flow(electricityBus_minDemand_2_5) -+1 flow(wind_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_minDemand_5) ++1 flow(wind_electricityBus_5) = 0 bounds - 45.36 <= flow(electricityBus_minDemand_0_0) <= 54 - 50.76 <= flow(electricityBus_minDemand_0_1) <= 54 - 31.86 <= flow(electricityBus_minDemand_1_2) <= 54 - 37.8 <= flow(electricityBus_minDemand_1_3) <= 54 - 52.379999999999995 <= flow(electricityBus_minDemand_2_4) <= 54 - 4.859999999999999 <= flow(electricityBus_minDemand_2_5) <= 54 - 0 <= flow(wind_electricityBus_0_0) <= 45.9 - 0 <= flow(wind_electricityBus_0_1) <= 51.3 - 0 <= flow(wind_electricityBus_1_2) <= 32.94 - 0 <= flow(wind_electricityBus_1_3) <= 38.879999999999995 - 0 <= flow(wind_electricityBus_2_4) <= 53.46 - 0 <= flow(wind_electricityBus_2_5) <= 5.4 + 45.36 <= flow(electricityBus_minDemand_0) <= 54 + 50.76 <= flow(electricityBus_minDemand_1) <= 54 + 31.86 <= flow(electricityBus_minDemand_2) <= 54 + 37.8 <= flow(electricityBus_minDemand_3) <= 54 + 52.379999999999995 <= flow(electricityBus_minDemand_4) <= 54 + 4.859999999999999 <= flow(electricityBus_minDemand_5) <= 54 + 0 <= flow(wind_electricityBus_0) <= 45.9 + 0 <= flow(wind_electricityBus_1) <= 51.3 + 0 <= flow(wind_electricityBus_2) <= 32.94 + 0 <= flow(wind_electricityBus_3) <= 38.879999999999995 + 0 <= flow(wind_electricityBus_4) <= 53.46 + 0 <= flow(wind_electricityBus_5) <= 5.4 end diff --git a/tests/lp_files/maximum_shutdowns.lp b/tests/lp_files/maximum_shutdowns.lp index 6887f17d0..193f6e699 100644 --- a/tests/lp_files/maximum_shutdowns.lp +++ b/tests/lp_files/maximum_shutdowns.lp @@ -2,22 +2,22 @@ min objective: -+10 flow(cheap_plant_maximum_shutdowns_Bus_C_0_0) -+10 flow(cheap_plant_maximum_shutdowns_Bus_C_0_1) -+10 flow(cheap_plant_maximum_shutdowns_Bus_C_0_2) ++10 flow(cheap_plant_maximum_shutdowns_Bus_C_0) ++10 flow(cheap_plant_maximum_shutdowns_Bus_C_1) ++10 flow(cheap_plant_maximum_shutdowns_Bus_C_2) s.t. -c_e_BusBlock_balance(Bus_C_0_0)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_0) +c_e_BusBlock_balance(Bus_C_0)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_0) = 0 -c_e_BusBlock_balance(Bus_C_0_1)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_1) +c_e_BusBlock_balance(Bus_C_1)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_1) = 0 -c_e_BusBlock_balance(Bus_C_0_2)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_2) +c_e_BusBlock_balance(Bus_C_2)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_2) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_maximum_shutdowns_Bus_C_0)_: @@ -35,33 +35,33 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_maximum_shutdowns_B -10 NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_2) = 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_0_0)_: --1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_0) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_0)_: +-1 flow(cheap_plant_maximum_shutdowns_Bus_C_0) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_0_1)_: --1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_1) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_1)_: +-1 flow(cheap_plant_maximum_shutdowns_Bus_C_1) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_0_2)_: --1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_2) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_2)_: +-1 flow(cheap_plant_maximum_shutdowns_Bus_C_2) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_0_0)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_0) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_0)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_0) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_0_1)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_1) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_1)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_1) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_0_2)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_2) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_2)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_2) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_2) <= 0 @@ -89,14 +89,14 @@ c_u_NonConvexFlowBlock_max_shutdown_constr(cheap_plant_maximum_shutdowns_Bus_C)_ <= 2 bounds - 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_0_0) <= 10.0 - 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_0_1) <= 10.0 - 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_0_2) <= 10.0 + 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_0) <= 10.0 + 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_1) <= 10.0 + 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_2) <= 10.0 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_0) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_1) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_1) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_2) <= +inf + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_0) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_1) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_2) <= 1 0 <= NonConvexFlowBlock_shutdown(cheap_plant_maximum_shutdowns_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_shutdown(cheap_plant_maximum_shutdowns_Bus_C_1) <= 1 diff --git a/tests/lp_files/maximum_shutdowns_multi_period.lp b/tests/lp_files/maximum_shutdowns_multi_period.lp index f7f280121..d84592df6 100644 --- a/tests/lp_files/maximum_shutdowns_multi_period.lp +++ b/tests/lp_files/maximum_shutdowns_multi_period.lp @@ -2,37 +2,37 @@ min objective: -+10 flow(cheap_plant_maximum_shutdowns_Bus_C_0_0) -+10 flow(cheap_plant_maximum_shutdowns_Bus_C_0_1) -+9.80392156862745 flow(cheap_plant_maximum_shutdowns_Bus_C_1_2) -+9.80392156862745 flow(cheap_plant_maximum_shutdowns_Bus_C_1_3) -+9.611687812379854 flow(cheap_plant_maximum_shutdowns_Bus_C_2_4) -+9.611687812379854 flow(cheap_plant_maximum_shutdowns_Bus_C_2_5) ++10 flow(cheap_plant_maximum_shutdowns_Bus_C_0) ++10 flow(cheap_plant_maximum_shutdowns_Bus_C_1) ++9.80392156862745 flow(cheap_plant_maximum_shutdowns_Bus_C_2) ++9.80392156862745 flow(cheap_plant_maximum_shutdowns_Bus_C_3) ++9.611687812379854 flow(cheap_plant_maximum_shutdowns_Bus_C_4) ++9.611687812379854 flow(cheap_plant_maximum_shutdowns_Bus_C_5) s.t. -c_e_BusBlock_balance(Bus_C_0_0)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_0) +c_e_BusBlock_balance(Bus_C_0)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_0) = 0 -c_e_BusBlock_balance(Bus_C_0_1)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_1) +c_e_BusBlock_balance(Bus_C_1)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_1) = 0 -c_e_BusBlock_balance(Bus_C_1_2)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_1_2) +c_e_BusBlock_balance(Bus_C_2)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_2) = 0 -c_e_BusBlock_balance(Bus_C_1_3)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_1_3) +c_e_BusBlock_balance(Bus_C_3)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_3) = 0 -c_e_BusBlock_balance(Bus_C_2_4)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_2_4) +c_e_BusBlock_balance(Bus_C_4)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_4) = 0 -c_e_BusBlock_balance(Bus_C_2_5)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_2_5) +c_e_BusBlock_balance(Bus_C_5)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_5) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_maximum_shutdowns_Bus_C_0)_: @@ -65,63 +65,63 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_maximum_shutdowns_B -10 NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_5) = 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_0_0)_: --1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_0) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_0)_: +-1 flow(cheap_plant_maximum_shutdowns_Bus_C_0) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_0_1)_: --1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_1) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_1)_: +-1 flow(cheap_plant_maximum_shutdowns_Bus_C_1) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_1_2)_: --1 flow(cheap_plant_maximum_shutdowns_Bus_C_1_2) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_2)_: +-1 flow(cheap_plant_maximum_shutdowns_Bus_C_2) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_1_3)_: --1 flow(cheap_plant_maximum_shutdowns_Bus_C_1_3) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_3)_: +-1 flow(cheap_plant_maximum_shutdowns_Bus_C_3) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_3) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_2_4)_: --1 flow(cheap_plant_maximum_shutdowns_Bus_C_2_4) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_4)_: +-1 flow(cheap_plant_maximum_shutdowns_Bus_C_4) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_4) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_2_5)_: --1 flow(cheap_plant_maximum_shutdowns_Bus_C_2_5) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_shutdowns_Bus_C_5)_: +-1 flow(cheap_plant_maximum_shutdowns_Bus_C_5) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_5) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_0_0)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_0) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_0)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_0) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_0_1)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_0_1) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_1)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_1) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_1_2)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_1_2) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_2)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_2) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_1_3)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_1_3) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_3)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_3) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_3) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_2_4)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_2_4) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_4)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_4) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_4) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_2_5)_: -+1 flow(cheap_plant_maximum_shutdowns_Bus_C_2_5) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_shutdowns_Bus_C_5)_: ++1 flow(cheap_plant_maximum_shutdowns_Bus_C_5) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_5) <= 0 @@ -170,23 +170,23 @@ c_u_NonConvexFlowBlock_max_shutdown_constr(cheap_plant_maximum_shutdowns_Bus_C)_ <= 2 bounds - 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_0_0) <= 10.0 - 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_0_1) <= 10.0 - 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_1_2) <= 10.0 - 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_1_3) <= 10.0 - 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_2_4) <= 10.0 - 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_2_5) <= 10.0 + 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_0) <= 10.0 + 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_1) <= 10.0 + 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_2) <= 10.0 + 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_3) <= 10.0 + 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_4) <= 10.0 + 0 <= flow(cheap_plant_maximum_shutdowns_Bus_C_5) <= 10.0 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_0) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_1) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_1) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_2) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_2) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_3) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_3) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_4) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_4) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_shutdowns_Bus_C_5) <= +inf + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_0) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_1) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_2) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_3) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_4) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_shutdowns_Bus_C_5) <= 1 0 <= NonConvexFlowBlock_shutdown(cheap_plant_maximum_shutdowns_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_shutdown(cheap_plant_maximum_shutdowns_Bus_C_1) <= 1 diff --git a/tests/lp_files/maximum_startups.lp b/tests/lp_files/maximum_startups.lp index 984e780c8..c13a2252d 100644 --- a/tests/lp_files/maximum_startups.lp +++ b/tests/lp_files/maximum_startups.lp @@ -2,22 +2,22 @@ min objective: -+10 flow(cheap_plant_maximum_startups_Bus_C_0_0) -+10 flow(cheap_plant_maximum_startups_Bus_C_0_1) -+10 flow(cheap_plant_maximum_startups_Bus_C_0_2) ++10 flow(cheap_plant_maximum_startups_Bus_C_0) ++10 flow(cheap_plant_maximum_startups_Bus_C_1) ++10 flow(cheap_plant_maximum_startups_Bus_C_2) s.t. -c_e_BusBlock_balance(Bus_C_0_0)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_0_0) +c_e_BusBlock_balance(Bus_C_0)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_0) = 0 -c_e_BusBlock_balance(Bus_C_0_1)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_0_1) +c_e_BusBlock_balance(Bus_C_1)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_1) = 0 -c_e_BusBlock_balance(Bus_C_0_2)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_0_2) +c_e_BusBlock_balance(Bus_C_2)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_2) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_maximum_startups_Bus_C_0)_: @@ -35,33 +35,33 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_maximum_startups_Bu -10 NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_2) = 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_0_0)_: --1 flow(cheap_plant_maximum_startups_Bus_C_0_0) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_0)_: +-1 flow(cheap_plant_maximum_startups_Bus_C_0) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_0_1)_: --1 flow(cheap_plant_maximum_startups_Bus_C_0_1) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_1)_: +-1 flow(cheap_plant_maximum_startups_Bus_C_1) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_0_2)_: --1 flow(cheap_plant_maximum_startups_Bus_C_0_2) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_2)_: +-1 flow(cheap_plant_maximum_startups_Bus_C_2) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_0_0)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_0_0) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_0)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_0) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_0_1)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_0_1) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_1)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_1) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_0_2)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_0_2) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_2)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_2) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_2) <= 0 @@ -89,14 +89,14 @@ c_u_NonConvexFlowBlock_max_startup_constr(cheap_plant_maximum_startups_Bus_C)_: <= 2 bounds - 0 <= flow(cheap_plant_maximum_startups_Bus_C_0_0) <= 10.0 - 0 <= flow(cheap_plant_maximum_startups_Bus_C_0_1) <= 10.0 - 0 <= flow(cheap_plant_maximum_startups_Bus_C_0_2) <= 10.0 + 0 <= flow(cheap_plant_maximum_startups_Bus_C_0) <= 10.0 + 0 <= flow(cheap_plant_maximum_startups_Bus_C_1) <= 10.0 + 0 <= flow(cheap_plant_maximum_startups_Bus_C_2) <= 10.0 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_0) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_1) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_1) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_2) <= +inf + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_0) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_1) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_2) <= 1 0 <= NonConvexFlowBlock_startup(cheap_plant_maximum_startups_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_startup(cheap_plant_maximum_startups_Bus_C_1) <= 1 diff --git a/tests/lp_files/maximum_startups_multi_period.lp b/tests/lp_files/maximum_startups_multi_period.lp index c51cf0d79..84e4d439c 100644 --- a/tests/lp_files/maximum_startups_multi_period.lp +++ b/tests/lp_files/maximum_startups_multi_period.lp @@ -2,37 +2,37 @@ min objective: -+10 flow(cheap_plant_maximum_startups_Bus_C_0_0) -+10 flow(cheap_plant_maximum_startups_Bus_C_0_1) -+9.80392156862745 flow(cheap_plant_maximum_startups_Bus_C_1_2) -+9.80392156862745 flow(cheap_plant_maximum_startups_Bus_C_1_3) -+9.611687812379854 flow(cheap_plant_maximum_startups_Bus_C_2_4) -+9.611687812379854 flow(cheap_plant_maximum_startups_Bus_C_2_5) ++10 flow(cheap_plant_maximum_startups_Bus_C_0) ++10 flow(cheap_plant_maximum_startups_Bus_C_1) ++9.80392156862745 flow(cheap_plant_maximum_startups_Bus_C_2) ++9.80392156862745 flow(cheap_plant_maximum_startups_Bus_C_3) ++9.611687812379854 flow(cheap_plant_maximum_startups_Bus_C_4) ++9.611687812379854 flow(cheap_plant_maximum_startups_Bus_C_5) s.t. -c_e_BusBlock_balance(Bus_C_0_0)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_0_0) +c_e_BusBlock_balance(Bus_C_0)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_0) = 0 -c_e_BusBlock_balance(Bus_C_0_1)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_0_1) +c_e_BusBlock_balance(Bus_C_1)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_1) = 0 -c_e_BusBlock_balance(Bus_C_1_2)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_1_2) +c_e_BusBlock_balance(Bus_C_2)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_2) = 0 -c_e_BusBlock_balance(Bus_C_1_3)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_1_3) +c_e_BusBlock_balance(Bus_C_3)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_3) = 0 -c_e_BusBlock_balance(Bus_C_2_4)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_2_4) +c_e_BusBlock_balance(Bus_C_4)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_4) = 0 -c_e_BusBlock_balance(Bus_C_2_5)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_2_5) +c_e_BusBlock_balance(Bus_C_5)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_5) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_maximum_startups_Bus_C_0)_: @@ -65,63 +65,63 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_maximum_startups_Bu -10 NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_5) = 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_0_0)_: --1 flow(cheap_plant_maximum_startups_Bus_C_0_0) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_0)_: +-1 flow(cheap_plant_maximum_startups_Bus_C_0) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_0_1)_: --1 flow(cheap_plant_maximum_startups_Bus_C_0_1) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_1)_: +-1 flow(cheap_plant_maximum_startups_Bus_C_1) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_1_2)_: --1 flow(cheap_plant_maximum_startups_Bus_C_1_2) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_2)_: +-1 flow(cheap_plant_maximum_startups_Bus_C_2) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_1_3)_: --1 flow(cheap_plant_maximum_startups_Bus_C_1_3) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_3)_: +-1 flow(cheap_plant_maximum_startups_Bus_C_3) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_3) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_2_4)_: --1 flow(cheap_plant_maximum_startups_Bus_C_2_4) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_4)_: +-1 flow(cheap_plant_maximum_startups_Bus_C_4) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_4) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_2_5)_: --1 flow(cheap_plant_maximum_startups_Bus_C_2_5) +c_u_NonConvexFlowBlock_min(cheap_plant_maximum_startups_Bus_C_5)_: +-1 flow(cheap_plant_maximum_startups_Bus_C_5) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_5) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_0_0)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_0_0) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_0)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_0) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_0) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_0_1)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_0_1) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_1)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_1) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_1) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_1_2)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_1_2) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_2)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_2) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_2) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_1_3)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_1_3) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_3)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_3) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_3) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_2_4)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_2_4) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_4)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_4) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_4) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_2_5)_: -+1 flow(cheap_plant_maximum_startups_Bus_C_2_5) +c_u_NonConvexFlowBlock_max(cheap_plant_maximum_startups_Bus_C_5)_: ++1 flow(cheap_plant_maximum_startups_Bus_C_5) -1 NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_5) <= 0 @@ -170,23 +170,23 @@ c_u_NonConvexFlowBlock_max_startup_constr(cheap_plant_maximum_startups_Bus_C)_: <= 2 bounds - 0 <= flow(cheap_plant_maximum_startups_Bus_C_0_0) <= 10.0 - 0 <= flow(cheap_plant_maximum_startups_Bus_C_0_1) <= 10.0 - 0 <= flow(cheap_plant_maximum_startups_Bus_C_1_2) <= 10.0 - 0 <= flow(cheap_plant_maximum_startups_Bus_C_1_3) <= 10.0 - 0 <= flow(cheap_plant_maximum_startups_Bus_C_2_4) <= 10.0 - 0 <= flow(cheap_plant_maximum_startups_Bus_C_2_5) <= 10.0 + 0 <= flow(cheap_plant_maximum_startups_Bus_C_0) <= 10.0 + 0 <= flow(cheap_plant_maximum_startups_Bus_C_1) <= 10.0 + 0 <= flow(cheap_plant_maximum_startups_Bus_C_2) <= 10.0 + 0 <= flow(cheap_plant_maximum_startups_Bus_C_3) <= 10.0 + 0 <= flow(cheap_plant_maximum_startups_Bus_C_4) <= 10.0 + 0 <= flow(cheap_plant_maximum_startups_Bus_C_5) <= 10.0 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_0) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_1) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_1) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_2) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_2) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_3) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_3) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_4) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_4) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_maximum_startups_Bus_C_5) <= +inf + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_0) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_1) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_2) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_3) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_4) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_maximum_startups_Bus_C_5) <= 1 0 <= NonConvexFlowBlock_startup(cheap_plant_maximum_startups_Bus_C_0) <= 1 0 <= NonConvexFlowBlock_startup(cheap_plant_maximum_startups_Bus_C_1) <= 1 diff --git a/tests/lp_files/min_max_runtime.lp b/tests/lp_files/min_max_runtime.lp index cde473813..9e3d5ea79 100644 --- a/tests/lp_files/min_max_runtime.lp +++ b/tests/lp_files/min_max_runtime.lp @@ -2,9 +2,9 @@ min objective: -+10 flow(cheap_plant_min_down_constraints_Bus_T_0_0) -+10 flow(cheap_plant_min_down_constraints_Bus_T_0_1) -+10 flow(cheap_plant_min_down_constraints_Bus_T_0_2) ++10 flow(cheap_plant_min_down_constraints_Bus_T_0) ++10 flow(cheap_plant_min_down_constraints_Bus_T_1) ++10 flow(cheap_plant_min_down_constraints_Bus_T_2) +5 NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_0) +5 NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_1) +5 NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_2) @@ -14,16 +14,16 @@ objective: s.t. -c_e_BusBlock_balance(Bus_T_0_0)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_0_0) +c_e_BusBlock_balance(Bus_T_0)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_0) = 0 -c_e_BusBlock_balance(Bus_T_0_1)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_0_1) +c_e_BusBlock_balance(Bus_T_1)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_1) = 0 -c_e_BusBlock_balance(Bus_T_0_2)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_0_2) +c_e_BusBlock_balance(Bus_T_2)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_2) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_min_down_constraints_Bus_T_0)_: @@ -39,33 +39,33 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_min_down_constraint -10 NonConvexFlowBlock_status(cheap_plant_min_down_constraints_Bus_T_2) = 0 -c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_0_0)_: --1 flow(cheap_plant_min_down_constraints_Bus_T_0_0) +c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_0)_: +-1 flow(cheap_plant_min_down_constraints_Bus_T_0) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_0) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_0_1)_: --1 flow(cheap_plant_min_down_constraints_Bus_T_0_1) +c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_1)_: +-1 flow(cheap_plant_min_down_constraints_Bus_T_1) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_1) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_0_2)_: --1 flow(cheap_plant_min_down_constraints_Bus_T_0_2) +c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_2)_: +-1 flow(cheap_plant_min_down_constraints_Bus_T_2) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_2) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_0_0)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_0_0) +c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_0)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_0) -1 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_0) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_0_1)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_0_1) +c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_1)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_1) -1 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_1) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_0_2)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_0_2) +c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_2)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_2) -1 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_2) <= 0 @@ -96,9 +96,9 @@ c_u_NonConvexFlowBlock_shutdown_constr(cheap_plant_min_down_constraints_Bus_T_2) <= -1 bounds - 0 <= flow(cheap_plant_min_down_constraints_Bus_T_0_0) <= 10.0 - 0 <= flow(cheap_plant_min_down_constraints_Bus_T_0_1) <= 10.0 - 0 <= flow(cheap_plant_min_down_constraints_Bus_T_0_2) <= 10.0 + 0 <= flow(cheap_plant_min_down_constraints_Bus_T_0) <= 10.0 + 0 <= flow(cheap_plant_min_down_constraints_Bus_T_1) <= 10.0 + 0 <= flow(cheap_plant_min_down_constraints_Bus_T_2) <= 10.0 0 <= NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_0) <= 1 0 <= NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_1) <= 1 0 <= NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_2) <= 1 diff --git a/tests/lp_files/min_max_runtime_multi_period.lp b/tests/lp_files/min_max_runtime_multi_period.lp index 6155a7938..61be72293 100644 --- a/tests/lp_files/min_max_runtime_multi_period.lp +++ b/tests/lp_files/min_max_runtime_multi_period.lp @@ -2,12 +2,12 @@ min objective: -+10 flow(cheap_plant_min_down_constraints_Bus_T_0_0) -+10 flow(cheap_plant_min_down_constraints_Bus_T_0_1) -+9.80392156862745 flow(cheap_plant_min_down_constraints_Bus_T_1_2) -+9.80392156862745 flow(cheap_plant_min_down_constraints_Bus_T_1_3) -+9.611687812379854 flow(cheap_plant_min_down_constraints_Bus_T_2_4) -+9.611687812379854 flow(cheap_plant_min_down_constraints_Bus_T_2_5) ++10 flow(cheap_plant_min_down_constraints_Bus_T_0) ++10 flow(cheap_plant_min_down_constraints_Bus_T_1) ++9.80392156862745 flow(cheap_plant_min_down_constraints_Bus_T_2) ++9.80392156862745 flow(cheap_plant_min_down_constraints_Bus_T_3) ++9.611687812379854 flow(cheap_plant_min_down_constraints_Bus_T_4) ++9.611687812379854 flow(cheap_plant_min_down_constraints_Bus_T_5) +5 NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_0) +5 NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_1) +4.901960784313725 NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_2) @@ -23,28 +23,28 @@ objective: s.t. -c_e_BusBlock_balance(Bus_T_0_0)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_0_0) +c_e_BusBlock_balance(Bus_T_0)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_0) = 0 -c_e_BusBlock_balance(Bus_T_0_1)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_0_1) +c_e_BusBlock_balance(Bus_T_1)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_1) = 0 -c_e_BusBlock_balance(Bus_T_1_2)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_1_2) +c_e_BusBlock_balance(Bus_T_2)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_2) = 0 -c_e_BusBlock_balance(Bus_T_1_3)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_1_3) +c_e_BusBlock_balance(Bus_T_3)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_3) = 0 -c_e_BusBlock_balance(Bus_T_2_4)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_2_4) +c_e_BusBlock_balance(Bus_T_4)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_4) = 0 -c_e_BusBlock_balance(Bus_T_2_5)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_2_5) +c_e_BusBlock_balance(Bus_T_5)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_5) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_min_down_constraints_Bus_T_0)_: @@ -75,63 +75,63 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(cheap_plant_min_down_constraint -10 NonConvexFlowBlock_status(cheap_plant_min_down_constraints_Bus_T_5) = 0 -c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_0_0)_: --1 flow(cheap_plant_min_down_constraints_Bus_T_0_0) +c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_0)_: +-1 flow(cheap_plant_min_down_constraints_Bus_T_0) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_0) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_0_1)_: --1 flow(cheap_plant_min_down_constraints_Bus_T_0_1) +c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_1)_: +-1 flow(cheap_plant_min_down_constraints_Bus_T_1) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_1) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_1_2)_: --1 flow(cheap_plant_min_down_constraints_Bus_T_1_2) +c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_2)_: +-1 flow(cheap_plant_min_down_constraints_Bus_T_2) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_2) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_1_3)_: --1 flow(cheap_plant_min_down_constraints_Bus_T_1_3) +c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_3)_: +-1 flow(cheap_plant_min_down_constraints_Bus_T_3) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_3) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_2_4)_: --1 flow(cheap_plant_min_down_constraints_Bus_T_2_4) +c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_4)_: +-1 flow(cheap_plant_min_down_constraints_Bus_T_4) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_4) <= 0 -c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_2_5)_: --1 flow(cheap_plant_min_down_constraints_Bus_T_2_5) +c_u_NonConvexFlowBlock_min(cheap_plant_min_down_constraints_Bus_T_5)_: +-1 flow(cheap_plant_min_down_constraints_Bus_T_5) +0.5 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_5) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_0_0)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_0_0) +c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_0)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_0) -1 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_0) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_0_1)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_0_1) +c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_1)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_1) -1 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_1) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_1_2)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_1_2) +c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_2)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_2) -1 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_2) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_1_3)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_1_3) +c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_3)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_3) -1 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_3) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_2_4)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_2_4) +c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_4)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_4) -1 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_4) <= 0 -c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_2_5)_: -+1 flow(cheap_plant_min_down_constraints_Bus_T_2_5) +c_u_NonConvexFlowBlock_max(cheap_plant_min_down_constraints_Bus_T_5)_: ++1 flow(cheap_plant_min_down_constraints_Bus_T_5) -1 NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_5) <= 0 @@ -223,12 +223,12 @@ c_u_NonConvexFlowBlock_min_downtime_constr(cheap_plant_min_down_constraints_Bus_ <= 4 bounds - 0 <= flow(cheap_plant_min_down_constraints_Bus_T_0_0) <= 10.0 - 0 <= flow(cheap_plant_min_down_constraints_Bus_T_0_1) <= 10.0 - 0 <= flow(cheap_plant_min_down_constraints_Bus_T_1_2) <= 10.0 - 0 <= flow(cheap_plant_min_down_constraints_Bus_T_1_3) <= 10.0 - 0 <= flow(cheap_plant_min_down_constraints_Bus_T_2_4) <= 10.0 - 0 <= flow(cheap_plant_min_down_constraints_Bus_T_2_5) <= 10.0 + 0 <= flow(cheap_plant_min_down_constraints_Bus_T_0) <= 10.0 + 0 <= flow(cheap_plant_min_down_constraints_Bus_T_1) <= 10.0 + 0 <= flow(cheap_plant_min_down_constraints_Bus_T_2) <= 10.0 + 0 <= flow(cheap_plant_min_down_constraints_Bus_T_3) <= 10.0 + 0 <= flow(cheap_plant_min_down_constraints_Bus_T_4) <= 10.0 + 0 <= flow(cheap_plant_min_down_constraints_Bus_T_5) <= 10.0 0 <= NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_0) <= 1 0 <= NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_1) <= 1 0 <= NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_2) <= 1 @@ -244,12 +244,12 @@ bounds 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_0) <= +inf 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_1) <= +inf 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_2) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_min_down_constraints_Bus_T_2) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_3) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_min_down_constraints_Bus_T_3) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_4) <= +inf - 0 <= NonConvexFlowBlock_status(cheap_plant_min_down_constraints_Bus_T_4) <= 1 0 <= NonConvexFlowBlock_status_nominal(cheap_plant_min_down_constraints_Bus_T_5) <= +inf + 0 <= NonConvexFlowBlock_status(cheap_plant_min_down_constraints_Bus_T_2) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_min_down_constraints_Bus_T_3) <= 1 + 0 <= NonConvexFlowBlock_status(cheap_plant_min_down_constraints_Bus_T_4) <= 1 0 <= NonConvexFlowBlock_status(cheap_plant_min_down_constraints_Bus_T_5) <= 1 binary NonConvexFlowBlock_startup(cheap_plant_min_down_constraints_Bus_T_0) diff --git a/tests/lp_files/multi_period_period_length.lp b/tests/lp_files/multi_period_period_length.lp index 58dd7db26..5aa3ac792 100644 --- a/tests/lp_files/multi_period_period_length.lp +++ b/tests/lp_files/multi_period_period_length.lp @@ -3,14 +3,6 @@ min objective: +15992.031251718836 ONE_VAR_CONSTANT -+9.999999999999998 InvestmentFlowBlock_invest(electricity_storage_0) -+6.729713331080573 InvestmentFlowBlock_invest(electricity_storage_1) -+5.000276133592968 InvestmentFlowBlock_invest(electricity_storage_2) -+4.101968025099305 InvestmentFlowBlock_invest(electricity_storage_3) -+3.7152788212696146 InvestmentFlowBlock_invest(electricity_storage_4) -+3.0478226645906985 InvestmentFlowBlock_invest(electricity_storage_5) -+2.264577134183746 InvestmentFlowBlock_invest(electricity_storage_6) -+0.09137506155350818 InvestmentFlowBlock_invest(electricity_storage_7) +9.999999999999998 InvestmentFlowBlock_invest(storage_electricity_0) +6.729713331080573 InvestmentFlowBlock_invest(storage_electricity_1) +5.000276133592968 InvestmentFlowBlock_invest(storage_electricity_2) @@ -19,6 +11,14 @@ objective: +3.0478226645906985 InvestmentFlowBlock_invest(storage_electricity_5) +2.264577134183746 InvestmentFlowBlock_invest(storage_electricity_6) +0.09137506155350818 InvestmentFlowBlock_invest(storage_electricity_7) ++9.999999999999998 InvestmentFlowBlock_invest(electricity_storage_0) ++6.729713331080573 InvestmentFlowBlock_invest(electricity_storage_1) ++5.000276133592968 InvestmentFlowBlock_invest(electricity_storage_2) ++4.101968025099305 InvestmentFlowBlock_invest(electricity_storage_3) ++3.7152788212696146 InvestmentFlowBlock_invest(electricity_storage_4) ++3.0478226645906985 InvestmentFlowBlock_invest(electricity_storage_5) ++2.264577134183746 InvestmentFlowBlock_invest(electricity_storage_6) ++0.09137506155350818 InvestmentFlowBlock_invest(electricity_storage_7) +9.999999999999998 GenericInvestmentStorageBlock_invest(storage_0) +6.729713331080573 GenericInvestmentStorageBlock_invest(storage_1) +5.000276133592968 GenericInvestmentStorageBlock_invest(storage_2) @@ -28,629 +28,629 @@ objective: +2.264577134183746 GenericInvestmentStorageBlock_invest(storage_6) +0.09137506155350818 GenericInvestmentStorageBlock_invest(storage_7) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_0) -+100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_1) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_1) -+100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_1) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_2) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_2) -+100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_2) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_3) +0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_3) -+67.29713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_3) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_4) +0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_3) +0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_3) +0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_3) +0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_3) +0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_3) +0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_3) +0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_4) -+67.29713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_4) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_5) +0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_5) -+0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_5) -+67.29713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_5) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_6) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_5) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_5) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_5) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_5) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_5) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_5) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_5) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_5) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_5) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_6) -+50.00276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_6) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_7) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_7) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_6) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_6) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_6) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_6) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_6) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_6) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_6) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_23) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_1) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_6) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_7) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_8) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_9) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_10) ++0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_11) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_12) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_13) ++0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_14) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_15) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_16) ++0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_17) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_18) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_19) ++0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_20) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_21) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_22) ++0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_23) ++100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_0) ++100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_1) ++100 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_2) ++67.29713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_3) ++67.29713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_4) ++67.29713331080575 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_5) ++50.00276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_6) +50.00276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_7) ++50.00276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_8) ++41.01968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_9) ++41.01968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_10) ++41.01968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_11) ++37.15278821269615 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_12) ++37.15278821269615 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_13) ++37.15278821269615 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_14) ++30.478226645906993 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_15) ++30.478226645906993 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_16) ++30.478226645906993 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_17) ++22.645771341837463 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_18) ++22.645771341837463 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_19) ++22.645771341837463 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_20) ++15.239954929176601 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_21) ++15.239954929176601 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_22) ++15.239954929176601 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_23) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_0) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_2) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_3) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_4) ++0.6729713331080575 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_5) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_6) ++0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_7) +0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_8) -+0.5000276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_8) -+50.00276133592969 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_8) +0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_9) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_9) -+41.01968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_9) +0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_10) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_10) -+41.01968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_10) +0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_11) -+0.4101968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_11) -+41.01968025099306 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_11) +0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_12) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_12) -+37.15278821269615 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_12) +0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_13) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_13) -+37.15278821269615 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_13) +0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_14) -+0.37152788212696153 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_14) -+37.15278821269615 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_14) +0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_15) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_15) -+30.478226645906993 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_15) +0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_16) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_16) -+30.478226645906993 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_16) +0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_17) -+0.3047822664590699 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_17) -+30.478226645906993 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_17) +0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_18) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_18) -+22.645771341837463 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_18) +0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_19) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_19) -+22.645771341837463 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_19) +0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_20) -+0.22645771341837465 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_20) -+22.645771341837463 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_20) +0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_21) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_21) -+15.239954929176601 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_21) +0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_22) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_22) -+15.239954929176601 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_22) +0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_23) -+0.15239954929176602 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_23) -+15.239954929176601 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_23) +433.5692402297811 SinkDSMDIWInvestmentBlock_invest(demand_dsm_diw_0) +291.77966959208334 SinkDSMDIWInvestmentBlock_invest(demand_dsm_diw_1) +216.7965924181011 SinkDSMDIWInvestmentBlock_invest(demand_dsm_diw_2) @@ -660,301 +660,301 @@ objective: +98.1850987509782 SinkDSMDIWInvestmentBlock_invest(demand_dsm_diw_6) +3.9617416013704023 SinkDSMDIWInvestmentBlock_invest(demand_dsm_diw_7) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_0) -+1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_0) -+100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_1) -+1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_1) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_1) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_1) -+100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_1) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_2) -+1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_2) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_2) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_2) -+100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_2) +0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_3) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_3) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_3) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_3) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_3) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_3) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_3) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_3) -+67.29713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_3) +0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_4) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_4) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_4) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_4) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_4) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_4) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_4) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_4) -+67.29713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_4) +0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_5) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_5) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_5) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_5) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_5) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_5) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_5) -+0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_5) -+67.29713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_5) +0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_6) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_6) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_6) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_6) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_6) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_6) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_6) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_6) -+50.00276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_6) +0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_7) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_7) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_7) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_7) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_7) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_7) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_7) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_7) -+50.00276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_7) +0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_8) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_8) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_8) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_8) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_8) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_8) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_8) -+0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_8) -+50.00276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_8) +0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_9) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_9) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_9) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_9) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_9) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_9) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_9) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_9) -+41.01968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_9) +0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_10) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_10) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_10) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_10) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_10) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_10) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_10) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_10) -+41.01968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_10) +0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_11) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_11) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_11) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_11) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_11) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_11) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_11) -+0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_11) -+41.01968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_11) +0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_12) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_12) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_12) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_12) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_12) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_12) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_12) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_12) -+37.15278821269615 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_12) +0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_13) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_13) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_13) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_13) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_13) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_13) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_13) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_13) -+37.15278821269615 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_13) +0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_14) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_14) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_14) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_14) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_14) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_14) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_14) -+0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_14) -+37.15278821269615 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_14) +0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_15) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_15) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_15) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_15) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_15) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_15) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_15) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_15) -+30.478226645906993 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_15) +0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_16) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_16) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_16) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_16) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_16) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_16) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_16) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_16) -+30.478226645906993 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_16) +0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_17) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_17) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_17) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_17) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_17) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_17) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_17) -+0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_17) -+30.478226645906993 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_17) +0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_18) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_18) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_18) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_18) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_18) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_18) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_18) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_18) -+22.645771341837463 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_18) +0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_19) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_19) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_19) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_19) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_19) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_19) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_19) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_19) -+22.645771341837463 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_19) +0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_20) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_20) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_20) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_20) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_20) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_20) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_20) -+0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_20) -+22.645771341837463 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_20) +0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_21) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_21) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_21) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_21) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_21) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_21) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_21) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_21) -+15.239954929176601 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_21) +0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_22) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_22) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_22) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_22) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_22) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_22) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_22) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_22) -+15.239954929176601 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_22) +0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_23) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_23) ++1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_0) ++1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_1) ++1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_2) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_3) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_4) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_5) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_6) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_7) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_8) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_9) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_10) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_11) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_12) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_13) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_14) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_15) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_16) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_17) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_18) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_19) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_20) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_21) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_22) +0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_23) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_2) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_3) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_4) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_5) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_6) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_7) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_8) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_9) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_10) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_11) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_12) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_13) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_14) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_15) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_16) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_17) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_18) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_19) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_20) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_21) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_22) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_23) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_2) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_3) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_4) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_5) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_6) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_7) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_8) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_9) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_10) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_11) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_12) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_13) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_14) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_15) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_16) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_17) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_18) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_19) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_20) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_21) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_22) +0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_23) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_1) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_2) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_3) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_4) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_5) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_6) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_7) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_8) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_9) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_10) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_11) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_12) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_13) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_14) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_15) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_16) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_17) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_18) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_19) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_20) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_21) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_22) +0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_23) -+0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_23) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_1) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_2) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_3) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_4) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_5) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_6) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_7) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_8) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_9) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_10) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_11) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_12) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_13) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_14) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_15) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_16) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_17) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_18) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_19) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_20) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_21) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_22) +0.15239954929176602 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_23) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_2) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_3) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_4) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_5) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_6) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_7) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_8) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_9) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_10) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_11) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_12) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_13) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_14) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_15) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_16) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_17) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_18) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_19) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_20) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_21) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_22) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_23) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_2) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_3) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_4) ++0.6729713331080575 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_5) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_6) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_7) ++0.5000276133592969 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_8) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_9) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_10) ++0.4101968025099306 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_11) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_12) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_13) ++0.37152788212696153 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_14) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_15) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_16) ++0.3047822664590699 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_17) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_18) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_19) ++0.22645771341837465 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_20) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_21) ++0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_22) +0.15239954929176602 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_23) -+15.239954929176601 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_23) -+433.5692402297811 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_0) -+291.77966959208334 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_1) -+216.7965924181011 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_2) -+177.8487160089162 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_3) -+161.08306157796636 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_4) -+132.1442157041696 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_5) -+98.1850987509782 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_6) -+3.9617416013704023 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_7) -+1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_0) -+100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_0) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_0) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_1) -+1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_1) -+100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_1) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_2) -+1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_2) -+100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_2) -+0.6729713331080575 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_3) ++100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_0) ++100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_1) ++100 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_2) ++67.29713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_3) ++67.29713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_4) ++67.29713331080575 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_5) ++50.00276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_6) ++50.00276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_7) ++50.00276133592969 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_8) ++41.01968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_9) ++41.01968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_10) ++41.01968025099306 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_11) ++37.15278821269615 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_12) ++37.15278821269615 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_13) ++37.15278821269615 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_14) ++30.478226645906993 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_15) ++30.478226645906993 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_16) ++30.478226645906993 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_17) ++22.645771341837463 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_18) ++22.645771341837463 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_19) ++22.645771341837463 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_20) ++15.239954929176601 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_21) ++15.239954929176601 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_22) ++15.239954929176601 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_23) ++433.5692402297811 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_0) ++291.77966959208334 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_1) ++216.7965924181011 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_2) ++177.8487160089162 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_3) ++161.08306157796636 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_4) ++132.1442157041696 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_5) ++98.1850987509782 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_6) ++3.9617416013704023 SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_7) ++1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_0) ++1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_1) ++1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_2) +0.6729713331080575 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_3) -+67.29713331080575 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_3) -+0.6729713331080575 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_4) +0.6729713331080575 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_4) -+67.29713331080575 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_4) -+0.6729713331080575 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_5) +0.6729713331080575 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_5) -+67.29713331080575 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_5) -+0.5000276133592969 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_6) +0.5000276133592969 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_6) -+50.00276133592969 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_6) -+0.5000276133592969 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_7) +0.5000276133592969 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_7) -+50.00276133592969 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_7) -+0.5000276133592969 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_8) +0.5000276133592969 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_8) -+50.00276133592969 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_8) -+0.4101968025099306 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_9) +0.4101968025099306 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_9) -+41.01968025099306 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_9) -+0.4101968025099306 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_10) +0.4101968025099306 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_10) -+41.01968025099306 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_10) -+0.4101968025099306 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_11) +0.4101968025099306 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_11) -+41.01968025099306 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_11) -+0.37152788212696153 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_12) +0.37152788212696153 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_12) -+37.15278821269615 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_12) -+0.37152788212696153 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_13) +0.37152788212696153 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_13) -+37.15278821269615 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_13) -+0.37152788212696153 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_14) +0.37152788212696153 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_14) -+37.15278821269615 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_14) -+0.3047822664590699 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_15) +0.3047822664590699 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_15) -+30.478226645906993 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_15) -+0.3047822664590699 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_16) +0.3047822664590699 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_16) -+30.478226645906993 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_16) -+0.3047822664590699 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_17) +0.3047822664590699 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_17) -+30.478226645906993 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_17) -+0.22645771341837465 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_18) +0.22645771341837465 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_18) -+22.645771341837463 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_18) -+0.22645771341837465 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_19) +0.22645771341837465 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_19) -+22.645771341837463 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_19) -+0.22645771341837465 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_20) +0.22645771341837465 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_20) -+22.645771341837463 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_20) -+0.15239954929176602 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_21) +0.15239954929176602 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_21) -+15.239954929176601 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_21) -+0.15239954929176602 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_22) +0.15239954929176602 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_22) -+15.239954929176601 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_22) -+0.15239954929176602 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_23) +0.15239954929176602 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_23) ++100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_0) ++100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_1) ++100 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_2) ++67.29713331080575 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_3) ++67.29713331080575 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_4) ++67.29713331080575 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_5) ++50.00276133592969 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_6) ++50.00276133592969 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_7) ++50.00276133592969 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_8) ++41.01968025099306 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_9) ++41.01968025099306 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_10) ++41.01968025099306 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_11) ++37.15278821269615 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_12) ++37.15278821269615 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_13) ++37.15278821269615 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_14) ++30.478226645906993 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_15) ++30.478226645906993 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_16) ++30.478226645906993 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_17) ++22.645771341837463 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_18) ++22.645771341837463 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_19) ++22.645771341837463 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_20) ++15.239954929176601 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_21) ++15.239954929176601 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_22) +15.239954929176601 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_23) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_0) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_1) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_2) ++0.6729713331080575 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_3) ++0.6729713331080575 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_4) ++0.6729713331080575 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_5) ++0.5000276133592969 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_6) ++0.5000276133592969 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_7) ++0.5000276133592969 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_8) ++0.4101968025099306 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_9) ++0.4101968025099306 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_10) ++0.4101968025099306 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_11) ++0.37152788212696153 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_12) ++0.37152788212696153 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_13) ++0.37152788212696153 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_14) ++0.3047822664590699 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_15) ++0.3047822664590699 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_16) ++0.3047822664590699 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_17) ++0.22645771341837465 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_18) ++0.22645771341837465 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_19) ++0.22645771341837465 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_20) ++0.15239954929176602 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_21) ++0.15239954929176602 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_22) ++0.15239954929176602 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_23) +433.5692402297811 SinkDSMOemofInvestmentBlock_invest(demand_dsm_oemof_0) +291.77966959208334 SinkDSMOemofInvestmentBlock_invest(demand_dsm_oemof_1) +216.7965924181011 SinkDSMOemofInvestmentBlock_invest(demand_dsm_oemof_2) @@ -966,250 +966,196 @@ objective: s.t. -c_e_BusBlock_balance(electricity_0_0)_: -+1 flow(storage_electricity_0_0) --1 flow(electricity_storage_0_0) --1 flow(electricity_demand_dsm_diw_0_0) --1 flow(electricity_demand_dsm_dlr_0_0) --1 flow(electricity_demand_dsm_oemof_0_0) -= 0 - -c_e_BusBlock_balance(electricity_0_1)_: -+1 flow(storage_electricity_0_1) --1 flow(electricity_storage_0_1) --1 flow(electricity_demand_dsm_diw_0_1) --1 flow(electricity_demand_dsm_dlr_0_1) --1 flow(electricity_demand_dsm_oemof_0_1) -= 0 - -c_e_BusBlock_balance(electricity_0_2)_: -+1 flow(storage_electricity_0_2) --1 flow(electricity_storage_0_2) --1 flow(electricity_demand_dsm_diw_0_2) --1 flow(electricity_demand_dsm_dlr_0_2) --1 flow(electricity_demand_dsm_oemof_0_2) -= 0 - -c_e_BusBlock_balance(electricity_1_3)_: -+1 flow(storage_electricity_1_3) --1 flow(electricity_storage_1_3) --1 flow(electricity_demand_dsm_diw_1_3) --1 flow(electricity_demand_dsm_dlr_1_3) --1 flow(electricity_demand_dsm_oemof_1_3) +c_e_BusBlock_balance(electricity_0)_: +-1 flow(electricity_storage_0) +-1 flow(electricity_demand_dsm_diw_0) +-1 flow(electricity_demand_dsm_dlr_0) +-1 flow(electricity_demand_dsm_oemof_0) ++1 flow(storage_electricity_0) = 0 -c_e_BusBlock_balance(electricity_1_4)_: -+1 flow(storage_electricity_1_4) --1 flow(electricity_storage_1_4) --1 flow(electricity_demand_dsm_diw_1_4) --1 flow(electricity_demand_dsm_dlr_1_4) --1 flow(electricity_demand_dsm_oemof_1_4) +c_e_BusBlock_balance(electricity_1)_: +-1 flow(electricity_storage_1) +-1 flow(electricity_demand_dsm_diw_1) +-1 flow(electricity_demand_dsm_dlr_1) +-1 flow(electricity_demand_dsm_oemof_1) ++1 flow(storage_electricity_1) = 0 -c_e_BusBlock_balance(electricity_1_5)_: -+1 flow(storage_electricity_1_5) --1 flow(electricity_storage_1_5) --1 flow(electricity_demand_dsm_diw_1_5) --1 flow(electricity_demand_dsm_dlr_1_5) --1 flow(electricity_demand_dsm_oemof_1_5) +c_e_BusBlock_balance(electricity_2)_: +-1 flow(electricity_storage_2) +-1 flow(electricity_demand_dsm_diw_2) +-1 flow(electricity_demand_dsm_dlr_2) +-1 flow(electricity_demand_dsm_oemof_2) ++1 flow(storage_electricity_2) = 0 -c_e_BusBlock_balance(electricity_2_6)_: -+1 flow(storage_electricity_2_6) --1 flow(electricity_storage_2_6) --1 flow(electricity_demand_dsm_diw_2_6) --1 flow(electricity_demand_dsm_dlr_2_6) --1 flow(electricity_demand_dsm_oemof_2_6) +c_e_BusBlock_balance(electricity_3)_: +-1 flow(electricity_storage_3) +-1 flow(electricity_demand_dsm_diw_3) +-1 flow(electricity_demand_dsm_dlr_3) +-1 flow(electricity_demand_dsm_oemof_3) ++1 flow(storage_electricity_3) = 0 -c_e_BusBlock_balance(electricity_2_7)_: -+1 flow(storage_electricity_2_7) --1 flow(electricity_storage_2_7) --1 flow(electricity_demand_dsm_diw_2_7) --1 flow(electricity_demand_dsm_dlr_2_7) --1 flow(electricity_demand_dsm_oemof_2_7) +c_e_BusBlock_balance(electricity_4)_: +-1 flow(electricity_storage_4) +-1 flow(electricity_demand_dsm_diw_4) +-1 flow(electricity_demand_dsm_dlr_4) +-1 flow(electricity_demand_dsm_oemof_4) ++1 flow(storage_electricity_4) = 0 -c_e_BusBlock_balance(electricity_2_8)_: -+1 flow(storage_electricity_2_8) --1 flow(electricity_storage_2_8) --1 flow(electricity_demand_dsm_diw_2_8) --1 flow(electricity_demand_dsm_dlr_2_8) --1 flow(electricity_demand_dsm_oemof_2_8) +c_e_BusBlock_balance(electricity_5)_: +-1 flow(electricity_storage_5) +-1 flow(electricity_demand_dsm_diw_5) +-1 flow(electricity_demand_dsm_dlr_5) +-1 flow(electricity_demand_dsm_oemof_5) ++1 flow(storage_electricity_5) = 0 -c_e_BusBlock_balance(electricity_3_9)_: -+1 flow(storage_electricity_3_9) --1 flow(electricity_storage_3_9) --1 flow(electricity_demand_dsm_diw_3_9) --1 flow(electricity_demand_dsm_dlr_3_9) --1 flow(electricity_demand_dsm_oemof_3_9) +c_e_BusBlock_balance(electricity_6)_: +-1 flow(electricity_storage_6) +-1 flow(electricity_demand_dsm_diw_6) +-1 flow(electricity_demand_dsm_dlr_6) +-1 flow(electricity_demand_dsm_oemof_6) ++1 flow(storage_electricity_6) = 0 -c_e_BusBlock_balance(electricity_3_10)_: -+1 flow(storage_electricity_3_10) --1 flow(electricity_storage_3_10) --1 flow(electricity_demand_dsm_diw_3_10) --1 flow(electricity_demand_dsm_dlr_3_10) --1 flow(electricity_demand_dsm_oemof_3_10) +c_e_BusBlock_balance(electricity_7)_: +-1 flow(electricity_storage_7) +-1 flow(electricity_demand_dsm_diw_7) +-1 flow(electricity_demand_dsm_dlr_7) +-1 flow(electricity_demand_dsm_oemof_7) ++1 flow(storage_electricity_7) = 0 -c_e_BusBlock_balance(electricity_3_11)_: -+1 flow(storage_electricity_3_11) --1 flow(electricity_storage_3_11) --1 flow(electricity_demand_dsm_diw_3_11) --1 flow(electricity_demand_dsm_dlr_3_11) --1 flow(electricity_demand_dsm_oemof_3_11) +c_e_BusBlock_balance(electricity_8)_: +-1 flow(electricity_storage_8) +-1 flow(electricity_demand_dsm_diw_8) +-1 flow(electricity_demand_dsm_dlr_8) +-1 flow(electricity_demand_dsm_oemof_8) ++1 flow(storage_electricity_8) = 0 -c_e_BusBlock_balance(electricity_4_12)_: -+1 flow(storage_electricity_4_12) --1 flow(electricity_storage_4_12) --1 flow(electricity_demand_dsm_diw_4_12) --1 flow(electricity_demand_dsm_dlr_4_12) --1 flow(electricity_demand_dsm_oemof_4_12) +c_e_BusBlock_balance(electricity_9)_: +-1 flow(electricity_storage_9) +-1 flow(electricity_demand_dsm_diw_9) +-1 flow(electricity_demand_dsm_dlr_9) +-1 flow(electricity_demand_dsm_oemof_9) ++1 flow(storage_electricity_9) = 0 -c_e_BusBlock_balance(electricity_4_13)_: -+1 flow(storage_electricity_4_13) --1 flow(electricity_storage_4_13) --1 flow(electricity_demand_dsm_diw_4_13) --1 flow(electricity_demand_dsm_dlr_4_13) --1 flow(electricity_demand_dsm_oemof_4_13) +c_e_BusBlock_balance(electricity_10)_: +-1 flow(electricity_storage_10) +-1 flow(electricity_demand_dsm_diw_10) +-1 flow(electricity_demand_dsm_dlr_10) +-1 flow(electricity_demand_dsm_oemof_10) ++1 flow(storage_electricity_10) = 0 -c_e_BusBlock_balance(electricity_4_14)_: -+1 flow(storage_electricity_4_14) --1 flow(electricity_storage_4_14) --1 flow(electricity_demand_dsm_diw_4_14) --1 flow(electricity_demand_dsm_dlr_4_14) --1 flow(electricity_demand_dsm_oemof_4_14) +c_e_BusBlock_balance(electricity_11)_: +-1 flow(electricity_storage_11) +-1 flow(electricity_demand_dsm_diw_11) +-1 flow(electricity_demand_dsm_dlr_11) +-1 flow(electricity_demand_dsm_oemof_11) ++1 flow(storage_electricity_11) = 0 -c_e_BusBlock_balance(electricity_5_15)_: -+1 flow(storage_electricity_5_15) --1 flow(electricity_storage_5_15) --1 flow(electricity_demand_dsm_diw_5_15) --1 flow(electricity_demand_dsm_dlr_5_15) --1 flow(electricity_demand_dsm_oemof_5_15) +c_e_BusBlock_balance(electricity_12)_: +-1 flow(electricity_storage_12) +-1 flow(electricity_demand_dsm_diw_12) +-1 flow(electricity_demand_dsm_dlr_12) +-1 flow(electricity_demand_dsm_oemof_12) ++1 flow(storage_electricity_12) = 0 -c_e_BusBlock_balance(electricity_5_16)_: -+1 flow(storage_electricity_5_16) --1 flow(electricity_storage_5_16) --1 flow(electricity_demand_dsm_diw_5_16) --1 flow(electricity_demand_dsm_dlr_5_16) --1 flow(electricity_demand_dsm_oemof_5_16) +c_e_BusBlock_balance(electricity_13)_: +-1 flow(electricity_storage_13) +-1 flow(electricity_demand_dsm_diw_13) +-1 flow(electricity_demand_dsm_dlr_13) +-1 flow(electricity_demand_dsm_oemof_13) ++1 flow(storage_electricity_13) = 0 -c_e_BusBlock_balance(electricity_5_17)_: -+1 flow(storage_electricity_5_17) --1 flow(electricity_storage_5_17) --1 flow(electricity_demand_dsm_diw_5_17) --1 flow(electricity_demand_dsm_dlr_5_17) --1 flow(electricity_demand_dsm_oemof_5_17) +c_e_BusBlock_balance(electricity_14)_: +-1 flow(electricity_storage_14) +-1 flow(electricity_demand_dsm_diw_14) +-1 flow(electricity_demand_dsm_dlr_14) +-1 flow(electricity_demand_dsm_oemof_14) ++1 flow(storage_electricity_14) = 0 -c_e_BusBlock_balance(electricity_6_18)_: -+1 flow(storage_electricity_6_18) --1 flow(electricity_storage_6_18) --1 flow(electricity_demand_dsm_diw_6_18) --1 flow(electricity_demand_dsm_dlr_6_18) --1 flow(electricity_demand_dsm_oemof_6_18) +c_e_BusBlock_balance(electricity_15)_: +-1 flow(electricity_storage_15) +-1 flow(electricity_demand_dsm_diw_15) +-1 flow(electricity_demand_dsm_dlr_15) +-1 flow(electricity_demand_dsm_oemof_15) ++1 flow(storage_electricity_15) = 0 -c_e_BusBlock_balance(electricity_6_19)_: -+1 flow(storage_electricity_6_19) --1 flow(electricity_storage_6_19) --1 flow(electricity_demand_dsm_diw_6_19) --1 flow(electricity_demand_dsm_dlr_6_19) --1 flow(electricity_demand_dsm_oemof_6_19) +c_e_BusBlock_balance(electricity_16)_: +-1 flow(electricity_storage_16) +-1 flow(electricity_demand_dsm_diw_16) +-1 flow(electricity_demand_dsm_dlr_16) +-1 flow(electricity_demand_dsm_oemof_16) ++1 flow(storage_electricity_16) = 0 -c_e_BusBlock_balance(electricity_6_20)_: -+1 flow(storage_electricity_6_20) --1 flow(electricity_storage_6_20) --1 flow(electricity_demand_dsm_diw_6_20) --1 flow(electricity_demand_dsm_dlr_6_20) --1 flow(electricity_demand_dsm_oemof_6_20) +c_e_BusBlock_balance(electricity_17)_: +-1 flow(electricity_storage_17) +-1 flow(electricity_demand_dsm_diw_17) +-1 flow(electricity_demand_dsm_dlr_17) +-1 flow(electricity_demand_dsm_oemof_17) ++1 flow(storage_electricity_17) = 0 -c_e_BusBlock_balance(electricity_7_21)_: -+1 flow(storage_electricity_7_21) --1 flow(electricity_storage_7_21) --1 flow(electricity_demand_dsm_diw_7_21) --1 flow(electricity_demand_dsm_dlr_7_21) --1 flow(electricity_demand_dsm_oemof_7_21) +c_e_BusBlock_balance(electricity_18)_: +-1 flow(electricity_storage_18) +-1 flow(electricity_demand_dsm_diw_18) +-1 flow(electricity_demand_dsm_dlr_18) +-1 flow(electricity_demand_dsm_oemof_18) ++1 flow(storage_electricity_18) = 0 -c_e_BusBlock_balance(electricity_7_22)_: -+1 flow(storage_electricity_7_22) --1 flow(electricity_storage_7_22) --1 flow(electricity_demand_dsm_diw_7_22) --1 flow(electricity_demand_dsm_dlr_7_22) --1 flow(electricity_demand_dsm_oemof_7_22) +c_e_BusBlock_balance(electricity_19)_: +-1 flow(electricity_storage_19) +-1 flow(electricity_demand_dsm_diw_19) +-1 flow(electricity_demand_dsm_dlr_19) +-1 flow(electricity_demand_dsm_oemof_19) ++1 flow(storage_electricity_19) = 0 -c_e_BusBlock_balance(electricity_7_23)_: -+1 flow(storage_electricity_7_23) --1 flow(electricity_storage_7_23) --1 flow(electricity_demand_dsm_diw_7_23) --1 flow(electricity_demand_dsm_dlr_7_23) --1 flow(electricity_demand_dsm_oemof_7_23) +c_e_BusBlock_balance(electricity_20)_: +-1 flow(electricity_storage_20) +-1 flow(electricity_demand_dsm_diw_20) +-1 flow(electricity_demand_dsm_dlr_20) +-1 flow(electricity_demand_dsm_oemof_20) ++1 flow(storage_electricity_20) = 0 -c_e_InvestmentFlowBlock_total_rule(electricity_storage_0)_: --1 InvestmentFlowBlock_invest(electricity_storage_0) -+1 InvestmentFlowBlock_total(electricity_storage_0) -= 0 - -c_e_InvestmentFlowBlock_total_rule(electricity_storage_1)_: --1 InvestmentFlowBlock_invest(electricity_storage_1) --1 InvestmentFlowBlock_total(electricity_storage_0) -+1 InvestmentFlowBlock_total(electricity_storage_1) -+1 InvestmentFlowBlock_old(electricity_storage_1) -= 0 - -c_e_InvestmentFlowBlock_total_rule(electricity_storage_2)_: --1 InvestmentFlowBlock_invest(electricity_storage_2) --1 InvestmentFlowBlock_total(electricity_storage_1) -+1 InvestmentFlowBlock_total(electricity_storage_2) -+1 InvestmentFlowBlock_old(electricity_storage_2) -= 0 - -c_e_InvestmentFlowBlock_total_rule(electricity_storage_3)_: --1 InvestmentFlowBlock_invest(electricity_storage_3) --1 InvestmentFlowBlock_total(electricity_storage_2) -+1 InvestmentFlowBlock_total(electricity_storage_3) -+1 InvestmentFlowBlock_old(electricity_storage_3) -= 0 - -c_e_InvestmentFlowBlock_total_rule(electricity_storage_4)_: --1 InvestmentFlowBlock_invest(electricity_storage_4) --1 InvestmentFlowBlock_total(electricity_storage_3) -+1 InvestmentFlowBlock_total(electricity_storage_4) -+1 InvestmentFlowBlock_old(electricity_storage_4) -= 0 - -c_e_InvestmentFlowBlock_total_rule(electricity_storage_5)_: --1 InvestmentFlowBlock_invest(electricity_storage_5) --1 InvestmentFlowBlock_total(electricity_storage_4) -+1 InvestmentFlowBlock_total(electricity_storage_5) -+1 InvestmentFlowBlock_old(electricity_storage_5) +c_e_BusBlock_balance(electricity_21)_: +-1 flow(electricity_storage_21) +-1 flow(electricity_demand_dsm_diw_21) +-1 flow(electricity_demand_dsm_dlr_21) +-1 flow(electricity_demand_dsm_oemof_21) ++1 flow(storage_electricity_21) = 0 -c_e_InvestmentFlowBlock_total_rule(electricity_storage_6)_: --1 InvestmentFlowBlock_invest(electricity_storage_6) --1 InvestmentFlowBlock_total(electricity_storage_5) -+1 InvestmentFlowBlock_total(electricity_storage_6) -+1 InvestmentFlowBlock_old(electricity_storage_6) +c_e_BusBlock_balance(electricity_22)_: +-1 flow(electricity_storage_22) +-1 flow(electricity_demand_dsm_diw_22) +-1 flow(electricity_demand_dsm_dlr_22) +-1 flow(electricity_demand_dsm_oemof_22) ++1 flow(storage_electricity_22) = 0 -c_e_InvestmentFlowBlock_total_rule(electricity_storage_7)_: --1 InvestmentFlowBlock_invest(electricity_storage_7) --1 InvestmentFlowBlock_total(electricity_storage_6) -+1 InvestmentFlowBlock_total(electricity_storage_7) -+1 InvestmentFlowBlock_old(electricity_storage_7) +c_e_BusBlock_balance(electricity_23)_: +-1 flow(electricity_storage_23) +-1 flow(electricity_demand_dsm_diw_23) +-1 flow(electricity_demand_dsm_dlr_23) +-1 flow(electricity_demand_dsm_oemof_23) ++1 flow(storage_electricity_23) = 0 c_e_InvestmentFlowBlock_total_rule(storage_electricity_0)_: @@ -1266,43 +1212,58 @@ c_e_InvestmentFlowBlock_total_rule(storage_electricity_7)_: +1 InvestmentFlowBlock_old(storage_electricity_7) = 0 -c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_0)_: -+1 InvestmentFlowBlock_old_end(electricity_storage_0) -= 0 - -c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_1)_: +c_e_InvestmentFlowBlock_total_rule(electricity_storage_0)_: -1 InvestmentFlowBlock_invest(electricity_storage_0) -+1 InvestmentFlowBlock_old_end(electricity_storage_1) -= 0 - -c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_2)_: -+1 InvestmentFlowBlock_old_end(electricity_storage_2) ++1 InvestmentFlowBlock_total(electricity_storage_0) = 0 -c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_3)_: +c_e_InvestmentFlowBlock_total_rule(electricity_storage_1)_: -1 InvestmentFlowBlock_invest(electricity_storage_1) -+1 InvestmentFlowBlock_old_end(electricity_storage_3) -= 0 - -c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_4)_: -+1 InvestmentFlowBlock_old_end(electricity_storage_4) +-1 InvestmentFlowBlock_total(electricity_storage_0) ++1 InvestmentFlowBlock_total(electricity_storage_1) ++1 InvestmentFlowBlock_old(electricity_storage_1) = 0 -c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_5)_: +c_e_InvestmentFlowBlock_total_rule(electricity_storage_2)_: -1 InvestmentFlowBlock_invest(electricity_storage_2) -+1 InvestmentFlowBlock_old_end(electricity_storage_5) +-1 InvestmentFlowBlock_total(electricity_storage_1) ++1 InvestmentFlowBlock_total(electricity_storage_2) ++1 InvestmentFlowBlock_old(electricity_storage_2) = 0 -c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_6)_: +c_e_InvestmentFlowBlock_total_rule(electricity_storage_3)_: -1 InvestmentFlowBlock_invest(electricity_storage_3) +-1 InvestmentFlowBlock_total(electricity_storage_2) ++1 InvestmentFlowBlock_total(electricity_storage_3) ++1 InvestmentFlowBlock_old(electricity_storage_3) += 0 + +c_e_InvestmentFlowBlock_total_rule(electricity_storage_4)_: -1 InvestmentFlowBlock_invest(electricity_storage_4) -+1 InvestmentFlowBlock_old_end(electricity_storage_6) +-1 InvestmentFlowBlock_total(electricity_storage_3) ++1 InvestmentFlowBlock_total(electricity_storage_4) ++1 InvestmentFlowBlock_old(electricity_storage_4) = 0 -c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_7)_: +c_e_InvestmentFlowBlock_total_rule(electricity_storage_5)_: -1 InvestmentFlowBlock_invest(electricity_storage_5) +-1 InvestmentFlowBlock_total(electricity_storage_4) ++1 InvestmentFlowBlock_total(electricity_storage_5) ++1 InvestmentFlowBlock_old(electricity_storage_5) += 0 + +c_e_InvestmentFlowBlock_total_rule(electricity_storage_6)_: -1 InvestmentFlowBlock_invest(electricity_storage_6) -+1 InvestmentFlowBlock_old_end(electricity_storage_7) +-1 InvestmentFlowBlock_total(electricity_storage_5) ++1 InvestmentFlowBlock_total(electricity_storage_6) ++1 InvestmentFlowBlock_old(electricity_storage_6) += 0 + +c_e_InvestmentFlowBlock_total_rule(electricity_storage_7)_: +-1 InvestmentFlowBlock_invest(electricity_storage_7) +-1 InvestmentFlowBlock_total(electricity_storage_6) ++1 InvestmentFlowBlock_total(electricity_storage_7) ++1 InvestmentFlowBlock_old(electricity_storage_7) = 0 c_e_InvestmentFlowBlock_old_rule_end(storage_electricity_0)_: @@ -1344,36 +1305,43 @@ c_e_InvestmentFlowBlock_old_rule_end(storage_electricity_7)_: +1 InvestmentFlowBlock_old_end(storage_electricity_7) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_0)_: -+1 InvestmentFlowBlock_old_exo(electricity_storage_0) +c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_0)_: ++1 InvestmentFlowBlock_old_end(electricity_storage_0) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_1)_: -+1 InvestmentFlowBlock_old_exo(electricity_storage_1) +c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_1)_: +-1 InvestmentFlowBlock_invest(electricity_storage_0) ++1 InvestmentFlowBlock_old_end(electricity_storage_1) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_2)_: -+1 InvestmentFlowBlock_old_exo(electricity_storage_2) +c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_2)_: ++1 InvestmentFlowBlock_old_end(electricity_storage_2) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_3)_: -+1 InvestmentFlowBlock_old_exo(electricity_storage_3) +c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_3)_: +-1 InvestmentFlowBlock_invest(electricity_storage_1) ++1 InvestmentFlowBlock_old_end(electricity_storage_3) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_4)_: -+1 InvestmentFlowBlock_old_exo(electricity_storage_4) -= 0 +c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_4)_: ++1 InvestmentFlowBlock_old_end(electricity_storage_4) += 0 -c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_5)_: -+1 InvestmentFlowBlock_old_exo(electricity_storage_5) +c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_5)_: +-1 InvestmentFlowBlock_invest(electricity_storage_2) ++1 InvestmentFlowBlock_old_end(electricity_storage_5) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_6)_: -+1 InvestmentFlowBlock_old_exo(electricity_storage_6) +c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_6)_: +-1 InvestmentFlowBlock_invest(electricity_storage_3) +-1 InvestmentFlowBlock_invest(electricity_storage_4) ++1 InvestmentFlowBlock_old_end(electricity_storage_6) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_7)_: -+1 InvestmentFlowBlock_old_exo(electricity_storage_7) +c_e_InvestmentFlowBlock_old_rule_end(electricity_storage_7)_: +-1 InvestmentFlowBlock_invest(electricity_storage_5) +-1 InvestmentFlowBlock_invest(electricity_storage_6) ++1 InvestmentFlowBlock_old_end(electricity_storage_7) = 0 c_e_InvestmentFlowBlock_old_rule_exo(storage_electricity_0)_: @@ -1408,58 +1376,42 @@ c_e_InvestmentFlowBlock_old_rule_exo(storage_electricity_7)_: +1 InvestmentFlowBlock_old_exo(storage_electricity_7) = 0 -c_e_InvestmentFlowBlock_old_rule(electricity_storage_0)_: --1 InvestmentFlowBlock_old_end(electricity_storage_0) --1 InvestmentFlowBlock_old_exo(electricity_storage_0) -+1 InvestmentFlowBlock_old(electricity_storage_0) +c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_0)_: ++1 InvestmentFlowBlock_old_exo(electricity_storage_0) = 0 -c_e_InvestmentFlowBlock_old_rule(electricity_storage_1)_: -+1 InvestmentFlowBlock_old(electricity_storage_1) --1 InvestmentFlowBlock_old_end(electricity_storage_1) --1 InvestmentFlowBlock_old_exo(electricity_storage_1) +c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_1)_: ++1 InvestmentFlowBlock_old_exo(electricity_storage_1) = 0 -c_e_InvestmentFlowBlock_old_rule(electricity_storage_2)_: -+1 InvestmentFlowBlock_old(electricity_storage_2) --1 InvestmentFlowBlock_old_end(electricity_storage_2) --1 InvestmentFlowBlock_old_exo(electricity_storage_2) +c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_2)_: ++1 InvestmentFlowBlock_old_exo(electricity_storage_2) = 0 -c_e_InvestmentFlowBlock_old_rule(electricity_storage_3)_: -+1 InvestmentFlowBlock_old(electricity_storage_3) --1 InvestmentFlowBlock_old_end(electricity_storage_3) --1 InvestmentFlowBlock_old_exo(electricity_storage_3) +c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_3)_: ++1 InvestmentFlowBlock_old_exo(electricity_storage_3) = 0 -c_e_InvestmentFlowBlock_old_rule(electricity_storage_4)_: -+1 InvestmentFlowBlock_old(electricity_storage_4) --1 InvestmentFlowBlock_old_end(electricity_storage_4) --1 InvestmentFlowBlock_old_exo(electricity_storage_4) +c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_4)_: ++1 InvestmentFlowBlock_old_exo(electricity_storage_4) = 0 -c_e_InvestmentFlowBlock_old_rule(electricity_storage_5)_: -+1 InvestmentFlowBlock_old(electricity_storage_5) --1 InvestmentFlowBlock_old_end(electricity_storage_5) --1 InvestmentFlowBlock_old_exo(electricity_storage_5) +c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_5)_: ++1 InvestmentFlowBlock_old_exo(electricity_storage_5) = 0 -c_e_InvestmentFlowBlock_old_rule(electricity_storage_6)_: -+1 InvestmentFlowBlock_old(electricity_storage_6) --1 InvestmentFlowBlock_old_end(electricity_storage_6) --1 InvestmentFlowBlock_old_exo(electricity_storage_6) +c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_6)_: ++1 InvestmentFlowBlock_old_exo(electricity_storage_6) = 0 -c_e_InvestmentFlowBlock_old_rule(electricity_storage_7)_: -+1 InvestmentFlowBlock_old(electricity_storage_7) --1 InvestmentFlowBlock_old_end(electricity_storage_7) --1 InvestmentFlowBlock_old_exo(electricity_storage_7) +c_e_InvestmentFlowBlock_old_rule_exo(electricity_storage_7)_: ++1 InvestmentFlowBlock_old_exo(electricity_storage_7) = 0 c_e_InvestmentFlowBlock_old_rule(storage_electricity_0)_: ++1 InvestmentFlowBlock_old(storage_electricity_0) -1 InvestmentFlowBlock_old_end(storage_electricity_0) -1 InvestmentFlowBlock_old_exo(storage_electricity_0) -+1 InvestmentFlowBlock_old(storage_electricity_0) = 0 c_e_InvestmentFlowBlock_old_rule(storage_electricity_1)_: @@ -1504,292 +1456,340 @@ c_e_InvestmentFlowBlock_old_rule(storage_electricity_7)_: -1 InvestmentFlowBlock_old_exo(storage_electricity_7) = 0 -c_u_InvestmentFlowBlock_max(electricity_storage_0_0)_: -+1 flow(electricity_storage_0_0) --1 InvestmentFlowBlock_total(electricity_storage_0) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_0_1)_: -+1 flow(electricity_storage_0_1) --1 InvestmentFlowBlock_total(electricity_storage_0) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_0_2)_: -+1 flow(electricity_storage_0_2) --1 InvestmentFlowBlock_total(electricity_storage_0) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_1_3)_: -+1 flow(electricity_storage_1_3) --1 InvestmentFlowBlock_total(electricity_storage_1) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_1_4)_: -+1 flow(electricity_storage_1_4) --1 InvestmentFlowBlock_total(electricity_storage_1) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_1_5)_: -+1 flow(electricity_storage_1_5) --1 InvestmentFlowBlock_total(electricity_storage_1) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_2_6)_: -+1 flow(electricity_storage_2_6) --1 InvestmentFlowBlock_total(electricity_storage_2) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_2_7)_: -+1 flow(electricity_storage_2_7) --1 InvestmentFlowBlock_total(electricity_storage_2) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_2_8)_: -+1 flow(electricity_storage_2_8) --1 InvestmentFlowBlock_total(electricity_storage_2) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_3_9)_: -+1 flow(electricity_storage_3_9) --1 InvestmentFlowBlock_total(electricity_storage_3) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_3_10)_: -+1 flow(electricity_storage_3_10) --1 InvestmentFlowBlock_total(electricity_storage_3) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_3_11)_: -+1 flow(electricity_storage_3_11) --1 InvestmentFlowBlock_total(electricity_storage_3) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_4_12)_: -+1 flow(electricity_storage_4_12) --1 InvestmentFlowBlock_total(electricity_storage_4) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_4_13)_: -+1 flow(electricity_storage_4_13) --1 InvestmentFlowBlock_total(electricity_storage_4) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_4_14)_: -+1 flow(electricity_storage_4_14) --1 InvestmentFlowBlock_total(electricity_storage_4) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_5_15)_: -+1 flow(electricity_storage_5_15) --1 InvestmentFlowBlock_total(electricity_storage_5) -<= 0 - -c_u_InvestmentFlowBlock_max(electricity_storage_5_16)_: -+1 flow(electricity_storage_5_16) --1 InvestmentFlowBlock_total(electricity_storage_5) -<= 0 +c_e_InvestmentFlowBlock_old_rule(electricity_storage_0)_: ++1 InvestmentFlowBlock_old(electricity_storage_0) +-1 InvestmentFlowBlock_old_end(electricity_storage_0) +-1 InvestmentFlowBlock_old_exo(electricity_storage_0) += 0 -c_u_InvestmentFlowBlock_max(electricity_storage_5_17)_: -+1 flow(electricity_storage_5_17) --1 InvestmentFlowBlock_total(electricity_storage_5) -<= 0 +c_e_InvestmentFlowBlock_old_rule(electricity_storage_1)_: ++1 InvestmentFlowBlock_old(electricity_storage_1) +-1 InvestmentFlowBlock_old_end(electricity_storage_1) +-1 InvestmentFlowBlock_old_exo(electricity_storage_1) += 0 -c_u_InvestmentFlowBlock_max(electricity_storage_6_18)_: -+1 flow(electricity_storage_6_18) --1 InvestmentFlowBlock_total(electricity_storage_6) -<= 0 +c_e_InvestmentFlowBlock_old_rule(electricity_storage_2)_: ++1 InvestmentFlowBlock_old(electricity_storage_2) +-1 InvestmentFlowBlock_old_end(electricity_storage_2) +-1 InvestmentFlowBlock_old_exo(electricity_storage_2) += 0 -c_u_InvestmentFlowBlock_max(electricity_storage_6_19)_: -+1 flow(electricity_storage_6_19) --1 InvestmentFlowBlock_total(electricity_storage_6) -<= 0 +c_e_InvestmentFlowBlock_old_rule(electricity_storage_3)_: ++1 InvestmentFlowBlock_old(electricity_storage_3) +-1 InvestmentFlowBlock_old_end(electricity_storage_3) +-1 InvestmentFlowBlock_old_exo(electricity_storage_3) += 0 -c_u_InvestmentFlowBlock_max(electricity_storage_6_20)_: -+1 flow(electricity_storage_6_20) --1 InvestmentFlowBlock_total(electricity_storage_6) -<= 0 +c_e_InvestmentFlowBlock_old_rule(electricity_storage_4)_: ++1 InvestmentFlowBlock_old(electricity_storage_4) +-1 InvestmentFlowBlock_old_end(electricity_storage_4) +-1 InvestmentFlowBlock_old_exo(electricity_storage_4) += 0 -c_u_InvestmentFlowBlock_max(electricity_storage_7_21)_: -+1 flow(electricity_storage_7_21) --1 InvestmentFlowBlock_total(electricity_storage_7) -<= 0 +c_e_InvestmentFlowBlock_old_rule(electricity_storage_5)_: ++1 InvestmentFlowBlock_old(electricity_storage_5) +-1 InvestmentFlowBlock_old_end(electricity_storage_5) +-1 InvestmentFlowBlock_old_exo(electricity_storage_5) += 0 -c_u_InvestmentFlowBlock_max(electricity_storage_7_22)_: -+1 flow(electricity_storage_7_22) --1 InvestmentFlowBlock_total(electricity_storage_7) -<= 0 +c_e_InvestmentFlowBlock_old_rule(electricity_storage_6)_: ++1 InvestmentFlowBlock_old(electricity_storage_6) +-1 InvestmentFlowBlock_old_end(electricity_storage_6) +-1 InvestmentFlowBlock_old_exo(electricity_storage_6) += 0 -c_u_InvestmentFlowBlock_max(electricity_storage_7_23)_: -+1 flow(electricity_storage_7_23) --1 InvestmentFlowBlock_total(electricity_storage_7) -<= 0 +c_e_InvestmentFlowBlock_old_rule(electricity_storage_7)_: ++1 InvestmentFlowBlock_old(electricity_storage_7) +-1 InvestmentFlowBlock_old_end(electricity_storage_7) +-1 InvestmentFlowBlock_old_exo(electricity_storage_7) += 0 c_u_InvestmentFlowBlock_max(storage_electricity_0_0)_: -+1 flow(storage_electricity_0_0) ++1 flow(storage_electricity_0) -1 InvestmentFlowBlock_total(storage_electricity_0) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_0_1)_: -+1 flow(storage_electricity_0_1) ++1 flow(storage_electricity_1) -1 InvestmentFlowBlock_total(storage_electricity_0) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_0_2)_: -+1 flow(storage_electricity_0_2) ++1 flow(storage_electricity_2) -1 InvestmentFlowBlock_total(storage_electricity_0) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_1_3)_: -+1 flow(storage_electricity_1_3) ++1 flow(storage_electricity_3) -1 InvestmentFlowBlock_total(storage_electricity_1) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_1_4)_: -+1 flow(storage_electricity_1_4) ++1 flow(storage_electricity_4) -1 InvestmentFlowBlock_total(storage_electricity_1) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_1_5)_: -+1 flow(storage_electricity_1_5) ++1 flow(storage_electricity_5) -1 InvestmentFlowBlock_total(storage_electricity_1) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_2_6)_: -+1 flow(storage_electricity_2_6) ++1 flow(storage_electricity_6) -1 InvestmentFlowBlock_total(storage_electricity_2) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_2_7)_: -+1 flow(storage_electricity_2_7) ++1 flow(storage_electricity_7) -1 InvestmentFlowBlock_total(storage_electricity_2) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_2_8)_: -+1 flow(storage_electricity_2_8) ++1 flow(storage_electricity_8) -1 InvestmentFlowBlock_total(storage_electricity_2) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_3_9)_: -+1 flow(storage_electricity_3_9) ++1 flow(storage_electricity_9) -1 InvestmentFlowBlock_total(storage_electricity_3) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_3_10)_: -+1 flow(storage_electricity_3_10) ++1 flow(storage_electricity_10) -1 InvestmentFlowBlock_total(storage_electricity_3) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_3_11)_: -+1 flow(storage_electricity_3_11) ++1 flow(storage_electricity_11) -1 InvestmentFlowBlock_total(storage_electricity_3) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_4_12)_: -+1 flow(storage_electricity_4_12) ++1 flow(storage_electricity_12) -1 InvestmentFlowBlock_total(storage_electricity_4) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_4_13)_: -+1 flow(storage_electricity_4_13) ++1 flow(storage_electricity_13) -1 InvestmentFlowBlock_total(storage_electricity_4) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_4_14)_: -+1 flow(storage_electricity_4_14) ++1 flow(storage_electricity_14) -1 InvestmentFlowBlock_total(storage_electricity_4) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_5_15)_: -+1 flow(storage_electricity_5_15) ++1 flow(storage_electricity_15) -1 InvestmentFlowBlock_total(storage_electricity_5) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_5_16)_: -+1 flow(storage_electricity_5_16) ++1 flow(storage_electricity_16) -1 InvestmentFlowBlock_total(storage_electricity_5) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_5_17)_: -+1 flow(storage_electricity_5_17) ++1 flow(storage_electricity_17) -1 InvestmentFlowBlock_total(storage_electricity_5) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_6_18)_: -+1 flow(storage_electricity_6_18) ++1 flow(storage_electricity_18) -1 InvestmentFlowBlock_total(storage_electricity_6) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_6_19)_: -+1 flow(storage_electricity_6_19) ++1 flow(storage_electricity_19) -1 InvestmentFlowBlock_total(storage_electricity_6) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_6_20)_: -+1 flow(storage_electricity_6_20) ++1 flow(storage_electricity_20) -1 InvestmentFlowBlock_total(storage_electricity_6) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_7_21)_: -+1 flow(storage_electricity_7_21) ++1 flow(storage_electricity_21) -1 InvestmentFlowBlock_total(storage_electricity_7) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_7_22)_: -+1 flow(storage_electricity_7_22) ++1 flow(storage_electricity_22) -1 InvestmentFlowBlock_total(storage_electricity_7) <= 0 c_u_InvestmentFlowBlock_max(storage_electricity_7_23)_: -+1 flow(storage_electricity_7_23) ++1 flow(storage_electricity_23) -1 InvestmentFlowBlock_total(storage_electricity_7) <= 0 -c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_0)_: --1 GenericInvestmentStorageBlock_invest(storage_0) -+1 GenericInvestmentStorageBlock_total(storage_0) -= 0 +c_u_InvestmentFlowBlock_max(electricity_storage_0_0)_: ++1 flow(electricity_storage_0) +-1 InvestmentFlowBlock_total(electricity_storage_0) +<= 0 -c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_1)_: --1 GenericInvestmentStorageBlock_invest(storage_1) --1 GenericInvestmentStorageBlock_total(storage_0) -+1 GenericInvestmentStorageBlock_total(storage_1) -+1 GenericInvestmentStorageBlock_old(storage_1) -= 0 +c_u_InvestmentFlowBlock_max(electricity_storage_0_1)_: ++1 flow(electricity_storage_1) +-1 InvestmentFlowBlock_total(electricity_storage_0) +<= 0 -c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_2)_: --1 GenericInvestmentStorageBlock_invest(storage_2) --1 GenericInvestmentStorageBlock_total(storage_1) -+1 GenericInvestmentStorageBlock_total(storage_2) -+1 GenericInvestmentStorageBlock_old(storage_2) -= 0 +c_u_InvestmentFlowBlock_max(electricity_storage_0_2)_: ++1 flow(electricity_storage_2) +-1 InvestmentFlowBlock_total(electricity_storage_0) +<= 0 -c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_3)_: --1 GenericInvestmentStorageBlock_invest(storage_3) --1 GenericInvestmentStorageBlock_total(storage_2) -+1 GenericInvestmentStorageBlock_total(storage_3) -+1 GenericInvestmentStorageBlock_old(storage_3) -= 0 +c_u_InvestmentFlowBlock_max(electricity_storage_1_3)_: ++1 flow(electricity_storage_3) +-1 InvestmentFlowBlock_total(electricity_storage_1) +<= 0 -c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_4)_: --1 GenericInvestmentStorageBlock_invest(storage_4) --1 GenericInvestmentStorageBlock_total(storage_3) -+1 GenericInvestmentStorageBlock_total(storage_4) -+1 GenericInvestmentStorageBlock_old(storage_4) -= 0 +c_u_InvestmentFlowBlock_max(electricity_storage_1_4)_: ++1 flow(electricity_storage_4) +-1 InvestmentFlowBlock_total(electricity_storage_1) +<= 0 -c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_5)_: --1 GenericInvestmentStorageBlock_invest(storage_5) --1 GenericInvestmentStorageBlock_total(storage_4) -+1 GenericInvestmentStorageBlock_total(storage_5) -+1 GenericInvestmentStorageBlock_old(storage_5) -= 0 +c_u_InvestmentFlowBlock_max(electricity_storage_1_5)_: ++1 flow(electricity_storage_5) +-1 InvestmentFlowBlock_total(electricity_storage_1) +<= 0 -c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_6)_: --1 GenericInvestmentStorageBlock_invest(storage_6) --1 GenericInvestmentStorageBlock_total(storage_5) -+1 GenericInvestmentStorageBlock_total(storage_6) -+1 GenericInvestmentStorageBlock_old(storage_6) -= 0 +c_u_InvestmentFlowBlock_max(electricity_storage_2_6)_: ++1 flow(electricity_storage_6) +-1 InvestmentFlowBlock_total(electricity_storage_2) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_2_7)_: ++1 flow(electricity_storage_7) +-1 InvestmentFlowBlock_total(electricity_storage_2) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_2_8)_: ++1 flow(electricity_storage_8) +-1 InvestmentFlowBlock_total(electricity_storage_2) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_3_9)_: ++1 flow(electricity_storage_9) +-1 InvestmentFlowBlock_total(electricity_storage_3) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_3_10)_: ++1 flow(electricity_storage_10) +-1 InvestmentFlowBlock_total(electricity_storage_3) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_3_11)_: ++1 flow(electricity_storage_11) +-1 InvestmentFlowBlock_total(electricity_storage_3) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_4_12)_: ++1 flow(electricity_storage_12) +-1 InvestmentFlowBlock_total(electricity_storage_4) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_4_13)_: ++1 flow(electricity_storage_13) +-1 InvestmentFlowBlock_total(electricity_storage_4) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_4_14)_: ++1 flow(electricity_storage_14) +-1 InvestmentFlowBlock_total(electricity_storage_4) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_5_15)_: ++1 flow(electricity_storage_15) +-1 InvestmentFlowBlock_total(electricity_storage_5) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_5_16)_: ++1 flow(electricity_storage_16) +-1 InvestmentFlowBlock_total(electricity_storage_5) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_5_17)_: ++1 flow(electricity_storage_17) +-1 InvestmentFlowBlock_total(electricity_storage_5) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_6_18)_: ++1 flow(electricity_storage_18) +-1 InvestmentFlowBlock_total(electricity_storage_6) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_6_19)_: ++1 flow(electricity_storage_19) +-1 InvestmentFlowBlock_total(electricity_storage_6) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_6_20)_: ++1 flow(electricity_storage_20) +-1 InvestmentFlowBlock_total(electricity_storage_6) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_7_21)_: ++1 flow(electricity_storage_21) +-1 InvestmentFlowBlock_total(electricity_storage_7) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_7_22)_: ++1 flow(electricity_storage_22) +-1 InvestmentFlowBlock_total(electricity_storage_7) +<= 0 + +c_u_InvestmentFlowBlock_max(electricity_storage_7_23)_: ++1 flow(electricity_storage_23) +-1 InvestmentFlowBlock_total(electricity_storage_7) +<= 0 + +c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_0)_: +-1 GenericInvestmentStorageBlock_invest(storage_0) ++1 GenericInvestmentStorageBlock_total(storage_0) += 0 + +c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_1)_: +-1 GenericInvestmentStorageBlock_invest(storage_1) +-1 GenericInvestmentStorageBlock_total(storage_0) ++1 GenericInvestmentStorageBlock_total(storage_1) ++1 GenericInvestmentStorageBlock_old(storage_1) += 0 + +c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_2)_: +-1 GenericInvestmentStorageBlock_invest(storage_2) +-1 GenericInvestmentStorageBlock_total(storage_1) ++1 GenericInvestmentStorageBlock_total(storage_2) ++1 GenericInvestmentStorageBlock_old(storage_2) += 0 + +c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_3)_: +-1 GenericInvestmentStorageBlock_invest(storage_3) +-1 GenericInvestmentStorageBlock_total(storage_2) ++1 GenericInvestmentStorageBlock_total(storage_3) ++1 GenericInvestmentStorageBlock_old(storage_3) += 0 + +c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_4)_: +-1 GenericInvestmentStorageBlock_invest(storage_4) +-1 GenericInvestmentStorageBlock_total(storage_3) ++1 GenericInvestmentStorageBlock_total(storage_4) ++1 GenericInvestmentStorageBlock_old(storage_4) += 0 + +c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_5)_: +-1 GenericInvestmentStorageBlock_invest(storage_5) +-1 GenericInvestmentStorageBlock_total(storage_4) ++1 GenericInvestmentStorageBlock_total(storage_5) ++1 GenericInvestmentStorageBlock_old(storage_5) += 0 + +c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_6)_: +-1 GenericInvestmentStorageBlock_invest(storage_6) +-1 GenericInvestmentStorageBlock_total(storage_5) ++1 GenericInvestmentStorageBlock_total(storage_6) ++1 GenericInvestmentStorageBlock_old(storage_6) += 0 c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_7)_: -1 GenericInvestmentStorageBlock_invest(storage_7) @@ -1870,9 +1870,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage_7)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_0)_: ++1 GenericInvestmentStorageBlock_old(storage_0) -1 GenericInvestmentStorageBlock_old_end(storage_0) -1 GenericInvestmentStorageBlock_old_exo(storage_0) -+1 GenericInvestmentStorageBlock_old(storage_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_1)_: @@ -1922,204 +1922,204 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage_0_1)_: -+1 flow(storage_electricity_0_1) --1 flow(electricity_storage_0_1) +-1 flow(electricity_storage_1) ++1 flow(storage_electricity_1) -1 GenericInvestmentStorageBlock_storage_content(storage_0) +1 GenericInvestmentStorageBlock_storage_content(storage_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_0_2)_: -+1 flow(storage_electricity_0_2) --1 flow(electricity_storage_0_2) +-1 flow(electricity_storage_2) ++1 flow(storage_electricity_2) -1 GenericInvestmentStorageBlock_storage_content(storage_1) +1 GenericInvestmentStorageBlock_storage_content(storage_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_1_3)_: -+1 flow(storage_electricity_1_3) --1 flow(electricity_storage_1_3) +-1 flow(electricity_storage_3) ++1 flow(storage_electricity_3) -1 GenericInvestmentStorageBlock_storage_content(storage_2) +1 GenericInvestmentStorageBlock_storage_content(storage_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_1_4)_: -+1 flow(storage_electricity_1_4) --1 flow(electricity_storage_1_4) +-1 flow(electricity_storage_4) ++1 flow(storage_electricity_4) -1 GenericInvestmentStorageBlock_storage_content(storage_3) +1 GenericInvestmentStorageBlock_storage_content(storage_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_1_5)_: -+1 flow(storage_electricity_1_5) --1 flow(electricity_storage_1_5) +-1 flow(electricity_storage_5) ++1 flow(storage_electricity_5) -1 GenericInvestmentStorageBlock_storage_content(storage_4) +1 GenericInvestmentStorageBlock_storage_content(storage_5) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_2_6)_: -+1 flow(storage_electricity_2_6) --1 flow(electricity_storage_2_6) +-1 flow(electricity_storage_6) ++1 flow(storage_electricity_6) -1 GenericInvestmentStorageBlock_storage_content(storage_5) +1 GenericInvestmentStorageBlock_storage_content(storage_6) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_2_7)_: -+1 flow(storage_electricity_2_7) --1 flow(electricity_storage_2_7) +-1 flow(electricity_storage_7) ++1 flow(storage_electricity_7) -1 GenericInvestmentStorageBlock_storage_content(storage_6) +1 GenericInvestmentStorageBlock_storage_content(storage_7) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_2_8)_: -+1 flow(storage_electricity_2_8) --1 flow(electricity_storage_2_8) +-1 flow(electricity_storage_8) ++1 flow(storage_electricity_8) -1 GenericInvestmentStorageBlock_storage_content(storage_7) +1 GenericInvestmentStorageBlock_storage_content(storage_8) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_3_9)_: -+1 flow(storage_electricity_3_9) --1 flow(electricity_storage_3_9) +-1 flow(electricity_storage_9) ++1 flow(storage_electricity_9) -1 GenericInvestmentStorageBlock_storage_content(storage_8) +1 GenericInvestmentStorageBlock_storage_content(storage_9) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_3_10)_: -+1 flow(storage_electricity_3_10) --1 flow(electricity_storage_3_10) +-1 flow(electricity_storage_10) ++1 flow(storage_electricity_10) -1 GenericInvestmentStorageBlock_storage_content(storage_9) +1 GenericInvestmentStorageBlock_storage_content(storage_10) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_3_11)_: -+1 flow(storage_electricity_3_11) --1 flow(electricity_storage_3_11) +-1 flow(electricity_storage_11) ++1 flow(storage_electricity_11) -1 GenericInvestmentStorageBlock_storage_content(storage_10) +1 GenericInvestmentStorageBlock_storage_content(storage_11) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_4_12)_: -+1 flow(storage_electricity_4_12) --1 flow(electricity_storage_4_12) +-1 flow(electricity_storage_12) ++1 flow(storage_electricity_12) -1 GenericInvestmentStorageBlock_storage_content(storage_11) +1 GenericInvestmentStorageBlock_storage_content(storage_12) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_4_13)_: -+1 flow(storage_electricity_4_13) --1 flow(electricity_storage_4_13) +-1 flow(electricity_storage_13) ++1 flow(storage_electricity_13) -1 GenericInvestmentStorageBlock_storage_content(storage_12) +1 GenericInvestmentStorageBlock_storage_content(storage_13) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_4_14)_: -+1 flow(storage_electricity_4_14) --1 flow(electricity_storage_4_14) +-1 flow(electricity_storage_14) ++1 flow(storage_electricity_14) -1 GenericInvestmentStorageBlock_storage_content(storage_13) +1 GenericInvestmentStorageBlock_storage_content(storage_14) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_5_15)_: -+1 flow(storage_electricity_5_15) --1 flow(electricity_storage_5_15) +-1 flow(electricity_storage_15) ++1 flow(storage_electricity_15) -1 GenericInvestmentStorageBlock_storage_content(storage_14) +1 GenericInvestmentStorageBlock_storage_content(storage_15) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_5_16)_: -+1 flow(storage_electricity_5_16) --1 flow(electricity_storage_5_16) +-1 flow(electricity_storage_16) ++1 flow(storage_electricity_16) -1 GenericInvestmentStorageBlock_storage_content(storage_15) +1 GenericInvestmentStorageBlock_storage_content(storage_16) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_5_17)_: -+1 flow(storage_electricity_5_17) --1 flow(electricity_storage_5_17) +-1 flow(electricity_storage_17) ++1 flow(storage_electricity_17) -1 GenericInvestmentStorageBlock_storage_content(storage_16) +1 GenericInvestmentStorageBlock_storage_content(storage_17) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_6_18)_: -+1 flow(storage_electricity_6_18) --1 flow(electricity_storage_6_18) +-1 flow(electricity_storage_18) ++1 flow(storage_electricity_18) -1 GenericInvestmentStorageBlock_storage_content(storage_17) +1 GenericInvestmentStorageBlock_storage_content(storage_18) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_6_19)_: -+1 flow(storage_electricity_6_19) --1 flow(electricity_storage_6_19) +-1 flow(electricity_storage_19) ++1 flow(storage_electricity_19) -1 GenericInvestmentStorageBlock_storage_content(storage_18) +1 GenericInvestmentStorageBlock_storage_content(storage_19) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_6_20)_: -+1 flow(storage_electricity_6_20) --1 flow(electricity_storage_6_20) +-1 flow(electricity_storage_20) ++1 flow(storage_electricity_20) -1 GenericInvestmentStorageBlock_storage_content(storage_19) +1 GenericInvestmentStorageBlock_storage_content(storage_20) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_7_21)_: -+1 flow(storage_electricity_7_21) --1 flow(electricity_storage_7_21) +-1 flow(electricity_storage_21) ++1 flow(storage_electricity_21) -1 GenericInvestmentStorageBlock_storage_content(storage_20) +1 GenericInvestmentStorageBlock_storage_content(storage_21) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_7_22)_: -+1 flow(storage_electricity_7_22) --1 flow(electricity_storage_7_22) +-1 flow(electricity_storage_22) ++1 flow(storage_electricity_22) -1 GenericInvestmentStorageBlock_storage_content(storage_21) +1 GenericInvestmentStorageBlock_storage_content(storage_22) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_7_23)_: -+1 flow(storage_electricity_7_23) --1 flow(electricity_storage_7_23) +-1 flow(electricity_storage_23) ++1 flow(storage_electricity_23) -1 GenericInvestmentStorageBlock_storage_content(storage_22) +1 GenericInvestmentStorageBlock_storage_content(storage_23) = 0 c_e_GenericInvestmentStorageBlock_power_coupled(storage_0)_: --1 InvestmentFlowBlock_total(electricity_storage_0) +1 InvestmentFlowBlock_total(storage_electricity_0) +-1 InvestmentFlowBlock_total(electricity_storage_0) = 0 c_e_GenericInvestmentStorageBlock_power_coupled(storage_1)_: --1 InvestmentFlowBlock_total(electricity_storage_1) +1 InvestmentFlowBlock_total(storage_electricity_1) +-1 InvestmentFlowBlock_total(electricity_storage_1) = 0 c_e_GenericInvestmentStorageBlock_power_coupled(storage_2)_: --1 InvestmentFlowBlock_total(electricity_storage_2) +1 InvestmentFlowBlock_total(storage_electricity_2) +-1 InvestmentFlowBlock_total(electricity_storage_2) = 0 c_e_GenericInvestmentStorageBlock_power_coupled(storage_3)_: --1 InvestmentFlowBlock_total(electricity_storage_3) +1 InvestmentFlowBlock_total(storage_electricity_3) +-1 InvestmentFlowBlock_total(electricity_storage_3) = 0 c_e_GenericInvestmentStorageBlock_power_coupled(storage_4)_: --1 InvestmentFlowBlock_total(electricity_storage_4) +1 InvestmentFlowBlock_total(storage_electricity_4) +-1 InvestmentFlowBlock_total(electricity_storage_4) = 0 c_e_GenericInvestmentStorageBlock_power_coupled(storage_5)_: --1 InvestmentFlowBlock_total(electricity_storage_5) +1 InvestmentFlowBlock_total(storage_electricity_5) +-1 InvestmentFlowBlock_total(electricity_storage_5) = 0 c_e_GenericInvestmentStorageBlock_power_coupled(storage_6)_: --1 InvestmentFlowBlock_total(electricity_storage_6) +1 InvestmentFlowBlock_total(storage_electricity_6) +-1 InvestmentFlowBlock_total(electricity_storage_6) = 0 c_e_GenericInvestmentStorageBlock_power_coupled(storage_7)_: --1 InvestmentFlowBlock_total(electricity_storage_7) +1 InvestmentFlowBlock_total(storage_electricity_7) +-1 InvestmentFlowBlock_total(electricity_storage_7) = 0 c_e_GenericInvestmentStorageBlock_storage_capacity_outflow(storage_0)_: @@ -2408,9 +2408,9 @@ c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule_exo(demand_dsm_diw_7)_: = 0 c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule(demand_dsm_diw_0)_: ++1 SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_0) -1 SinkDSMDIWInvestmentBlock_old_end(demand_dsm_diw_0) -1 SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_diw_0) -+1 SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_0) = 0 c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule(demand_dsm_diw_1)_: @@ -2460,379 +2460,379 @@ c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_0_0)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_0) -1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_0) -+1 flow(electricity_demand_dsm_diw_0_0) ++1 flow(electricity_demand_dsm_diw_0) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_0_1)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_1) -+1 flow(electricity_demand_dsm_diw_0_1) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_1) ++1 flow(electricity_demand_dsm_diw_1) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_0_2)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_2) -+1 flow(electricity_demand_dsm_diw_0_2) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_2) ++1 flow(electricity_demand_dsm_diw_2) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_1_3)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_3) -+1 flow(electricity_demand_dsm_diw_1_3) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_3) ++1 flow(electricity_demand_dsm_diw_3) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_1_4)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_4) -+1 flow(electricity_demand_dsm_diw_1_4) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_4) ++1 flow(electricity_demand_dsm_diw_4) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_1_5)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_5) -+1 flow(electricity_demand_dsm_diw_1_5) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_5) ++1 flow(electricity_demand_dsm_diw_5) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_2_6)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_6) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_6) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_6) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_6) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_6) -+1 flow(electricity_demand_dsm_diw_2_6) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_6) ++1 flow(electricity_demand_dsm_diw_6) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_2_7)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_7) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_7) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_7) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_7) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_7) -+1 flow(electricity_demand_dsm_diw_2_7) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_7) ++1 flow(electricity_demand_dsm_diw_7) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_2_8)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_8) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_8) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_8) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_8) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_8) -+1 flow(electricity_demand_dsm_diw_2_8) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_8) ++1 flow(electricity_demand_dsm_diw_8) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_3_9)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_9) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_9) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_9) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_9) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_9) -+1 flow(electricity_demand_dsm_diw_3_9) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_9) ++1 flow(electricity_demand_dsm_diw_9) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_3_10)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_10) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_10) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_10) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_10) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_10) -+1 flow(electricity_demand_dsm_diw_3_10) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_10) ++1 flow(electricity_demand_dsm_diw_10) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_3_11)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_11) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_11) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_11) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_11) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_11) -+1 flow(electricity_demand_dsm_diw_3_11) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_11) ++1 flow(electricity_demand_dsm_diw_11) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_4_12)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_12) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_12) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_12) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_12) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_12) -+1 flow(electricity_demand_dsm_diw_4_12) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_12) ++1 flow(electricity_demand_dsm_diw_12) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_4_13)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_13) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_13) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_13) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_13) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_13) -+1 flow(electricity_demand_dsm_diw_4_13) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_13) ++1 flow(electricity_demand_dsm_diw_13) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_4_14)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_14) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_14) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_14) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_14) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_14) -+1 flow(electricity_demand_dsm_diw_4_14) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_14) ++1 flow(electricity_demand_dsm_diw_14) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_5_15)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_15) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_15) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_15) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_15) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_15) -+1 flow(electricity_demand_dsm_diw_5_15) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_15) ++1 flow(electricity_demand_dsm_diw_15) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_5_16)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_16) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_16) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_16) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_16) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_16) -+1 flow(electricity_demand_dsm_diw_5_16) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_16) ++1 flow(electricity_demand_dsm_diw_16) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_5_17)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_17) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_17) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_17) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_17) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_17) -+1 flow(electricity_demand_dsm_diw_5_17) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_17) ++1 flow(electricity_demand_dsm_diw_17) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_6_18)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_18) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_18) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_18) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_18) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_18) -+1 flow(electricity_demand_dsm_diw_6_18) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_18) ++1 flow(electricity_demand_dsm_diw_18) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_6_19)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_19) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_19) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_19) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_19) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_19) -+1 flow(electricity_demand_dsm_diw_6_19) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_19) ++1 flow(electricity_demand_dsm_diw_19) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_6_20)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_20) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_20) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_20) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_20) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_20) -+1 flow(electricity_demand_dsm_diw_6_20) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_20) ++1 flow(electricity_demand_dsm_diw_20) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_7_21)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_21) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_21) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_21) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_21) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_21) -+1 flow(electricity_demand_dsm_diw_7_21) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_21) ++1 flow(electricity_demand_dsm_diw_21) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_7_22)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_22) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_22) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_22) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_22) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_22) -+1 flow(electricity_demand_dsm_diw_7_22) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_22) ++1 flow(electricity_demand_dsm_diw_22) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(demand_dsm_diw_7_23)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_23) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_23) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_23) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_23) -+1 flow(electricity_demand_dsm_diw_7_23) +-1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_23) ++1 flow(electricity_demand_dsm_diw_23) = 1 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_0)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_0) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_0) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_1)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_1) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_2)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_1) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_2) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_2) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_3) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_2) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_3)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_2) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_3) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_3) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_4) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_3) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_4)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_3) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_4) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_4) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_5) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_4) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_5)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_4) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_5) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_5) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_6) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_5) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_6)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_5) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_6) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_6) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_7) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_6) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_7)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_6) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_7) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_7) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_8) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_7) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_8)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_7) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_8) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_8) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_9) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_8) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_9)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_8) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_9) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_9) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_10) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_9) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_10)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_9) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_10) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_10) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_11) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_10) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_11)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_10) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_11) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_11) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_12) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_11) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_12)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_11) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_12) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_12) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_13) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_12) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_13)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_12) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_13) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_13) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_14) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_13) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_14)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_13) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_14) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_14) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_15) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_14) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_15)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_14) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_15) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_15) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_16) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_15) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_16)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_15) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_16) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_16) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_17) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_16) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_17)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_16) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_17) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_17) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_18) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_17) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_18)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_17) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_18) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_18) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_19) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_18) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_19)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_18) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_19) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_19) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_20) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_19) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_20)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_19) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_20) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_20) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_21) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_20) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_21)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_20) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_21) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_21) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_22) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_21) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_22)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_21) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_22) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_22) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_23) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_22) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(demand_dsm_diw_23)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_22) -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_23) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_23) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_23) = 0 c_u_SinkDSMDIWInvestmentBlock_dsm_up_constraint(demand_dsm_diw_0_0)_: @@ -3154,208 +3154,208 @@ c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_0_0)_: <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_0_1)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_1) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_0_2)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_2) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_1_3)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_3) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_3) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_1) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_1_4)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_4) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_4) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_1) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_1_5)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_5) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_5) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_1) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_2_6)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_6) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_6) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_6) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_6) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_6) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_6) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_2) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_2_7)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_7) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_7) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_7) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_7) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_7) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_7) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_2) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_2_8)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_8) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_8) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_8) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_8) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_8) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_8) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_2) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_3_9)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_9) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_9) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_9) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_9) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_9) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_9) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_3) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_3_10)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_10) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_10) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_10) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_10) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_10) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_10) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_3) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_3_11)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_11) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_11) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_11) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_11) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_11) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_11) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_3) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_4_12)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_12) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_12) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_12) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_12) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_12) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_12) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_4) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_4_13)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_13) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_13) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_13) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_13) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_13) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_13) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_4) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_4_14)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_14) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_14) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_14) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_14) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_14) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_14) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_4) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_5_15)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_15) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_15) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_15) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_15) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_15) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_15) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_5) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_5_16)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_16) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_16) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_16) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_16) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_16) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_16) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_5) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_5_17)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_17) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_17) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_17) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_17) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_17) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_17) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_5) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_6_18)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_18) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_18) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_18) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_18) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_18) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_18) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_6) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_6_19)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_19) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_19) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_19) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_19) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_19) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_19) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_6) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_6_20)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_20) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_20) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_20) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_20) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_20) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_20) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_6) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_7_21)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_21) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_21) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_21) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_21) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_21) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_21) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_7) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_7_22)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_22) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_22) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_22) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_22) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_22) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_22) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_7) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(demand_dsm_diw_7_23)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_23) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_23) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_23) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_23) ++1 SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_23) -0.5 SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_7) <= 0 @@ -3664,9 +3664,9 @@ c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule_exo(demand_dsm_dlr_7)_: = 0 c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule(demand_dsm_dlr_0)_: ++1 SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_0) -1 SinkDSMDLRInvestmentBlock_old_end(demand_dsm_dlr_0) -1 SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_dlr_0) -+1 SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_0) = 0 c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule(demand_dsm_dlr_1)_: @@ -3713,314 +3713,314 @@ c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule(demand_dsm_dlr_7)_: c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_0_0)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_0) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_0) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_0) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_0) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_0) -+1 flow(electricity_demand_dsm_dlr_0_0) ++1 flow(electricity_demand_dsm_dlr_0) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_0_1)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_1) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_1) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_1) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_1) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_1) -+1 flow(electricity_demand_dsm_dlr_0_1) ++1 flow(electricity_demand_dsm_dlr_1) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_0_2)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_2) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_2) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_2) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_2) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_2) -+1 flow(electricity_demand_dsm_dlr_0_2) ++1 flow(electricity_demand_dsm_dlr_2) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_1_3)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_3) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_3) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_3) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_3) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_3) -+1 flow(electricity_demand_dsm_dlr_1_3) ++1 flow(electricity_demand_dsm_dlr_3) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_1_4)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_4) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_4) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_4) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_4) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_4) -+1 flow(electricity_demand_dsm_dlr_1_4) ++1 flow(electricity_demand_dsm_dlr_4) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_1_5)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_5) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_5) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_5) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_5) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_5) -+1 flow(electricity_demand_dsm_dlr_1_5) ++1 flow(electricity_demand_dsm_dlr_5) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_2_6)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_6) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_6) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_6) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_6) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_6) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_6) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_6) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_6) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_6) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_6) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_6) -+1 flow(electricity_demand_dsm_dlr_2_6) ++1 flow(electricity_demand_dsm_dlr_6) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_2_7)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_7) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_7) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_7) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_7) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_7) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_7) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_7) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_7) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_7) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_7) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_7) -+1 flow(electricity_demand_dsm_dlr_2_7) ++1 flow(electricity_demand_dsm_dlr_7) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_2_8)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_8) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_8) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_8) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_8) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_8) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_8) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_8) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_8) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_8) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_8) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_8) -+1 flow(electricity_demand_dsm_dlr_2_8) ++1 flow(electricity_demand_dsm_dlr_8) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_3_9)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_9) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_9) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_9) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_9) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_9) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_9) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_9) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_9) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_9) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_9) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_9) -+1 flow(electricity_demand_dsm_dlr_3_9) ++1 flow(electricity_demand_dsm_dlr_9) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_3_10)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_10) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_10) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_10) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_10) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_10) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_10) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_10) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_10) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_10) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_10) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_10) -+1 flow(electricity_demand_dsm_dlr_3_10) ++1 flow(electricity_demand_dsm_dlr_10) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_3_11)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_11) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_11) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_11) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_11) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_11) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_11) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_11) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_11) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_11) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_11) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_11) -+1 flow(electricity_demand_dsm_dlr_3_11) ++1 flow(electricity_demand_dsm_dlr_11) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_4_12)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_12) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_12) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_12) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_12) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_12) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_12) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_12) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_12) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_12) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_12) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_12) -+1 flow(electricity_demand_dsm_dlr_4_12) ++1 flow(electricity_demand_dsm_dlr_12) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_4_13)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_13) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_13) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_13) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_13) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_13) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_13) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_13) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_13) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_13) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_13) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_13) -+1 flow(electricity_demand_dsm_dlr_4_13) ++1 flow(electricity_demand_dsm_dlr_13) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_4_14)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_14) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_14) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_14) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_14) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_14) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_14) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_14) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_14) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_14) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_14) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_14) -+1 flow(electricity_demand_dsm_dlr_4_14) ++1 flow(electricity_demand_dsm_dlr_14) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_5_15)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_15) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_15) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_15) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_15) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_15) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_15) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_15) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_15) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_15) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_15) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_15) -+1 flow(electricity_demand_dsm_dlr_5_15) ++1 flow(electricity_demand_dsm_dlr_15) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_5_16)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_16) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_16) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_16) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_16) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_16) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_16) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_16) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_16) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_16) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_16) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_16) -+1 flow(electricity_demand_dsm_dlr_5_16) ++1 flow(electricity_demand_dsm_dlr_16) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_5_17)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_17) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_17) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_17) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_17) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_17) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_17) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_17) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_17) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_17) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_17) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_17) -+1 flow(electricity_demand_dsm_dlr_5_17) ++1 flow(electricity_demand_dsm_dlr_17) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_6_18)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_18) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_18) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_18) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_18) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_18) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_18) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_18) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_18) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_18) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_18) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_18) -+1 flow(electricity_demand_dsm_dlr_6_18) ++1 flow(electricity_demand_dsm_dlr_18) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_6_19)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_19) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_19) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_19) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_19) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_19) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_19) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_19) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_19) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_19) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_19) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_19) -+1 flow(electricity_demand_dsm_dlr_6_19) ++1 flow(electricity_demand_dsm_dlr_19) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_6_20)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_20) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_20) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_20) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_20) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_20) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_20) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_20) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_20) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_20) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_20) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_20) -+1 flow(electricity_demand_dsm_dlr_6_20) ++1 flow(electricity_demand_dsm_dlr_20) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_7_21)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_21) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_21) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_21) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_21) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_21) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_21) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_21) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_21) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_21) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_21) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_21) -+1 flow(electricity_demand_dsm_dlr_7_21) ++1 flow(electricity_demand_dsm_dlr_21) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_7_22)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_22) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_22) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_22) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_22) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_22) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_22) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_22) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_22) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_22) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_22) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_22) -+1 flow(electricity_demand_dsm_dlr_7_22) ++1 flow(electricity_demand_dsm_dlr_22) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(demand_dsm_dlr_7_23)_: -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_23) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_23) -1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_23) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_23) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_23) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_23) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_23) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_23) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_23) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_23) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_23) -+1 flow(electricity_demand_dsm_dlr_7_23) ++1 flow(electricity_demand_dsm_dlr_23) = 1 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_0)_: @@ -4028,118 +4028,118 @@ c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_1)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_1) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_0) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_2) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_1) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_3)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_3) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_2) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_4)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_4) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_3) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_5)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_5) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_4) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_6)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_6) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_5) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_7)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_6) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_7) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_6) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_8)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_7) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_8) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_7) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_9)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_8) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_9) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_8) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_10)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_9) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_10) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_9) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_11)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_10) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_11) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_10) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_12)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_11) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_12) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_11) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_13)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_12) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_13) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_12) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_14)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_13) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_14) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_13) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_15)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_14) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_15) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_14) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_16)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_15) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_16) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_15) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_17)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_16) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_17) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_16) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_18)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_17) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_18) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_17) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_19)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_18) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_19) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_18) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_20)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_19) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_20) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_19) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_21)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_20) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_21) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_20) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_22)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_21) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_22) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_21) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_1_23)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_22) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_23) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_22) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_0)_: @@ -4147,113 +4147,113 @@ c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_2) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_0) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_3)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_3) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_1) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_4)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_4) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_2) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_5)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_5) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_3) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_6)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_6) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_4) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_7)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_7) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_5) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_8)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_6) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_8) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_6) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_9)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_7) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_9) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_7) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_10)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_8) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_10) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_8) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_11)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_9) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_11) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_9) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_12)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_10) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_12) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_10) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_13)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_11) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_13) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_11) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_14)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_12) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_14) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_12) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_15)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_13) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_15) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_13) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_16)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_14) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_16) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_14) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_17)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_15) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_17) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_15) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_18)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_16) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_18) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_16) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_19)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_17) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_19) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_17) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_20)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_18) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_20) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_18) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_21)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_19) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_21) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_19) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_22)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_20) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_22) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_20) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(demand_dsm_dlr_2_23)_: --1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_21) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_23) +-1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_21) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(demand_dsm_dlr_1_0)_: @@ -4515,8 +4515,8 @@ c_e_SinkDSMDLRInvestmentBlock_no_comp_inc(demand_dsm_dlr_2_23)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_0) @@ -4524,8 +4524,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_0_0)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_0) @@ -4533,8 +4533,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_0_1)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_0_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_0) @@ -4542,8 +4542,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_0_2)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_1_3)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_3) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_1) @@ -4551,8 +4551,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_1_3)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_1_4)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_4) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_1) @@ -4560,8 +4560,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_1_4)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_1_5)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_5) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_1) @@ -4569,8 +4569,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_1_5)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_2_6)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_6) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_6) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_6) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_6) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_6) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_6) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_2) @@ -4578,8 +4578,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_2_6)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_2_7)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_7) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_7) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_7) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_7) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_7) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_7) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_2) @@ -4587,8 +4587,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_2_7)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_2_8)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_8) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_8) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_8) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_8) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_8) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_8) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_2) @@ -4596,8 +4596,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_2_8)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_3_9)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_9) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_9) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_9) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_9) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_9) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_9) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_3) @@ -4605,8 +4605,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_3_9)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_3_10)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_10) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_10) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_10) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_10) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_10) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_10) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_3) @@ -4614,8 +4614,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_3_10)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_3_11)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_11) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_11) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_11) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_11) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_11) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_11) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_3) @@ -4623,8 +4623,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_3_11)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_4_12)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_12) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_12) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_12) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_12) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_12) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_12) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_4) @@ -4632,8 +4632,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_4_12)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_4_13)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_13) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_13) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_13) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_13) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_13) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_13) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_4) @@ -4641,8 +4641,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_4_13)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_4_14)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_14) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_14) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_14) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_14) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_14) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_14) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_4) @@ -4650,8 +4650,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_4_14)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_5_15)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_15) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_15) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_15) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_15) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_15) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_15) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_5) @@ -4659,8 +4659,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_5_15)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_5_16)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_16) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_16) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_16) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_16) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_16) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_16) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_5) @@ -4668,8 +4668,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_5_16)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_5_17)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_17) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_17) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_17) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_17) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_17) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_17) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_5) @@ -4677,8 +4677,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_5_17)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_6_18)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_18) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_18) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_18) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_18) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_18) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_18) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_6) @@ -4686,8 +4686,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_6_18)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_6_19)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_19) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_19) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_19) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_19) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_19) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_19) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_6) @@ -4695,8 +4695,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_6_19)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_6_20)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_20) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_20) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_20) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_20) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_20) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_20) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_6) @@ -4704,8 +4704,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_6_20)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_7_21)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_21) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_21) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_21) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_21) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_21) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_21) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_7) @@ -4713,8 +4713,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_7_21)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_7_22)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_22) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_22) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_22) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_22) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_22) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_22) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_7) @@ -4722,8 +4722,8 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_7_22)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_7_23)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_23) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_23) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_23) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_23) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_23) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_23) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_7) @@ -4731,192 +4731,192 @@ c_u_SinkDSMDLRInvestmentBlock_availability_red(demand_dsm_dlr_7_23)_: c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_0_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_1_3)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_3) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_1) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_1_4)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_4) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_1) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_1_5)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_5) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_1) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_2_6)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_6) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_6) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_6) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_6) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_6) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_2) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_2_7)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_7) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_7) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_7) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_7) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_7) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_2) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_2_8)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_8) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_8) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_8) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_8) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_8) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_2) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_3_9)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_9) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_9) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_9) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_9) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_9) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_3) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_3_10)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_10) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_10) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_10) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_10) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_10) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_3) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_3_11)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_11) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_11) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_11) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_11) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_11) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_3) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_4_12)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_12) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_12) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_12) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_12) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_12) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_4) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_4_13)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_13) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_13) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_13) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_13) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_13) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_4) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_4_14)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_14) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_14) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_14) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_14) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_14) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_4) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_5_15)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_15) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_15) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_15) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_15) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_15) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_5) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_5_16)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_16) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_16) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_16) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_16) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_16) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_5) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_5_17)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_17) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_17) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_17) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_17) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_17) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_5) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_6_18)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_18) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_18) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_18) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_18) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_18) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_6) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_6_19)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_19) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_19) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_19) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_19) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_19) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_6) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_6_20)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_20) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_20) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_20) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_20) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_20) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_6) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_7_21)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_21) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_21) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_21) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_21) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_21) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_7) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_7_22)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_22) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_22) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_22) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_22) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_22) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_7) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(demand_dsm_dlr_7_23)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_23) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_23) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_23) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_23) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_23) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_7) <= 0 @@ -5645,12 +5645,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_yearly_limit_shed(demand_dsm_dlr_7)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_0) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_0) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_0) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_0) @@ -5658,12 +5658,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_0_0)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_1) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_0) @@ -5671,12 +5671,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_0_1)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_0_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_2) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_0) @@ -5684,12 +5684,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_0_2)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_1_3)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_3) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_1) @@ -5697,12 +5697,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_1_3)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_1_4)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_4) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_1) @@ -5710,12 +5710,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_1_4)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_1_5)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_5) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_1) @@ -5723,12 +5723,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_1_5)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_2_6)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_6) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_6) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_6) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_6) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_6) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_6) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_6) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_6) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_6) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_6) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_6) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_2) @@ -5736,12 +5736,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_2_6)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_2_7)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_7) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_7) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_7) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_7) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_7) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_7) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_7) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_7) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_7) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_7) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_7) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_2) @@ -5749,12 +5749,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_2_7)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_2_8)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_8) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_8) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_8) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_8) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_8) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_8) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_8) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_8) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_8) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_8) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_8) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_2) @@ -5762,12 +5762,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_2_8)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_3_9)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_9) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_9) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_9) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_9) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_9) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_9) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_9) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_9) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_9) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_9) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_9) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_3) @@ -5775,12 +5775,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_3_9)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_3_10)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_10) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_10) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_10) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_10) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_10) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_10) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_10) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_10) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_10) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_10) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_10) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_3) @@ -5788,12 +5788,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_3_10)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_3_11)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_11) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_11) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_11) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_11) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_11) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_11) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_11) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_11) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_11) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_11) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_11) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_3) @@ -5801,12 +5801,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_3_11)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_4_12)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_12) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_12) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_12) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_12) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_12) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_12) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_12) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_12) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_12) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_12) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_12) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_4) @@ -5814,12 +5814,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_4_12)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_4_13)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_13) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_13) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_13) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_13) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_13) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_13) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_13) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_13) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_13) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_13) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_13) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_4) @@ -5827,12 +5827,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_4_13)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_4_14)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_14) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_14) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_14) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_14) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_14) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_14) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_14) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_14) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_14) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_14) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_14) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_4) @@ -5840,12 +5840,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_4_14)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_5_15)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_15) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_15) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_15) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_15) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_15) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_15) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_15) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_15) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_15) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_15) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_15) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_5) @@ -5853,12 +5853,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_5_15)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_5_16)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_16) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_16) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_16) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_16) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_16) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_16) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_16) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_16) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_16) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_16) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_16) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_5) @@ -5866,12 +5866,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_5_16)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_5_17)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_17) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_17) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_17) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_17) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_17) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_17) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_17) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_17) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_17) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_17) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_17) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_5) @@ -5879,12 +5879,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_5_17)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_6_18)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_18) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_18) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_18) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_18) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_18) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_18) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_18) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_18) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_18) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_18) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_18) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_6) @@ -5892,12 +5892,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_6_18)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_6_19)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_19) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_19) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_19) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_19) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_19) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_19) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_19) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_19) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_19) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_19) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_19) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_6) @@ -5905,12 +5905,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_6_19)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_6_20)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_20) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_20) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_20) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_20) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_20) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_20) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_20) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_20) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_20) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_20) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_20) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_6) @@ -5918,12 +5918,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_6_20)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_7_21)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_21) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_21) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_21) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_21) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_21) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_21) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_21) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_21) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_21) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_21) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_21) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_7) @@ -5931,12 +5931,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_7_21)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_7_22)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_22) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_22) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_22) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_22) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_22) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_22) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_22) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_22) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_22) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_22) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_22) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_7) @@ -5944,12 +5944,12 @@ c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_7_22)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(demand_dsm_dlr_7_23)_: +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_23) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_23) +1 SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_23) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_23) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_23) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_23) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_23) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_23) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_23) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_23) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_23) -0.5 SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_7) @@ -6117,9 +6117,9 @@ c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule_exo(demand_dsm_oemof_7)_: = 0 c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule(demand_dsm_oemof_0)_: ++1 SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_0) -1 SinkDSMOemofInvestmentBlock_old_end(demand_dsm_oemof_0) -1 SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_oemof_0) -+1 SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_0) = 0 c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule(demand_dsm_oemof_1)_: @@ -6168,168 +6168,168 @@ c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_0_0)_: +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_0) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_0) -1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_0) -+1 flow(electricity_demand_dsm_oemof_0_0) ++1 flow(electricity_demand_dsm_oemof_0) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_0_1)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_1) -+1 flow(electricity_demand_dsm_oemof_0_1) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_1) ++1 flow(electricity_demand_dsm_oemof_1) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_0_2)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_2) -+1 flow(electricity_demand_dsm_oemof_0_2) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_2) ++1 flow(electricity_demand_dsm_oemof_2) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_1_3)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_3) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_3) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_3) -+1 flow(electricity_demand_dsm_oemof_1_3) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_3) ++1 flow(electricity_demand_dsm_oemof_3) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_1_4)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_4) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_4) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_4) -+1 flow(electricity_demand_dsm_oemof_1_4) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_4) ++1 flow(electricity_demand_dsm_oemof_4) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_1_5)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_5) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_5) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_5) -+1 flow(electricity_demand_dsm_oemof_1_5) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_5) ++1 flow(electricity_demand_dsm_oemof_5) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_2_6)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_6) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_6) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_6) -+1 flow(electricity_demand_dsm_oemof_2_6) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_6) ++1 flow(electricity_demand_dsm_oemof_6) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_2_7)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_7) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_7) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_7) -+1 flow(electricity_demand_dsm_oemof_2_7) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_7) ++1 flow(electricity_demand_dsm_oemof_7) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_2_8)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_8) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_8) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_8) -+1 flow(electricity_demand_dsm_oemof_2_8) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_8) ++1 flow(electricity_demand_dsm_oemof_8) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_3_9)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_9) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_9) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_9) -+1 flow(electricity_demand_dsm_oemof_3_9) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_9) ++1 flow(electricity_demand_dsm_oemof_9) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_3_10)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_10) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_10) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_10) -+1 flow(electricity_demand_dsm_oemof_3_10) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_10) ++1 flow(electricity_demand_dsm_oemof_10) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_3_11)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_11) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_11) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_11) -+1 flow(electricity_demand_dsm_oemof_3_11) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_11) ++1 flow(electricity_demand_dsm_oemof_11) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_4_12)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_12) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_12) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_12) -+1 flow(electricity_demand_dsm_oemof_4_12) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_12) ++1 flow(electricity_demand_dsm_oemof_12) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_4_13)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_13) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_13) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_13) -+1 flow(electricity_demand_dsm_oemof_4_13) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_13) ++1 flow(electricity_demand_dsm_oemof_13) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_4_14)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_14) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_14) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_14) -+1 flow(electricity_demand_dsm_oemof_4_14) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_14) ++1 flow(electricity_demand_dsm_oemof_14) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_5_15)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_15) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_15) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_15) -+1 flow(electricity_demand_dsm_oemof_5_15) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_15) ++1 flow(electricity_demand_dsm_oemof_15) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_5_16)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_16) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_16) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_16) -+1 flow(electricity_demand_dsm_oemof_5_16) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_16) ++1 flow(electricity_demand_dsm_oemof_16) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_5_17)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_17) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_17) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_17) -+1 flow(electricity_demand_dsm_oemof_5_17) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_17) ++1 flow(electricity_demand_dsm_oemof_17) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_6_18)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_18) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_18) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_18) -+1 flow(electricity_demand_dsm_oemof_6_18) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_18) ++1 flow(electricity_demand_dsm_oemof_18) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_6_19)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_19) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_19) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_19) -+1 flow(electricity_demand_dsm_oemof_6_19) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_19) ++1 flow(electricity_demand_dsm_oemof_19) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_6_20)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_20) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_20) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_20) -+1 flow(electricity_demand_dsm_oemof_6_20) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_20) ++1 flow(electricity_demand_dsm_oemof_20) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_7_21)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_21) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_21) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_21) -+1 flow(electricity_demand_dsm_oemof_7_21) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_21) ++1 flow(electricity_demand_dsm_oemof_21) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_7_22)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_22) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_22) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_22) -+1 flow(electricity_demand_dsm_oemof_7_22) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_22) ++1 flow(electricity_demand_dsm_oemof_22) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(demand_dsm_oemof_7_23)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_23) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_23) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_23) -+1 flow(electricity_demand_dsm_oemof_7_23) +-1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_23) ++1 flow(electricity_demand_dsm_oemof_23) = 1 c_u_SinkDSMOemofInvestmentBlock_dsm_up_constraint(demand_dsm_oemof_0_0)_: @@ -6598,86 +6598,86 @@ c_u_SinkDSMOemofInvestmentBlock_dsm_down_constraint(demand_dsm_oemof_7_23)_: c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_0)_: -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_0) +-1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_1) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_0) +1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_1) --1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_1) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_2)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_2) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_2) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_3) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_3) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_2) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_3) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_4)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_4) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_4) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_5) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_5) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_4) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_5) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_6)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_6) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_6) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_7) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_7) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_6) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_7) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_8)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_8) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_8) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_9) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_9) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_8) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_9) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_10)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_10) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_10) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_11) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_11) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_10) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_11) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_12)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_12) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_12) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_13) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_13) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_12) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_13) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_14)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_14) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_14) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_15) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_15) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_14) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_15) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_16)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_16) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_16) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_17) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_17) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_16) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_17) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_18)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_18) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_18) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_19) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_19) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_18) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_19) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_20)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_20) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_20) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_21) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_21) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_20) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_21) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(demand_dsm_oemof_22)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_22) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_22) -+1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_23) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_23) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_22) ++1 SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_23) = 0 c_u_SinkDSMOemofInvestmentBlock_overall_dsm_maximum(demand_dsm_oemof_0)_: @@ -6718,14 +6718,6 @@ c_l_SinkDSMOemofInvestmentBlock_overall_minimum(demand_dsm_oemof)_: bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= InvestmentFlowBlock_invest(electricity_storage_0) <= +inf - 0 <= InvestmentFlowBlock_invest(electricity_storage_1) <= +inf - 0 <= InvestmentFlowBlock_invest(electricity_storage_2) <= +inf - 0 <= InvestmentFlowBlock_invest(electricity_storage_3) <= +inf - 0 <= InvestmentFlowBlock_invest(electricity_storage_4) <= +inf - 0 <= InvestmentFlowBlock_invest(electricity_storage_5) <= +inf - 0 <= InvestmentFlowBlock_invest(electricity_storage_6) <= +inf - 0 <= InvestmentFlowBlock_invest(electricity_storage_7) <= +inf 0 <= InvestmentFlowBlock_invest(storage_electricity_0) <= +inf 0 <= InvestmentFlowBlock_invest(storage_electricity_1) <= +inf 0 <= InvestmentFlowBlock_invest(storage_electricity_2) <= +inf @@ -6734,6 +6726,14 @@ bounds 0 <= InvestmentFlowBlock_invest(storage_electricity_5) <= +inf 0 <= InvestmentFlowBlock_invest(storage_electricity_6) <= +inf 0 <= InvestmentFlowBlock_invest(storage_electricity_7) <= +inf + 0 <= InvestmentFlowBlock_invest(electricity_storage_0) <= +inf + 0 <= InvestmentFlowBlock_invest(electricity_storage_1) <= +inf + 0 <= InvestmentFlowBlock_invest(electricity_storage_2) <= +inf + 0 <= InvestmentFlowBlock_invest(electricity_storage_3) <= +inf + 0 <= InvestmentFlowBlock_invest(electricity_storage_4) <= +inf + 0 <= InvestmentFlowBlock_invest(electricity_storage_5) <= +inf + 0 <= InvestmentFlowBlock_invest(electricity_storage_6) <= +inf + 0 <= InvestmentFlowBlock_invest(electricity_storage_7) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_1) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_2) <= +inf @@ -6743,629 +6743,629 @@ bounds 0 <= GenericInvestmentStorageBlock_invest(storage_6) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_7) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_8) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_9) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_10) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_11) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_12) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_13) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_14) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_15) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_16) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_17) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_18) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_18) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_19) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_20) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_20) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_21) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_21) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_22) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_23) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_0_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_1_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_2_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_3_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_4_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_5_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_6_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_7_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_8_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_9_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_10_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_11_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_12_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_13_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_14_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_15_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_16_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_17_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_18_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_19_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_20_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_21_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_22_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(demand_dsm_diw_23_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_22) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(demand_dsm_diw_23) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_6) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_8) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_9) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_10) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_11) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_12) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_13) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_14) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_15) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_16) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_17) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_18) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_19) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_20) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_21) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_22) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_up(demand_dsm_diw_23) <= +inf 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_diw_0) <= 100 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_diw_1) <= 100 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_diw_2) <= 100 @@ -7375,220 +7375,220 @@ bounds 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_diw_6) <= 100 33 <= SinkDSMDIWInvestmentBlock_invest(demand_dsm_diw_7) <= 100 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_6) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_7) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_8) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_9) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_10) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_11) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_12) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_13) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_14) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_15) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_16) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_17) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_18) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_19) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_20) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_21) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_22) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_23) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_6) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_7) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_8) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_9) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_10) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_11) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_12) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_13) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_14) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_15) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_16) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_17) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_18) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_19) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_20) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_21) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_22) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_23) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_6) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_7) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_8) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_9) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_10) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_11) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_12) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_13) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_14) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_15) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_16) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_17) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_18) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_19) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_20) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_21) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_22) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_23) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_3) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_5) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_6) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_6) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_6) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_6) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_6) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_6) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_6) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_6) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_6) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_7) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_7) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_7) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_7) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_7) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_7) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_7) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_7) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_7) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_8) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_8) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_8) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_8) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_8) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_8) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_8) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_8) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_8) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_9) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_9) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_9) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_9) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_9) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_9) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_9) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_9) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_9) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_10) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_10) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_10) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_10) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_10) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_10) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_10) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_10) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_10) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_11) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_11) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_11) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_11) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_11) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_11) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_11) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_11) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_11) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_12) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_12) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_12) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_12) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_12) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_12) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_12) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_12) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_12) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_13) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_13) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_13) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_13) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_13) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_13) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_13) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_13) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_13) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_14) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_14) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_14) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_14) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_14) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_14) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_14) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_14) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_14) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_15) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_15) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_15) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_15) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_15) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_15) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_15) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_15) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_15) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_16) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_16) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_16) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_16) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_16) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_16) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_16) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_16) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_16) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_17) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_17) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_17) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_17) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_17) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_17) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_17) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_17) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_17) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_18) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_18) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_18) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_18) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_19) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_20) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_21) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_22) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_23) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_6) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_7) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_8) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_9) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_10) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_11) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_12) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_13) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_14) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_15) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_16) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_17) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_18) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_18) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_19) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_20) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_21) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_22) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_23) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_6) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_7) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_8) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_9) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_10) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_11) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_12) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_13) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_14) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_15) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_16) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_17) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_18) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_19) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_20) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_21) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_22) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_23) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_6) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_7) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_8) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_9) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_10) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_11) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_12) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_13) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_14) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_15) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_16) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_17) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_18) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_19) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_20) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_21) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_22) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_23) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_6) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_7) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_8) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_9) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_10) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_11) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_12) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_13) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_14) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_15) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_16) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_17) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_18) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_19) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_20) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_21) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_22) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_23) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_6) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_7) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_8) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_9) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_10) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_11) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_12) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_13) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_14) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_15) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_16) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_17) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_18) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_19) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_19) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_19) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_19) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_19) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_19) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_19) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_19) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_19) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_20) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_20) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_20) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_20) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_20) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_20) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_20) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_20) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_20) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_21) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_21) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_21) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_21) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_21) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_21) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_21) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_21) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_21) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_22) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_22) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_22) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_22) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_22) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_22) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_22) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_22) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_22) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_1_23) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_1_23) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_up(demand_dsm_dlr_2_23) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(demand_dsm_dlr_2_23) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_1_23) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_1_23) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(demand_dsm_dlr_2_23) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(demand_dsm_dlr_2_23) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(demand_dsm_dlr_23) <= +inf 33 <= SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_0) <= 100 33 <= SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_1) <= 100 @@ -7599,77 +7599,77 @@ bounds 33 <= SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_6) <= 100 33 <= SinkDSMDLRInvestmentBlock_invest(demand_dsm_dlr_7) <= 100 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_1) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_2) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_3) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_4) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_5) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_6) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_7) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_8) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_9) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_10) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_11) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_12) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_13) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_14) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_15) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_16) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_17) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_18) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_19) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_20) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_21) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_22) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_23) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_1) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_2) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_3) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_4) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_5) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_6) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_7) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_8) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_9) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_10) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_11) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_12) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_13) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_14) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_15) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_16) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_17) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_18) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_19) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_20) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_21) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_22) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_23) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_3) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_3) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_3) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_4) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_4) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_4) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_5) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_5) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_5) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_6) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_6) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_6) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_7) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_7) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_7) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_8) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_8) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_8) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_9) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_9) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_9) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_10) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_10) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_10) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_11) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_11) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_11) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_12) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_12) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_12) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_13) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_13) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_13) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_14) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_14) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_14) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_15) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_15) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_15) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_16) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_16) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_16) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_17) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_17) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_17) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_18) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_18) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_18) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_19) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_19) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_19) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_20) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_20) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_20) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_21) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_21) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_21) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_22) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_22) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_22) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(demand_dsm_oemof_23) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(demand_dsm_oemof_23) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(demand_dsm_oemof_23) <= +inf 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_oemof_0) <= 100 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_oemof_1) <= 100 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_oemof_2) <= 100 @@ -7678,164 +7678,158 @@ bounds 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_oemof_5) <= 100 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_oemof_6) <= 100 33 <= SinkDSMOemofInvestmentBlock_invest(demand_dsm_oemof_7) <= 100 - 0 <= flow(storage_electricity_0_0) <= +inf - 0 <= flow(electricity_storage_0_0) <= +inf - 0 <= flow(electricity_demand_dsm_diw_0_0) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_0_0) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_0_0) <= +inf - 0 <= flow(storage_electricity_0_1) <= +inf - 0 <= flow(electricity_storage_0_1) <= +inf - 0 <= flow(electricity_demand_dsm_diw_0_1) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_0_1) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_0_1) <= +inf - 0 <= flow(storage_electricity_0_2) <= +inf - 0 <= flow(electricity_storage_0_2) <= +inf - 0 <= flow(electricity_demand_dsm_diw_0_2) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_0_2) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_0_2) <= +inf - 0 <= flow(storage_electricity_1_3) <= +inf - 0 <= flow(electricity_storage_1_3) <= +inf - 0 <= flow(electricity_demand_dsm_diw_1_3) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_1_3) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_1_3) <= +inf - 0 <= flow(storage_electricity_1_4) <= +inf - 0 <= flow(electricity_storage_1_4) <= +inf - 0 <= flow(electricity_demand_dsm_diw_1_4) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_1_4) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_1_4) <= +inf - 0 <= flow(storage_electricity_1_5) <= +inf - 0 <= flow(electricity_storage_1_5) <= +inf - 0 <= flow(electricity_demand_dsm_diw_1_5) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_1_5) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_1_5) <= +inf - 0 <= flow(storage_electricity_2_6) <= +inf - 0 <= flow(electricity_storage_2_6) <= +inf - 0 <= flow(electricity_demand_dsm_diw_2_6) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_2_6) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_2_6) <= +inf - 0 <= flow(storage_electricity_2_7) <= +inf - 0 <= flow(electricity_storage_2_7) <= +inf - 0 <= flow(electricity_demand_dsm_diw_2_7) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_2_7) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_2_7) <= +inf - 0 <= flow(storage_electricity_2_8) <= +inf - 0 <= flow(electricity_storage_2_8) <= +inf - 0 <= flow(electricity_demand_dsm_diw_2_8) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_2_8) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_2_8) <= +inf - 0 <= flow(storage_electricity_3_9) <= +inf - 0 <= flow(electricity_storage_3_9) <= +inf - 0 <= flow(electricity_demand_dsm_diw_3_9) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_3_9) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_3_9) <= +inf - 0 <= flow(storage_electricity_3_10) <= +inf - 0 <= flow(electricity_storage_3_10) <= +inf - 0 <= flow(electricity_demand_dsm_diw_3_10) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_3_10) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_3_10) <= +inf - 0 <= flow(storage_electricity_3_11) <= +inf - 0 <= flow(electricity_storage_3_11) <= +inf - 0 <= flow(electricity_demand_dsm_diw_3_11) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_3_11) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_3_11) <= +inf - 0 <= flow(storage_electricity_4_12) <= +inf - 0 <= flow(electricity_storage_4_12) <= +inf - 0 <= flow(electricity_demand_dsm_diw_4_12) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_4_12) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_4_12) <= +inf - 0 <= flow(storage_electricity_4_13) <= +inf - 0 <= flow(electricity_storage_4_13) <= +inf - 0 <= flow(electricity_demand_dsm_diw_4_13) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_4_13) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_4_13) <= +inf - 0 <= flow(storage_electricity_4_14) <= +inf - 0 <= flow(electricity_storage_4_14) <= +inf - 0 <= flow(electricity_demand_dsm_diw_4_14) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_4_14) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_4_14) <= +inf - 0 <= flow(storage_electricity_5_15) <= +inf - 0 <= flow(electricity_storage_5_15) <= +inf - 0 <= flow(electricity_demand_dsm_diw_5_15) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_5_15) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_5_15) <= +inf - 0 <= flow(storage_electricity_5_16) <= +inf - 0 <= flow(electricity_storage_5_16) <= +inf - 0 <= flow(electricity_demand_dsm_diw_5_16) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_5_16) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_5_16) <= +inf - 0 <= flow(storage_electricity_5_17) <= +inf - 0 <= flow(electricity_storage_5_17) <= +inf - 0 <= flow(electricity_demand_dsm_diw_5_17) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_5_17) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_5_17) <= +inf - 0 <= flow(storage_electricity_6_18) <= +inf - 0 <= flow(electricity_storage_6_18) <= +inf - 0 <= flow(electricity_demand_dsm_diw_6_18) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_6_18) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_6_18) <= +inf - 0 <= flow(storage_electricity_6_19) <= +inf - 0 <= flow(electricity_storage_6_19) <= +inf - 0 <= flow(electricity_demand_dsm_diw_6_19) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_6_19) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_6_19) <= +inf - 0 <= flow(storage_electricity_6_20) <= +inf - 0 <= flow(electricity_storage_6_20) <= +inf - 0 <= flow(electricity_demand_dsm_diw_6_20) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_6_20) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_6_20) <= +inf - 0 <= flow(storage_electricity_7_21) <= +inf - 0 <= flow(electricity_storage_7_21) <= +inf - 0 <= flow(electricity_demand_dsm_diw_7_21) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_7_21) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_7_21) <= +inf - 0 <= flow(storage_electricity_7_22) <= +inf - 0 <= flow(electricity_storage_7_22) <= +inf - 0 <= flow(electricity_demand_dsm_diw_7_22) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_7_22) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_7_22) <= +inf - 0 <= flow(storage_electricity_7_23) <= +inf - 0 <= flow(electricity_storage_7_23) <= +inf - 0 <= flow(electricity_demand_dsm_diw_7_23) <= +inf - 0 <= flow(electricity_demand_dsm_dlr_7_23) <= +inf - 0 <= flow(electricity_demand_dsm_oemof_7_23) <= +inf + 0 <= flow(electricity_storage_0) <= +inf + 0 <= flow(electricity_storage_1) <= +inf + 0 <= flow(electricity_storage_2) <= +inf + 0 <= flow(electricity_storage_3) <= +inf + 0 <= flow(electricity_storage_4) <= +inf + 0 <= flow(electricity_storage_5) <= +inf + 0 <= flow(electricity_storage_6) <= +inf + 0 <= flow(electricity_storage_7) <= +inf + 0 <= flow(electricity_storage_8) <= +inf + 0 <= flow(electricity_storage_9) <= +inf + 0 <= flow(electricity_storage_10) <= +inf + 0 <= flow(electricity_storage_11) <= +inf + 0 <= flow(electricity_storage_12) <= +inf + 0 <= flow(electricity_storage_13) <= +inf + 0 <= flow(electricity_storage_14) <= +inf + 0 <= flow(electricity_storage_15) <= +inf + 0 <= flow(electricity_storage_16) <= +inf + 0 <= flow(electricity_storage_17) <= +inf + 0 <= flow(electricity_storage_18) <= +inf + 0 <= flow(electricity_storage_19) <= +inf + 0 <= flow(electricity_storage_20) <= +inf + 0 <= flow(electricity_storage_21) <= +inf + 0 <= flow(electricity_storage_22) <= +inf + 0 <= flow(electricity_storage_23) <= +inf + 0 <= flow(electricity_demand_dsm_diw_0) <= +inf + 0 <= flow(electricity_demand_dsm_diw_1) <= +inf + 0 <= flow(electricity_demand_dsm_diw_2) <= +inf + 0 <= flow(electricity_demand_dsm_diw_3) <= +inf + 0 <= flow(electricity_demand_dsm_diw_4) <= +inf + 0 <= flow(electricity_demand_dsm_diw_5) <= +inf + 0 <= flow(electricity_demand_dsm_diw_6) <= +inf + 0 <= flow(electricity_demand_dsm_diw_7) <= +inf + 0 <= flow(electricity_demand_dsm_diw_8) <= +inf + 0 <= flow(electricity_demand_dsm_diw_9) <= +inf + 0 <= flow(electricity_demand_dsm_diw_10) <= +inf + 0 <= flow(electricity_demand_dsm_diw_11) <= +inf + 0 <= flow(electricity_demand_dsm_diw_12) <= +inf + 0 <= flow(electricity_demand_dsm_diw_13) <= +inf + 0 <= flow(electricity_demand_dsm_diw_14) <= +inf + 0 <= flow(electricity_demand_dsm_diw_15) <= +inf + 0 <= flow(electricity_demand_dsm_diw_16) <= +inf + 0 <= flow(electricity_demand_dsm_diw_17) <= +inf + 0 <= flow(electricity_demand_dsm_diw_18) <= +inf + 0 <= flow(electricity_demand_dsm_diw_19) <= +inf + 0 <= flow(electricity_demand_dsm_diw_20) <= +inf + 0 <= flow(electricity_demand_dsm_diw_21) <= +inf + 0 <= flow(electricity_demand_dsm_diw_22) <= +inf + 0 <= flow(electricity_demand_dsm_diw_23) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_0) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_1) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_2) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_3) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_4) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_5) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_6) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_7) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_8) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_9) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_10) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_11) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_12) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_13) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_14) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_15) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_16) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_17) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_18) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_19) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_20) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_21) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_22) <= +inf + 0 <= flow(electricity_demand_dsm_dlr_23) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_0) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_1) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_2) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_3) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_4) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_5) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_6) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_7) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_8) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_9) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_10) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_11) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_12) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_13) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_14) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_15) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_16) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_17) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_18) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_19) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_20) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_21) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_22) <= +inf + 0 <= flow(electricity_demand_dsm_oemof_23) <= +inf + 0 <= flow(storage_electricity_0) <= +inf + 0 <= flow(storage_electricity_1) <= +inf + 0 <= flow(storage_electricity_2) <= +inf + 0 <= flow(storage_electricity_3) <= +inf + 0 <= flow(storage_electricity_4) <= +inf + 0 <= flow(storage_electricity_5) <= +inf + 0 <= flow(storage_electricity_6) <= +inf + 0 <= flow(storage_electricity_7) <= +inf + 0 <= flow(storage_electricity_8) <= +inf + 0 <= flow(storage_electricity_9) <= +inf + 0 <= flow(storage_electricity_10) <= +inf + 0 <= flow(storage_electricity_11) <= +inf + 0 <= flow(storage_electricity_12) <= +inf + 0 <= flow(storage_electricity_13) <= +inf + 0 <= flow(storage_electricity_14) <= +inf + 0 <= flow(storage_electricity_15) <= +inf + 0 <= flow(storage_electricity_16) <= +inf + 0 <= flow(storage_electricity_17) <= +inf + 0 <= flow(storage_electricity_18) <= +inf + 0 <= flow(storage_electricity_19) <= +inf + 0 <= flow(storage_electricity_20) <= +inf + 0 <= flow(storage_electricity_21) <= +inf + 0 <= flow(storage_electricity_22) <= +inf + 0 <= flow(storage_electricity_23) <= +inf + 0 <= InvestmentFlowBlock_total(storage_electricity_0) <= +inf + 0 <= InvestmentFlowBlock_total(storage_electricity_1) <= +inf + 0 <= InvestmentFlowBlock_total(storage_electricity_2) <= +inf + 0 <= InvestmentFlowBlock_total(storage_electricity_3) <= +inf + 0 <= InvestmentFlowBlock_total(storage_electricity_4) <= +inf + 0 <= InvestmentFlowBlock_total(storage_electricity_5) <= +inf + 0 <= InvestmentFlowBlock_total(storage_electricity_6) <= +inf + 0 <= InvestmentFlowBlock_total(storage_electricity_7) <= +inf 0 <= InvestmentFlowBlock_total(electricity_storage_0) <= +inf 0 <= InvestmentFlowBlock_total(electricity_storage_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricity_storage_1) <= +inf 0 <= InvestmentFlowBlock_total(electricity_storage_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricity_storage_2) <= +inf 0 <= InvestmentFlowBlock_total(electricity_storage_3) <= +inf - 0 <= InvestmentFlowBlock_old(electricity_storage_3) <= +inf 0 <= InvestmentFlowBlock_total(electricity_storage_4) <= +inf - 0 <= InvestmentFlowBlock_old(electricity_storage_4) <= +inf 0 <= InvestmentFlowBlock_total(electricity_storage_5) <= +inf - 0 <= InvestmentFlowBlock_old(electricity_storage_5) <= +inf 0 <= InvestmentFlowBlock_total(electricity_storage_6) <= +inf - 0 <= InvestmentFlowBlock_old(electricity_storage_6) <= +inf 0 <= InvestmentFlowBlock_total(electricity_storage_7) <= +inf - 0 <= InvestmentFlowBlock_old(electricity_storage_7) <= +inf - 0 <= InvestmentFlowBlock_total(storage_electricity_0) <= +inf - 0 <= InvestmentFlowBlock_total(storage_electricity_1) <= +inf + 0 <= InvestmentFlowBlock_old(storage_electricity_0) <= +inf 0 <= InvestmentFlowBlock_old(storage_electricity_1) <= +inf - 0 <= InvestmentFlowBlock_total(storage_electricity_2) <= +inf 0 <= InvestmentFlowBlock_old(storage_electricity_2) <= +inf - 0 <= InvestmentFlowBlock_total(storage_electricity_3) <= +inf 0 <= InvestmentFlowBlock_old(storage_electricity_3) <= +inf - 0 <= InvestmentFlowBlock_total(storage_electricity_4) <= +inf 0 <= InvestmentFlowBlock_old(storage_electricity_4) <= +inf - 0 <= InvestmentFlowBlock_total(storage_electricity_5) <= +inf 0 <= InvestmentFlowBlock_old(storage_electricity_5) <= +inf - 0 <= InvestmentFlowBlock_total(storage_electricity_6) <= +inf 0 <= InvestmentFlowBlock_old(storage_electricity_6) <= +inf - 0 <= InvestmentFlowBlock_total(storage_electricity_7) <= +inf 0 <= InvestmentFlowBlock_old(storage_electricity_7) <= +inf - 0 <= InvestmentFlowBlock_old_end(electricity_storage_0) <= +inf - 0 <= InvestmentFlowBlock_old_end(electricity_storage_1) <= +inf - 0 <= InvestmentFlowBlock_old_end(electricity_storage_2) <= +inf - 0 <= InvestmentFlowBlock_old_end(electricity_storage_3) <= +inf - 0 <= InvestmentFlowBlock_old_end(electricity_storage_4) <= +inf - 0 <= InvestmentFlowBlock_old_end(electricity_storage_5) <= +inf - 0 <= InvestmentFlowBlock_old_end(electricity_storage_6) <= +inf - 0 <= InvestmentFlowBlock_old_end(electricity_storage_7) <= +inf + 0 <= InvestmentFlowBlock_old(electricity_storage_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricity_storage_1) <= +inf + 0 <= InvestmentFlowBlock_old(electricity_storage_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricity_storage_3) <= +inf + 0 <= InvestmentFlowBlock_old(electricity_storage_4) <= +inf + 0 <= InvestmentFlowBlock_old(electricity_storage_5) <= +inf + 0 <= InvestmentFlowBlock_old(electricity_storage_6) <= +inf + 0 <= InvestmentFlowBlock_old(electricity_storage_7) <= +inf 0 <= InvestmentFlowBlock_old_end(storage_electricity_0) <= +inf 0 <= InvestmentFlowBlock_old_end(storage_electricity_1) <= +inf 0 <= InvestmentFlowBlock_old_end(storage_electricity_2) <= +inf @@ -7844,14 +7838,14 @@ bounds 0 <= InvestmentFlowBlock_old_end(storage_electricity_5) <= +inf 0 <= InvestmentFlowBlock_old_end(storage_electricity_6) <= +inf 0 <= InvestmentFlowBlock_old_end(storage_electricity_7) <= +inf - 0 <= InvestmentFlowBlock_old_exo(electricity_storage_0) <= +inf - 0 <= InvestmentFlowBlock_old_exo(electricity_storage_1) <= +inf - 0 <= InvestmentFlowBlock_old_exo(electricity_storage_2) <= +inf - 0 <= InvestmentFlowBlock_old_exo(electricity_storage_3) <= +inf - 0 <= InvestmentFlowBlock_old_exo(electricity_storage_4) <= +inf - 0 <= InvestmentFlowBlock_old_exo(electricity_storage_5) <= +inf - 0 <= InvestmentFlowBlock_old_exo(electricity_storage_6) <= +inf - 0 <= InvestmentFlowBlock_old_exo(electricity_storage_7) <= +inf + 0 <= InvestmentFlowBlock_old_end(electricity_storage_0) <= +inf + 0 <= InvestmentFlowBlock_old_end(electricity_storage_1) <= +inf + 0 <= InvestmentFlowBlock_old_end(electricity_storage_2) <= +inf + 0 <= InvestmentFlowBlock_old_end(electricity_storage_3) <= +inf + 0 <= InvestmentFlowBlock_old_end(electricity_storage_4) <= +inf + 0 <= InvestmentFlowBlock_old_end(electricity_storage_5) <= +inf + 0 <= InvestmentFlowBlock_old_end(electricity_storage_6) <= +inf + 0 <= InvestmentFlowBlock_old_end(electricity_storage_7) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_electricity_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_electricity_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_electricity_2) <= +inf @@ -7860,22 +7854,29 @@ bounds 0 <= InvestmentFlowBlock_old_exo(storage_electricity_5) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_electricity_6) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_electricity_7) <= +inf - 0 <= InvestmentFlowBlock_old(electricity_storage_0) <= +inf - 0 <= InvestmentFlowBlock_old(storage_electricity_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(electricity_storage_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(electricity_storage_1) <= +inf + 0 <= InvestmentFlowBlock_old_exo(electricity_storage_2) <= +inf + 0 <= InvestmentFlowBlock_old_exo(electricity_storage_3) <= +inf + 0 <= InvestmentFlowBlock_old_exo(electricity_storage_4) <= +inf + 0 <= InvestmentFlowBlock_old_exo(electricity_storage_5) <= +inf + 0 <= InvestmentFlowBlock_old_exo(electricity_storage_6) <= +inf + 0 <= InvestmentFlowBlock_old_exo(electricity_storage_7) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_2) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_3) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_3) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_4) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_4) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_5) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_5) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_6) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_6) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_7) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_1) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_3) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_4) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_5) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_6) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage_7) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_1) <= +inf @@ -7893,7 +7894,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage_5) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_6) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_7) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_2) <= +inf @@ -7920,18 +7920,19 @@ bounds 0 <= GenericInvestmentStorageBlock_storage_content(storage_23) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_3) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_4) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_6) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_6) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(demand_dsm_diw_7) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_6) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_7) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_end(demand_dsm_diw_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_end(demand_dsm_diw_1) <= +inf @@ -7949,21 +7950,21 @@ bounds 0 <= SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_diw_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_diw_6) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_exo(demand_dsm_diw_7) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(demand_dsm_diw_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_3) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_5) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_6) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_6) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(demand_dsm_dlr_7) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_6) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_7) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_end(demand_dsm_dlr_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_end(demand_dsm_dlr_1) <= +inf @@ -7981,7 +7982,6 @@ bounds 0 <= SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_dlr_5) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_dlr_6) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_exo(demand_dsm_dlr_7) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(demand_dsm_dlr_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(demand_dsm_dlr_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(demand_dsm_dlr_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(demand_dsm_dlr_2) <= +inf @@ -8032,18 +8032,19 @@ bounds 0 <= SinkDSMDLRInvestmentBlock_dsm_up_level(demand_dsm_dlr_23) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_oemof_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_oemof_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_oemof_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_oemof_3) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_3) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_oemof_4) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_4) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_oemof_5) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_5) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_oemof_6) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_6) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(demand_dsm_oemof_7) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_1) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_2) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_3) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_4) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_5) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_6) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_7) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_end(demand_dsm_oemof_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_end(demand_dsm_oemof_1) <= +inf @@ -8061,5 +8062,4 @@ bounds 0 <= SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_oemof_5) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_oemof_6) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_exo(demand_dsm_oemof_7) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(demand_dsm_oemof_0) <= +inf end diff --git a/tests/lp_files/nominal_value_to_zero.lp b/tests/lp_files/nominal_value_to_zero.lp index 82cf4daeb..1c7a5ce7f 100644 --- a/tests/lp_files/nominal_value_to_zero.lp +++ b/tests/lp_files/nominal_value_to_zero.lp @@ -6,21 +6,21 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(s1_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(s1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(s1_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(s1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(s1_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(s1_electricityBus_2) = 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(s1_electricityBus_0_0) <= 0 - 0 <= flow(s1_electricityBus_0_1) <= 0 - 0 <= flow(s1_electricityBus_0_2) <= 0 + 0 <= flow(s1_electricityBus_0) <= 0 + 0 <= flow(s1_electricityBus_1) <= 0 + 0 <= flow(s1_electricityBus_2) <= 0 end diff --git a/tests/lp_files/nominal_value_to_zero_multi_period.lp b/tests/lp_files/nominal_value_to_zero_multi_period.lp index 11db58e67..820c79734 100644 --- a/tests/lp_files/nominal_value_to_zero_multi_period.lp +++ b/tests/lp_files/nominal_value_to_zero_multi_period.lp @@ -6,36 +6,36 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(s1_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(s1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(s1_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(s1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(s1_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(s1_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(s1_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(s1_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(s1_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(s1_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(s1_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(s1_electricityBus_5) = 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(s1_electricityBus_0_0) <= 0 - 0 <= flow(s1_electricityBus_0_1) <= 0 - 0 <= flow(s1_electricityBus_1_2) <= 0 - 0 <= flow(s1_electricityBus_1_3) <= 0 - 0 <= flow(s1_electricityBus_2_4) <= 0 - 0 <= flow(s1_electricityBus_2_5) <= 0 + 0 <= flow(s1_electricityBus_0) <= 0 + 0 <= flow(s1_electricityBus_1) <= 0 + 0 <= flow(s1_electricityBus_2) <= 0 + 0 <= flow(s1_electricityBus_3) <= 0 + 0 <= flow(s1_electricityBus_4) <= 0 + 0 <= flow(s1_electricityBus_5) <= 0 end diff --git a/tests/lp_files/nonequidistant_timeindex.lp b/tests/lp_files/nonequidistant_timeindex.lp index 9fd54c5bf..702f1efab 100644 --- a/tests/lp_files/nonequidistant_timeindex.lp +++ b/tests/lp_files/nonequidistant_timeindex.lp @@ -2,206 +2,253 @@ min objective: -+100 flow(gas_boiler_0_0) -+100 flow(gas_boiler_0_1) -+100 flow(gas_boiler_0_2) -+200.0 flow(gas_boiler_0_3) -+200.0 flow(gas_boiler_0_4) -+50.0 flow(gas_boiler_0_5) -+50.0 flow(gas_boiler_0_6) -+50.0 flow(gas_boiler_0_7) -+56 flow(heat_storage_0_0) -+56 flow(heat_storage_0_1) -+56 flow(heat_storage_0_2) -+112.0 flow(heat_storage_0_3) -+112.0 flow(heat_storage_0_4) -+28.0 flow(heat_storage_0_5) -+28.0 flow(heat_storage_0_6) -+28.0 flow(heat_storage_0_7) -+24 flow(storage_heat_0_0) -+24 flow(storage_heat_0_1) -+24 flow(storage_heat_0_2) -+48.0 flow(storage_heat_0_3) -+48.0 flow(storage_heat_0_4) -+12.0 flow(storage_heat_0_5) -+12.0 flow(storage_heat_0_6) -+12.0 flow(storage_heat_0_7) ++100 flow(gas_boiler_0) ++100 flow(gas_boiler_1) ++100 flow(gas_boiler_2) ++200.0 flow(gas_boiler_3) ++200.0 flow(gas_boiler_4) ++50.0 flow(gas_boiler_5) ++50.0 flow(gas_boiler_6) ++50.0 flow(gas_boiler_7) ++56 flow(heat_storage_0) ++56 flow(heat_storage_1) ++56 flow(heat_storage_2) ++112.0 flow(heat_storage_3) ++112.0 flow(heat_storage_4) ++28.0 flow(heat_storage_5) ++28.0 flow(heat_storage_6) ++28.0 flow(heat_storage_7) ++24 flow(storage_heat_0) ++24 flow(storage_heat_1) ++24 flow(storage_heat_2) ++48.0 flow(storage_heat_3) ++48.0 flow(storage_heat_4) ++12.0 flow(storage_heat_5) ++12.0 flow(storage_heat_6) ++12.0 flow(storage_heat_7) s.t. -c_e_BusBlock_balance(heat_0_0)_: --1 flow(heat_storage_0_0) -+1 flow(storage_heat_0_0) -+1 flow(boiler_heat_0_0) +c_e_BusBlock_balance(gas_0)_: ++1 flow(gas_boiler_0) = 0 -c_e_BusBlock_balance(heat_0_1)_: --1 flow(heat_storage_0_1) -+1 flow(storage_heat_0_1) -+1 flow(boiler_heat_0_1) +c_e_BusBlock_balance(gas_1)_: ++1 flow(gas_boiler_1) = 0 -c_e_BusBlock_balance(heat_0_2)_: --1 flow(heat_storage_0_2) -+1 flow(storage_heat_0_2) -+1 flow(boiler_heat_0_2) +c_e_BusBlock_balance(gas_2)_: ++1 flow(gas_boiler_2) = 0 -c_e_BusBlock_balance(heat_0_3)_: --1 flow(heat_storage_0_3) -+1 flow(storage_heat_0_3) -+1 flow(boiler_heat_0_3) +c_e_BusBlock_balance(gas_3)_: ++1 flow(gas_boiler_3) = 0 -c_e_BusBlock_balance(heat_0_4)_: --1 flow(heat_storage_0_4) -+1 flow(storage_heat_0_4) -+1 flow(boiler_heat_0_4) +c_e_BusBlock_balance(gas_4)_: ++1 flow(gas_boiler_4) = 0 -c_e_BusBlock_balance(heat_0_5)_: --1 flow(heat_storage_0_5) -+1 flow(storage_heat_0_5) -+1 flow(boiler_heat_0_5) +c_e_BusBlock_balance(gas_5)_: ++1 flow(gas_boiler_5) = 0 -c_e_BusBlock_balance(heat_0_6)_: --1 flow(heat_storage_0_6) -+1 flow(storage_heat_0_6) -+1 flow(boiler_heat_0_6) +c_e_BusBlock_balance(gas_6)_: ++1 flow(gas_boiler_6) = 0 -c_e_BusBlock_balance(heat_0_7)_: --1 flow(heat_storage_0_7) -+1 flow(storage_heat_0_7) -+1 flow(boiler_heat_0_7) +c_e_BusBlock_balance(gas_7)_: ++1 flow(gas_boiler_7) = 0 -c_e_BusBlock_balance(gas_0_0)_: -+1 flow(gas_boiler_0_0) +c_e_BusBlock_balance(heat_0)_: +-1 flow(heat_storage_0) ++1 flow(boiler_heat_0) ++1 flow(storage_heat_0) = 0 -c_e_BusBlock_balance(gas_0_1)_: -+1 flow(gas_boiler_0_1) +c_e_BusBlock_balance(heat_1)_: +-1 flow(heat_storage_1) ++1 flow(boiler_heat_1) ++1 flow(storage_heat_1) = 0 -c_e_BusBlock_balance(gas_0_2)_: -+1 flow(gas_boiler_0_2) +c_e_BusBlock_balance(heat_2)_: +-1 flow(heat_storage_2) ++1 flow(boiler_heat_2) ++1 flow(storage_heat_2) = 0 -c_e_BusBlock_balance(gas_0_3)_: -+1 flow(gas_boiler_0_3) +c_e_BusBlock_balance(heat_3)_: +-1 flow(heat_storage_3) ++1 flow(boiler_heat_3) ++1 flow(storage_heat_3) = 0 -c_e_BusBlock_balance(gas_0_4)_: -+1 flow(gas_boiler_0_4) +c_e_BusBlock_balance(heat_4)_: +-1 flow(heat_storage_4) ++1 flow(boiler_heat_4) ++1 flow(storage_heat_4) = 0 -c_e_BusBlock_balance(gas_0_5)_: -+1 flow(gas_boiler_0_5) +c_e_BusBlock_balance(heat_5)_: +-1 flow(heat_storage_5) ++1 flow(boiler_heat_5) ++1 flow(storage_heat_5) = 0 -c_e_BusBlock_balance(gas_0_6)_: -+1 flow(gas_boiler_0_6) +c_e_BusBlock_balance(heat_6)_: +-1 flow(heat_storage_6) ++1 flow(boiler_heat_6) ++1 flow(storage_heat_6) = 0 -c_e_BusBlock_balance(gas_0_7)_: -+1 flow(gas_boiler_0_7) +c_e_BusBlock_balance(heat_7)_: +-1 flow(heat_storage_7) ++1 flow(boiler_heat_7) ++1 flow(storage_heat_7) = 0 -c_e_ConverterBlock_relation(boiler_gas_heat_0_0)_: -+1 flow(gas_boiler_0_0) --1 flow(boiler_heat_0_0) +c_e_ConverterBlock_relation(boiler_gas_heat_0)_: ++1 flow(gas_boiler_0) +-1 flow(boiler_heat_0) = 0 -c_e_ConverterBlock_relation(boiler_gas_heat_0_1)_: -+1 flow(gas_boiler_0_1) --1 flow(boiler_heat_0_1) +c_e_ConverterBlock_relation(boiler_gas_heat_1)_: ++1 flow(gas_boiler_1) +-1 flow(boiler_heat_1) = 0 -c_e_ConverterBlock_relation(boiler_gas_heat_0_2)_: -+1 flow(gas_boiler_0_2) --1 flow(boiler_heat_0_2) +c_e_ConverterBlock_relation(boiler_gas_heat_2)_: ++1 flow(gas_boiler_2) +-1 flow(boiler_heat_2) = 0 -c_e_ConverterBlock_relation(boiler_gas_heat_0_3)_: -+1 flow(gas_boiler_0_3) --1 flow(boiler_heat_0_3) +c_e_ConverterBlock_relation(boiler_gas_heat_3)_: ++1 flow(gas_boiler_3) +-1 flow(boiler_heat_3) = 0 -c_e_ConverterBlock_relation(boiler_gas_heat_0_4)_: -+1 flow(gas_boiler_0_4) --1 flow(boiler_heat_0_4) +c_e_ConverterBlock_relation(boiler_gas_heat_4)_: ++1 flow(gas_boiler_4) +-1 flow(boiler_heat_4) = 0 -c_e_ConverterBlock_relation(boiler_gas_heat_0_5)_: -+1 flow(gas_boiler_0_5) --1 flow(boiler_heat_0_5) +c_e_ConverterBlock_relation(boiler_gas_heat_5)_: ++1 flow(gas_boiler_5) +-1 flow(boiler_heat_5) = 0 -c_e_ConverterBlock_relation(boiler_gas_heat_0_6)_: -+1 flow(gas_boiler_0_6) --1 flow(boiler_heat_0_6) +c_e_ConverterBlock_relation(boiler_gas_heat_6)_: ++1 flow(gas_boiler_6) +-1 flow(boiler_heat_6) = 0 -c_e_ConverterBlock_relation(boiler_gas_heat_0_7)_: -+1 flow(gas_boiler_0_7) --1 flow(boiler_heat_0_7) +c_e_ConverterBlock_relation(boiler_gas_heat_7)_: ++1 flow(gas_boiler_7) +-1 flow(boiler_heat_7) = 0 -c_e_GenericStorageBlock_balance(storage_0_0)_: --1 flow(heat_storage_0_0) -+1 flow(storage_heat_0_0) +c_e_GenericStorageBlock_losses(storage_0)_: +-1 GenericStorageBlock_storage_losses(storage_0) += -30.0 + +c_e_GenericStorageBlock_losses(storage_1)_: +-1 GenericStorageBlock_storage_losses(storage_1) ++0.1 GenericStorageBlock_storage_content(storage_1) += 0 + +c_e_GenericStorageBlock_losses(storage_2)_: +-1 GenericStorageBlock_storage_losses(storage_2) ++0.1 GenericStorageBlock_storage_content(storage_2) += 0 + +c_e_GenericStorageBlock_losses(storage_3)_: +-1 GenericStorageBlock_storage_losses(storage_3) ++0.19 GenericStorageBlock_storage_content(storage_3) += 0 + +c_e_GenericStorageBlock_losses(storage_4)_: +-1 GenericStorageBlock_storage_losses(storage_4) ++0.19 GenericStorageBlock_storage_content(storage_4) += 0 + +c_e_GenericStorageBlock_losses(storage_5)_: +-1 GenericStorageBlock_storage_losses(storage_5) ++0.05131670194948623 GenericStorageBlock_storage_content(storage_5) += 0 + +c_e_GenericStorageBlock_losses(storage_6)_: +-1 GenericStorageBlock_storage_losses(storage_6) ++0.05131670194948623 GenericStorageBlock_storage_content(storage_6) += 0 + +c_e_GenericStorageBlock_losses(storage_7)_: +-1 GenericStorageBlock_storage_losses(storage_7) ++0.05131670194948623 GenericStorageBlock_storage_content(storage_7) += 0 + +c_e_GenericStorageBlock_balance(storage_0)_: ++1 flow(heat_storage_0) +-1 flow(storage_heat_0) +-1 GenericStorageBlock_storage_losses(storage_0) +-1 GenericStorageBlock_storage_content(storage_1) += -300 + +c_e_GenericStorageBlock_balance(storage_1)_: ++1 flow(heat_storage_1) +-1 flow(storage_heat_1) +-1 GenericStorageBlock_storage_losses(storage_1) +1 GenericStorageBlock_storage_content(storage_1) -= 270.0 +-1 GenericStorageBlock_storage_content(storage_2) += 0 -c_e_GenericStorageBlock_balance(storage_0_1)_: --1 flow(heat_storage_0_1) -+1 flow(storage_heat_0_1) --0.9 GenericStorageBlock_storage_content(storage_1) +c_e_GenericStorageBlock_balance(storage_2)_: ++1 flow(heat_storage_2) +-1 flow(storage_heat_2) +-1 GenericStorageBlock_storage_losses(storage_2) +1 GenericStorageBlock_storage_content(storage_2) +-1 GenericStorageBlock_storage_content(storage_3) = 0 -c_e_GenericStorageBlock_balance(storage_0_2)_: --1 flow(heat_storage_0_2) -+1 flow(storage_heat_0_2) --0.9 GenericStorageBlock_storage_content(storage_2) +c_e_GenericStorageBlock_balance(storage_3)_: ++2.0 flow(heat_storage_3) +-2.0 flow(storage_heat_3) +-1 GenericStorageBlock_storage_losses(storage_3) +1 GenericStorageBlock_storage_content(storage_3) +-1 GenericStorageBlock_storage_content(storage_4) = 0 -c_e_GenericStorageBlock_balance(storage_0_3)_: --2.0 flow(heat_storage_0_3) -+2.0 flow(storage_heat_0_3) --0.81 GenericStorageBlock_storage_content(storage_3) +c_e_GenericStorageBlock_balance(storage_4)_: ++2.0 flow(heat_storage_4) +-2.0 flow(storage_heat_4) +-1 GenericStorageBlock_storage_losses(storage_4) +1 GenericStorageBlock_storage_content(storage_4) +-1 GenericStorageBlock_storage_content(storage_5) = 0 -c_e_GenericStorageBlock_balance(storage_0_4)_: --2.0 flow(heat_storage_0_4) -+2.0 flow(storage_heat_0_4) --0.81 GenericStorageBlock_storage_content(storage_4) +c_e_GenericStorageBlock_balance(storage_5)_: ++0.5 flow(heat_storage_5) +-0.5 flow(storage_heat_5) +-1 GenericStorageBlock_storage_losses(storage_5) +1 GenericStorageBlock_storage_content(storage_5) +-1 GenericStorageBlock_storage_content(storage_6) = 0 -c_e_GenericStorageBlock_balance(storage_0_5)_: --0.5 flow(heat_storage_0_5) -+0.5 flow(storage_heat_0_5) --0.9486832980505138 GenericStorageBlock_storage_content(storage_5) +c_e_GenericStorageBlock_balance(storage_6)_: ++0.5 flow(heat_storage_6) +-0.5 flow(storage_heat_6) +-1 GenericStorageBlock_storage_losses(storage_6) +1 GenericStorageBlock_storage_content(storage_6) +-1 GenericStorageBlock_storage_content(storage_7) = 0 -c_e_GenericStorageBlock_balance(storage_0_6)_: --0.5 flow(heat_storage_0_6) -+0.5 flow(storage_heat_0_6) --0.9486832980505138 GenericStorageBlock_storage_content(storage_6) +c_e_GenericStorageBlock_balance(storage_7)_: ++0.5 flow(heat_storage_7) +-0.5 flow(storage_heat_7) +-1 GenericStorageBlock_storage_losses(storage_7) +1 GenericStorageBlock_storage_content(storage_7) -= 0 - -c_e_GenericStorageBlock_balance(storage_0_7)_: --0.5 flow(heat_storage_0_7) -+0.5 flow(storage_heat_0_7) --0.9486832980505138 GenericStorageBlock_storage_content(storage_7) -+1 GenericStorageBlock_storage_content(storage_8) +-1 GenericStorageBlock_storage_content(storage_8) = 0 c_e_GenericStorageBlock_balanced_cstr(storage)_: @@ -209,38 +256,46 @@ c_e_GenericStorageBlock_balanced_cstr(storage)_: = 300 bounds - 0 <= flow(gas_boiler_0_0) <= +inf - 0 <= flow(gas_boiler_0_1) <= +inf - 0 <= flow(gas_boiler_0_2) <= +inf - 0 <= flow(gas_boiler_0_3) <= +inf - 0 <= flow(gas_boiler_0_4) <= +inf - 0 <= flow(gas_boiler_0_5) <= +inf - 0 <= flow(gas_boiler_0_6) <= +inf - 0 <= flow(gas_boiler_0_7) <= +inf - 0 <= flow(heat_storage_0_0) <= 100 - 0 <= flow(heat_storage_0_1) <= 100 - 0 <= flow(heat_storage_0_2) <= 100 - 0 <= flow(heat_storage_0_3) <= 100 - 0 <= flow(heat_storage_0_4) <= 100 - 0 <= flow(heat_storage_0_5) <= 100 - 0 <= flow(heat_storage_0_6) <= 100 - 0 <= flow(heat_storage_0_7) <= 100 - 0 <= flow(storage_heat_0_0) <= 100 - 0 <= flow(storage_heat_0_1) <= 100 - 0 <= flow(storage_heat_0_2) <= 100 - 0 <= flow(storage_heat_0_3) <= 100 - 0 <= flow(storage_heat_0_4) <= 100 - 0 <= flow(storage_heat_0_5) <= 100 - 0 <= flow(storage_heat_0_6) <= 100 - 0 <= flow(storage_heat_0_7) <= 100 - 0 <= flow(boiler_heat_0_0) <= 200 - 0 <= flow(boiler_heat_0_1) <= 200 - 0 <= flow(boiler_heat_0_2) <= 200 - 0 <= flow(boiler_heat_0_3) <= 200 - 0 <= flow(boiler_heat_0_4) <= 200 - 0 <= flow(boiler_heat_0_5) <= 200 - 0 <= flow(boiler_heat_0_6) <= 200 - 0 <= flow(boiler_heat_0_7) <= 200 + 0 <= flow(gas_boiler_0) <= +inf + 0 <= flow(gas_boiler_1) <= +inf + 0 <= flow(gas_boiler_2) <= +inf + 0 <= flow(gas_boiler_3) <= +inf + 0 <= flow(gas_boiler_4) <= +inf + 0 <= flow(gas_boiler_5) <= +inf + 0 <= flow(gas_boiler_6) <= +inf + 0 <= flow(gas_boiler_7) <= +inf + 0 <= flow(heat_storage_0) <= 100 + 0 <= flow(heat_storage_1) <= 100 + 0 <= flow(heat_storage_2) <= 100 + 0 <= flow(heat_storage_3) <= 100 + 0 <= flow(heat_storage_4) <= 100 + 0 <= flow(heat_storage_5) <= 100 + 0 <= flow(heat_storage_6) <= 100 + 0 <= flow(heat_storage_7) <= 100 + 0 <= flow(boiler_heat_0) <= 200 + 0 <= flow(boiler_heat_1) <= 200 + 0 <= flow(boiler_heat_2) <= 200 + 0 <= flow(boiler_heat_3) <= 200 + 0 <= flow(boiler_heat_4) <= 200 + 0 <= flow(boiler_heat_5) <= 200 + 0 <= flow(boiler_heat_6) <= 200 + 0 <= flow(boiler_heat_7) <= 200 + 0 <= flow(storage_heat_0) <= 100 + 0 <= flow(storage_heat_1) <= 100 + 0 <= flow(storage_heat_2) <= 100 + 0 <= flow(storage_heat_3) <= 100 + 0 <= flow(storage_heat_4) <= 100 + 0 <= flow(storage_heat_5) <= 100 + 0 <= flow(storage_heat_6) <= 100 + 0 <= flow(storage_heat_7) <= 100 + -inf <= GenericStorageBlock_storage_losses(storage_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_3) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_4) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_5) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_6) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_7) <= +inf 0 <= GenericStorageBlock_storage_content(storage_1) <= 300 0 <= GenericStorageBlock_storage_content(storage_2) <= 300 0 <= GenericStorageBlock_storage_content(storage_3) <= 300 diff --git a/tests/lp_files/offsetconverter.lp b/tests/lp_files/offsetconverter.lp index 59b7c425e..077dc1dc0 100644 --- a/tests/lp_files/offsetconverter.lp +++ b/tests/lp_files/offsetconverter.lp @@ -6,28 +6,28 @@ objective: s.t. -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_gasboiler_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_gasboiler_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_gasboiler_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_gasboiler_1) = 0 -c_e_BusBlock_balance(gasBus_0_2)_: -+1 flow(gasBus_gasboiler_0_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_gasboiler_2) = 0 -c_e_BusBlock_balance(thermalBus_0_0)_: -+1 flow(gasboiler_thermalBus_0_0) +c_e_BusBlock_balance(thermalBus_0)_: ++1 flow(gasboiler_thermalBus_0) = 0 -c_e_BusBlock_balance(thermalBus_0_1)_: -+1 flow(gasboiler_thermalBus_0_1) +c_e_BusBlock_balance(thermalBus_1)_: ++1 flow(gasboiler_thermalBus_1) = 0 -c_e_BusBlock_balance(thermalBus_0_2)_: -+1 flow(gasboiler_thermalBus_0_2) +c_e_BusBlock_balance(thermalBus_2)_: ++1 flow(gasboiler_thermalBus_2) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(gasBus_gasboiler_0)_: @@ -45,62 +45,62 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(gasBus_gasboiler_2)_: -100 NonConvexFlowBlock_status(gasBus_gasboiler_2) = 0 -c_u_NonConvexFlowBlock_min(gasBus_gasboiler_0_0)_: --1 flow(gasBus_gasboiler_0_0) +c_u_NonConvexFlowBlock_min(gasBus_gasboiler_0)_: +-1 flow(gasBus_gasboiler_0) +0.32 NonConvexFlowBlock_status_nominal(gasBus_gasboiler_0) <= 0 -c_u_NonConvexFlowBlock_min(gasBus_gasboiler_0_1)_: --1 flow(gasBus_gasboiler_0_1) +c_u_NonConvexFlowBlock_min(gasBus_gasboiler_1)_: +-1 flow(gasBus_gasboiler_1) +0.32 NonConvexFlowBlock_status_nominal(gasBus_gasboiler_1) <= 0 -c_u_NonConvexFlowBlock_min(gasBus_gasboiler_0_2)_: --1 flow(gasBus_gasboiler_0_2) +c_u_NonConvexFlowBlock_min(gasBus_gasboiler_2)_: +-1 flow(gasBus_gasboiler_2) +0.32 NonConvexFlowBlock_status_nominal(gasBus_gasboiler_2) <= 0 -c_u_NonConvexFlowBlock_max(gasBus_gasboiler_0_0)_: -+1 flow(gasBus_gasboiler_0_0) +c_u_NonConvexFlowBlock_max(gasBus_gasboiler_0)_: ++1 flow(gasBus_gasboiler_0) -1 NonConvexFlowBlock_status_nominal(gasBus_gasboiler_0) <= 0 -c_u_NonConvexFlowBlock_max(gasBus_gasboiler_0_1)_: -+1 flow(gasBus_gasboiler_0_1) +c_u_NonConvexFlowBlock_max(gasBus_gasboiler_1)_: ++1 flow(gasBus_gasboiler_1) -1 NonConvexFlowBlock_status_nominal(gasBus_gasboiler_1) <= 0 -c_u_NonConvexFlowBlock_max(gasBus_gasboiler_0_2)_: -+1 flow(gasBus_gasboiler_0_2) +c_u_NonConvexFlowBlock_max(gasBus_gasboiler_2)_: ++1 flow(gasBus_gasboiler_2) -1 NonConvexFlowBlock_status_nominal(gasBus_gasboiler_2) <= 0 -c_e_OffsetConverterBlock_relation(gasboiler_0_0)_: -+0.9 flow(gasBus_gasboiler_0_0) --1 flow(gasboiler_thermalBus_0_0) +c_e_OffsetConverterBlock_relation(gasboiler_0)_: ++0.9 flow(gasBus_gasboiler_0) +-1 flow(gasboiler_thermalBus_0) -17 NonConvexFlowBlock_status(gasBus_gasboiler_0) = 0 -c_e_OffsetConverterBlock_relation(gasboiler_0_1)_: -+0.9 flow(gasBus_gasboiler_0_1) --1 flow(gasboiler_thermalBus_0_1) +c_e_OffsetConverterBlock_relation(gasboiler_1)_: ++0.9 flow(gasBus_gasboiler_1) +-1 flow(gasboiler_thermalBus_1) -17 NonConvexFlowBlock_status(gasBus_gasboiler_1) = 0 -c_e_OffsetConverterBlock_relation(gasboiler_0_2)_: -+0.9 flow(gasBus_gasboiler_0_2) --1 flow(gasboiler_thermalBus_0_2) +c_e_OffsetConverterBlock_relation(gasboiler_2)_: ++0.9 flow(gasBus_gasboiler_2) +-1 flow(gasboiler_thermalBus_2) -17 NonConvexFlowBlock_status(gasBus_gasboiler_2) = 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(gasBus_gasboiler_0_0) <= 100 - 0 <= flow(gasBus_gasboiler_0_1) <= 100 - 0 <= flow(gasBus_gasboiler_0_2) <= 100 - 0 <= flow(gasboiler_thermalBus_0_0) <= +inf - 0 <= flow(gasboiler_thermalBus_0_1) <= +inf - 0 <= flow(gasboiler_thermalBus_0_2) <= +inf + 0 <= flow(gasBus_gasboiler_0) <= 100 + 0 <= flow(gasBus_gasboiler_1) <= 100 + 0 <= flow(gasBus_gasboiler_2) <= 100 + 0 <= flow(gasboiler_thermalBus_0) <= +inf + 0 <= flow(gasboiler_thermalBus_1) <= +inf + 0 <= flow(gasboiler_thermalBus_2) <= +inf 0 <= NonConvexFlowBlock_status_nominal(gasBus_gasboiler_0) <= +inf 0 <= NonConvexFlowBlock_status(gasBus_gasboiler_0) <= 1 0 <= NonConvexFlowBlock_status_nominal(gasBus_gasboiler_1) <= +inf diff --git a/tests/lp_files/offsetconverter_multi_period.lp b/tests/lp_files/offsetconverter_multi_period.lp index 2f29944f2..48e583999 100644 --- a/tests/lp_files/offsetconverter_multi_period.lp +++ b/tests/lp_files/offsetconverter_multi_period.lp @@ -1,216 +1,216 @@ \* Source Pyomo model name=Model *\ -min +min objective: -0 ONE_VAR_CONSTANT ++0 ONE_VAR_CONSTANT s.t. -c_e_BusBlock_balance(thermalBus_0_0)_: -1 flow(gasboiler_thermalBus_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_gasboiler_0) = 0 -c_e_BusBlock_balance(thermalBus_0_1)_: -1 flow(gasboiler_thermalBus_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_gasboiler_1) = 0 -c_e_BusBlock_balance(thermalBus_1_2)_: -1 flow(gasboiler_thermalBus_1_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_gasboiler_2) = 0 -c_e_BusBlock_balance(thermalBus_1_3)_: -1 flow(gasboiler_thermalBus_1_3) +c_e_BusBlock_balance(gasBus_3)_: ++1 flow(gasBus_gasboiler_3) = 0 -c_e_BusBlock_balance(thermalBus_2_4)_: -1 flow(gasboiler_thermalBus_2_4) +c_e_BusBlock_balance(gasBus_4)_: ++1 flow(gasBus_gasboiler_4) = 0 -c_e_BusBlock_balance(thermalBus_2_5)_: -1 flow(gasboiler_thermalBus_2_5) +c_e_BusBlock_balance(gasBus_5)_: ++1 flow(gasBus_gasboiler_5) = 0 -c_e_BusBlock_balance(gasBus_0_0)_: -1 flow(gasBus_gasboiler_0_0) +c_e_BusBlock_balance(thermalBus_0)_: ++1 flow(gasboiler_thermalBus_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -1 flow(gasBus_gasboiler_0_1) +c_e_BusBlock_balance(thermalBus_1)_: ++1 flow(gasboiler_thermalBus_1) = 0 -c_e_BusBlock_balance(gasBus_1_2)_: -1 flow(gasBus_gasboiler_1_2) +c_e_BusBlock_balance(thermalBus_2)_: ++1 flow(gasboiler_thermalBus_2) = 0 -c_e_BusBlock_balance(gasBus_1_3)_: -1 flow(gasBus_gasboiler_1_3) +c_e_BusBlock_balance(thermalBus_3)_: ++1 flow(gasboiler_thermalBus_3) = 0 -c_e_BusBlock_balance(gasBus_2_4)_: -1 flow(gasBus_gasboiler_2_4) +c_e_BusBlock_balance(thermalBus_4)_: ++1 flow(gasboiler_thermalBus_4) = 0 -c_e_BusBlock_balance(gasBus_2_5)_: -1 flow(gasBus_gasboiler_2_5) +c_e_BusBlock_balance(thermalBus_5)_: ++1 flow(gasboiler_thermalBus_5) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(gasboiler_thermalBus_0)_: -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_0) ++1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_0) -100 NonConvexFlowBlock_status(gasboiler_thermalBus_0) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(gasboiler_thermalBus_1)_: -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_1) ++1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_1) -100 NonConvexFlowBlock_status(gasboiler_thermalBus_1) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(gasboiler_thermalBus_2)_: -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_2) ++1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_2) -100 NonConvexFlowBlock_status(gasboiler_thermalBus_2) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(gasboiler_thermalBus_3)_: -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_3) ++1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_3) -100 NonConvexFlowBlock_status(gasboiler_thermalBus_3) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(gasboiler_thermalBus_4)_: -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_4) ++1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_4) -100 NonConvexFlowBlock_status(gasboiler_thermalBus_4) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(gasboiler_thermalBus_5)_: -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_5) ++1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_5) -100 NonConvexFlowBlock_status(gasboiler_thermalBus_5) = 0 -c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_0_0)_: --1 flow(gasboiler_thermalBus_0_0) +c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_0)_: +-1 flow(gasboiler_thermalBus_0) +0.32 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_0) <= 0 -c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_0_1)_: --1 flow(gasboiler_thermalBus_0_1) +c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_1)_: +-1 flow(gasboiler_thermalBus_1) +0.32 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_1) <= 0 -c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_1_2)_: --1 flow(gasboiler_thermalBus_1_2) +c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_2)_: +-1 flow(gasboiler_thermalBus_2) +0.32 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_2) <= 0 -c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_1_3)_: --1 flow(gasboiler_thermalBus_1_3) +c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_3)_: +-1 flow(gasboiler_thermalBus_3) +0.32 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_3) <= 0 -c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_2_4)_: --1 flow(gasboiler_thermalBus_2_4) +c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_4)_: +-1 flow(gasboiler_thermalBus_4) +0.32 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_4) <= 0 -c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_2_5)_: --1 flow(gasboiler_thermalBus_2_5) +c_u_NonConvexFlowBlock_min(gasboiler_thermalBus_5)_: +-1 flow(gasboiler_thermalBus_5) +0.32 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_5) <= 0 -c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_0_0)_: -1 flow(gasboiler_thermalBus_0_0) +c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_0)_: ++1 flow(gasboiler_thermalBus_0) -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_0) <= 0 -c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_0_1)_: -1 flow(gasboiler_thermalBus_0_1) +c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_1)_: ++1 flow(gasboiler_thermalBus_1) -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_1) <= 0 -c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_1_2)_: -1 flow(gasboiler_thermalBus_1_2) +c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_2)_: ++1 flow(gasboiler_thermalBus_2) -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_2) <= 0 -c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_1_3)_: -1 flow(gasboiler_thermalBus_1_3) +c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_3)_: ++1 flow(gasboiler_thermalBus_3) -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_3) <= 0 -c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_2_4)_: -1 flow(gasboiler_thermalBus_2_4) +c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_4)_: ++1 flow(gasboiler_thermalBus_4) -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_4) <= 0 -c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_2_5)_: -1 flow(gasboiler_thermalBus_2_5) +c_u_NonConvexFlowBlock_max(gasboiler_thermalBus_5)_: ++1 flow(gasboiler_thermalBus_5) -1 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_5) <= 0 -c_e_OffsetConverterBlock_relation(gasboiler_gasBus_thermalBus_0_0)_: -+0.9 flow(gasBus_gasboiler_0_0) --1 flow(gasboiler_thermalBus_0_0) --17 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_0) +c_e_OffsetConverterBlock_relation(gasboiler_thermalBus_gasBus_0)_: +-1 flow(gasBus_gasboiler_0) ++0.9617180205415501 flow(gasboiler_thermalBus_0) ++0.14939309056956107 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_0) = 0 -c_e_OffsetConverterBlock_relation(gasboiler_gasBus_thermalBus_0_1)_: -+0.9 flow(gasBus_gasboiler_0_1) --1 flow(gasboiler_thermalBus_0_1) --17 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_1) +c_e_OffsetConverterBlock_relation(gasboiler_thermalBus_gasBus_1)_: +-1 flow(gasBus_gasboiler_1) ++0.9617180205415501 flow(gasboiler_thermalBus_1) ++0.14939309056956107 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_1) = 0 -c_e_OffsetConverterBlock_relation(gasboiler_gasBus_thermalBus_1_2)_: -+0.9 flow(gasBus_gasboiler_1_2) --1 flow(gasboiler_thermalBus_1_2) --17 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_2) +c_e_OffsetConverterBlock_relation(gasboiler_thermalBus_gasBus_2)_: +-1 flow(gasBus_gasboiler_2) ++0.9617180205415501 flow(gasboiler_thermalBus_2) ++0.14939309056956107 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_2) = 0 -c_e_OffsetConverterBlock_relation(gasboiler_gasBus_thermalBus_1_3)_: -+0.9 flow(gasBus_gasboiler_1_3) --1 flow(gasboiler_thermalBus_1_3) --17 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_3) +c_e_OffsetConverterBlock_relation(gasboiler_thermalBus_gasBus_3)_: +-1 flow(gasBus_gasboiler_3) ++0.9617180205415501 flow(gasboiler_thermalBus_3) ++0.14939309056956107 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_3) = 0 -c_e_OffsetConverterBlock_relation(gasboiler_gasBus_thermalBus_2_4)_: -+0.9 flow(gasBus_gasboiler_2_4) --1 flow(gasboiler_thermalBus_2_4) --17 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_4) +c_e_OffsetConverterBlock_relation(gasboiler_thermalBus_gasBus_4)_: +-1 flow(gasBus_gasboiler_4) ++0.9617180205415501 flow(gasboiler_thermalBus_4) ++0.14939309056956107 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_4) = 0 -c_e_OffsetConverterBlock_relation(gasboiler_gasBus_thermalBus_2_5)_: -+0.9 flow(gasBus_gasboiler_2_5) --1 flow(gasboiler_thermalBus_2_5) --17 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_5) +c_e_OffsetConverterBlock_relation(gasboiler_thermalBus_gasBus_5)_: +-1 flow(gasBus_gasboiler_5) ++0.9617180205415501 flow(gasboiler_thermalBus_5) ++0.14939309056956107 NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_5) = 0 bounds -1 <= ONE_VAR_CONSTANT <= 1 -0 <= flow(gasboiler_thermalBus_0_0) <= 100 -0 <= flow(gasboiler_thermalBus_0_1) <= 100 -0 <= flow(gasboiler_thermalBus_1_2) <= 100 -0 <= flow(gasboiler_thermalBus_1_3) <= 100 -0 <= flow(gasboiler_thermalBus_2_4) <= 100 -0 <= flow(gasboiler_thermalBus_2_5) <= 100 -0 <= flow(gasBus_gasboiler_0_0) <= +inf -0 <= flow(gasBus_gasboiler_0_1) <= +inf -0 <= flow(gasBus_gasboiler_1_2) <= +inf -0 <= flow(gasBus_gasboiler_1_3) <= +inf -0 <= flow(gasBus_gasboiler_2_4) <= +inf -0 <= flow(gasBus_gasboiler_2_5) <= +inf -0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_0) <= +inf -0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_0) <= 1 -0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_1) <= +inf -0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_1) <= 1 -0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_2) <= +inf -0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_2) <= 1 -0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_3) <= +inf -0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_3) <= 1 -0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_4) <= +inf -0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_4) <= 1 -0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_5) <= +inf -0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_5) <= 1 + 1 <= ONE_VAR_CONSTANT <= 1 + 0 <= flow(gasBus_gasboiler_0) <= +inf + 0 <= flow(gasBus_gasboiler_1) <= +inf + 0 <= flow(gasBus_gasboiler_2) <= +inf + 0 <= flow(gasBus_gasboiler_3) <= +inf + 0 <= flow(gasBus_gasboiler_4) <= +inf + 0 <= flow(gasBus_gasboiler_5) <= +inf + 0 <= flow(gasboiler_thermalBus_0) <= 100 + 0 <= flow(gasboiler_thermalBus_1) <= 100 + 0 <= flow(gasboiler_thermalBus_2) <= 100 + 0 <= flow(gasboiler_thermalBus_3) <= 100 + 0 <= flow(gasboiler_thermalBus_4) <= 100 + 0 <= flow(gasboiler_thermalBus_5) <= 100 + 0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_0) <= +inf + 0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_0) <= 1 + 0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_1) <= +inf + 0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_1) <= 1 + 0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_2) <= +inf + 0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_2) <= 1 + 0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_3) <= +inf + 0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_3) <= 1 + 0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_4) <= +inf + 0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_4) <= 1 + 0 <= NonConvexFlowBlock_status_nominal(gasboiler_thermalBus_5) <= +inf + 0 <= NonConvexFlowBlock_status(gasboiler_thermalBus_5) <= 1 binary -NonConvexFlowBlock_status(gasboiler_thermalBus_0) -NonConvexFlowBlock_status(gasboiler_thermalBus_1) -NonConvexFlowBlock_status(gasboiler_thermalBus_2) -NonConvexFlowBlock_status(gasboiler_thermalBus_3) -NonConvexFlowBlock_status(gasboiler_thermalBus_4) -NonConvexFlowBlock_status(gasboiler_thermalBus_5) + NonConvexFlowBlock_status(gasboiler_thermalBus_0) + NonConvexFlowBlock_status(gasboiler_thermalBus_1) + NonConvexFlowBlock_status(gasboiler_thermalBus_2) + NonConvexFlowBlock_status(gasboiler_thermalBus_3) + NonConvexFlowBlock_status(gasboiler_thermalBus_4) + NonConvexFlowBlock_status(gasboiler_thermalBus_5) end diff --git a/tests/lp_files/offsetconverter_nonconvex.lp b/tests/lp_files/offsetconverter_nonconvex.lp index 98ff1f1c0..3c2ffac0e 100644 --- a/tests/lp_files/offsetconverter_nonconvex.lp +++ b/tests/lp_files/offsetconverter_nonconvex.lp @@ -1,114 +1,114 @@ \* Source Pyomo model name=Model *\ -min +min objective: -0 ONE_VAR_CONSTANT ++0 ONE_VAR_CONSTANT s.t. -c_e_BusBlock_balance(bus_electricity_0_0)_: -1 flow(diesel_genset_bus_electricity_0_0) +c_e_BusBlock_balance(bus_diesel_0)_: ++1 flow(bus_diesel_diesel_genset_0) = 0 -c_e_BusBlock_balance(bus_electricity_0_1)_: -1 flow(diesel_genset_bus_electricity_0_1) +c_e_BusBlock_balance(bus_diesel_1)_: ++1 flow(bus_diesel_diesel_genset_1) = 0 -c_e_BusBlock_balance(bus_electricity_0_2)_: -1 flow(diesel_genset_bus_electricity_0_2) +c_e_BusBlock_balance(bus_diesel_2)_: ++1 flow(bus_diesel_diesel_genset_2) = 0 -c_e_BusBlock_balance(bus_diesel_0_0)_: -1 flow(bus_diesel_diesel_genset_0_0) +c_e_BusBlock_balance(bus_electricity_0)_: ++1 flow(diesel_genset_bus_electricity_0) = 0 -c_e_BusBlock_balance(bus_diesel_0_1)_: -1 flow(bus_diesel_diesel_genset_0_1) +c_e_BusBlock_balance(bus_electricity_1)_: ++1 flow(diesel_genset_bus_electricity_1) = 0 -c_e_BusBlock_balance(bus_diesel_0_2)_: -1 flow(bus_diesel_diesel_genset_0_2) +c_e_BusBlock_balance(bus_electricity_2)_: ++1 flow(diesel_genset_bus_electricity_2) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(diesel_genset_bus_electricity_0)_: -1 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) ++1 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) -100 NonConvexFlowBlock_status(diesel_genset_bus_electricity_0) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(diesel_genset_bus_electricity_1)_: -1 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) ++1 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) -100 NonConvexFlowBlock_status(diesel_genset_bus_electricity_1) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(diesel_genset_bus_electricity_2)_: -1 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) ++1 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) -100 NonConvexFlowBlock_status(diesel_genset_bus_electricity_2) = 0 -c_u_NonConvexFlowBlock_min(diesel_genset_bus_electricity_0_0)_: --1 flow(diesel_genset_bus_electricity_0_0) +c_u_NonConvexFlowBlock_min(diesel_genset_bus_electricity_0)_: +-1 flow(diesel_genset_bus_electricity_0) +0.2 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) <= 0 -c_u_NonConvexFlowBlock_min(diesel_genset_bus_electricity_0_1)_: --1 flow(diesel_genset_bus_electricity_0_1) +c_u_NonConvexFlowBlock_min(diesel_genset_bus_electricity_1)_: +-1 flow(diesel_genset_bus_electricity_1) +0.2 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) <= 0 -c_u_NonConvexFlowBlock_min(diesel_genset_bus_electricity_0_2)_: --1 flow(diesel_genset_bus_electricity_0_2) +c_u_NonConvexFlowBlock_min(diesel_genset_bus_electricity_2)_: +-1 flow(diesel_genset_bus_electricity_2) +0.2 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) <= 0 -c_u_NonConvexFlowBlock_max(diesel_genset_bus_electricity_0_0)_: -1 flow(diesel_genset_bus_electricity_0_0) +c_u_NonConvexFlowBlock_max(diesel_genset_bus_electricity_0)_: ++1 flow(diesel_genset_bus_electricity_0) -1 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) <= 0 -c_u_NonConvexFlowBlock_max(diesel_genset_bus_electricity_0_1)_: -1 flow(diesel_genset_bus_electricity_0_1) +c_u_NonConvexFlowBlock_max(diesel_genset_bus_electricity_1)_: ++1 flow(diesel_genset_bus_electricity_1) -1 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) <= 0 -c_u_NonConvexFlowBlock_max(diesel_genset_bus_electricity_0_2)_: -1 flow(diesel_genset_bus_electricity_0_2) +c_u_NonConvexFlowBlock_max(diesel_genset_bus_electricity_2)_: ++1 flow(diesel_genset_bus_electricity_2) -1 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) <= 0 -c_e_OffsetConverterBlock_relation(diesel_genset_bus_diesel_bus_electricity_0_0)_: -+0.5 flow(bus_diesel_diesel_genset_0_0) --1 flow(diesel_genset_bus_electricity_0_0) -+2.5 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) +c_e_OffsetConverterBlock_relation(diesel_genset_bus_electricity_bus_diesel_0)_: +-1 flow(bus_diesel_diesel_genset_0) ++2.410714285714285 flow(diesel_genset_bus_electricity_0) ++0.08928571428571486 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) = 0 -c_e_OffsetConverterBlock_relation(diesel_genset_bus_diesel_bus_electricity_0_1)_: -+0.5 flow(bus_diesel_diesel_genset_0_1) --1 flow(diesel_genset_bus_electricity_0_1) -+2.5 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) +c_e_OffsetConverterBlock_relation(diesel_genset_bus_electricity_bus_diesel_1)_: +-1 flow(bus_diesel_diesel_genset_1) ++2.410714285714285 flow(diesel_genset_bus_electricity_1) ++0.08928571428571486 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) = 0 -c_e_OffsetConverterBlock_relation(diesel_genset_bus_diesel_bus_electricity_0_2)_: -+0.5 flow(bus_diesel_diesel_genset_0_2) --1 flow(diesel_genset_bus_electricity_0_2) -+2.5 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) +c_e_OffsetConverterBlock_relation(diesel_genset_bus_electricity_bus_diesel_2)_: +-1 flow(bus_diesel_diesel_genset_2) ++2.410714285714285 flow(diesel_genset_bus_electricity_2) ++0.08928571428571486 NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) = 0 bounds -1 <= ONE_VAR_CONSTANT <= 1 -0 <= flow(diesel_genset_bus_electricity_0_0) <= 100 -0 <= flow(diesel_genset_bus_electricity_0_1) <= 100 -0 <= flow(diesel_genset_bus_electricity_0_2) <= 100 -0 <= flow(bus_diesel_diesel_genset_0_0) <= +inf -0 <= flow(bus_diesel_diesel_genset_0_1) <= +inf -0 <= flow(bus_diesel_diesel_genset_0_2) <= +inf -0 <= NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) <= +inf -0 <= NonConvexFlowBlock_status(diesel_genset_bus_electricity_0) <= 1 -0 <= NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) <= +inf -0 <= NonConvexFlowBlock_status(diesel_genset_bus_electricity_1) <= 1 -0 <= NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) <= +inf -0 <= NonConvexFlowBlock_status(diesel_genset_bus_electricity_2) <= 1 + 1 <= ONE_VAR_CONSTANT <= 1 + 0 <= flow(bus_diesel_diesel_genset_0) <= +inf + 0 <= flow(bus_diesel_diesel_genset_1) <= +inf + 0 <= flow(bus_diesel_diesel_genset_2) <= +inf + 0 <= flow(diesel_genset_bus_electricity_0) <= 100 + 0 <= flow(diesel_genset_bus_electricity_1) <= 100 + 0 <= flow(diesel_genset_bus_electricity_2) <= 100 + 0 <= NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) <= +inf + 0 <= NonConvexFlowBlock_status(diesel_genset_bus_electricity_0) <= 1 + 0 <= NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) <= +inf + 0 <= NonConvexFlowBlock_status(diesel_genset_bus_electricity_1) <= 1 + 0 <= NonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) <= +inf + 0 <= NonConvexFlowBlock_status(diesel_genset_bus_electricity_2) <= 1 binary -NonConvexFlowBlock_status(diesel_genset_bus_electricity_0) -NonConvexFlowBlock_status(diesel_genset_bus_electricity_1) -NonConvexFlowBlock_status(diesel_genset_bus_electricity_2) + NonConvexFlowBlock_status(diesel_genset_bus_electricity_0) + NonConvexFlowBlock_status(diesel_genset_bus_electricity_1) + NonConvexFlowBlock_status(diesel_genset_bus_electricity_2) end diff --git a/tests/lp_files/offsetconverter_nonconvex_investment.lp b/tests/lp_files/offsetconverter_nonconvex_investment.lp index 4b9755dd5..9b91b95ff 100644 --- a/tests/lp_files/offsetconverter_nonconvex_investment.lp +++ b/tests/lp_files/offsetconverter_nonconvex_investment.lp @@ -1,155 +1,155 @@ \* Source Pyomo model name=Model *\ -min +min objective: -100 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) ++100 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) s.t. -c_e_BusBlock_balance(bus_diesel_0_0)_: -1 flow(bus_diesel_diesel_genset_0_0) +c_e_BusBlock_balance(bus_diesel_0)_: ++1 flow(bus_diesel_diesel_genset_0) = 0 -c_e_BusBlock_balance(bus_diesel_0_1)_: -1 flow(bus_diesel_diesel_genset_0_1) +c_e_BusBlock_balance(bus_diesel_1)_: ++1 flow(bus_diesel_diesel_genset_1) = 0 -c_e_BusBlock_balance(bus_diesel_0_2)_: -1 flow(bus_diesel_diesel_genset_0_2) +c_e_BusBlock_balance(bus_diesel_2)_: ++1 flow(bus_diesel_diesel_genset_2) = 0 -c_e_BusBlock_balance(bus_electricity_0_0)_: -1 flow(diesel_genset_bus_electricity_0_0) +c_e_BusBlock_balance(bus_electricity_0)_: ++1 flow(diesel_genset_bus_electricity_0) = 0 -c_e_BusBlock_balance(bus_electricity_0_1)_: -1 flow(diesel_genset_bus_electricity_0_1) +c_e_BusBlock_balance(bus_electricity_1)_: ++1 flow(diesel_genset_bus_electricity_1) = 0 -c_e_BusBlock_balance(bus_electricity_0_2)_: -1 flow(diesel_genset_bus_electricity_0_2) +c_e_BusBlock_balance(bus_electricity_2)_: ++1 flow(diesel_genset_bus_electricity_2) = 0 c_l_InvestNonConvexFlowBlock_minimum_investment(diesel_genset_bus_electricity_0)_: -1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) ++1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) >= 0 c_u_InvestNonConvexFlowBlock_maximum_investment(diesel_genset_bus_electricity_0)_: -1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) ++1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) <= 1234 -c_u_InvestNonConvexFlowBlock_min(diesel_genset_bus_electricity_0_0)_: --1 flow(diesel_genset_bus_electricity_0_0) +c_u_InvestNonConvexFlowBlock_min(diesel_genset_bus_electricity_0)_: +-1 flow(diesel_genset_bus_electricity_0) +0.2 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) <= 0 -c_u_InvestNonConvexFlowBlock_min(diesel_genset_bus_electricity_0_1)_: --1 flow(diesel_genset_bus_electricity_0_1) +c_u_InvestNonConvexFlowBlock_min(diesel_genset_bus_electricity_1)_: +-1 flow(diesel_genset_bus_electricity_1) +0.2 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) <= 0 -c_u_InvestNonConvexFlowBlock_min(diesel_genset_bus_electricity_0_2)_: --1 flow(diesel_genset_bus_electricity_0_2) +c_u_InvestNonConvexFlowBlock_min(diesel_genset_bus_electricity_2)_: +-1 flow(diesel_genset_bus_electricity_2) +0.2 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) <= 0 -c_u_InvestNonConvexFlowBlock_max(diesel_genset_bus_electricity_0_0)_: -1 flow(diesel_genset_bus_electricity_0_0) +c_u_InvestNonConvexFlowBlock_max(diesel_genset_bus_electricity_0)_: ++1 flow(diesel_genset_bus_electricity_0) -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) <= 0 -c_u_InvestNonConvexFlowBlock_max(diesel_genset_bus_electricity_0_1)_: -1 flow(diesel_genset_bus_electricity_0_1) +c_u_InvestNonConvexFlowBlock_max(diesel_genset_bus_electricity_1)_: ++1 flow(diesel_genset_bus_electricity_1) -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) <= 0 -c_u_InvestNonConvexFlowBlock_max(diesel_genset_bus_electricity_0_2)_: -1 flow(diesel_genset_bus_electricity_0_2) +c_u_InvestNonConvexFlowBlock_max(diesel_genset_bus_electricity_2)_: ++1 flow(diesel_genset_bus_electricity_2) -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) <= 0 c_u_InvestNonConvexFlowBlock_invest_nc_one(diesel_genset_bus_electricity_0_0)_: -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) ++1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) -1234 InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_0) <= 0 c_u_InvestNonConvexFlowBlock_invest_nc_one(diesel_genset_bus_electricity_0_1)_: -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) ++1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) -1234 InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_1) <= 0 c_u_InvestNonConvexFlowBlock_invest_nc_one(diesel_genset_bus_electricity_0_2)_: -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) ++1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) -1234 InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_2) <= 0 c_u_InvestNonConvexFlowBlock_invest_nc_two(diesel_genset_bus_electricity_0_0)_: -1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) ++1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) <= 0 c_u_InvestNonConvexFlowBlock_invest_nc_two(diesel_genset_bus_electricity_0_1)_: -1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) ++1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) <= 0 c_u_InvestNonConvexFlowBlock_invest_nc_two(diesel_genset_bus_electricity_0_2)_: -1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) ++1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) <= 0 c_u_InvestNonConvexFlowBlock_invest_nc_three(diesel_genset_bus_electricity_0_0)_: -1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) ++1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) -1234 InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_0) ++1234 InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_0) <= 1234 c_u_InvestNonConvexFlowBlock_invest_nc_three(diesel_genset_bus_electricity_0_1)_: -1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) ++1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) -1234 InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_1) ++1234 InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_1) <= 1234 c_u_InvestNonConvexFlowBlock_invest_nc_three(diesel_genset_bus_electricity_0_2)_: -1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) ++1 InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) -1 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) -1234 InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_2) ++1234 InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_2) <= 1234 -c_e_OffsetConverterBlock_relation(diesel_genset_bus_diesel_bus_electricity_0_0)_: -+0.5 flow(bus_diesel_diesel_genset_0_0) --1 flow(diesel_genset_bus_electricity_0_0) -+2.5 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) +c_e_OffsetConverterBlock_relation(diesel_genset_bus_electricity_bus_diesel_0)_: +-1 flow(bus_diesel_diesel_genset_0) ++2.410714285714285 flow(diesel_genset_bus_electricity_0) ++0.08928571428571486 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) = 0 -c_e_OffsetConverterBlock_relation(diesel_genset_bus_diesel_bus_electricity_0_1)_: -+0.5 flow(bus_diesel_diesel_genset_0_1) --1 flow(diesel_genset_bus_electricity_0_1) -+2.5 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) +c_e_OffsetConverterBlock_relation(diesel_genset_bus_electricity_bus_diesel_1)_: +-1 flow(bus_diesel_diesel_genset_1) ++2.410714285714285 flow(diesel_genset_bus_electricity_1) ++0.08928571428571486 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) = 0 -c_e_OffsetConverterBlock_relation(diesel_genset_bus_diesel_bus_electricity_0_2)_: -+0.5 flow(bus_diesel_diesel_genset_0_2) --1 flow(diesel_genset_bus_electricity_0_2) -+2.5 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) +c_e_OffsetConverterBlock_relation(diesel_genset_bus_electricity_bus_diesel_2)_: +-1 flow(bus_diesel_diesel_genset_2) ++2.410714285714285 flow(diesel_genset_bus_electricity_2) ++0.08928571428571486 InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) = 0 bounds -0 <= InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) <= 1234 -0 <= flow(bus_diesel_diesel_genset_0_0) <= +inf -0 <= flow(bus_diesel_diesel_genset_0_1) <= +inf -0 <= flow(bus_diesel_diesel_genset_0_2) <= +inf -0 <= flow(diesel_genset_bus_electricity_0_0) <= +inf -0 <= flow(diesel_genset_bus_electricity_0_1) <= +inf -0 <= flow(diesel_genset_bus_electricity_0_2) <= +inf -0 <= InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) <= +inf -0 <= InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) <= +inf -0 <= InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) <= +inf -0 <= InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_0) <= 1 -0 <= InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_1) <= 1 -0 <= InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_2) <= 1 + 0 <= InvestNonConvexFlowBlock_invest(diesel_genset_bus_electricity_0) <= 1234 + 0 <= flow(bus_diesel_diesel_genset_0) <= +inf + 0 <= flow(bus_diesel_diesel_genset_1) <= +inf + 0 <= flow(bus_diesel_diesel_genset_2) <= +inf + 0 <= flow(diesel_genset_bus_electricity_0) <= +inf + 0 <= flow(diesel_genset_bus_electricity_1) <= +inf + 0 <= flow(diesel_genset_bus_electricity_2) <= +inf + 0 <= InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_0) <= +inf + 0 <= InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_1) <= +inf + 0 <= InvestNonConvexFlowBlock_status_nominal(diesel_genset_bus_electricity_2) <= +inf + 0 <= InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_0) <= 1 + 0 <= InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_1) <= 1 + 0 <= InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_2) <= 1 binary -InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_0) -InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_1) -InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_2) + InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_0) + InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_1) + InvestNonConvexFlowBlock_status(diesel_genset_bus_electricity_2) end diff --git a/tests/lp_files/periodical_emission_limit.lp b/tests/lp_files/periodical_emission_limit.lp index a4ff0ee68..0a9d52220 100644 --- a/tests/lp_files/periodical_emission_limit.lp +++ b/tests/lp_files/periodical_emission_limit.lp @@ -7,38 +7,38 @@ objective: s.t. c_u_periodical_integral_limit(0)_: -+0.5 flow(source1_electricityBus_0_0) --1.0 flow(source1_electricityBus_0_1) -+3.5 flow(source2_electricityBus_0_0) -+3.5 flow(source2_electricityBus_0_1) ++0.5 flow(source1_electricityBus_0) +-1.0 flow(source1_electricityBus_1) ++3.5 flow(source2_electricityBus_0) ++3.5 flow(source2_electricityBus_1) <= 300 c_u_periodical_integral_limit(1)_: -+2.0 flow(source1_electricityBus_1_2) -+1 flow(source1_electricityBus_1_3) -+3.5 flow(source2_electricityBus_1_2) -+3.5 flow(source2_electricityBus_1_3) ++2.0 flow(source1_electricityBus_2) ++1 flow(source1_electricityBus_3) ++3.5 flow(source2_electricityBus_2) ++3.5 flow(source2_electricityBus_3) <= 200 c_u_periodical_integral_limit(2)_: -+0.5 flow(source1_electricityBus_2_4) -+0.5 flow(source1_electricityBus_2_5) -+3.5 flow(source2_electricityBus_2_4) -+3.5 flow(source2_electricityBus_2_5) ++0.5 flow(source1_electricityBus_4) ++0.5 flow(source1_electricityBus_5) ++3.5 flow(source2_electricityBus_4) ++3.5 flow(source2_electricityBus_5) <= 100 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(source1_electricityBus_0_0) <= 100 - 0 <= flow(source1_electricityBus_0_1) <= 100 - 0 <= flow(source2_electricityBus_0_0) <= 100 - 0 <= flow(source2_electricityBus_0_1) <= 100 - 0 <= flow(source1_electricityBus_1_2) <= 100 - 0 <= flow(source1_electricityBus_1_3) <= 100 - 0 <= flow(source2_electricityBus_1_2) <= 100 - 0 <= flow(source2_electricityBus_1_3) <= 100 - 0 <= flow(source1_electricityBus_2_4) <= 100 - 0 <= flow(source1_electricityBus_2_5) <= 100 - 0 <= flow(source2_electricityBus_2_4) <= 100 - 0 <= flow(source2_electricityBus_2_5) <= 100 + 0 <= flow(source1_electricityBus_0) <= 100 + 0 <= flow(source1_electricityBus_1) <= 100 + 0 <= flow(source1_electricityBus_2) <= 100 + 0 <= flow(source1_electricityBus_3) <= 100 + 0 <= flow(source1_electricityBus_4) <= 100 + 0 <= flow(source1_electricityBus_5) <= 100 + 0 <= flow(source2_electricityBus_0) <= 100 + 0 <= flow(source2_electricityBus_1) <= 100 + 0 <= flow(source2_electricityBus_2) <= 100 + 0 <= flow(source2_electricityBus_3) <= 100 + 0 <= flow(source2_electricityBus_4) <= 100 + 0 <= flow(source2_electricityBus_5) <= 100 end diff --git a/tests/lp_files/periodical_investment_limit.lp b/tests/lp_files/periodical_investment_limit.lp index 1a01bf380..59996067f 100644 --- a/tests/lp_files/periodical_investment_limit.lp +++ b/tests/lp_files/periodical_investment_limit.lp @@ -26,97 +26,109 @@ c_u_investment_limit_per_period(2)_: +6.1008197568652225 GenericInvestmentStorageBlock_invest(storage_invest_limit_2) <= 300 -c_e_BusBlock_balance(Bus1_0_0)_: -+1 flow(storage_invest_limit_Bus1_0_0) -+1 flow(Source_Bus1_0_0) --1 flow(Bus1_storage_invest_limit_0_0) +c_e_BusBlock_balance(Bus1_0)_: +-1 flow(Bus1_storage_invest_limit_0) ++1 flow(storage_invest_limit_Bus1_0) ++1 flow(Source_Bus1_0) = 0 -c_e_BusBlock_balance(Bus1_0_1)_: -+1 flow(storage_invest_limit_Bus1_0_1) -+1 flow(Source_Bus1_0_1) --1 flow(Bus1_storage_invest_limit_0_1) +c_e_BusBlock_balance(Bus1_1)_: +-1 flow(Bus1_storage_invest_limit_1) ++1 flow(storage_invest_limit_Bus1_1) ++1 flow(Source_Bus1_1) = 0 -c_e_BusBlock_balance(Bus1_1_2)_: -+1 flow(storage_invest_limit_Bus1_1_2) -+1 flow(Source_Bus1_1_2) --1 flow(Bus1_storage_invest_limit_1_2) +c_e_BusBlock_balance(Bus1_2)_: +-1 flow(Bus1_storage_invest_limit_2) ++1 flow(storage_invest_limit_Bus1_2) ++1 flow(Source_Bus1_2) = 0 -c_e_BusBlock_balance(Bus1_1_3)_: -+1 flow(storage_invest_limit_Bus1_1_3) -+1 flow(Source_Bus1_1_3) --1 flow(Bus1_storage_invest_limit_1_3) +c_e_BusBlock_balance(Bus1_3)_: +-1 flow(Bus1_storage_invest_limit_3) ++1 flow(storage_invest_limit_Bus1_3) ++1 flow(Source_Bus1_3) = 0 -c_e_BusBlock_balance(Bus1_2_4)_: -+1 flow(storage_invest_limit_Bus1_2_4) -+1 flow(Source_Bus1_2_4) --1 flow(Bus1_storage_invest_limit_2_4) +c_e_BusBlock_balance(Bus1_4)_: +-1 flow(Bus1_storage_invest_limit_4) ++1 flow(storage_invest_limit_Bus1_4) ++1 flow(Source_Bus1_4) = 0 -c_e_BusBlock_balance(Bus1_2_5)_: -+1 flow(storage_invest_limit_Bus1_2_5) -+1 flow(Source_Bus1_2_5) --1 flow(Bus1_storage_invest_limit_2_5) +c_e_BusBlock_balance(Bus1_5)_: +-1 flow(Bus1_storage_invest_limit_5) ++1 flow(storage_invest_limit_Bus1_5) ++1 flow(Source_Bus1_5) += 0 + +c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: +-1 InvestmentFlowBlock_invest(Source_Bus1_0) ++1 InvestmentFlowBlock_total(Source_Bus1_0) += 0 + +c_e_InvestmentFlowBlock_total_rule(Source_Bus1_1)_: +-1 InvestmentFlowBlock_invest(Source_Bus1_1) +-1 InvestmentFlowBlock_total(Source_Bus1_0) ++1 InvestmentFlowBlock_total(Source_Bus1_1) ++1 InvestmentFlowBlock_old(Source_Bus1_1) += 0 + +c_e_InvestmentFlowBlock_total_rule(Source_Bus1_2)_: +-1 InvestmentFlowBlock_invest(Source_Bus1_2) +-1 InvestmentFlowBlock_total(Source_Bus1_1) ++1 InvestmentFlowBlock_total(Source_Bus1_2) ++1 InvestmentFlowBlock_old(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_total_rule(storage_invest_limit_Bus1_0)_: -+1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) -1 InvestmentFlowBlock_invest(storage_invest_limit_Bus1_0) ++1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) = 0 c_e_InvestmentFlowBlock_total_rule(storage_invest_limit_Bus1_1)_: +-1 InvestmentFlowBlock_invest(storage_invest_limit_Bus1_1) -1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) +1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_1) --1 InvestmentFlowBlock_invest(storage_invest_limit_Bus1_1) +1 InvestmentFlowBlock_old(storage_invest_limit_Bus1_1) = 0 c_e_InvestmentFlowBlock_total_rule(storage_invest_limit_Bus1_2)_: +-1 InvestmentFlowBlock_invest(storage_invest_limit_Bus1_2) -1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_1) +1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_2) --1 InvestmentFlowBlock_invest(storage_invest_limit_Bus1_2) +1 InvestmentFlowBlock_old(storage_invest_limit_Bus1_2) = 0 c_e_InvestmentFlowBlock_total_rule(Bus1_storage_invest_limit_0)_: -+1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) -1 InvestmentFlowBlock_invest(Bus1_storage_invest_limit_0) ++1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) = 0 c_e_InvestmentFlowBlock_total_rule(Bus1_storage_invest_limit_1)_: +-1 InvestmentFlowBlock_invest(Bus1_storage_invest_limit_1) -1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) +1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_1) --1 InvestmentFlowBlock_invest(Bus1_storage_invest_limit_1) +1 InvestmentFlowBlock_old(Bus1_storage_invest_limit_1) = 0 c_e_InvestmentFlowBlock_total_rule(Bus1_storage_invest_limit_2)_: +-1 InvestmentFlowBlock_invest(Bus1_storage_invest_limit_2) -1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_1) +1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_2) --1 InvestmentFlowBlock_invest(Bus1_storage_invest_limit_2) +1 InvestmentFlowBlock_old(Bus1_storage_invest_limit_2) = 0 -c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: --1 InvestmentFlowBlock_invest(Source_Bus1_0) -+1 InvestmentFlowBlock_total(Source_Bus1_0) +c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_0)_: ++1 InvestmentFlowBlock_old_end(Source_Bus1_0) = 0 -c_e_InvestmentFlowBlock_total_rule(Source_Bus1_1)_: --1 InvestmentFlowBlock_invest(Source_Bus1_1) --1 InvestmentFlowBlock_total(Source_Bus1_0) -+1 InvestmentFlowBlock_total(Source_Bus1_1) -+1 InvestmentFlowBlock_old(Source_Bus1_1) +c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_1)_: ++1 InvestmentFlowBlock_old_end(Source_Bus1_1) = 0 -c_e_InvestmentFlowBlock_total_rule(Source_Bus1_2)_: --1 InvestmentFlowBlock_invest(Source_Bus1_2) --1 InvestmentFlowBlock_total(Source_Bus1_1) -+1 InvestmentFlowBlock_total(Source_Bus1_2) -+1 InvestmentFlowBlock_old(Source_Bus1_2) +c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_2)_: ++1 InvestmentFlowBlock_old_end(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_old_rule_end(storage_invest_limit_Bus1_0)_: @@ -143,16 +155,16 @@ c_e_InvestmentFlowBlock_old_rule_end(Bus1_storage_invest_limit_2)_: +1 InvestmentFlowBlock_old_end(Bus1_storage_invest_limit_2) = 0 -c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_0)_: -+1 InvestmentFlowBlock_old_end(Source_Bus1_0) +c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_0)_: ++1 InvestmentFlowBlock_old_exo(Source_Bus1_0) = 0 -c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_1)_: -+1 InvestmentFlowBlock_old_end(Source_Bus1_1) +c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_1)_: ++1 InvestmentFlowBlock_old_exo(Source_Bus1_1) = 0 -c_e_InvestmentFlowBlock_old_rule_end(Source_Bus1_2)_: -+1 InvestmentFlowBlock_old_end(Source_Bus1_2) +c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_2)_: ++1 InvestmentFlowBlock_old_exo(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_old_rule_exo(storage_invest_limit_Bus1_0)_: @@ -179,22 +191,28 @@ c_e_InvestmentFlowBlock_old_rule_exo(Bus1_storage_invest_limit_2)_: +1 InvestmentFlowBlock_old_exo(Bus1_storage_invest_limit_2) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_0)_: -+1 InvestmentFlowBlock_old_exo(Source_Bus1_0) +c_e_InvestmentFlowBlock_old_rule(Source_Bus1_0)_: ++1 InvestmentFlowBlock_old(Source_Bus1_0) +-1 InvestmentFlowBlock_old_end(Source_Bus1_0) +-1 InvestmentFlowBlock_old_exo(Source_Bus1_0) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_1)_: -+1 InvestmentFlowBlock_old_exo(Source_Bus1_1) +c_e_InvestmentFlowBlock_old_rule(Source_Bus1_1)_: ++1 InvestmentFlowBlock_old(Source_Bus1_1) +-1 InvestmentFlowBlock_old_end(Source_Bus1_1) +-1 InvestmentFlowBlock_old_exo(Source_Bus1_1) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_2)_: -+1 InvestmentFlowBlock_old_exo(Source_Bus1_2) +c_e_InvestmentFlowBlock_old_rule(Source_Bus1_2)_: ++1 InvestmentFlowBlock_old(Source_Bus1_2) +-1 InvestmentFlowBlock_old_end(Source_Bus1_2) +-1 InvestmentFlowBlock_old_exo(Source_Bus1_2) = 0 c_e_InvestmentFlowBlock_old_rule(storage_invest_limit_Bus1_0)_: ++1 InvestmentFlowBlock_old(storage_invest_limit_Bus1_0) -1 InvestmentFlowBlock_old_end(storage_invest_limit_Bus1_0) -1 InvestmentFlowBlock_old_exo(storage_invest_limit_Bus1_0) -+1 InvestmentFlowBlock_old(storage_invest_limit_Bus1_0) = 0 c_e_InvestmentFlowBlock_old_rule(storage_invest_limit_Bus1_1)_: @@ -210,9 +228,9 @@ c_e_InvestmentFlowBlock_old_rule(storage_invest_limit_Bus1_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(Bus1_storage_invest_limit_0)_: ++1 InvestmentFlowBlock_old(Bus1_storage_invest_limit_0) -1 InvestmentFlowBlock_old_end(Bus1_storage_invest_limit_0) -1 InvestmentFlowBlock_old_exo(Bus1_storage_invest_limit_0) -+1 InvestmentFlowBlock_old(Bus1_storage_invest_limit_0) = 0 c_e_InvestmentFlowBlock_old_rule(Bus1_storage_invest_limit_1)_: @@ -227,114 +245,96 @@ c_e_InvestmentFlowBlock_old_rule(Bus1_storage_invest_limit_2)_: -1 InvestmentFlowBlock_old_exo(Bus1_storage_invest_limit_2) = 0 -c_e_InvestmentFlowBlock_old_rule(Source_Bus1_0)_: --1 InvestmentFlowBlock_old_end(Source_Bus1_0) --1 InvestmentFlowBlock_old_exo(Source_Bus1_0) -+1 InvestmentFlowBlock_old(Source_Bus1_0) -= 0 +c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: ++1 flow(Source_Bus1_0) +-1 InvestmentFlowBlock_total(Source_Bus1_0) +<= 0 -c_e_InvestmentFlowBlock_old_rule(Source_Bus1_1)_: -+1 InvestmentFlowBlock_old(Source_Bus1_1) --1 InvestmentFlowBlock_old_end(Source_Bus1_1) --1 InvestmentFlowBlock_old_exo(Source_Bus1_1) -= 0 +c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: ++1 flow(Source_Bus1_1) +-1 InvestmentFlowBlock_total(Source_Bus1_0) +<= 0 -c_e_InvestmentFlowBlock_old_rule(Source_Bus1_2)_: -+1 InvestmentFlowBlock_old(Source_Bus1_2) --1 InvestmentFlowBlock_old_end(Source_Bus1_2) --1 InvestmentFlowBlock_old_exo(Source_Bus1_2) -= 0 +c_u_InvestmentFlowBlock_max(Source_Bus1_1_2)_: ++1 flow(Source_Bus1_2) +-1 InvestmentFlowBlock_total(Source_Bus1_1) +<= 0 + +c_u_InvestmentFlowBlock_max(Source_Bus1_1_3)_: ++1 flow(Source_Bus1_3) +-1 InvestmentFlowBlock_total(Source_Bus1_1) +<= 0 + +c_u_InvestmentFlowBlock_max(Source_Bus1_2_4)_: ++1 flow(Source_Bus1_4) +-1 InvestmentFlowBlock_total(Source_Bus1_2) +<= 0 + +c_u_InvestmentFlowBlock_max(Source_Bus1_2_5)_: ++1 flow(Source_Bus1_5) +-1 InvestmentFlowBlock_total(Source_Bus1_2) +<= 0 c_u_InvestmentFlowBlock_max(storage_invest_limit_Bus1_0_0)_: -+1 flow(storage_invest_limit_Bus1_0_0) ++1 flow(storage_invest_limit_Bus1_0) -1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(storage_invest_limit_Bus1_0_1)_: -+1 flow(storage_invest_limit_Bus1_0_1) ++1 flow(storage_invest_limit_Bus1_1) -1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(storage_invest_limit_Bus1_1_2)_: -+1 flow(storage_invest_limit_Bus1_1_2) ++1 flow(storage_invest_limit_Bus1_2) -1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_1) <= 0 c_u_InvestmentFlowBlock_max(storage_invest_limit_Bus1_1_3)_: -+1 flow(storage_invest_limit_Bus1_1_3) ++1 flow(storage_invest_limit_Bus1_3) -1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_1) <= 0 c_u_InvestmentFlowBlock_max(storage_invest_limit_Bus1_2_4)_: -+1 flow(storage_invest_limit_Bus1_2_4) ++1 flow(storage_invest_limit_Bus1_4) -1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_2) <= 0 c_u_InvestmentFlowBlock_max(storage_invest_limit_Bus1_2_5)_: -+1 flow(storage_invest_limit_Bus1_2_5) ++1 flow(storage_invest_limit_Bus1_5) -1 InvestmentFlowBlock_total(storage_invest_limit_Bus1_2) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_0_0)_: -+1 flow(Bus1_storage_invest_limit_0_0) ++1 flow(Bus1_storage_invest_limit_0) -1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_0_1)_: -+1 flow(Bus1_storage_invest_limit_0_1) ++1 flow(Bus1_storage_invest_limit_1) -1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_1_2)_: -+1 flow(Bus1_storage_invest_limit_1_2) ++1 flow(Bus1_storage_invest_limit_2) -1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_1) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_1_3)_: -+1 flow(Bus1_storage_invest_limit_1_3) ++1 flow(Bus1_storage_invest_limit_3) -1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_1) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_2_4)_: -+1 flow(Bus1_storage_invest_limit_2_4) ++1 flow(Bus1_storage_invest_limit_4) -1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_2) <= 0 c_u_InvestmentFlowBlock_max(Bus1_storage_invest_limit_2_5)_: -+1 flow(Bus1_storage_invest_limit_2_5) ++1 flow(Bus1_storage_invest_limit_5) -1 InvestmentFlowBlock_total(Bus1_storage_invest_limit_2) <= 0 -c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) --1 InvestmentFlowBlock_total(Source_Bus1_0) -<= 0 - -c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) --1 InvestmentFlowBlock_total(Source_Bus1_0) -<= 0 - -c_u_InvestmentFlowBlock_max(Source_Bus1_1_2)_: -+1 flow(Source_Bus1_1_2) --1 InvestmentFlowBlock_total(Source_Bus1_1) -<= 0 - -c_u_InvestmentFlowBlock_max(Source_Bus1_1_3)_: -+1 flow(Source_Bus1_1_3) --1 InvestmentFlowBlock_total(Source_Bus1_1) -<= 0 - -c_u_InvestmentFlowBlock_max(Source_Bus1_2_4)_: -+1 flow(Source_Bus1_2_4) --1 InvestmentFlowBlock_total(Source_Bus1_2) -<= 0 - -c_u_InvestmentFlowBlock_max(Source_Bus1_2_5)_: -+1 flow(Source_Bus1_2_5) --1 InvestmentFlowBlock_total(Source_Bus1_2) -<= 0 - c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_invest_limit_0)_: -1 GenericInvestmentStorageBlock_invest(storage_invest_limit_0) +1 GenericInvestmentStorageBlock_total(storage_invest_limit_0) @@ -379,9 +379,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage_invest_limit_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_invest_limit_0)_: ++1 GenericInvestmentStorageBlock_old(storage_invest_limit_0) -1 GenericInvestmentStorageBlock_old_end(storage_invest_limit_0) -1 GenericInvestmentStorageBlock_old_exo(storage_invest_limit_0) -+1 GenericInvestmentStorageBlock_old(storage_invest_limit_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_invest_limit_1)_: @@ -401,36 +401,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage_invest_limit_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage_invest_limit_0_1)_: -+1 flow(storage_invest_limit_Bus1_0_1) --1 flow(Bus1_storage_invest_limit_0_1) +-1 flow(Bus1_storage_invest_limit_1) ++1 flow(storage_invest_limit_Bus1_1) -1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_0) +1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_invest_limit_1_2)_: -+1 flow(storage_invest_limit_Bus1_1_2) --1 flow(Bus1_storage_invest_limit_1_2) +-1 flow(Bus1_storage_invest_limit_2) ++1 flow(storage_invest_limit_Bus1_2) -1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_1) +1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_invest_limit_1_3)_: -+1 flow(storage_invest_limit_Bus1_1_3) --1 flow(Bus1_storage_invest_limit_1_3) +-1 flow(Bus1_storage_invest_limit_3) ++1 flow(storage_invest_limit_Bus1_3) -1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_2) +1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_invest_limit_2_4)_: -+1 flow(storage_invest_limit_Bus1_2_4) --1 flow(Bus1_storage_invest_limit_2_4) +-1 flow(Bus1_storage_invest_limit_4) ++1 flow(storage_invest_limit_Bus1_4) -1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_3) +1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_invest_limit_2_5)_: -+1 flow(storage_invest_limit_Bus1_2_5) --1 flow(Bus1_storage_invest_limit_2_5) +-1 flow(Bus1_storage_invest_limit_5) ++1 flow(storage_invest_limit_Bus1_5) -1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_4) +1 GenericInvestmentStorageBlock_storage_content(storage_invest_limit_5) = 0 @@ -499,73 +499,74 @@ bounds 0 <= InvestmentFlowBlock_invest(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_invest(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_invest(Source_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_invest_limit_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_invest_limit_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_invest_limit_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_storage_invest_limit_0) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_storage_invest_limit_1) <= +inf + 0 <= InvestmentFlowBlock_invest(Bus1_storage_invest_limit_2) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_invest_limit_0) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_invest_limit_1) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_invest_limit_2) <= +inf - 0 <= flow(storage_invest_limit_Bus1_0_0) <= +inf - 0 <= flow(Source_Bus1_0_0) <= +inf - 0 <= flow(Bus1_storage_invest_limit_0_0) <= +inf - 0 <= flow(storage_invest_limit_Bus1_0_1) <= +inf - 0 <= flow(Source_Bus1_0_1) <= +inf - 0 <= flow(Bus1_storage_invest_limit_0_1) <= +inf - 0 <= flow(storage_invest_limit_Bus1_1_2) <= +inf - 0 <= flow(Source_Bus1_1_2) <= +inf - 0 <= flow(Bus1_storage_invest_limit_1_2) <= +inf - 0 <= flow(storage_invest_limit_Bus1_1_3) <= +inf - 0 <= flow(Source_Bus1_1_3) <= +inf - 0 <= flow(Bus1_storage_invest_limit_1_3) <= +inf - 0 <= flow(storage_invest_limit_Bus1_2_4) <= +inf - 0 <= flow(Source_Bus1_2_4) <= +inf - 0 <= flow(Bus1_storage_invest_limit_2_4) <= +inf - 0 <= flow(storage_invest_limit_Bus1_2_5) <= +inf - 0 <= flow(Source_Bus1_2_5) <= +inf - 0 <= flow(Bus1_storage_invest_limit_2_5) <= +inf + 0 <= flow(Bus1_storage_invest_limit_0) <= +inf + 0 <= flow(Bus1_storage_invest_limit_1) <= +inf + 0 <= flow(Bus1_storage_invest_limit_2) <= +inf + 0 <= flow(Bus1_storage_invest_limit_3) <= +inf + 0 <= flow(Bus1_storage_invest_limit_4) <= +inf + 0 <= flow(Bus1_storage_invest_limit_5) <= +inf + 0 <= flow(storage_invest_limit_Bus1_0) <= +inf + 0 <= flow(storage_invest_limit_Bus1_1) <= +inf + 0 <= flow(storage_invest_limit_Bus1_2) <= +inf + 0 <= flow(storage_invest_limit_Bus1_3) <= +inf + 0 <= flow(storage_invest_limit_Bus1_4) <= +inf + 0 <= flow(storage_invest_limit_Bus1_5) <= +inf + 0 <= flow(Source_Bus1_0) <= +inf + 0 <= flow(Source_Bus1_1) <= +inf + 0 <= flow(Source_Bus1_2) <= +inf + 0 <= flow(Source_Bus1_3) <= +inf + 0 <= flow(Source_Bus1_4) <= +inf + 0 <= flow(Source_Bus1_5) <= +inf + 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_total(Source_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_total(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_total(storage_invest_limit_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_invest_limit_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_total(storage_invest_limit_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_invest_limit_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old(storage_invest_limit_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_total(storage_invest_limit_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_invest_limit_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage_invest_limit_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_total(Bus1_storage_invest_limit_0) <= +inf - 0 <= InvestmentFlowBlock_invest(Bus1_storage_invest_limit_0) <= +inf 0 <= InvestmentFlowBlock_total(Bus1_storage_invest_limit_1) <= +inf - 0 <= InvestmentFlowBlock_invest(Bus1_storage_invest_limit_1) <= +inf - 0 <= InvestmentFlowBlock_old(Bus1_storage_invest_limit_1) <= +inf 0 <= InvestmentFlowBlock_total(Bus1_storage_invest_limit_2) <= +inf - 0 <= InvestmentFlowBlock_invest(Bus1_storage_invest_limit_2) <= +inf - 0 <= InvestmentFlowBlock_old(Bus1_storage_invest_limit_2) <= +inf - 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_total(Source_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_old(Source_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_total(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_old(Source_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old(storage_invest_limit_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old(storage_invest_limit_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old(storage_invest_limit_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old(Bus1_storage_invest_limit_0) <= +inf + 0 <= InvestmentFlowBlock_old(Bus1_storage_invest_limit_1) <= +inf + 0 <= InvestmentFlowBlock_old(Bus1_storage_invest_limit_2) <= +inf + 0 <= InvestmentFlowBlock_old_end(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old_end(Source_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old_end(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_old_end(storage_invest_limit_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_old_end(storage_invest_limit_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_old_end(storage_invest_limit_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_old_end(Bus1_storage_invest_limit_0) <= +inf 0 <= InvestmentFlowBlock_old_end(Bus1_storage_invest_limit_1) <= +inf 0 <= InvestmentFlowBlock_old_end(Bus1_storage_invest_limit_2) <= +inf - 0 <= InvestmentFlowBlock_old_end(Source_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_old_end(Source_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old_end(Source_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_invest_limit_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_invest_limit_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_invest_limit_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_old_exo(Bus1_storage_invest_limit_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(Bus1_storage_invest_limit_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(Bus1_storage_invest_limit_2) <= +inf - 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage_invest_limit_Bus1_0) <= +inf - 0 <= InvestmentFlowBlock_old(Bus1_storage_invest_limit_0) <= +inf - 0 <= InvestmentFlowBlock_old(Source_Bus1_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_invest_limit_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_invest_limit_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_invest_limit_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_invest_limit_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_invest_limit_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_invest_limit_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage_invest_limit_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_invest_limit_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_invest_limit_1) <= +inf @@ -573,7 +574,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage_invest_limit_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_invest_limit_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_invest_limit_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_invest_limit_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_invest_limit_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_invest_limit_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_invest_limit_2) <= +inf diff --git a/tests/lp_files/periodical_investment_limit_with_dsm_DIW.lp b/tests/lp_files/periodical_investment_limit_with_dsm_DIW.lp index 1fe4aaa5c..d54ad5394 100644 --- a/tests/lp_files/periodical_investment_limit_with_dsm_DIW.lp +++ b/tests/lp_files/periodical_investment_limit_with_dsm_DIW.lp @@ -6,47 +6,47 @@ objective: +5.432444590842506 InvestmentFlowBlock_invest(Source_Bus1_1) +2.6893290053675805 InvestmentFlowBlock_invest(Source_Bus1_2) +0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_2) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_3) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_4) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_5) +0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_3) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_4) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_5) +0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_0) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_3) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_4) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_5) +0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_0) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_1) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_2) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_3) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_4) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_5) +0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_0) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_1) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_2) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_3) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_4) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_5) +0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_0) ++0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_1) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_2) ++0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_3) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_4) ++0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_5) +0.5 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) +0.5 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_1) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_1) -+0.5 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_1) +0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_2) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_2) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_2) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_2) +0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_3) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_3) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_3) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_3) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_3) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_3) -+0.49019607843137253 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_3) +0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_4) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_4) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_4) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_4) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_4) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_4) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_4) +0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_5) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_5) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_5) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_5) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_5) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_5) -+0.48058439061899266 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_5) +99.99999999999999 SinkDSMDIWInvestmentBlock_invest(sink_dsm_DIW_0) +98.03921568627449 SinkDSMDIWInvestmentBlock_invest(sink_dsm_DIW_1) +48.534265191225046 SinkDSMDIWInvestmentBlock_invest(sink_dsm_DIW_2) @@ -68,34 +68,34 @@ c_u_investment_limit_per_period(2)_: +48.534265191225046 SinkDSMDIWInvestmentBlock_invest(sink_dsm_DIW_2) <= 200 -c_e_BusBlock_balance(Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) --1 flow(Bus1_sink_dsm_DIW_0_0) +c_e_BusBlock_balance(Bus1_0)_: +-1 flow(Bus1_sink_dsm_DIW_0) ++1 flow(Source_Bus1_0) = 0 -c_e_BusBlock_balance(Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) --1 flow(Bus1_sink_dsm_DIW_0_1) +c_e_BusBlock_balance(Bus1_1)_: +-1 flow(Bus1_sink_dsm_DIW_1) ++1 flow(Source_Bus1_1) = 0 -c_e_BusBlock_balance(Bus1_1_2)_: -+1 flow(Source_Bus1_1_2) --1 flow(Bus1_sink_dsm_DIW_1_2) +c_e_BusBlock_balance(Bus1_2)_: +-1 flow(Bus1_sink_dsm_DIW_2) ++1 flow(Source_Bus1_2) = 0 -c_e_BusBlock_balance(Bus1_1_3)_: -+1 flow(Source_Bus1_1_3) --1 flow(Bus1_sink_dsm_DIW_1_3) +c_e_BusBlock_balance(Bus1_3)_: +-1 flow(Bus1_sink_dsm_DIW_3) ++1 flow(Source_Bus1_3) = 0 -c_e_BusBlock_balance(Bus1_2_4)_: -+1 flow(Source_Bus1_2_4) --1 flow(Bus1_sink_dsm_DIW_2_4) +c_e_BusBlock_balance(Bus1_4)_: +-1 flow(Bus1_sink_dsm_DIW_4) ++1 flow(Source_Bus1_4) = 0 -c_e_BusBlock_balance(Bus1_2_5)_: -+1 flow(Source_Bus1_2_5) --1 flow(Bus1_sink_dsm_DIW_2_5) +c_e_BusBlock_balance(Bus1_5)_: +-1 flow(Bus1_sink_dsm_DIW_5) ++1 flow(Source_Bus1_5) = 0 c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: @@ -142,9 +142,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(Source_Bus1_0)_: ++1 InvestmentFlowBlock_old(Source_Bus1_0) -1 InvestmentFlowBlock_old_end(Source_Bus1_0) -1 InvestmentFlowBlock_old_exo(Source_Bus1_0) -+1 InvestmentFlowBlock_old(Source_Bus1_0) = 0 c_e_InvestmentFlowBlock_old_rule(Source_Bus1_1)_: @@ -160,32 +160,32 @@ c_e_InvestmentFlowBlock_old_rule(Source_Bus1_2)_: = 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) ++1 flow(Source_Bus1_0) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) ++1 flow(Source_Bus1_1) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_1_2)_: -+1 flow(Source_Bus1_1_2) ++1 flow(Source_Bus1_2) -1 InvestmentFlowBlock_total(Source_Bus1_1) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_1_3)_: -+1 flow(Source_Bus1_1_3) ++1 flow(Source_Bus1_3) -1 InvestmentFlowBlock_total(Source_Bus1_1) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_2_4)_: -+1 flow(Source_Bus1_2_4) ++1 flow(Source_Bus1_4) -1 InvestmentFlowBlock_total(Source_Bus1_2) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_2_5)_: -+1 flow(Source_Bus1_2_5) ++1 flow(Source_Bus1_5) -1 InvestmentFlowBlock_total(Source_Bus1_2) <= 0 @@ -234,9 +234,9 @@ c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule_exo(sink_dsm_DIW_2)_: = 0 c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule(sink_dsm_DIW_0)_: ++1 SinkDSMDIWInvestmentBlock_old(sink_dsm_DIW_0) -1 SinkDSMDIWInvestmentBlock_old_end(sink_dsm_DIW_0) -1 SinkDSMDIWInvestmentBlock_old_exo(sink_dsm_DIW_0) -+1 SinkDSMDIWInvestmentBlock_old(sink_dsm_DIW_0) = 0 c_e_SinkDSMDIWInvestmentBlock_old_dsm_rule(sink_dsm_DIW_1)_: @@ -278,93 +278,93 @@ c_e_SinkDSMDIWInvestmentBlock_shift_shed_vars(sink_dsm_DIW_5)_: c_e_SinkDSMDIWInvestmentBlock_input_output_relation(sink_dsm_DIW_0_0)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) --1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) -+1 flow(Bus1_sink_dsm_DIW_0_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) +-1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) ++1 flow(Bus1_sink_dsm_DIW_0) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(sink_dsm_DIW_0_1)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) -+1 flow(Bus1_sink_dsm_DIW_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_1) +-1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) ++1 flow(Bus1_sink_dsm_DIW_1) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(sink_dsm_DIW_1_2)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_2) -+1 flow(Bus1_sink_dsm_DIW_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_2) +-1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) ++1 flow(Bus1_sink_dsm_DIW_2) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(sink_dsm_DIW_1_3)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_3) -+1 flow(Bus1_sink_dsm_DIW_1_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_3) +-1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_3) ++1 flow(Bus1_sink_dsm_DIW_3) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(sink_dsm_DIW_2_4)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_4) -+1 flow(Bus1_sink_dsm_DIW_2_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_4) +-1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_4) ++1 flow(Bus1_sink_dsm_DIW_4) = 1 c_e_SinkDSMDIWInvestmentBlock_input_output_relation(sink_dsm_DIW_2_5)_: --1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_5) -+1 flow(Bus1_sink_dsm_DIW_2_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_5) +-1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_5) ++1 flow(Bus1_sink_dsm_DIW_5) = 1 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(sink_dsm_DIW_0)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(sink_dsm_DIW_1)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(sink_dsm_DIW_2)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_3) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(sink_dsm_DIW_3)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_2) -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_3) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_3) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_4) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_3) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(sink_dsm_DIW_4)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_3) -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_4) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_4) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_5) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_4) = 0 c_e_SinkDSMDIWInvestmentBlock_dsm_updo_constraint(sink_dsm_DIW_5)_: -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_4) -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_5) -1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_5) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_5) = 0 c_u_SinkDSMDIWInvestmentBlock_dsm_up_constraint(sink_dsm_DIW_0_0)_: @@ -400,99 +400,99 @@ c_u_SinkDSMDIWInvestmentBlock_dsm_up_constraint(sink_dsm_DIW_2_5)_: c_u_SinkDSMDIWInvestmentBlock_dsm_do_constraint(sink_dsm_DIW_0_0)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_dsm_do_constraint(sink_dsm_DIW_0_1)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_1) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_dsm_do_constraint(sink_dsm_DIW_1_2)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_2) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_2) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_1) <= 0 c_u_SinkDSMDIWInvestmentBlock_dsm_do_constraint(sink_dsm_DIW_1_3)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_3) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_3) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_1) <= 0 c_u_SinkDSMDIWInvestmentBlock_dsm_do_constraint(sink_dsm_DIW_2_4)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_4) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_4) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_2) <= 0 c_u_SinkDSMDIWInvestmentBlock_dsm_do_constraint(sink_dsm_DIW_2_5)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_5) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_5) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_2) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(sink_dsm_DIW_0_0)_: +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) ++1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) +1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) -0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) -+1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(sink_dsm_DIW_0_1)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_1) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(sink_dsm_DIW_1_2)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_2) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_2) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_1) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(sink_dsm_DIW_1_3)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_3) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_3) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_1) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_3) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_3) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_1) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(sink_dsm_DIW_2_4)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_4) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_4) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_4) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_4) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_2) <= 0 c_u_SinkDSMDIWInvestmentBlock_C2_constraint(sink_dsm_DIW_2_5)_: -+1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_5) +1 SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_5) --0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_2) +1 SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_5) ++1 SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_5) +-0.5 SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_2) <= 0 c_u_SinkDSMDIWInvestmentBlock_overall_dsm_maximum(sink_dsm_DIW_0)_: @@ -516,66 +516,73 @@ bounds 0 <= InvestmentFlowBlock_invest(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_invest(Source_Bus1_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_5) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_1) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_3) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_4) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_5) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_3) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_4) <= +inf 0 <= SinkDSMDIWInvestmentBlock_dsm_up(sink_dsm_DIW_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_0_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_1_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_2_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_3_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_4_5) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shift(sink_dsm_DIW_5_5) <= +inf 33 <= SinkDSMDIWInvestmentBlock_invest(sink_dsm_DIW_0) <= 100 33 <= SinkDSMDIWInvestmentBlock_invest(sink_dsm_DIW_1) <= 100 33 <= SinkDSMDIWInvestmentBlock_invest(sink_dsm_DIW_2) <= 100 - 0 <= flow(Source_Bus1_0_0) <= +inf - 0 <= flow(Bus1_sink_dsm_DIW_0_0) <= +inf - 0 <= flow(Source_Bus1_0_1) <= +inf - 0 <= flow(Bus1_sink_dsm_DIW_0_1) <= +inf - 0 <= flow(Source_Bus1_1_2) <= +inf - 0 <= flow(Bus1_sink_dsm_DIW_1_2) <= +inf - 0 <= flow(Source_Bus1_1_3) <= +inf - 0 <= flow(Bus1_sink_dsm_DIW_1_3) <= +inf - 0 <= flow(Source_Bus1_2_4) <= +inf - 0 <= flow(Bus1_sink_dsm_DIW_2_4) <= +inf - 0 <= flow(Source_Bus1_2_5) <= +inf - 0 <= flow(Bus1_sink_dsm_DIW_2_5) <= +inf + 0 <= flow(Bus1_sink_dsm_DIW_0) <= +inf + 0 <= flow(Bus1_sink_dsm_DIW_1) <= +inf + 0 <= flow(Bus1_sink_dsm_DIW_2) <= +inf + 0 <= flow(Bus1_sink_dsm_DIW_3) <= +inf + 0 <= flow(Bus1_sink_dsm_DIW_4) <= +inf + 0 <= flow(Bus1_sink_dsm_DIW_5) <= +inf + 0 <= flow(Source_Bus1_0) <= +inf + 0 <= flow(Source_Bus1_1) <= +inf + 0 <= flow(Source_Bus1_2) <= +inf + 0 <= flow(Source_Bus1_3) <= +inf + 0 <= flow(Source_Bus1_4) <= +inf + 0 <= flow(Source_Bus1_5) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_old(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_old_end(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_old_end(Source_Bus1_1) <= +inf @@ -583,11 +590,11 @@ bounds 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_old(Source_Bus1_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(sink_dsm_DIW_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_total(sink_dsm_DIW_2) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(sink_dsm_DIW_0) <= +inf + 0 <= SinkDSMDIWInvestmentBlock_old(sink_dsm_DIW_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old(sink_dsm_DIW_2) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_end(sink_dsm_DIW_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_end(sink_dsm_DIW_1) <= +inf @@ -595,11 +602,4 @@ bounds 0 <= SinkDSMDIWInvestmentBlock_old_exo(sink_dsm_DIW_0) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_exo(sink_dsm_DIW_1) <= +inf 0 <= SinkDSMDIWInvestmentBlock_old_exo(sink_dsm_DIW_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_old(sink_dsm_DIW_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_0) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_1) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_2) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_3) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_4) <= +inf - 0 <= SinkDSMDIWInvestmentBlock_dsm_do_shed(sink_dsm_DIW_5) <= +inf end diff --git a/tests/lp_files/periodical_investment_limit_with_dsm_DLR.lp b/tests/lp_files/periodical_investment_limit_with_dsm_DLR.lp index 3d3d8a7d3..b71066c82 100644 --- a/tests/lp_files/periodical_investment_limit_with_dsm_DLR.lp +++ b/tests/lp_files/periodical_investment_limit_with_dsm_DLR.lp @@ -6,29 +6,29 @@ objective: +5.432444590842506 InvestmentFlowBlock_invest(Source_Bus1_1) +2.6893290053675805 InvestmentFlowBlock_invest(Source_Bus1_2) +0.5 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_0) ++0.5 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) ++0.49019607843137253 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) ++0.49019607843137253 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_3) ++0.48058439061899266 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_4) ++0.48058439061899266 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_5) +0.5 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_0) ++0.5 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) ++0.49019607843137253 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) ++0.49019607843137253 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_3) ++0.48058439061899266 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_4) ++0.48058439061899266 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_5) +0.5 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) -+0.5 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) +0.5 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) -+0.5 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) -+0.5 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) -+0.5 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) +0.49019607843137253 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) -+0.49019607843137253 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) -+0.49019607843137253 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) -+0.49019607843137253 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) +0.49019607843137253 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_3) -+0.49019607843137253 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_3) -+0.49019607843137253 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_3) -+0.49019607843137253 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_3) +0.48058439061899266 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_4) -+0.48058439061899266 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_4) -+0.48058439061899266 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_4) -+0.48058439061899266 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_4) +0.48058439061899266 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_5) ++0.5 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) ++0.5 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) ++0.49019607843137253 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) ++0.49019607843137253 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_3) ++0.48058439061899266 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_4) +0.48058439061899266 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_5) -+0.48058439061899266 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_5) -+0.48058439061899266 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_5) +99.99999999999999 SinkDSMDLRInvestmentBlock_invest(sink_dsm_DLR_0) +98.03921568627449 SinkDSMDLRInvestmentBlock_invest(sink_dsm_DLR_1) +48.534265191225046 SinkDSMDLRInvestmentBlock_invest(sink_dsm_DLR_2) @@ -50,34 +50,34 @@ c_u_investment_limit_per_period(2)_: +48.534265191225046 SinkDSMDLRInvestmentBlock_invest(sink_dsm_DLR_2) <= 200 -c_e_BusBlock_balance(Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) --1 flow(Bus1_sink_dsm_DLR_0_0) +c_e_BusBlock_balance(Bus1_0)_: +-1 flow(Bus1_sink_dsm_DLR_0) ++1 flow(Source_Bus1_0) = 0 -c_e_BusBlock_balance(Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) --1 flow(Bus1_sink_dsm_DLR_0_1) +c_e_BusBlock_balance(Bus1_1)_: +-1 flow(Bus1_sink_dsm_DLR_1) ++1 flow(Source_Bus1_1) = 0 -c_e_BusBlock_balance(Bus1_1_2)_: -+1 flow(Source_Bus1_1_2) --1 flow(Bus1_sink_dsm_DLR_1_2) +c_e_BusBlock_balance(Bus1_2)_: +-1 flow(Bus1_sink_dsm_DLR_2) ++1 flow(Source_Bus1_2) = 0 -c_e_BusBlock_balance(Bus1_1_3)_: -+1 flow(Source_Bus1_1_3) --1 flow(Bus1_sink_dsm_DLR_1_3) +c_e_BusBlock_balance(Bus1_3)_: +-1 flow(Bus1_sink_dsm_DLR_3) ++1 flow(Source_Bus1_3) = 0 -c_e_BusBlock_balance(Bus1_2_4)_: -+1 flow(Source_Bus1_2_4) --1 flow(Bus1_sink_dsm_DLR_2_4) +c_e_BusBlock_balance(Bus1_4)_: +-1 flow(Bus1_sink_dsm_DLR_4) ++1 flow(Source_Bus1_4) = 0 -c_e_BusBlock_balance(Bus1_2_5)_: -+1 flow(Source_Bus1_2_5) --1 flow(Bus1_sink_dsm_DLR_2_5) +c_e_BusBlock_balance(Bus1_5)_: +-1 flow(Bus1_sink_dsm_DLR_5) ++1 flow(Source_Bus1_5) = 0 c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: @@ -124,9 +124,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(Source_Bus1_0)_: ++1 InvestmentFlowBlock_old(Source_Bus1_0) -1 InvestmentFlowBlock_old_end(Source_Bus1_0) -1 InvestmentFlowBlock_old_exo(Source_Bus1_0) -+1 InvestmentFlowBlock_old(Source_Bus1_0) = 0 c_e_InvestmentFlowBlock_old_rule(Source_Bus1_1)_: @@ -142,32 +142,32 @@ c_e_InvestmentFlowBlock_old_rule(Source_Bus1_2)_: = 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) ++1 flow(Source_Bus1_0) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) ++1 flow(Source_Bus1_1) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_1_2)_: -+1 flow(Source_Bus1_1_2) ++1 flow(Source_Bus1_2) -1 InvestmentFlowBlock_total(Source_Bus1_1) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_1_3)_: -+1 flow(Source_Bus1_1_3) ++1 flow(Source_Bus1_3) -1 InvestmentFlowBlock_total(Source_Bus1_1) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_2_4)_: -+1 flow(Source_Bus1_2_4) ++1 flow(Source_Bus1_4) -1 InvestmentFlowBlock_total(Source_Bus1_2) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_2_5)_: -+1 flow(Source_Bus1_2_5) ++1 flow(Source_Bus1_5) -1 InvestmentFlowBlock_total(Source_Bus1_2) <= 0 @@ -216,9 +216,9 @@ c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule_exo(sink_dsm_DLR_2)_: = 0 c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule(sink_dsm_DLR_0)_: ++1 SinkDSMDLRInvestmentBlock_old(sink_dsm_DLR_0) -1 SinkDSMDLRInvestmentBlock_old_end(sink_dsm_DLR_0) -1 SinkDSMDLRInvestmentBlock_old_exo(sink_dsm_DLR_0) -+1 SinkDSMDLRInvestmentBlock_old(sink_dsm_DLR_0) = 0 c_e_SinkDSMDLRInvestmentBlock_old_dsm_rule(sink_dsm_DLR_1)_: @@ -260,55 +260,55 @@ c_e_SinkDSMDLRInvestmentBlock_shift_shed_vars(sink_dsm_DLR_1_5)_: c_e_SinkDSMDLRInvestmentBlock_input_output_relation(sink_dsm_DLR_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) -1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) -1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) -+1 flow(Bus1_sink_dsm_DLR_0_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) ++1 flow(Bus1_sink_dsm_DLR_0) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(sink_dsm_DLR_0_1)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) -+1 flow(Bus1_sink_dsm_DLR_0_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_1) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) ++1 flow(Bus1_sink_dsm_DLR_1) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(sink_dsm_DLR_1_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) -+1 flow(Bus1_sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_2) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) ++1 flow(Bus1_sink_dsm_DLR_2) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(sink_dsm_DLR_1_3)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_3) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_3) -+1 flow(Bus1_sink_dsm_DLR_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_3) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_3) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_3) ++1 flow(Bus1_sink_dsm_DLR_3) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(sink_dsm_DLR_2_4)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_4) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_4) -+1 flow(Bus1_sink_dsm_DLR_2_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_4) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_4) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_4) ++1 flow(Bus1_sink_dsm_DLR_4) = 1 c_e_SinkDSMDLRInvestmentBlock_input_output_relation(sink_dsm_DLR_2_5)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_5) --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_5) -+1 flow(Bus1_sink_dsm_DLR_2_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_5) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_5) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_5) ++1 flow(Bus1_sink_dsm_DLR_5) = 1 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_red(sink_dsm_DLR_1_0)_: @@ -345,28 +345,28 @@ c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(sink_dsm_DLR_1_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(sink_dsm_DLR_1_1)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(sink_dsm_DLR_1_2)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(sink_dsm_DLR_1_3)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_3) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(sink_dsm_DLR_1_4)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_4) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_3) = 0 c_e_SinkDSMDLRInvestmentBlock_capacity_balance_inc(sink_dsm_DLR_1_5)_: --1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_5) +-1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_4) = 0 c_e_SinkDSMDLRInvestmentBlock_no_comp_red(sink_dsm_DLR_1_5)_: @@ -380,43 +380,43 @@ c_e_SinkDSMDLRInvestmentBlock_no_comp_inc(sink_dsm_DLR_1_5)_: c_u_SinkDSMDLRInvestmentBlock_availability_red(sink_dsm_DLR_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_0) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_red(sink_dsm_DLR_0_1)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_1) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_red(sink_dsm_DLR_1_2)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_2) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_1) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_red(sink_dsm_DLR_1_3)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_3) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_3) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_1) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_red(sink_dsm_DLR_2_4)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_4) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_4) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_2) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_red(sink_dsm_DLR_2_5)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_5) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_5) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_2) <= 0 c_u_SinkDSMDLRInvestmentBlock_availability_inc(sink_dsm_DLR_0_0)_: @@ -461,36 +461,36 @@ c_e_SinkDSMDLRInvestmentBlock_dr_storage_red(sink_dsm_DLR_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_red(sink_dsm_DLR_1)_: --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_0) -1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_1) = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_red(sink_dsm_DLR_2)_: --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_1) -1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_2) = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_red(sink_dsm_DLR_3)_: --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_3) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_2) -1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_3) = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_red(sink_dsm_DLR_4)_: --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_4) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_3) -1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_4) = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_red(sink_dsm_DLR_5)_: --1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_5) +-1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_4) -1 SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_5) = 0 @@ -501,36 +501,36 @@ c_e_SinkDSMDLRInvestmentBlock_dr_storage_inc(sink_dsm_DLR_0)_: = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_inc(sink_dsm_DLR_1)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) -1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_0) -1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_1) = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_inc(sink_dsm_DLR_2)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) -1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_1) -1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_2) = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_inc(sink_dsm_DLR_3)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_3) -1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_3) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_2) -1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_3) = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_inc(sink_dsm_DLR_4)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_4) -1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_4) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_3) -1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_4) = 0 c_e_SinkDSMDLRInvestmentBlock_dr_storage_inc(sink_dsm_DLR_5)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_5) -1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_5) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_4) -1 SinkDSMDLRInvestmentBlock_dsm_up_level(sink_dsm_DLR_5) = 0 @@ -598,55 +598,55 @@ c_u_SinkDSMDLRInvestmentBlock_dr_storage_limit_inc(sink_dsm_DLR_2_5)_: c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(sink_dsm_DLR_0_0)_: +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_0) ++1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) +1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) +1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) -0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) -+1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(sink_dsm_DLR_0_1)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_1) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) <= 0 c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(sink_dsm_DLR_1_2)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_2) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_1) <= 0 c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(sink_dsm_DLR_1_3)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_3) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_3) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_3) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_3) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_1) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_3) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_3) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_3) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_1) <= 0 c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(sink_dsm_DLR_2_4)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_4) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_4) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_4) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_4) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_4) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_4) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_4) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_2) <= 0 c_u_SinkDSMDLRInvestmentBlock_dr_logical_constraint(sink_dsm_DLR_2_5)_: -+1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_5) -+1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_5) +1 SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_5) +1 SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_5) --0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_2) +1 SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_5) ++1 SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_5) ++1 SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_5) +-0.5 SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_2) <= 0 c_u_SinkDSMDLRInvestmentBlock_overall_dsm_maximum(sink_dsm_DLR_0)_: @@ -670,48 +670,55 @@ bounds 0 <= InvestmentFlowBlock_invest(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_invest(Source_Bus1_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_5) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_4) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_5) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_3) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_up(sink_dsm_DLR_1_5) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_1) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_3) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_4) <= +inf 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_do(sink_dsm_DLR_1_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shift(sink_dsm_DLR_1_5) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_balance_dsm_up(sink_dsm_DLR_1_5) <= +inf 33 <= SinkDSMDLRInvestmentBlock_invest(sink_dsm_DLR_0) <= 100 33 <= SinkDSMDLRInvestmentBlock_invest(sink_dsm_DLR_1) <= 100 33 <= SinkDSMDLRInvestmentBlock_invest(sink_dsm_DLR_2) <= 100 - 0 <= flow(Source_Bus1_0_0) <= +inf - 0 <= flow(Bus1_sink_dsm_DLR_0_0) <= +inf - 0 <= flow(Source_Bus1_0_1) <= +inf - 0 <= flow(Bus1_sink_dsm_DLR_0_1) <= +inf - 0 <= flow(Source_Bus1_1_2) <= +inf - 0 <= flow(Bus1_sink_dsm_DLR_1_2) <= +inf - 0 <= flow(Source_Bus1_1_3) <= +inf - 0 <= flow(Bus1_sink_dsm_DLR_1_3) <= +inf - 0 <= flow(Source_Bus1_2_4) <= +inf - 0 <= flow(Bus1_sink_dsm_DLR_2_4) <= +inf - 0 <= flow(Source_Bus1_2_5) <= +inf - 0 <= flow(Bus1_sink_dsm_DLR_2_5) <= +inf + 0 <= flow(Bus1_sink_dsm_DLR_0) <= +inf + 0 <= flow(Bus1_sink_dsm_DLR_1) <= +inf + 0 <= flow(Bus1_sink_dsm_DLR_2) <= +inf + 0 <= flow(Bus1_sink_dsm_DLR_3) <= +inf + 0 <= flow(Bus1_sink_dsm_DLR_4) <= +inf + 0 <= flow(Bus1_sink_dsm_DLR_5) <= +inf + 0 <= flow(Source_Bus1_0) <= +inf + 0 <= flow(Source_Bus1_1) <= +inf + 0 <= flow(Source_Bus1_2) <= +inf + 0 <= flow(Source_Bus1_3) <= +inf + 0 <= flow(Source_Bus1_4) <= +inf + 0 <= flow(Source_Bus1_5) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_old(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_old_end(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_old_end(Source_Bus1_1) <= +inf @@ -719,11 +726,11 @@ bounds 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_old(Source_Bus1_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(sink_dsm_DLR_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_total(sink_dsm_DLR_2) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(sink_dsm_DLR_0) <= +inf + 0 <= SinkDSMDLRInvestmentBlock_old(sink_dsm_DLR_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old(sink_dsm_DLR_2) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_end(sink_dsm_DLR_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_end(sink_dsm_DLR_1) <= +inf @@ -731,13 +738,6 @@ bounds 0 <= SinkDSMDLRInvestmentBlock_old_exo(sink_dsm_DLR_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_exo(sink_dsm_DLR_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_old_exo(sink_dsm_DLR_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_old(sink_dsm_DLR_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_0) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_1) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_2) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_3) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_4) <= +inf - 0 <= SinkDSMDLRInvestmentBlock_dsm_do_shed(sink_dsm_DLR_5) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_0) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_1) <= +inf 0 <= SinkDSMDLRInvestmentBlock_dsm_do_level(sink_dsm_DLR_2) <= +inf diff --git a/tests/lp_files/periodical_investment_limit_with_dsm_oemof.lp b/tests/lp_files/periodical_investment_limit_with_dsm_oemof.lp index 342026442..1d75b870a 100644 --- a/tests/lp_files/periodical_investment_limit_with_dsm_oemof.lp +++ b/tests/lp_files/periodical_investment_limit_with_dsm_oemof.lp @@ -6,17 +6,17 @@ objective: +5.432444590842506 InvestmentFlowBlock_invest(Source_Bus1_1) +2.6893290053675805 InvestmentFlowBlock_invest(Source_Bus1_2) +0.5 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_0) ++0.5 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) ++0.49019607843137253 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_2) ++0.49019607843137253 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_3) ++0.48058439061899266 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_4) ++0.48058439061899266 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_5) +0.5 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_0) +0.5 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_1) -+0.5 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) +0.49019607843137253 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_2) -+0.49019607843137253 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_2) +0.49019607843137253 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_3) -+0.49019607843137253 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_3) +0.48058439061899266 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_4) -+0.48058439061899266 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_4) +0.48058439061899266 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_5) -+0.48058439061899266 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_5) +99.99999999999999 SinkDSMOemofInvestmentBlock_invest(sink_dsm_oemof_0) +98.03921568627449 SinkDSMOemofInvestmentBlock_invest(sink_dsm_oemof_1) +48.534265191225046 SinkDSMOemofInvestmentBlock_invest(sink_dsm_oemof_2) @@ -38,34 +38,34 @@ c_u_investment_limit_per_period(2)_: +48.534265191225046 SinkDSMOemofInvestmentBlock_invest(sink_dsm_oemof_2) <= 200 -c_e_BusBlock_balance(Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) --1 flow(Bus1_sink_dsm_oemof_0_0) +c_e_BusBlock_balance(Bus1_0)_: +-1 flow(Bus1_sink_dsm_oemof_0) ++1 flow(Source_Bus1_0) = 0 -c_e_BusBlock_balance(Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) --1 flow(Bus1_sink_dsm_oemof_0_1) +c_e_BusBlock_balance(Bus1_1)_: +-1 flow(Bus1_sink_dsm_oemof_1) ++1 flow(Source_Bus1_1) = 0 -c_e_BusBlock_balance(Bus1_1_2)_: -+1 flow(Source_Bus1_1_2) --1 flow(Bus1_sink_dsm_oemof_1_2) +c_e_BusBlock_balance(Bus1_2)_: +-1 flow(Bus1_sink_dsm_oemof_2) ++1 flow(Source_Bus1_2) = 0 -c_e_BusBlock_balance(Bus1_1_3)_: -+1 flow(Source_Bus1_1_3) --1 flow(Bus1_sink_dsm_oemof_1_3) +c_e_BusBlock_balance(Bus1_3)_: +-1 flow(Bus1_sink_dsm_oemof_3) ++1 flow(Source_Bus1_3) = 0 -c_e_BusBlock_balance(Bus1_2_4)_: -+1 flow(Source_Bus1_2_4) --1 flow(Bus1_sink_dsm_oemof_2_4) +c_e_BusBlock_balance(Bus1_4)_: +-1 flow(Bus1_sink_dsm_oemof_4) ++1 flow(Source_Bus1_4) = 0 -c_e_BusBlock_balance(Bus1_2_5)_: -+1 flow(Source_Bus1_2_5) --1 flow(Bus1_sink_dsm_oemof_2_5) +c_e_BusBlock_balance(Bus1_5)_: +-1 flow(Bus1_sink_dsm_oemof_5) ++1 flow(Source_Bus1_5) = 0 c_e_InvestmentFlowBlock_total_rule(Source_Bus1_0)_: @@ -112,9 +112,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(Source_Bus1_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(Source_Bus1_0)_: ++1 InvestmentFlowBlock_old(Source_Bus1_0) -1 InvestmentFlowBlock_old_end(Source_Bus1_0) -1 InvestmentFlowBlock_old_exo(Source_Bus1_0) -+1 InvestmentFlowBlock_old(Source_Bus1_0) = 0 c_e_InvestmentFlowBlock_old_rule(Source_Bus1_1)_: @@ -130,32 +130,32 @@ c_e_InvestmentFlowBlock_old_rule(Source_Bus1_2)_: = 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_0)_: -+1 flow(Source_Bus1_0_0) ++1 flow(Source_Bus1_0) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_0_1)_: -+1 flow(Source_Bus1_0_1) ++1 flow(Source_Bus1_1) -1 InvestmentFlowBlock_total(Source_Bus1_0) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_1_2)_: -+1 flow(Source_Bus1_1_2) ++1 flow(Source_Bus1_2) -1 InvestmentFlowBlock_total(Source_Bus1_1) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_1_3)_: -+1 flow(Source_Bus1_1_3) ++1 flow(Source_Bus1_3) -1 InvestmentFlowBlock_total(Source_Bus1_1) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_2_4)_: -+1 flow(Source_Bus1_2_4) ++1 flow(Source_Bus1_4) -1 InvestmentFlowBlock_total(Source_Bus1_2) <= 0 c_u_InvestmentFlowBlock_max(Source_Bus1_2_5)_: -+1 flow(Source_Bus1_2_5) ++1 flow(Source_Bus1_5) -1 InvestmentFlowBlock_total(Source_Bus1_2) <= 0 @@ -204,9 +204,9 @@ c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule_exo(sink_dsm_oemof_2)_: = 0 c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule(sink_dsm_oemof_0)_: ++1 SinkDSMOemofInvestmentBlock_old(sink_dsm_oemof_0) -1 SinkDSMOemofInvestmentBlock_old_end(sink_dsm_oemof_0) -1 SinkDSMOemofInvestmentBlock_old_exo(sink_dsm_oemof_0) -+1 SinkDSMOemofInvestmentBlock_old(sink_dsm_oemof_0) = 0 c_e_SinkDSMOemofInvestmentBlock_old_dsm_rule(sink_dsm_oemof_1)_: @@ -248,42 +248,42 @@ c_e_SinkDSMOemofInvestmentBlock_shift_shed_vars(sink_dsm_oemof_5)_: c_e_SinkDSMOemofInvestmentBlock_input_output_relation(sink_dsm_oemof_0_0)_: +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_0) -1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_0) -+1 flow(Bus1_sink_dsm_oemof_0_0) ++1 flow(Bus1_sink_dsm_oemof_0) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_0) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(sink_dsm_oemof_0_1)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) -+1 flow(Bus1_sink_dsm_oemof_0_1) +-1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_1) ++1 flow(Bus1_sink_dsm_oemof_1) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_1) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(sink_dsm_oemof_1_2)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_2) -+1 flow(Bus1_sink_dsm_oemof_1_2) +-1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_2) ++1 flow(Bus1_sink_dsm_oemof_2) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_2) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(sink_dsm_oemof_1_3)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_3) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_3) -+1 flow(Bus1_sink_dsm_oemof_1_3) +-1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_3) ++1 flow(Bus1_sink_dsm_oemof_3) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_3) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(sink_dsm_oemof_2_4)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_4) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_4) -+1 flow(Bus1_sink_dsm_oemof_2_4) +-1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_4) ++1 flow(Bus1_sink_dsm_oemof_4) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_4) = 1 c_e_SinkDSMOemofInvestmentBlock_input_output_relation(sink_dsm_oemof_2_5)_: --1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_5) +1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_5) -+1 flow(Bus1_sink_dsm_oemof_2_5) +-1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_5) ++1 flow(Bus1_sink_dsm_oemof_5) +1 SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_5) = 1 @@ -355,23 +355,23 @@ c_u_SinkDSMOemofInvestmentBlock_dsm_down_constraint(sink_dsm_oemof_2_5)_: c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(sink_dsm_oemof_0)_: -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_0) +-1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) +1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_0) +1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_1) --1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(sink_dsm_oemof_2)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_2) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_2) -+1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_3) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_3) ++1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_2) ++1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_3) = 0 c_e_SinkDSMOemofInvestmentBlock_dsm_sum_constraint(sink_dsm_oemof_4)_: -+1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_4) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_4) -+1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_5) -1 SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_5) ++1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_4) ++1 SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_5) = 0 c_u_SinkDSMOemofInvestmentBlock_overall_dsm_maximum(sink_dsm_oemof_0)_: @@ -395,36 +395,37 @@ bounds 0 <= InvestmentFlowBlock_invest(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_invest(Source_Bus1_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_2) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_3) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_4) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_5) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_3) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_3) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_4) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_4) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_up(sink_dsm_oemof_5) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shift(sink_dsm_oemof_5) <= +inf 33 <= SinkDSMOemofInvestmentBlock_invest(sink_dsm_oemof_0) <= 100 33 <= SinkDSMOemofInvestmentBlock_invest(sink_dsm_oemof_1) <= 100 33 <= SinkDSMOemofInvestmentBlock_invest(sink_dsm_oemof_2) <= 100 - 0 <= flow(Source_Bus1_0_0) <= +inf - 0 <= flow(Bus1_sink_dsm_oemof_0_0) <= +inf - 0 <= flow(Source_Bus1_0_1) <= +inf - 0 <= flow(Bus1_sink_dsm_oemof_0_1) <= +inf - 0 <= flow(Source_Bus1_1_2) <= +inf - 0 <= flow(Bus1_sink_dsm_oemof_1_2) <= +inf - 0 <= flow(Source_Bus1_1_3) <= +inf - 0 <= flow(Bus1_sink_dsm_oemof_1_3) <= +inf - 0 <= flow(Source_Bus1_2_4) <= +inf - 0 <= flow(Bus1_sink_dsm_oemof_2_4) <= +inf - 0 <= flow(Source_Bus1_2_5) <= +inf - 0 <= flow(Bus1_sink_dsm_oemof_2_5) <= +inf + 0 <= flow(Bus1_sink_dsm_oemof_0) <= +inf + 0 <= flow(Bus1_sink_dsm_oemof_1) <= +inf + 0 <= flow(Bus1_sink_dsm_oemof_2) <= +inf + 0 <= flow(Bus1_sink_dsm_oemof_3) <= +inf + 0 <= flow(Bus1_sink_dsm_oemof_4) <= +inf + 0 <= flow(Bus1_sink_dsm_oemof_5) <= +inf + 0 <= flow(Source_Bus1_0) <= +inf + 0 <= flow(Source_Bus1_1) <= +inf + 0 <= flow(Source_Bus1_2) <= +inf + 0 <= flow(Source_Bus1_3) <= +inf + 0 <= flow(Source_Bus1_4) <= +inf + 0 <= flow(Source_Bus1_5) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_total(Source_Bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old(Source_Bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_old(Source_Bus1_2) <= +inf 0 <= InvestmentFlowBlock_old_end(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_old_end(Source_Bus1_1) <= +inf @@ -432,11 +433,11 @@ bounds 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(Source_Bus1_2) <= +inf - 0 <= InvestmentFlowBlock_old(Source_Bus1_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(sink_dsm_oemof_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(sink_dsm_oemof_1) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(sink_dsm_oemof_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_total(sink_dsm_oemof_2) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(sink_dsm_oemof_0) <= +inf + 0 <= SinkDSMOemofInvestmentBlock_old(sink_dsm_oemof_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old(sink_dsm_oemof_2) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_end(sink_dsm_oemof_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_end(sink_dsm_oemof_1) <= +inf @@ -444,7 +445,6 @@ bounds 0 <= SinkDSMOemofInvestmentBlock_old_exo(sink_dsm_oemof_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_exo(sink_dsm_oemof_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_old_exo(sink_dsm_oemof_2) <= +inf - 0 <= SinkDSMOemofInvestmentBlock_old(sink_dsm_oemof_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_0) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_1) <= +inf 0 <= SinkDSMOemofInvestmentBlock_dsm_do_shed(sink_dsm_oemof_2) <= +inf diff --git a/tests/lp_files/piecewise_linear_converter_cc.lp b/tests/lp_files/piecewise_linear_converter_cc.lp index 22fbcc463..edb6d51b2 100644 --- a/tests/lp_files/piecewise_linear_converter_cc.lp +++ b/tests/lp_files/piecewise_linear_converter_cc.lp @@ -1,69 +1,69 @@ \* Source Pyomo model name=Model *\ -min +min objective: -1 flow(gasBus_pwltf_0_0) -1 flow(gasBus_pwltf_0_1) -1 flow(gasBus_pwltf_0_2) ++1 flow(gasBus_pwltf_0) ++1 flow(gasBus_pwltf_1) ++1 flow(gasBus_pwltf_2) s.t. -c_e_BusBlock_balance(gasBus_0_0)_: -1 flow(gasBus_pwltf_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(pwltf_electricityBus_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -1 flow(gasBus_pwltf_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(pwltf_electricityBus_1) = 0 -c_e_BusBlock_balance(gasBus_0_2)_: -1 flow(gasBus_pwltf_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(pwltf_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -1 flow(pwltf_electricityBus_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_pwltf_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -1 flow(pwltf_electricityBus_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_pwltf_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -1 flow(pwltf_electricityBus_0_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_pwltf_2) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0_0)_: --1 flow(gasBus_pwltf_0_0) -1 PiecewiseLinearConverterBlock_inflow(pwltf_0) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0)_: +-1 flow(gasBus_pwltf_0) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_0) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0_1)_: --1 flow(gasBus_pwltf_0_1) -1 PiecewiseLinearConverterBlock_inflow(pwltf_1) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_1)_: +-1 flow(gasBus_pwltf_1) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_1) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0_2)_: --1 flow(gasBus_pwltf_0_2) -1 PiecewiseLinearConverterBlock_inflow(pwltf_2) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_2)_: +-1 flow(gasBus_pwltf_2) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_2) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0_0)_: --1 flow(pwltf_electricityBus_0_0) -1 PiecewiseLinearConverterBlock_outflow(pwltf_0) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0)_: +-1 flow(pwltf_electricityBus_0) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_0) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0_1)_: --1 flow(pwltf_electricityBus_0_1) -1 PiecewiseLinearConverterBlock_outflow(pwltf_1) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_1)_: +-1 flow(pwltf_electricityBus_1) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_1) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0_2)_: --1 flow(pwltf_electricityBus_0_2) -1 PiecewiseLinearConverterBlock_outflow(pwltf_2) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_2)_: +-1 flow(pwltf_electricityBus_2) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_2) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint1_: -1 PiecewiseLinearConverterBlock_inflow(pwltf_0) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_0) -25 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(2) -50 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(3) -75 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(4) @@ -71,7 +71,7 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint1_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint2_: -1 PiecewiseLinearConverterBlock_outflow(pwltf_0) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_0) -625 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(2) -2500 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(3) -5625 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(4) @@ -79,50 +79,50 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint3_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(5) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(5) = 1 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint4(1)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(1) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint4(2)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(2) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint4(3)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(3) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint4(4)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(4) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint4(5)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(5) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(5) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(4) <= 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint5_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(4) = 1 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint1_: -1 PiecewiseLinearConverterBlock_inflow(pwltf_1) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_1) -25 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(2) -50 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(3) -75 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(4) @@ -130,7 +130,7 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint1_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint2_: -1 PiecewiseLinearConverterBlock_outflow(pwltf_1) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_1) -625 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(2) -2500 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(3) -5625 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(4) @@ -138,50 +138,50 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint3_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(5) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(5) = 1 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint4(1)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(1) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint4(2)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(2) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint4(3)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(3) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint4(4)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(4) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint4(5)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(5) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(5) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(4) <= 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint5_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(4) = 1 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint1_: -1 PiecewiseLinearConverterBlock_inflow(pwltf_2) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_2) -25 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(2) -50 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(3) -75 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(4) @@ -189,7 +189,7 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint1_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint2_: -1 PiecewiseLinearConverterBlock_outflow(pwltf_2) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_2) -625 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(2) -2500 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(3) -5625 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(4) @@ -197,99 +197,99 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint3_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(5) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(5) = 1 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint4(1)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(1) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint4(2)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(2) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint4(3)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(3) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint4(4)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(4) <= 0 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint4(5)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(5) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(5) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(4) <= 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint5_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(4) = 1 bounds -0 <= flow(gasBus_pwltf_0_0) <= 100 -0 <= flow(gasBus_pwltf_0_1) <= 100 -0 <= flow(gasBus_pwltf_0_2) <= 100 -0 <= flow(pwltf_electricityBus_0_0) <= +inf -0 <= flow(pwltf_electricityBus_0_1) <= +inf -0 <= flow(pwltf_electricityBus_0_2) <= +inf -0 <= PiecewiseLinearConverterBlock_inflow(pwltf_0) <= 100 -0 <= PiecewiseLinearConverterBlock_inflow(pwltf_1) <= 100 -0 <= PiecewiseLinearConverterBlock_inflow(pwltf_2) <= 100 -0 <= PiecewiseLinearConverterBlock_outflow(pwltf_0) <= 10000 -0 <= PiecewiseLinearConverterBlock_outflow(pwltf_1) <= 10000 -0 <= PiecewiseLinearConverterBlock_outflow(pwltf_2) <= 10000 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(2) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(3) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(4) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(5) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(1) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(1) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(2) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(3) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(4) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(2) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(3) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(4) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(5) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(1) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(1) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(2) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(3) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(4) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(2) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(3) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(4) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(5) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(1) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(1) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(2) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(3) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(4) <= 1 + 0 <= flow(gasBus_pwltf_0) <= 100 + 0 <= flow(gasBus_pwltf_1) <= 100 + 0 <= flow(gasBus_pwltf_2) <= 100 + 0 <= flow(pwltf_electricityBus_0) <= +inf + 0 <= flow(pwltf_electricityBus_1) <= +inf + 0 <= flow(pwltf_electricityBus_2) <= +inf + 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_0) <= 100 + 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_1) <= 100 + 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_2) <= 100 + 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_0) <= 10000 + 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_1) <= 10000 + 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_2) <= 10000 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(1) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(2) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(3) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(4) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(5) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(1) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(2) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(3) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(1) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(2) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(3) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(4) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(5) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(1) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(2) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(3) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(1) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(2) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(3) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(4) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(5) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(1) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(2) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(3) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(4) <= 1 binary -PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(1) -PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(2) -PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(3) -PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(4) -PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(1) -PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(2) -PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(3) -PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(4) -PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(1) -PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(2) -PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(3) -PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(4) + PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(1) + PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(2) + PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(3) + PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(4) + PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(1) + PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(2) + PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(3) + PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(4) + PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(1) + PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(2) + PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(3) + PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(4) end diff --git a/tests/lp_files/piecewise_linear_converter_cc_multi_period.lp b/tests/lp_files/piecewise_linear_converter_cc_multi_period.lp index 7a0acc0bc..b9860f475 100644 --- a/tests/lp_files/piecewise_linear_converter_cc_multi_period.lp +++ b/tests/lp_files/piecewise_linear_converter_cc_multi_period.lp @@ -2,120 +2,120 @@ min objective: -+1 flow(gasBus_pwltf_0_0) -+1 flow(gasBus_pwltf_0_1) -+0.9803921568627451 flow(gasBus_pwltf_1_2) -+0.9803921568627451 flow(gasBus_pwltf_1_3) -+0.9611687812379853 flow(gasBus_pwltf_2_4) -+0.9611687812379853 flow(gasBus_pwltf_2_5) ++1 flow(gasBus_pwltf_0) ++1 flow(gasBus_pwltf_1) ++0.9803921568627451 flow(gasBus_pwltf_2) ++0.9803921568627451 flow(gasBus_pwltf_3) ++0.9611687812379853 flow(gasBus_pwltf_4) ++0.9611687812379853 flow(gasBus_pwltf_5) s.t. -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_pwltf_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(pwltf_electricityBus_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_pwltf_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(pwltf_electricityBus_1) = 0 -c_e_BusBlock_balance(gasBus_1_2)_: -+1 flow(gasBus_pwltf_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(pwltf_electricityBus_2) = 0 -c_e_BusBlock_balance(gasBus_1_3)_: -+1 flow(gasBus_pwltf_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(pwltf_electricityBus_3) = 0 -c_e_BusBlock_balance(gasBus_2_4)_: -+1 flow(gasBus_pwltf_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(pwltf_electricityBus_4) = 0 -c_e_BusBlock_balance(gasBus_2_5)_: -+1 flow(gasBus_pwltf_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(pwltf_electricityBus_5) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(pwltf_electricityBus_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_pwltf_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(pwltf_electricityBus_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_pwltf_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(pwltf_electricityBus_1_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_pwltf_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(pwltf_electricityBus_1_3) +c_e_BusBlock_balance(gasBus_3)_: ++1 flow(gasBus_pwltf_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(pwltf_electricityBus_2_4) +c_e_BusBlock_balance(gasBus_4)_: ++1 flow(gasBus_pwltf_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(pwltf_electricityBus_2_5) +c_e_BusBlock_balance(gasBus_5)_: ++1 flow(gasBus_pwltf_5) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0_0)_: --1 flow(gasBus_pwltf_0_0) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0)_: +-1 flow(gasBus_pwltf_0) +1 PiecewiseLinearConverterBlock_inflow(pwltf_0) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0_1)_: --1 flow(gasBus_pwltf_0_1) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_1)_: +-1 flow(gasBus_pwltf_1) +1 PiecewiseLinearConverterBlock_inflow(pwltf_1) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_1_2)_: --1 flow(gasBus_pwltf_1_2) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_2)_: +-1 flow(gasBus_pwltf_2) +1 PiecewiseLinearConverterBlock_inflow(pwltf_2) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_1_3)_: --1 flow(gasBus_pwltf_1_3) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_3)_: +-1 flow(gasBus_pwltf_3) +1 PiecewiseLinearConverterBlock_inflow(pwltf_3) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_2_4)_: --1 flow(gasBus_pwltf_2_4) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_4)_: +-1 flow(gasBus_pwltf_4) +1 PiecewiseLinearConverterBlock_inflow(pwltf_4) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_2_5)_: --1 flow(gasBus_pwltf_2_5) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_5)_: +-1 flow(gasBus_pwltf_5) +1 PiecewiseLinearConverterBlock_inflow(pwltf_5) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0_0)_: --1 flow(pwltf_electricityBus_0_0) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0)_: +-1 flow(pwltf_electricityBus_0) +1 PiecewiseLinearConverterBlock_outflow(pwltf_0) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0_1)_: --1 flow(pwltf_electricityBus_0_1) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_1)_: +-1 flow(pwltf_electricityBus_1) +1 PiecewiseLinearConverterBlock_outflow(pwltf_1) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_1_2)_: --1 flow(pwltf_electricityBus_1_2) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_2)_: +-1 flow(pwltf_electricityBus_2) +1 PiecewiseLinearConverterBlock_outflow(pwltf_2) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_1_3)_: --1 flow(pwltf_electricityBus_1_3) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_3)_: +-1 flow(pwltf_electricityBus_3) +1 PiecewiseLinearConverterBlock_outflow(pwltf_3) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_2_4)_: --1 flow(pwltf_electricityBus_2_4) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_4)_: +-1 flow(pwltf_electricityBus_4) +1 PiecewiseLinearConverterBlock_outflow(pwltf_4) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_2_5)_: --1 flow(pwltf_electricityBus_2_5) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_5)_: +-1 flow(pwltf_electricityBus_5) +1 PiecewiseLinearConverterBlock_outflow(pwltf_5) = 0 @@ -136,11 +136,11 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint3_: ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(1) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(3) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(4) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(5) -+1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(1) = 1 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_constraint4(1)_: @@ -195,11 +195,11 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint3_: ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(1) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(3) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(4) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(5) -+1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(1) = 1 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_constraint4(1)_: @@ -254,11 +254,11 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint3_: ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(1) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(3) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(4) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(5) -+1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(1) = 1 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_constraint4(1)_: @@ -313,11 +313,11 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_constraint3_: ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(1) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(3) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(4) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(5) -+1 PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(1) = 1 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_constraint4(1)_: @@ -372,11 +372,11 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_constraint3_: ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(1) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(3) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(4) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(5) -+1 PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(1) = 1 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_constraint4(1)_: @@ -431,11 +431,11 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_constraint3_: ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(1) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(3) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(4) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(5) -+1 PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(1) = 1 c_u_PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_constraint4(1)_: @@ -474,18 +474,18 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_constraint5_: = 1 bounds - 0 <= flow(gasBus_pwltf_0_0) <= 100 - 0 <= flow(gasBus_pwltf_0_1) <= 100 - 0 <= flow(gasBus_pwltf_1_2) <= 100 - 0 <= flow(gasBus_pwltf_1_3) <= 100 - 0 <= flow(gasBus_pwltf_2_4) <= 100 - 0 <= flow(gasBus_pwltf_2_5) <= 100 - 0 <= flow(pwltf_electricityBus_0_0) <= +inf - 0 <= flow(pwltf_electricityBus_0_1) <= +inf - 0 <= flow(pwltf_electricityBus_1_2) <= +inf - 0 <= flow(pwltf_electricityBus_1_3) <= +inf - 0 <= flow(pwltf_electricityBus_2_4) <= +inf - 0 <= flow(pwltf_electricityBus_2_5) <= +inf + 0 <= flow(gasBus_pwltf_0) <= 100 + 0 <= flow(gasBus_pwltf_1) <= 100 + 0 <= flow(gasBus_pwltf_2) <= 100 + 0 <= flow(gasBus_pwltf_3) <= 100 + 0 <= flow(gasBus_pwltf_4) <= 100 + 0 <= flow(gasBus_pwltf_5) <= 100 + 0 <= flow(pwltf_electricityBus_0) <= +inf + 0 <= flow(pwltf_electricityBus_1) <= +inf + 0 <= flow(pwltf_electricityBus_2) <= +inf + 0 <= flow(pwltf_electricityBus_3) <= +inf + 0 <= flow(pwltf_electricityBus_4) <= +inf + 0 <= flow(pwltf_electricityBus_5) <= +inf 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_0) <= 100 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_1) <= 100 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_2) <= 100 @@ -498,56 +498,56 @@ bounds 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_3) <= 10000 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_4) <= 10000 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_5) <= 10000 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(3) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(5) <= +inf - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(1) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(3) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_CC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(3) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(5) <= +inf - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(1) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(3) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_CC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(3) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(5) <= +inf - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(1) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(3) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_CC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(3) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(5) <= +inf - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_bin_y(1) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_bin_y(3) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_CC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(3) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(5) <= +inf - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_bin_y(1) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_bin_y(3) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_CC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(3) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(5) <= +inf - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_lambda(1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_bin_y(1) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_CC_bin_y(3) <= 1 diff --git a/tests/lp_files/piecewise_linear_converter_dcc.lp b/tests/lp_files/piecewise_linear_converter_dcc.lp index 70ece2d09..2c96215e0 100644 --- a/tests/lp_files/piecewise_linear_converter_dcc.lp +++ b/tests/lp_files/piecewise_linear_converter_dcc.lp @@ -1,69 +1,69 @@ \* Source Pyomo model name=Model *\ -min +min objective: -1 flow(gasBus_pwltf_0_0) -1 flow(gasBus_pwltf_0_1) -1 flow(gasBus_pwltf_0_2) ++1 flow(gasBus_pwltf_0) ++1 flow(gasBus_pwltf_1) ++1 flow(gasBus_pwltf_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -1 flow(pwltf_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(pwltf_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -1 flow(pwltf_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(pwltf_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -1 flow(pwltf_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(pwltf_electricityBus_2) = 0 -c_e_BusBlock_balance(gasBus_0_0)_: -1 flow(gasBus_pwltf_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_pwltf_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -1 flow(gasBus_pwltf_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_pwltf_1) = 0 -c_e_BusBlock_balance(gasBus_0_2)_: -1 flow(gasBus_pwltf_0_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_pwltf_2) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0_0)_: --1 flow(gasBus_pwltf_0_0) -1 PiecewiseLinearConverterBlock_inflow(pwltf_0) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0)_: +-1 flow(gasBus_pwltf_0) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_0) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0_1)_: --1 flow(gasBus_pwltf_0_1) -1 PiecewiseLinearConverterBlock_inflow(pwltf_1) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_1)_: +-1 flow(gasBus_pwltf_1) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_1) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0_2)_: --1 flow(gasBus_pwltf_0_2) -1 PiecewiseLinearConverterBlock_inflow(pwltf_2) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_2)_: +-1 flow(gasBus_pwltf_2) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_2) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0_0)_: --1 flow(pwltf_electricityBus_0_0) -1 PiecewiseLinearConverterBlock_outflow(pwltf_0) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0)_: +-1 flow(pwltf_electricityBus_0) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_0) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0_1)_: --1 flow(pwltf_electricityBus_0_1) -1 PiecewiseLinearConverterBlock_outflow(pwltf_1) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_1)_: +-1 flow(pwltf_electricityBus_1) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_1) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0_2)_: --1 flow(pwltf_electricityBus_0_2) -1 PiecewiseLinearConverterBlock_outflow(pwltf_2) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_2)_: +-1 flow(pwltf_electricityBus_2) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_2) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint1_: -1 PiecewiseLinearConverterBlock_inflow(pwltf_0) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_0) -25 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_2) -25 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_2) -50 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_3) @@ -74,7 +74,7 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint1_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint2_: -1 PiecewiseLinearConverterBlock_outflow(pwltf_0) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_0) -625 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_2) -625 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_2) -2500 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_3) @@ -85,38 +85,38 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint3(1)_: --1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_1) +-1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(1) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint3(2)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(2) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint3(3)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(3_3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(3_4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(3) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint3(4)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(4_4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(4_5) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(4) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint4_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(4) = 1 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint1_: -1 PiecewiseLinearConverterBlock_inflow(pwltf_1) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_1) -25 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_2) -25 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_2) -50 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_3) @@ -127,7 +127,7 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint1_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint2_: -1 PiecewiseLinearConverterBlock_outflow(pwltf_1) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_1) -625 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_2) -625 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_2) -2500 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_3) @@ -138,38 +138,38 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint3(1)_: --1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_1) +-1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(1) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint3(2)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(2) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint3(3)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(3_3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(3_4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(3) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint3(4)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(4_4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(4_5) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(4) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint4_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(4) = 1 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint1_: -1 PiecewiseLinearConverterBlock_inflow(pwltf_2) ++1 PiecewiseLinearConverterBlock_inflow(pwltf_2) -25 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_2) -25 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_2) -50 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_3) @@ -180,7 +180,7 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint1_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint2_: -1 PiecewiseLinearConverterBlock_outflow(pwltf_2) ++1 PiecewiseLinearConverterBlock_outflow(pwltf_2) -625 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_2) -625 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_2) -2500 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_3) @@ -191,96 +191,96 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint3(1)_: --1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_1) +-1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(1) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint3(2)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(2) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint3(3)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(3_3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(3_4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(3) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint3(4)_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(4_4) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(4_5) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(4) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint4_: -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(2) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(3) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(4) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(1) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(2) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(3) ++1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(4) = 1 bounds -0 <= flow(gasBus_pwltf_0_0) <= 100 -0 <= flow(gasBus_pwltf_0_1) <= 100 -0 <= flow(gasBus_pwltf_0_2) <= 100 -0 <= flow(pwltf_electricityBus_0_0) <= +inf -0 <= flow(pwltf_electricityBus_0_1) <= +inf -0 <= flow(pwltf_electricityBus_0_2) <= +inf -0 <= PiecewiseLinearConverterBlock_inflow(pwltf_0) <= 100 -0 <= PiecewiseLinearConverterBlock_inflow(pwltf_1) <= 100 -0 <= PiecewiseLinearConverterBlock_inflow(pwltf_2) <= 100 -0 <= PiecewiseLinearConverterBlock_outflow(pwltf_0) <= 10000 -0 <= PiecewiseLinearConverterBlock_outflow(pwltf_1) <= 10000 -0 <= PiecewiseLinearConverterBlock_outflow(pwltf_2) <= 10000 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_2) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_2) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_3) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(3_3) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(3_4) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(4_4) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(4_5) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(1) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_1) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(2) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(3) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(4) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_2) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_2) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_3) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(3_3) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(3_4) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(4_4) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(4_5) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(1) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_1) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(2) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(3) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(4) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_2) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_2) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_3) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(3_3) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(3_4) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(4_4) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(4_5) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(1) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_1) <= +inf -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(2) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(3) <= 1 -0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(4) <= 1 + 0 <= flow(gasBus_pwltf_0) <= 100 + 0 <= flow(gasBus_pwltf_1) <= 100 + 0 <= flow(gasBus_pwltf_2) <= 100 + 0 <= flow(pwltf_electricityBus_0) <= +inf + 0 <= flow(pwltf_electricityBus_1) <= +inf + 0 <= flow(pwltf_electricityBus_2) <= +inf + 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_0) <= 100 + 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_1) <= 100 + 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_2) <= 100 + 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_0) <= 10000 + 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_1) <= 10000 + 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_2) <= 10000 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_1) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_2) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_2) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_3) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(3_3) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(3_4) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(4_4) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(4_5) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(1) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(2) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(3) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_1) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_2) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_2) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_3) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(3_3) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(3_4) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(4_4) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(4_5) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(1) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(2) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(3) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_1) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_2) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_2) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_3) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(3_3) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(3_4) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(4_4) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(4_5) <= +inf + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(1) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(2) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(3) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(4) <= 1 binary -PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(1) -PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(2) -PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(3) -PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(4) -PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(1) -PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(2) -PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(3) -PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(4) -PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(1) -PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(2) -PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(3) -PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(4) + PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(1) + PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(2) + PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(3) + PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(4) + PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(1) + PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(2) + PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(3) + PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(4) + PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(1) + PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(2) + PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(3) + PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(4) end diff --git a/tests/lp_files/piecewise_linear_converter_dcc_multi_period.lp b/tests/lp_files/piecewise_linear_converter_dcc_multi_period.lp index b724b869c..eb6a87193 100644 --- a/tests/lp_files/piecewise_linear_converter_dcc_multi_period.lp +++ b/tests/lp_files/piecewise_linear_converter_dcc_multi_period.lp @@ -2,120 +2,120 @@ min objective: -+1 flow(gasBus_pwltf_0_0) -+1 flow(gasBus_pwltf_0_1) -+0.9803921568627451 flow(gasBus_pwltf_1_2) -+0.9803921568627451 flow(gasBus_pwltf_1_3) -+0.9611687812379853 flow(gasBus_pwltf_2_4) -+0.9611687812379853 flow(gasBus_pwltf_2_5) ++1 flow(gasBus_pwltf_0) ++1 flow(gasBus_pwltf_1) ++0.9803921568627451 flow(gasBus_pwltf_2) ++0.9803921568627451 flow(gasBus_pwltf_3) ++0.9611687812379853 flow(gasBus_pwltf_4) ++0.9611687812379853 flow(gasBus_pwltf_5) s.t. -c_e_BusBlock_balance(gasBus_0_0)_: -+1 flow(gasBus_pwltf_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(pwltf_electricityBus_0) = 0 -c_e_BusBlock_balance(gasBus_0_1)_: -+1 flow(gasBus_pwltf_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(pwltf_electricityBus_1) = 0 -c_e_BusBlock_balance(gasBus_1_2)_: -+1 flow(gasBus_pwltf_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(pwltf_electricityBus_2) = 0 -c_e_BusBlock_balance(gasBus_1_3)_: -+1 flow(gasBus_pwltf_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(pwltf_electricityBus_3) = 0 -c_e_BusBlock_balance(gasBus_2_4)_: -+1 flow(gasBus_pwltf_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(pwltf_electricityBus_4) = 0 -c_e_BusBlock_balance(gasBus_2_5)_: -+1 flow(gasBus_pwltf_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(pwltf_electricityBus_5) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(pwltf_electricityBus_0_0) +c_e_BusBlock_balance(gasBus_0)_: ++1 flow(gasBus_pwltf_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(pwltf_electricityBus_0_1) +c_e_BusBlock_balance(gasBus_1)_: ++1 flow(gasBus_pwltf_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(pwltf_electricityBus_1_2) +c_e_BusBlock_balance(gasBus_2)_: ++1 flow(gasBus_pwltf_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(pwltf_electricityBus_1_3) +c_e_BusBlock_balance(gasBus_3)_: ++1 flow(gasBus_pwltf_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(pwltf_electricityBus_2_4) +c_e_BusBlock_balance(gasBus_4)_: ++1 flow(gasBus_pwltf_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(pwltf_electricityBus_2_5) +c_e_BusBlock_balance(gasBus_5)_: ++1 flow(gasBus_pwltf_5) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0_0)_: --1 flow(gasBus_pwltf_0_0) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0)_: +-1 flow(gasBus_pwltf_0) +1 PiecewiseLinearConverterBlock_inflow(pwltf_0) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_0_1)_: --1 flow(gasBus_pwltf_0_1) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_1)_: +-1 flow(gasBus_pwltf_1) +1 PiecewiseLinearConverterBlock_inflow(pwltf_1) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_1_2)_: --1 flow(gasBus_pwltf_1_2) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_2)_: +-1 flow(gasBus_pwltf_2) +1 PiecewiseLinearConverterBlock_inflow(pwltf_2) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_1_3)_: --1 flow(gasBus_pwltf_1_3) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_3)_: +-1 flow(gasBus_pwltf_3) +1 PiecewiseLinearConverterBlock_inflow(pwltf_3) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_2_4)_: --1 flow(gasBus_pwltf_2_4) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_4)_: +-1 flow(gasBus_pwltf_4) +1 PiecewiseLinearConverterBlock_inflow(pwltf_4) = 0 -c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_2_5)_: --1 flow(gasBus_pwltf_2_5) +c_e_PiecewiseLinearConverterBlock_equate_in(pwltf_5)_: +-1 flow(gasBus_pwltf_5) +1 PiecewiseLinearConverterBlock_inflow(pwltf_5) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0_0)_: --1 flow(pwltf_electricityBus_0_0) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0)_: +-1 flow(pwltf_electricityBus_0) +1 PiecewiseLinearConverterBlock_outflow(pwltf_0) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_0_1)_: --1 flow(pwltf_electricityBus_0_1) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_1)_: +-1 flow(pwltf_electricityBus_1) +1 PiecewiseLinearConverterBlock_outflow(pwltf_1) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_1_2)_: --1 flow(pwltf_electricityBus_1_2) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_2)_: +-1 flow(pwltf_electricityBus_2) +1 PiecewiseLinearConverterBlock_outflow(pwltf_2) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_1_3)_: --1 flow(pwltf_electricityBus_1_3) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_3)_: +-1 flow(pwltf_electricityBus_3) +1 PiecewiseLinearConverterBlock_outflow(pwltf_3) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_2_4)_: --1 flow(pwltf_electricityBus_2_4) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_4)_: +-1 flow(pwltf_electricityBus_4) +1 PiecewiseLinearConverterBlock_outflow(pwltf_4) = 0 -c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_2_5)_: --1 flow(pwltf_electricityBus_2_5) +c_e_PiecewiseLinearConverterBlock_equate_out(pwltf_5)_: +-1 flow(pwltf_electricityBus_5) +1 PiecewiseLinearConverterBlock_outflow(pwltf_5) = 0 @@ -142,9 +142,9 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint3(1)_: +-1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(1) --1 PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_1) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_constraint3(2)_: @@ -195,9 +195,9 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint3(1)_: +-1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(1) --1 PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_1) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_constraint3(2)_: @@ -248,9 +248,9 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint3(1)_: +-1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(1) --1 PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_1) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_constraint3(2)_: @@ -301,9 +301,9 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_constraint3(1)_: +-1 PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_lambda(1_1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_lambda(1_2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_bin_y(1) --1 PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_lambda(1_1) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_constraint3(2)_: @@ -354,9 +354,9 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_constraint3(1)_: +-1 PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_lambda(1_1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_lambda(1_2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_bin_y(1) --1 PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_lambda(1_1) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_constraint3(2)_: @@ -407,9 +407,9 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_constraint2_: = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_constraint3(1)_: +-1 PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_lambda(1_1) -1 PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_lambda(1_2) +1 PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_bin_y(1) --1 PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_lambda(1_1) = 0 c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_constraint3(2)_: @@ -438,18 +438,18 @@ c_e_PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_constraint4_: = 1 bounds - 0 <= flow(gasBus_pwltf_0_0) <= 100 - 0 <= flow(gasBus_pwltf_0_1) <= 100 - 0 <= flow(gasBus_pwltf_1_2) <= 100 - 0 <= flow(gasBus_pwltf_1_3) <= 100 - 0 <= flow(gasBus_pwltf_2_4) <= 100 - 0 <= flow(gasBus_pwltf_2_5) <= 100 - 0 <= flow(pwltf_electricityBus_0_0) <= +inf - 0 <= flow(pwltf_electricityBus_0_1) <= +inf - 0 <= flow(pwltf_electricityBus_1_2) <= +inf - 0 <= flow(pwltf_electricityBus_1_3) <= +inf - 0 <= flow(pwltf_electricityBus_2_4) <= +inf - 0 <= flow(pwltf_electricityBus_2_5) <= +inf + 0 <= flow(gasBus_pwltf_0) <= 100 + 0 <= flow(gasBus_pwltf_1) <= 100 + 0 <= flow(gasBus_pwltf_2) <= 100 + 0 <= flow(gasBus_pwltf_3) <= 100 + 0 <= flow(gasBus_pwltf_4) <= 100 + 0 <= flow(gasBus_pwltf_5) <= 100 + 0 <= flow(pwltf_electricityBus_0) <= +inf + 0 <= flow(pwltf_electricityBus_1) <= +inf + 0 <= flow(pwltf_electricityBus_2) <= +inf + 0 <= flow(pwltf_electricityBus_3) <= +inf + 0 <= flow(pwltf_electricityBus_4) <= +inf + 0 <= flow(pwltf_electricityBus_5) <= +inf 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_0) <= 100 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_1) <= 100 0 <= PiecewiseLinearConverterBlock_inflow(pwltf_2) <= 100 @@ -462,6 +462,7 @@ bounds 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_3) <= 10000 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_4) <= 10000 0 <= PiecewiseLinearConverterBlock_outflow(pwltf_5) <= 10000 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(2_3) <= +inf @@ -470,10 +471,10 @@ bounds 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(4_4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(4_5) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(1) <= 1 - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(3) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_0)_DCC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(2_3) <= +inf @@ -482,10 +483,10 @@ bounds 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(4_4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(4_5) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(1) <= 1 - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(3) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_1)_DCC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(2_3) <= +inf @@ -494,10 +495,10 @@ bounds 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(4_4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(4_5) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(1) <= 1 - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(3) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_2)_DCC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_lambda(1_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_lambda(2_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_lambda(2_3) <= +inf @@ -506,10 +507,10 @@ bounds 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_lambda(4_4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_lambda(4_5) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_bin_y(1) <= 1 - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_bin_y(3) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_3)_DCC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_lambda(1_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_lambda(2_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_lambda(2_3) <= +inf @@ -518,10 +519,10 @@ bounds 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_lambda(4_4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_lambda(4_5) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_bin_y(1) <= 1 - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_bin_y(3) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_4)_DCC_bin_y(4) <= 1 + 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_lambda(1_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_lambda(2_2) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_lambda(2_3) <= +inf @@ -530,7 +531,6 @@ bounds 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_lambda(4_4) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_lambda(4_5) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_bin_y(1) <= 1 - 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_lambda(1_1) <= +inf 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_bin_y(2) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_bin_y(3) <= 1 0 <= PiecewiseLinearConverterBlock_piecewise(pwltf_5)_DCC_bin_y(4) <= 1 diff --git a/tests/lp_files/shared_limit.lp b/tests/lp_files/shared_limit.lp index 0ff745a60..1050745b1 100644 --- a/tests/lp_files/shared_limit.lp +++ b/tests/lp_files/shared_limit.lp @@ -7,89 +7,114 @@ objective: s.t. c_e_limit_storage_constraint(0)_: -+0.5 GenericStorageBlock_storage_content(storage1_0) +1.25 GenericStorageBlock_storage_content(storage2_0) ++0.5 GenericStorageBlock_storage_content(storage1_0) -1 limit_storage(0) = 0 c_e_limit_storage_constraint(1)_: -+0.5 GenericStorageBlock_storage_content(storage1_1) +1.25 GenericStorageBlock_storage_content(storage2_1) ++0.5 GenericStorageBlock_storage_content(storage1_1) -1 limit_storage(1) = 0 c_e_limit_storage_constraint(2)_: -+0.5 GenericStorageBlock_storage_content(storage1_2) +1.25 GenericStorageBlock_storage_content(storage2_2) ++0.5 GenericStorageBlock_storage_content(storage1_2) -1 limit_storage(2) = 0 -c_e_BusBlock_balance(bus_0_0)_: -+1 flow(storage1_bus_0_0) -+1 flow(storage2_bus_0_0) --1 flow(bus_storage1_0_0) --1 flow(bus_storage2_0_0) +c_e_BusBlock_balance(bus_0)_: +-1 flow(bus_storage1_0) +-1 flow(bus_storage2_0) ++1 flow(storage1_bus_0) ++1 flow(storage2_bus_0) = 0 -c_e_BusBlock_balance(bus_0_1)_: -+1 flow(storage1_bus_0_1) -+1 flow(storage2_bus_0_1) --1 flow(bus_storage1_0_1) --1 flow(bus_storage2_0_1) +c_e_BusBlock_balance(bus_1)_: +-1 flow(bus_storage1_1) +-1 flow(bus_storage2_1) ++1 flow(storage1_bus_1) ++1 flow(storage2_bus_1) = 0 -c_e_BusBlock_balance(bus_0_2)_: -+1 flow(storage1_bus_0_2) -+1 flow(storage2_bus_0_2) --1 flow(bus_storage1_0_2) --1 flow(bus_storage2_0_2) +c_e_BusBlock_balance(bus_2)_: +-1 flow(bus_storage1_2) +-1 flow(bus_storage2_2) ++1 flow(storage1_bus_2) ++1 flow(storage2_bus_2) = 0 -c_e_GenericStorageBlock_balance(storage1_0_0)_: --1 GenericStorageBlock_storage_content(storage1_0) -+1 GenericStorageBlock_storage_content(storage1_1) -+1 flow(storage1_bus_0_0) --1 flow(bus_storage1_0_0) +c_e_GenericStorageBlock_losses(storage2_0)_: +-1 GenericStorageBlock_storage_losses(storage2_0) = 0 -c_e_GenericStorageBlock_balance(storage1_0_1)_: --1 GenericStorageBlock_storage_content(storage1_1) -+1 GenericStorageBlock_storage_content(storage1_2) -+1 flow(storage1_bus_0_1) --1 flow(bus_storage1_0_1) +c_e_GenericStorageBlock_losses(storage2_1)_: +-1 GenericStorageBlock_storage_losses(storage2_1) = 0 -c_e_GenericStorageBlock_balance(storage1_0_2)_: --1 GenericStorageBlock_storage_content(storage1_2) -+1 flow(storage1_bus_0_2) --1 flow(bus_storage1_0_2) -+1 GenericStorageBlock_storage_content(storage1_3) +c_e_GenericStorageBlock_losses(storage2_2)_: +-1 GenericStorageBlock_storage_losses(storage2_2) = 0 -c_e_GenericStorageBlock_balance(storage2_0_0)_: --1 GenericStorageBlock_storage_content(storage2_0) -+1 GenericStorageBlock_storage_content(storage2_1) -+1 flow(storage2_bus_0_0) --1 flow(bus_storage2_0_0) +c_e_GenericStorageBlock_losses(storage1_0)_: +-1 GenericStorageBlock_storage_losses(storage1_0) = 0 -c_e_GenericStorageBlock_balance(storage2_0_1)_: +c_e_GenericStorageBlock_losses(storage1_1)_: +-1 GenericStorageBlock_storage_losses(storage1_1) += 0 + +c_e_GenericStorageBlock_losses(storage1_2)_: +-1 GenericStorageBlock_storage_losses(storage1_2) += 0 + +c_e_GenericStorageBlock_balance(storage2_0)_: ++1 GenericStorageBlock_storage_content(storage2_0) -1 GenericStorageBlock_storage_content(storage2_1) -+1 GenericStorageBlock_storage_content(storage2_2) -+1 flow(storage2_bus_0_1) --1 flow(bus_storage2_0_1) ++1 flow(bus_storage2_0) +-1 flow(storage2_bus_0) +-1 GenericStorageBlock_storage_losses(storage2_0) = 0 -c_e_GenericStorageBlock_balance(storage2_0_2)_: +c_e_GenericStorageBlock_balance(storage2_1)_: ++1 GenericStorageBlock_storage_content(storage2_1) -1 GenericStorageBlock_storage_content(storage2_2) -+1 flow(storage2_bus_0_2) --1 flow(bus_storage2_0_2) -+1 GenericStorageBlock_storage_content(storage2_3) ++1 flow(bus_storage2_1) +-1 flow(storage2_bus_1) +-1 GenericStorageBlock_storage_losses(storage2_1) = 0 -c_e_GenericStorageBlock_balanced_cstr(storage1)_: --1 GenericStorageBlock_storage_content(storage1_0) -+1 GenericStorageBlock_storage_content(storage1_3) +c_e_GenericStorageBlock_balance(storage2_2)_: ++1 GenericStorageBlock_storage_content(storage2_2) +-1 GenericStorageBlock_storage_content(storage2_3) ++1 flow(bus_storage2_2) +-1 flow(storage2_bus_2) +-1 GenericStorageBlock_storage_losses(storage2_2) += 0 + +c_e_GenericStorageBlock_balance(storage1_0)_: ++1 GenericStorageBlock_storage_content(storage1_0) +-1 GenericStorageBlock_storage_content(storage1_1) ++1 flow(bus_storage1_0) +-1 flow(storage1_bus_0) +-1 GenericStorageBlock_storage_losses(storage1_0) += 0 + +c_e_GenericStorageBlock_balance(storage1_1)_: ++1 GenericStorageBlock_storage_content(storage1_1) +-1 GenericStorageBlock_storage_content(storage1_2) ++1 flow(bus_storage1_1) +-1 flow(storage1_bus_1) +-1 GenericStorageBlock_storage_losses(storage1_1) += 0 + +c_e_GenericStorageBlock_balance(storage1_2)_: ++1 GenericStorageBlock_storage_content(storage1_2) +-1 GenericStorageBlock_storage_content(storage1_3) ++1 flow(bus_storage1_2) +-1 flow(storage1_bus_2) +-1 GenericStorageBlock_storage_losses(storage1_2) = 0 c_e_GenericStorageBlock_balanced_cstr(storage2)_: @@ -97,29 +122,40 @@ c_e_GenericStorageBlock_balanced_cstr(storage2)_: +1 GenericStorageBlock_storage_content(storage2_3) = 0 +c_e_GenericStorageBlock_balanced_cstr(storage1)_: +-1 GenericStorageBlock_storage_content(storage1_0) ++1 GenericStorageBlock_storage_content(storage1_3) += 0 + bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= GenericStorageBlock_storage_content(storage1_0) <= 5 0 <= GenericStorageBlock_storage_content(storage2_0) <= 5 - 0 <= limit_storage(0) <= 7 - 0 <= GenericStorageBlock_storage_content(storage1_1) <= 5 0 <= GenericStorageBlock_storage_content(storage2_1) <= 5 - 0 <= limit_storage(1) <= 7 - 0 <= GenericStorageBlock_storage_content(storage1_2) <= 5 0 <= GenericStorageBlock_storage_content(storage2_2) <= 5 - 0 <= limit_storage(2) <= 7 - 0 <= flow(storage1_bus_0_0) <= +inf - 0 <= flow(storage2_bus_0_0) <= +inf - 0 <= flow(bus_storage1_0_0) <= +inf - 0 <= flow(bus_storage2_0_0) <= +inf - 0 <= flow(storage1_bus_0_1) <= +inf - 0 <= flow(storage2_bus_0_1) <= +inf - 0 <= flow(bus_storage1_0_1) <= +inf - 0 <= flow(bus_storage2_0_1) <= +inf - 0 <= flow(storage1_bus_0_2) <= +inf - 0 <= flow(storage2_bus_0_2) <= +inf - 0 <= flow(bus_storage1_0_2) <= +inf - 0 <= flow(bus_storage2_0_2) <= +inf - 0 <= GenericStorageBlock_storage_content(storage1_3) <= 5 0 <= GenericStorageBlock_storage_content(storage2_3) <= 5 + 0 <= GenericStorageBlock_storage_content(storage1_0) <= 5 + 0 <= GenericStorageBlock_storage_content(storage1_1) <= 5 + 0 <= GenericStorageBlock_storage_content(storage1_2) <= 5 + 0 <= GenericStorageBlock_storage_content(storage1_3) <= 5 + 0 <= limit_storage(0) <= 7 + 0 <= limit_storage(1) <= 7 + 0 <= limit_storage(2) <= 7 + 0 <= flow(bus_storage1_0) <= +inf + 0 <= flow(bus_storage1_1) <= +inf + 0 <= flow(bus_storage1_2) <= +inf + 0 <= flow(bus_storage2_0) <= +inf + 0 <= flow(bus_storage2_1) <= +inf + 0 <= flow(bus_storage2_2) <= +inf + 0 <= flow(storage1_bus_0) <= +inf + 0 <= flow(storage1_bus_1) <= +inf + 0 <= flow(storage1_bus_2) <= +inf + 0 <= flow(storage2_bus_0) <= +inf + 0 <= flow(storage2_bus_1) <= +inf + 0 <= flow(storage2_bus_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage2_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage2_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage2_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_2) <= +inf end diff --git a/tests/lp_files/shared_limit_multi_period.lp b/tests/lp_files/shared_limit_multi_period.lp index 6bdd7fa17..55796be2f 100644 --- a/tests/lp_files/shared_limit_multi_period.lp +++ b/tests/lp_files/shared_limit_multi_period.lp @@ -7,170 +7,225 @@ objective: s.t. c_e_limit_storage_constraint(0)_: -+0.5 GenericStorageBlock_storage_content(storage1_0) +1.25 GenericStorageBlock_storage_content(storage2_0) ++0.5 GenericStorageBlock_storage_content(storage1_0) -1 limit_storage(0) = 0 c_e_limit_storage_constraint(1)_: -+0.5 GenericStorageBlock_storage_content(storage1_1) +1.25 GenericStorageBlock_storage_content(storage2_1) ++0.5 GenericStorageBlock_storage_content(storage1_1) -1 limit_storage(1) = 0 c_e_limit_storage_constraint(2)_: -+0.5 GenericStorageBlock_storage_content(storage1_2) +1.25 GenericStorageBlock_storage_content(storage2_2) ++0.5 GenericStorageBlock_storage_content(storage1_2) -1 limit_storage(2) = 0 c_e_limit_storage_constraint(3)_: -+0.5 GenericStorageBlock_storage_content(storage1_3) +1.25 GenericStorageBlock_storage_content(storage2_3) ++0.5 GenericStorageBlock_storage_content(storage1_3) -1 limit_storage(3) = 0 c_e_limit_storage_constraint(4)_: -+0.5 GenericStorageBlock_storage_content(storage1_4) +1.25 GenericStorageBlock_storage_content(storage2_4) ++0.5 GenericStorageBlock_storage_content(storage1_4) -1 limit_storage(4) = 0 c_e_limit_storage_constraint(5)_: -+0.5 GenericStorageBlock_storage_content(storage1_5) +1.25 GenericStorageBlock_storage_content(storage2_5) ++0.5 GenericStorageBlock_storage_content(storage1_5) -1 limit_storage(5) = 0 -c_e_BusBlock_balance(bus_0_0)_: -+1 flow(storage1_bus_0_0) -+1 flow(storage2_bus_0_0) --1 flow(bus_storage1_0_0) --1 flow(bus_storage2_0_0) +c_e_BusBlock_balance(bus_0)_: +-1 flow(bus_storage1_0) +-1 flow(bus_storage2_0) ++1 flow(storage1_bus_0) ++1 flow(storage2_bus_0) = 0 -c_e_BusBlock_balance(bus_0_1)_: -+1 flow(storage1_bus_0_1) -+1 flow(storage2_bus_0_1) --1 flow(bus_storage1_0_1) --1 flow(bus_storage2_0_1) +c_e_BusBlock_balance(bus_1)_: +-1 flow(bus_storage1_1) +-1 flow(bus_storage2_1) ++1 flow(storage1_bus_1) ++1 flow(storage2_bus_1) = 0 -c_e_BusBlock_balance(bus_1_2)_: -+1 flow(storage1_bus_1_2) -+1 flow(storage2_bus_1_2) --1 flow(bus_storage1_1_2) --1 flow(bus_storage2_1_2) +c_e_BusBlock_balance(bus_2)_: +-1 flow(bus_storage1_2) +-1 flow(bus_storage2_2) ++1 flow(storage1_bus_2) ++1 flow(storage2_bus_2) = 0 -c_e_BusBlock_balance(bus_1_3)_: -+1 flow(storage1_bus_1_3) -+1 flow(storage2_bus_1_3) --1 flow(bus_storage1_1_3) --1 flow(bus_storage2_1_3) +c_e_BusBlock_balance(bus_3)_: +-1 flow(bus_storage1_3) +-1 flow(bus_storage2_3) ++1 flow(storage1_bus_3) ++1 flow(storage2_bus_3) = 0 -c_e_BusBlock_balance(bus_2_4)_: -+1 flow(storage1_bus_2_4) -+1 flow(storage2_bus_2_4) --1 flow(bus_storage1_2_4) --1 flow(bus_storage2_2_4) +c_e_BusBlock_balance(bus_4)_: +-1 flow(bus_storage1_4) +-1 flow(bus_storage2_4) ++1 flow(storage1_bus_4) ++1 flow(storage2_bus_4) = 0 -c_e_BusBlock_balance(bus_2_5)_: -+1 flow(storage1_bus_2_5) -+1 flow(storage2_bus_2_5) --1 flow(bus_storage1_2_5) --1 flow(bus_storage2_2_5) +c_e_BusBlock_balance(bus_5)_: +-1 flow(bus_storage1_5) +-1 flow(bus_storage2_5) ++1 flow(storage1_bus_5) ++1 flow(storage2_bus_5) = 0 -c_e_GenericStorageBlock_balance(storage1_0_0)_: --1 GenericStorageBlock_storage_content(storage1_0) -+1 GenericStorageBlock_storage_content(storage1_1) -+1 flow(storage1_bus_0_0) --1 flow(bus_storage1_0_0) +c_e_GenericStorageBlock_losses(storage2_0)_: +-1 GenericStorageBlock_storage_losses(storage2_0) = 0 -c_e_GenericStorageBlock_balance(storage1_0_1)_: --1 GenericStorageBlock_storage_content(storage1_1) -+1 GenericStorageBlock_storage_content(storage1_2) -+1 flow(storage1_bus_0_1) --1 flow(bus_storage1_0_1) +c_e_GenericStorageBlock_losses(storage2_1)_: +-1 GenericStorageBlock_storage_losses(storage2_1) = 0 -c_e_GenericStorageBlock_balance(storage1_1_2)_: --1 GenericStorageBlock_storage_content(storage1_2) -+1 GenericStorageBlock_storage_content(storage1_3) -+1 flow(storage1_bus_1_2) --1 flow(bus_storage1_1_2) +c_e_GenericStorageBlock_losses(storage2_2)_: +-1 GenericStorageBlock_storage_losses(storage2_2) = 0 -c_e_GenericStorageBlock_balance(storage1_1_3)_: --1 GenericStorageBlock_storage_content(storage1_3) -+1 GenericStorageBlock_storage_content(storage1_4) -+1 flow(storage1_bus_1_3) --1 flow(bus_storage1_1_3) +c_e_GenericStorageBlock_losses(storage2_3)_: +-1 GenericStorageBlock_storage_losses(storage2_3) = 0 -c_e_GenericStorageBlock_balance(storage1_2_4)_: --1 GenericStorageBlock_storage_content(storage1_4) -+1 GenericStorageBlock_storage_content(storage1_5) -+1 flow(storage1_bus_2_4) --1 flow(bus_storage1_2_4) +c_e_GenericStorageBlock_losses(storage2_4)_: +-1 GenericStorageBlock_storage_losses(storage2_4) = 0 -c_e_GenericStorageBlock_balance(storage1_2_5)_: --1 GenericStorageBlock_storage_content(storage1_5) -+1 flow(storage1_bus_2_5) --1 flow(bus_storage1_2_5) -+1 GenericStorageBlock_storage_content(storage1_6) +c_e_GenericStorageBlock_losses(storage2_5)_: +-1 GenericStorageBlock_storage_losses(storage2_5) = 0 -c_e_GenericStorageBlock_balance(storage2_0_0)_: --1 GenericStorageBlock_storage_content(storage2_0) -+1 GenericStorageBlock_storage_content(storage2_1) -+1 flow(storage2_bus_0_0) --1 flow(bus_storage2_0_0) +c_e_GenericStorageBlock_losses(storage1_0)_: +-1 GenericStorageBlock_storage_losses(storage1_0) = 0 -c_e_GenericStorageBlock_balance(storage2_0_1)_: +c_e_GenericStorageBlock_losses(storage1_1)_: +-1 GenericStorageBlock_storage_losses(storage1_1) += 0 + +c_e_GenericStorageBlock_losses(storage1_2)_: +-1 GenericStorageBlock_storage_losses(storage1_2) += 0 + +c_e_GenericStorageBlock_losses(storage1_3)_: +-1 GenericStorageBlock_storage_losses(storage1_3) += 0 + +c_e_GenericStorageBlock_losses(storage1_4)_: +-1 GenericStorageBlock_storage_losses(storage1_4) += 0 + +c_e_GenericStorageBlock_losses(storage1_5)_: +-1 GenericStorageBlock_storage_losses(storage1_5) += 0 + +c_e_GenericStorageBlock_balance(storage2_0)_: ++1 GenericStorageBlock_storage_content(storage2_0) -1 GenericStorageBlock_storage_content(storage2_1) -+1 GenericStorageBlock_storage_content(storage2_2) -+1 flow(storage2_bus_0_1) --1 flow(bus_storage2_0_1) ++1 flow(bus_storage2_0) +-1 flow(storage2_bus_0) +-1 GenericStorageBlock_storage_losses(storage2_0) = 0 -c_e_GenericStorageBlock_balance(storage2_1_2)_: +c_e_GenericStorageBlock_balance(storage2_1)_: ++1 GenericStorageBlock_storage_content(storage2_1) -1 GenericStorageBlock_storage_content(storage2_2) -+1 GenericStorageBlock_storage_content(storage2_3) -+1 flow(storage2_bus_1_2) --1 flow(bus_storage2_1_2) ++1 flow(bus_storage2_1) +-1 flow(storage2_bus_1) +-1 GenericStorageBlock_storage_losses(storage2_1) = 0 -c_e_GenericStorageBlock_balance(storage2_1_3)_: +c_e_GenericStorageBlock_balance(storage2_2)_: ++1 GenericStorageBlock_storage_content(storage2_2) -1 GenericStorageBlock_storage_content(storage2_3) -+1 GenericStorageBlock_storage_content(storage2_4) -+1 flow(storage2_bus_1_3) --1 flow(bus_storage2_1_3) ++1 flow(bus_storage2_2) +-1 flow(storage2_bus_2) +-1 GenericStorageBlock_storage_losses(storage2_2) = 0 -c_e_GenericStorageBlock_balance(storage2_2_4)_: +c_e_GenericStorageBlock_balance(storage2_3)_: ++1 GenericStorageBlock_storage_content(storage2_3) -1 GenericStorageBlock_storage_content(storage2_4) -+1 GenericStorageBlock_storage_content(storage2_5) -+1 flow(storage2_bus_2_4) --1 flow(bus_storage2_2_4) ++1 flow(bus_storage2_3) +-1 flow(storage2_bus_3) +-1 GenericStorageBlock_storage_losses(storage2_3) = 0 -c_e_GenericStorageBlock_balance(storage2_2_5)_: +c_e_GenericStorageBlock_balance(storage2_4)_: ++1 GenericStorageBlock_storage_content(storage2_4) -1 GenericStorageBlock_storage_content(storage2_5) -+1 flow(storage2_bus_2_5) --1 flow(bus_storage2_2_5) -+1 GenericStorageBlock_storage_content(storage2_6) ++1 flow(bus_storage2_4) +-1 flow(storage2_bus_4) +-1 GenericStorageBlock_storage_losses(storage2_4) = 0 -c_e_GenericStorageBlock_balanced_cstr(storage1)_: --1 GenericStorageBlock_storage_content(storage1_0) -+1 GenericStorageBlock_storage_content(storage1_6) +c_e_GenericStorageBlock_balance(storage2_5)_: ++1 GenericStorageBlock_storage_content(storage2_5) +-1 GenericStorageBlock_storage_content(storage2_6) ++1 flow(bus_storage2_5) +-1 flow(storage2_bus_5) +-1 GenericStorageBlock_storage_losses(storage2_5) += 0 + +c_e_GenericStorageBlock_balance(storage1_0)_: ++1 GenericStorageBlock_storage_content(storage1_0) +-1 GenericStorageBlock_storage_content(storage1_1) ++1 flow(bus_storage1_0) +-1 flow(storage1_bus_0) +-1 GenericStorageBlock_storage_losses(storage1_0) += 0 + +c_e_GenericStorageBlock_balance(storage1_1)_: ++1 GenericStorageBlock_storage_content(storage1_1) +-1 GenericStorageBlock_storage_content(storage1_2) ++1 flow(bus_storage1_1) +-1 flow(storage1_bus_1) +-1 GenericStorageBlock_storage_losses(storage1_1) += 0 + +c_e_GenericStorageBlock_balance(storage1_2)_: ++1 GenericStorageBlock_storage_content(storage1_2) +-1 GenericStorageBlock_storage_content(storage1_3) ++1 flow(bus_storage1_2) +-1 flow(storage1_bus_2) +-1 GenericStorageBlock_storage_losses(storage1_2) += 0 + +c_e_GenericStorageBlock_balance(storage1_3)_: ++1 GenericStorageBlock_storage_content(storage1_3) +-1 GenericStorageBlock_storage_content(storage1_4) ++1 flow(bus_storage1_3) +-1 flow(storage1_bus_3) +-1 GenericStorageBlock_storage_losses(storage1_3) += 0 + +c_e_GenericStorageBlock_balance(storage1_4)_: ++1 GenericStorageBlock_storage_content(storage1_4) +-1 GenericStorageBlock_storage_content(storage1_5) ++1 flow(bus_storage1_4) +-1 flow(storage1_bus_4) +-1 GenericStorageBlock_storage_losses(storage1_4) += 0 + +c_e_GenericStorageBlock_balance(storage1_5)_: ++1 GenericStorageBlock_storage_content(storage1_5) +-1 GenericStorageBlock_storage_content(storage1_6) ++1 flow(bus_storage1_5) +-1 flow(storage1_bus_5) +-1 GenericStorageBlock_storage_losses(storage1_5) = 0 c_e_GenericStorageBlock_balanced_cstr(storage2)_: @@ -178,50 +233,67 @@ c_e_GenericStorageBlock_balanced_cstr(storage2)_: +1 GenericStorageBlock_storage_content(storage2_6) = 0 +c_e_GenericStorageBlock_balanced_cstr(storage1)_: +-1 GenericStorageBlock_storage_content(storage1_0) ++1 GenericStorageBlock_storage_content(storage1_6) += 0 + bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= GenericStorageBlock_storage_content(storage1_0) <= 5 0 <= GenericStorageBlock_storage_content(storage2_0) <= 5 - 0 <= limit_storage(0) <= 7 - 0 <= GenericStorageBlock_storage_content(storage1_1) <= 5 0 <= GenericStorageBlock_storage_content(storage2_1) <= 5 - 0 <= limit_storage(1) <= 7 - 0 <= GenericStorageBlock_storage_content(storage1_2) <= 5 0 <= GenericStorageBlock_storage_content(storage2_2) <= 5 - 0 <= limit_storage(2) <= 7 - 0 <= GenericStorageBlock_storage_content(storage1_3) <= 5 0 <= GenericStorageBlock_storage_content(storage2_3) <= 5 - 0 <= limit_storage(3) <= 7 - 0 <= GenericStorageBlock_storage_content(storage1_4) <= 5 0 <= GenericStorageBlock_storage_content(storage2_4) <= 5 - 0 <= limit_storage(4) <= 7 - 0 <= GenericStorageBlock_storage_content(storage1_5) <= 5 0 <= GenericStorageBlock_storage_content(storage2_5) <= 5 - 0 <= limit_storage(5) <= 7 - 0 <= flow(storage1_bus_0_0) <= +inf - 0 <= flow(storage2_bus_0_0) <= +inf - 0 <= flow(bus_storage1_0_0) <= +inf - 0 <= flow(bus_storage2_0_0) <= +inf - 0 <= flow(storage1_bus_0_1) <= +inf - 0 <= flow(storage2_bus_0_1) <= +inf - 0 <= flow(bus_storage1_0_1) <= +inf - 0 <= flow(bus_storage2_0_1) <= +inf - 0 <= flow(storage1_bus_1_2) <= +inf - 0 <= flow(storage2_bus_1_2) <= +inf - 0 <= flow(bus_storage1_1_2) <= +inf - 0 <= flow(bus_storage2_1_2) <= +inf - 0 <= flow(storage1_bus_1_3) <= +inf - 0 <= flow(storage2_bus_1_3) <= +inf - 0 <= flow(bus_storage1_1_3) <= +inf - 0 <= flow(bus_storage2_1_3) <= +inf - 0 <= flow(storage1_bus_2_4) <= +inf - 0 <= flow(storage2_bus_2_4) <= +inf - 0 <= flow(bus_storage1_2_4) <= +inf - 0 <= flow(bus_storage2_2_4) <= +inf - 0 <= flow(storage1_bus_2_5) <= +inf - 0 <= flow(storage2_bus_2_5) <= +inf - 0 <= flow(bus_storage1_2_5) <= +inf - 0 <= flow(bus_storage2_2_5) <= +inf - 0 <= GenericStorageBlock_storage_content(storage1_6) <= 5 0 <= GenericStorageBlock_storage_content(storage2_6) <= 5 + 0 <= GenericStorageBlock_storage_content(storage1_0) <= 5 + 0 <= GenericStorageBlock_storage_content(storage1_1) <= 5 + 0 <= GenericStorageBlock_storage_content(storage1_2) <= 5 + 0 <= GenericStorageBlock_storage_content(storage1_3) <= 5 + 0 <= GenericStorageBlock_storage_content(storage1_4) <= 5 + 0 <= GenericStorageBlock_storage_content(storage1_5) <= 5 + 0 <= GenericStorageBlock_storage_content(storage1_6) <= 5 + 0 <= limit_storage(0) <= 7 + 0 <= limit_storage(1) <= 7 + 0 <= limit_storage(2) <= 7 + 0 <= limit_storage(3) <= 7 + 0 <= limit_storage(4) <= 7 + 0 <= limit_storage(5) <= 7 + 0 <= flow(bus_storage1_0) <= +inf + 0 <= flow(bus_storage1_1) <= +inf + 0 <= flow(bus_storage1_2) <= +inf + 0 <= flow(bus_storage1_3) <= +inf + 0 <= flow(bus_storage1_4) <= +inf + 0 <= flow(bus_storage1_5) <= +inf + 0 <= flow(bus_storage2_0) <= +inf + 0 <= flow(bus_storage2_1) <= +inf + 0 <= flow(bus_storage2_2) <= +inf + 0 <= flow(bus_storage2_3) <= +inf + 0 <= flow(bus_storage2_4) <= +inf + 0 <= flow(bus_storage2_5) <= +inf + 0 <= flow(storage1_bus_0) <= +inf + 0 <= flow(storage1_bus_1) <= +inf + 0 <= flow(storage1_bus_2) <= +inf + 0 <= flow(storage1_bus_3) <= +inf + 0 <= flow(storage1_bus_4) <= +inf + 0 <= flow(storage1_bus_5) <= +inf + 0 <= flow(storage2_bus_0) <= +inf + 0 <= flow(storage2_bus_1) <= +inf + 0 <= flow(storage2_bus_2) <= +inf + 0 <= flow(storage2_bus_3) <= +inf + 0 <= flow(storage2_bus_4) <= +inf + 0 <= flow(storage2_bus_5) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage2_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage2_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage2_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage2_3) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage2_4) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage2_5) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_3) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_4) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_5) <= +inf end diff --git a/tests/lp_files/source_with_gradient.lp b/tests/lp_files/source_with_gradient.lp index 75f93f31b..c65753b4c 100644 --- a/tests/lp_files/source_with_gradient.lp +++ b/tests/lp_files/source_with_gradient.lp @@ -2,60 +2,60 @@ min objective: -+23 flow(powerplant_electricityBus_0_0) -+23 flow(powerplant_electricityBus_0_1) -+23 flow(powerplant_electricityBus_0_2) ++23 flow(powerplant_electricityBus_0) ++23 flow(powerplant_electricityBus_1) ++23 flow(powerplant_electricityBus_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(powerplant_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(powerplant_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(powerplant_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(powerplant_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(powerplant_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(powerplant_electricityBus_2) = 0 -c_e_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_0_0)_: +c_e_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_0)_: +1 SimpleFlowBlock_positive_gradient(powerplant_electricityBus_0) = 0 -c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_0_1)_: --1 flow(powerplant_electricityBus_0_0) -+1 flow(powerplant_electricityBus_0_1) +c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_1)_: +-1 flow(powerplant_electricityBus_0) ++1 flow(powerplant_electricityBus_1) -1 SimpleFlowBlock_positive_gradient(powerplant_electricityBus_1) <= 0 -c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_0_2)_: --1 flow(powerplant_electricityBus_0_1) -+1 flow(powerplant_electricityBus_0_2) +c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_2)_: +-1 flow(powerplant_electricityBus_1) ++1 flow(powerplant_electricityBus_2) -1 SimpleFlowBlock_positive_gradient(powerplant_electricityBus_2) <= 0 -c_e_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_0_0)_: +c_e_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_0)_: +1 SimpleFlowBlock_negative_gradient(powerplant_electricityBus_0) = 0 -c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_0_1)_: -+1 flow(powerplant_electricityBus_0_0) --1 flow(powerplant_electricityBus_0_1) +c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_1)_: ++1 flow(powerplant_electricityBus_0) +-1 flow(powerplant_electricityBus_1) -1 SimpleFlowBlock_negative_gradient(powerplant_electricityBus_1) <= 0 -c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_0_2)_: -+1 flow(powerplant_electricityBus_0_1) --1 flow(powerplant_electricityBus_0_2) +c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_2)_: ++1 flow(powerplant_electricityBus_1) +-1 flow(powerplant_electricityBus_2) -1 SimpleFlowBlock_negative_gradient(powerplant_electricityBus_2) <= 0 bounds - 0 <= flow(powerplant_electricityBus_0_0) <= 999 - 0 <= flow(powerplant_electricityBus_0_1) <= 999 - 0 <= flow(powerplant_electricityBus_0_2) <= 999 + 0 <= flow(powerplant_electricityBus_0) <= 999 + 0 <= flow(powerplant_electricityBus_1) <= 999 + 0 <= flow(powerplant_electricityBus_2) <= 999 0 <= SimpleFlowBlock_positive_gradient(powerplant_electricityBus_0) <= 29.97 0 <= SimpleFlowBlock_positive_gradient(powerplant_electricityBus_1) <= 29.97 0 <= SimpleFlowBlock_positive_gradient(powerplant_electricityBus_2) <= 29.97 diff --git a/tests/lp_files/source_with_gradient_multi_period.lp b/tests/lp_files/source_with_gradient_multi_period.lp index 5ff719ac8..4775248b3 100644 --- a/tests/lp_files/source_with_gradient_multi_period.lp +++ b/tests/lp_files/source_with_gradient_multi_period.lp @@ -2,114 +2,114 @@ min objective: -+23 flow(powerplant_electricityBus_0_0) -+23 flow(powerplant_electricityBus_0_1) -+22.549019607843135 flow(powerplant_electricityBus_1_2) -+22.549019607843135 flow(powerplant_electricityBus_1_3) -+22.10688196847366 flow(powerplant_electricityBus_2_4) -+22.10688196847366 flow(powerplant_electricityBus_2_5) ++23 flow(powerplant_electricityBus_0) ++23 flow(powerplant_electricityBus_1) ++22.549019607843135 flow(powerplant_electricityBus_2) ++22.549019607843135 flow(powerplant_electricityBus_3) ++22.10688196847366 flow(powerplant_electricityBus_4) ++22.10688196847366 flow(powerplant_electricityBus_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(powerplant_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(powerplant_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(powerplant_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(powerplant_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(powerplant_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(powerplant_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(powerplant_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(powerplant_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(powerplant_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(powerplant_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(powerplant_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(powerplant_electricityBus_5) = 0 -c_e_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_0_0)_: +c_e_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_0)_: +1 SimpleFlowBlock_positive_gradient(powerplant_electricityBus_0) = 0 -c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_0_1)_: --1 flow(powerplant_electricityBus_0_0) -+1 flow(powerplant_electricityBus_0_1) +c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_1)_: +-1 flow(powerplant_electricityBus_0) ++1 flow(powerplant_electricityBus_1) -1 SimpleFlowBlock_positive_gradient(powerplant_electricityBus_1) <= 0 -c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_1_2)_: --1 flow(powerplant_electricityBus_0_1) -+1 flow(powerplant_electricityBus_1_2) +c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_2)_: +-1 flow(powerplant_electricityBus_1) ++1 flow(powerplant_electricityBus_2) -1 SimpleFlowBlock_positive_gradient(powerplant_electricityBus_2) <= 0 -c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_1_3)_: --1 flow(powerplant_electricityBus_1_2) -+1 flow(powerplant_electricityBus_1_3) +c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_3)_: +-1 flow(powerplant_electricityBus_2) ++1 flow(powerplant_electricityBus_3) -1 SimpleFlowBlock_positive_gradient(powerplant_electricityBus_3) <= 0 -c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_2_4)_: --1 flow(powerplant_electricityBus_1_3) -+1 flow(powerplant_electricityBus_2_4) +c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_4)_: +-1 flow(powerplant_electricityBus_3) ++1 flow(powerplant_electricityBus_4) -1 SimpleFlowBlock_positive_gradient(powerplant_electricityBus_4) <= 0 -c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_2_5)_: --1 flow(powerplant_electricityBus_2_4) -+1 flow(powerplant_electricityBus_2_5) +c_u_SimpleFlowBlock_positive_gradient_constr(powerplant_electricityBus_5)_: +-1 flow(powerplant_electricityBus_4) ++1 flow(powerplant_electricityBus_5) -1 SimpleFlowBlock_positive_gradient(powerplant_electricityBus_5) <= 0 -c_e_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_0_0)_: +c_e_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_0)_: +1 SimpleFlowBlock_negative_gradient(powerplant_electricityBus_0) = 0 -c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_0_1)_: -+1 flow(powerplant_electricityBus_0_0) --1 flow(powerplant_electricityBus_0_1) +c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_1)_: ++1 flow(powerplant_electricityBus_0) +-1 flow(powerplant_electricityBus_1) -1 SimpleFlowBlock_negative_gradient(powerplant_electricityBus_1) <= 0 -c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_1_2)_: -+1 flow(powerplant_electricityBus_0_1) --1 flow(powerplant_electricityBus_1_2) +c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_2)_: ++1 flow(powerplant_electricityBus_1) +-1 flow(powerplant_electricityBus_2) -1 SimpleFlowBlock_negative_gradient(powerplant_electricityBus_2) <= 0 -c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_1_3)_: -+1 flow(powerplant_electricityBus_1_2) --1 flow(powerplant_electricityBus_1_3) +c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_3)_: ++1 flow(powerplant_electricityBus_2) +-1 flow(powerplant_electricityBus_3) -1 SimpleFlowBlock_negative_gradient(powerplant_electricityBus_3) <= 0 -c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_2_4)_: -+1 flow(powerplant_electricityBus_1_3) --1 flow(powerplant_electricityBus_2_4) +c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_4)_: ++1 flow(powerplant_electricityBus_3) +-1 flow(powerplant_electricityBus_4) -1 SimpleFlowBlock_negative_gradient(powerplant_electricityBus_4) <= 0 -c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_2_5)_: -+1 flow(powerplant_electricityBus_2_4) --1 flow(powerplant_electricityBus_2_5) +c_u_SimpleFlowBlock_negative_gradient_constr(powerplant_electricityBus_5)_: ++1 flow(powerplant_electricityBus_4) +-1 flow(powerplant_electricityBus_5) -1 SimpleFlowBlock_negative_gradient(powerplant_electricityBus_5) <= 0 bounds - 0 <= flow(powerplant_electricityBus_0_0) <= 999 - 0 <= flow(powerplant_electricityBus_0_1) <= 999 - 0 <= flow(powerplant_electricityBus_1_2) <= 999 - 0 <= flow(powerplant_electricityBus_1_3) <= 999 - 0 <= flow(powerplant_electricityBus_2_4) <= 999 - 0 <= flow(powerplant_electricityBus_2_5) <= 999 + 0 <= flow(powerplant_electricityBus_0) <= 999 + 0 <= flow(powerplant_electricityBus_1) <= 999 + 0 <= flow(powerplant_electricityBus_2) <= 999 + 0 <= flow(powerplant_electricityBus_3) <= 999 + 0 <= flow(powerplant_electricityBus_4) <= 999 + 0 <= flow(powerplant_electricityBus_5) <= 999 0 <= SimpleFlowBlock_positive_gradient(powerplant_electricityBus_0) <= 29.97 0 <= SimpleFlowBlock_positive_gradient(powerplant_electricityBus_1) <= 29.97 0 <= SimpleFlowBlock_positive_gradient(powerplant_electricityBus_2) <= 29.97 diff --git a/tests/lp_files/source_with_nonconvex_gradient.lp b/tests/lp_files/source_with_nonconvex_gradient.lp index 5e38b5ed7..83c4223da 100644 --- a/tests/lp_files/source_with_nonconvex_gradient.lp +++ b/tests/lp_files/source_with_nonconvex_gradient.lp @@ -2,22 +2,22 @@ min objective: -+23 flow(powerplant_electricityBus_0_0) -+23 flow(powerplant_electricityBus_0_1) -+23 flow(powerplant_electricityBus_0_2) ++23 flow(powerplant_electricityBus_0) ++23 flow(powerplant_electricityBus_1) ++23 flow(powerplant_electricityBus_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(powerplant_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(powerplant_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(powerplant_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(powerplant_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(powerplant_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(powerplant_electricityBus_2) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(powerplant_electricityBus_0)_: @@ -35,82 +35,82 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(powerplant_electricityBus_2)_: -999 NonConvexFlowBlock_status(powerplant_electricityBus_2) = 0 -c_u_NonConvexFlowBlock_min(powerplant_electricityBus_0_0)_: --1 flow(powerplant_electricityBus_0_0) +c_u_NonConvexFlowBlock_min(powerplant_electricityBus_0)_: +-1 flow(powerplant_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_min(powerplant_electricityBus_0_1)_: --1 flow(powerplant_electricityBus_0_1) +c_u_NonConvexFlowBlock_min(powerplant_electricityBus_1)_: +-1 flow(powerplant_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_min(powerplant_electricityBus_0_2)_: --1 flow(powerplant_electricityBus_0_2) +c_u_NonConvexFlowBlock_min(powerplant_electricityBus_2)_: +-1 flow(powerplant_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_max(powerplant_electricityBus_0_0)_: -+1 flow(powerplant_electricityBus_0_0) +c_u_NonConvexFlowBlock_max(powerplant_electricityBus_0)_: ++1 flow(powerplant_electricityBus_0) -1 NonConvexFlowBlock_status_nominal(powerplant_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_max(powerplant_electricityBus_0_1)_: -+1 flow(powerplant_electricityBus_0_1) +c_u_NonConvexFlowBlock_max(powerplant_electricityBus_1)_: ++1 flow(powerplant_electricityBus_1) -1 NonConvexFlowBlock_status_nominal(powerplant_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_max(powerplant_electricityBus_0_2)_: -+1 flow(powerplant_electricityBus_0_2) +c_u_NonConvexFlowBlock_max(powerplant_electricityBus_2)_: ++1 flow(powerplant_electricityBus_2) -1 NonConvexFlowBlock_status_nominal(powerplant_electricityBus_2) <= 0 -c_e_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_0_0)_: +c_e_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_0)_: +1 NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_0) = 0 -c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_0_1)_: +c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_1)_: -1 NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_1) + [ --1 flow(powerplant_electricityBus_0_0) * NonConvexFlowBlock_status(powerplant_electricityBus_0) -+1 flow(powerplant_electricityBus_0_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) +-1 flow(powerplant_electricityBus_0) * NonConvexFlowBlock_status(powerplant_electricityBus_0) ++1 flow(powerplant_electricityBus_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) ] <= 0 -c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_0_2)_: +c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_2)_: -1 NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_2) + [ --1 flow(powerplant_electricityBus_0_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) -+1 flow(powerplant_electricityBus_0_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) +-1 flow(powerplant_electricityBus_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) ++1 flow(powerplant_electricityBus_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) ] <= 0 -c_e_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_0_0)_: +c_e_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_0)_: +1 NonConvexFlowBlock_negative_gradient(powerplant_electricityBus_0) = 0 -c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_0_1)_: +c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_1)_: -1 NonConvexFlowBlock_negative_gradient(powerplant_electricityBus_1) + [ -+1 flow(powerplant_electricityBus_0_0) * NonConvexFlowBlock_status(powerplant_electricityBus_0) --1 flow(powerplant_electricityBus_0_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) ++1 flow(powerplant_electricityBus_0) * NonConvexFlowBlock_status(powerplant_electricityBus_0) +-1 flow(powerplant_electricityBus_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) ] <= 0 -c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_0_2)_: +c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_2)_: -1 NonConvexFlowBlock_negative_gradient(powerplant_electricityBus_2) + [ -+1 flow(powerplant_electricityBus_0_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) --1 flow(powerplant_electricityBus_0_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) ++1 flow(powerplant_electricityBus_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) +-1 flow(powerplant_electricityBus_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) ] <= 0 bounds - 0 <= flow(powerplant_electricityBus_0_0) <= 999 - 0 <= flow(powerplant_electricityBus_0_1) <= 999 - 0 <= flow(powerplant_electricityBus_0_2) <= 999 + 0 <= flow(powerplant_electricityBus_0) <= 999 + 0 <= flow(powerplant_electricityBus_1) <= 999 + 0 <= flow(powerplant_electricityBus_2) <= 999 0 <= NonConvexFlowBlock_status_nominal(powerplant_electricityBus_0) <= +inf - 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_0) <= 1 0 <= NonConvexFlowBlock_status_nominal(powerplant_electricityBus_1) <= +inf - 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_1) <= 1 0 <= NonConvexFlowBlock_status_nominal(powerplant_electricityBus_2) <= +inf + 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_0) <= 1 + 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_1) <= 1 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_2) <= 1 0 <= NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_0) <= +inf 0 <= NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_1) <= +inf diff --git a/tests/lp_files/source_with_nonconvex_gradient_multi_period.lp b/tests/lp_files/source_with_nonconvex_gradient_multi_period.lp index 68eac0154..2085f666b 100644 --- a/tests/lp_files/source_with_nonconvex_gradient_multi_period.lp +++ b/tests/lp_files/source_with_nonconvex_gradient_multi_period.lp @@ -2,37 +2,37 @@ min objective: -+23 flow(powerplant_electricityBus_0_0) -+23 flow(powerplant_electricityBus_0_1) -+22.549019607843135 flow(powerplant_electricityBus_1_2) -+22.549019607843135 flow(powerplant_electricityBus_1_3) -+22.10688196847366 flow(powerplant_electricityBus_2_4) -+22.10688196847366 flow(powerplant_electricityBus_2_5) ++23 flow(powerplant_electricityBus_0) ++23 flow(powerplant_electricityBus_1) ++22.549019607843135 flow(powerplant_electricityBus_2) ++22.549019607843135 flow(powerplant_electricityBus_3) ++22.10688196847366 flow(powerplant_electricityBus_4) ++22.10688196847366 flow(powerplant_electricityBus_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(powerplant_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(powerplant_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(powerplant_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(powerplant_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(powerplant_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(powerplant_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(powerplant_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(powerplant_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(powerplant_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(powerplant_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(powerplant_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(powerplant_electricityBus_5) = 0 c_e_NonConvexFlowBlock_status_nominal_constraint(powerplant_electricityBus_0)_: @@ -65,166 +65,166 @@ c_e_NonConvexFlowBlock_status_nominal_constraint(powerplant_electricityBus_5)_: -999 NonConvexFlowBlock_status(powerplant_electricityBus_5) = 0 -c_u_NonConvexFlowBlock_min(powerplant_electricityBus_0_0)_: --1 flow(powerplant_electricityBus_0_0) +c_u_NonConvexFlowBlock_min(powerplant_electricityBus_0)_: +-1 flow(powerplant_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_min(powerplant_electricityBus_0_1)_: --1 flow(powerplant_electricityBus_0_1) +c_u_NonConvexFlowBlock_min(powerplant_electricityBus_1)_: +-1 flow(powerplant_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_min(powerplant_electricityBus_1_2)_: --1 flow(powerplant_electricityBus_1_2) +c_u_NonConvexFlowBlock_min(powerplant_electricityBus_2)_: +-1 flow(powerplant_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_min(powerplant_electricityBus_1_3)_: --1 flow(powerplant_electricityBus_1_3) +c_u_NonConvexFlowBlock_min(powerplant_electricityBus_3)_: +-1 flow(powerplant_electricityBus_3) <= 0 -c_u_NonConvexFlowBlock_min(powerplant_electricityBus_2_4)_: --1 flow(powerplant_electricityBus_2_4) +c_u_NonConvexFlowBlock_min(powerplant_electricityBus_4)_: +-1 flow(powerplant_electricityBus_4) <= 0 -c_u_NonConvexFlowBlock_min(powerplant_electricityBus_2_5)_: --1 flow(powerplant_electricityBus_2_5) +c_u_NonConvexFlowBlock_min(powerplant_electricityBus_5)_: +-1 flow(powerplant_electricityBus_5) <= 0 -c_u_NonConvexFlowBlock_max(powerplant_electricityBus_0_0)_: -+1 flow(powerplant_electricityBus_0_0) +c_u_NonConvexFlowBlock_max(powerplant_electricityBus_0)_: ++1 flow(powerplant_electricityBus_0) -1 NonConvexFlowBlock_status_nominal(powerplant_electricityBus_0) <= 0 -c_u_NonConvexFlowBlock_max(powerplant_electricityBus_0_1)_: -+1 flow(powerplant_electricityBus_0_1) +c_u_NonConvexFlowBlock_max(powerplant_electricityBus_1)_: ++1 flow(powerplant_electricityBus_1) -1 NonConvexFlowBlock_status_nominal(powerplant_electricityBus_1) <= 0 -c_u_NonConvexFlowBlock_max(powerplant_electricityBus_1_2)_: -+1 flow(powerplant_electricityBus_1_2) +c_u_NonConvexFlowBlock_max(powerplant_electricityBus_2)_: ++1 flow(powerplant_electricityBus_2) -1 NonConvexFlowBlock_status_nominal(powerplant_electricityBus_2) <= 0 -c_u_NonConvexFlowBlock_max(powerplant_electricityBus_1_3)_: -+1 flow(powerplant_electricityBus_1_3) +c_u_NonConvexFlowBlock_max(powerplant_electricityBus_3)_: ++1 flow(powerplant_electricityBus_3) -1 NonConvexFlowBlock_status_nominal(powerplant_electricityBus_3) <= 0 -c_u_NonConvexFlowBlock_max(powerplant_electricityBus_2_4)_: -+1 flow(powerplant_electricityBus_2_4) +c_u_NonConvexFlowBlock_max(powerplant_electricityBus_4)_: ++1 flow(powerplant_electricityBus_4) -1 NonConvexFlowBlock_status_nominal(powerplant_electricityBus_4) <= 0 -c_u_NonConvexFlowBlock_max(powerplant_electricityBus_2_5)_: -+1 flow(powerplant_electricityBus_2_5) +c_u_NonConvexFlowBlock_max(powerplant_electricityBus_5)_: ++1 flow(powerplant_electricityBus_5) -1 NonConvexFlowBlock_status_nominal(powerplant_electricityBus_5) <= 0 -c_e_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_0_0)_: +c_e_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_0)_: +1 NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_0) = 0 -c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_0_1)_: +c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_1)_: -1 NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_1) + [ --1 flow(powerplant_electricityBus_0_0) * NonConvexFlowBlock_status(powerplant_electricityBus_0) -+1 flow(powerplant_electricityBus_0_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) +-1 flow(powerplant_electricityBus_0) * NonConvexFlowBlock_status(powerplant_electricityBus_0) ++1 flow(powerplant_electricityBus_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) ] <= 0 -c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_1_2)_: +c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_2)_: -1 NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_2) + [ --1 flow(powerplant_electricityBus_0_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) -+1 flow(powerplant_electricityBus_1_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) +-1 flow(powerplant_electricityBus_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) ++1 flow(powerplant_electricityBus_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) ] <= 0 -c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_1_3)_: +c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_3)_: -1 NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_3) + [ --1 flow(powerplant_electricityBus_1_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) -+1 flow(powerplant_electricityBus_1_3) * NonConvexFlowBlock_status(powerplant_electricityBus_3) +-1 flow(powerplant_electricityBus_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) ++1 flow(powerplant_electricityBus_3) * NonConvexFlowBlock_status(powerplant_electricityBus_3) ] <= 0 -c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_2_4)_: +c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_4)_: -1 NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_4) + [ --1 flow(powerplant_electricityBus_1_3) * NonConvexFlowBlock_status(powerplant_electricityBus_3) -+1 flow(powerplant_electricityBus_2_4) * NonConvexFlowBlock_status(powerplant_electricityBus_4) +-1 flow(powerplant_electricityBus_3) * NonConvexFlowBlock_status(powerplant_electricityBus_3) ++1 flow(powerplant_electricityBus_4) * NonConvexFlowBlock_status(powerplant_electricityBus_4) ] <= 0 -c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_2_5)_: +c_u_NonConvexFlowBlock_positive_gradient_constr(powerplant_electricityBus_5)_: -1 NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_5) + [ --1 flow(powerplant_electricityBus_2_4) * NonConvexFlowBlock_status(powerplant_electricityBus_4) -+1 flow(powerplant_electricityBus_2_5) * NonConvexFlowBlock_status(powerplant_electricityBus_5) +-1 flow(powerplant_electricityBus_4) * NonConvexFlowBlock_status(powerplant_electricityBus_4) ++1 flow(powerplant_electricityBus_5) * NonConvexFlowBlock_status(powerplant_electricityBus_5) ] <= 0 -c_e_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_0_0)_: +c_e_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_0)_: +1 NonConvexFlowBlock_negative_gradient(powerplant_electricityBus_0) = 0 -c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_0_1)_: +c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_1)_: -1 NonConvexFlowBlock_negative_gradient(powerplant_electricityBus_1) + [ -+1 flow(powerplant_electricityBus_0_0) * NonConvexFlowBlock_status(powerplant_electricityBus_0) --1 flow(powerplant_electricityBus_0_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) ++1 flow(powerplant_electricityBus_0) * NonConvexFlowBlock_status(powerplant_electricityBus_0) +-1 flow(powerplant_electricityBus_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) ] <= 0 -c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_1_2)_: +c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_2)_: -1 NonConvexFlowBlock_negative_gradient(powerplant_electricityBus_2) + [ -+1 flow(powerplant_electricityBus_0_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) --1 flow(powerplant_electricityBus_1_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) ++1 flow(powerplant_electricityBus_1) * NonConvexFlowBlock_status(powerplant_electricityBus_1) +-1 flow(powerplant_electricityBus_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) ] <= 0 -c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_1_3)_: +c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_3)_: -1 NonConvexFlowBlock_negative_gradient(powerplant_electricityBus_3) + [ -+1 flow(powerplant_electricityBus_1_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) --1 flow(powerplant_electricityBus_1_3) * NonConvexFlowBlock_status(powerplant_electricityBus_3) ++1 flow(powerplant_electricityBus_2) * NonConvexFlowBlock_status(powerplant_electricityBus_2) +-1 flow(powerplant_electricityBus_3) * NonConvexFlowBlock_status(powerplant_electricityBus_3) ] <= 0 -c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_2_4)_: +c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_4)_: -1 NonConvexFlowBlock_negative_gradient(powerplant_electricityBus_4) + [ -+1 flow(powerplant_electricityBus_1_3) * NonConvexFlowBlock_status(powerplant_electricityBus_3) --1 flow(powerplant_electricityBus_2_4) * NonConvexFlowBlock_status(powerplant_electricityBus_4) ++1 flow(powerplant_electricityBus_3) * NonConvexFlowBlock_status(powerplant_electricityBus_3) +-1 flow(powerplant_electricityBus_4) * NonConvexFlowBlock_status(powerplant_electricityBus_4) ] <= 0 -c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_2_5)_: +c_u_NonConvexFlowBlock_negative_gradient_constr(powerplant_electricityBus_5)_: -1 NonConvexFlowBlock_negative_gradient(powerplant_electricityBus_5) + [ -+1 flow(powerplant_electricityBus_2_4) * NonConvexFlowBlock_status(powerplant_electricityBus_4) --1 flow(powerplant_electricityBus_2_5) * NonConvexFlowBlock_status(powerplant_electricityBus_5) ++1 flow(powerplant_electricityBus_4) * NonConvexFlowBlock_status(powerplant_electricityBus_4) +-1 flow(powerplant_electricityBus_5) * NonConvexFlowBlock_status(powerplant_electricityBus_5) ] <= 0 bounds - 0 <= flow(powerplant_electricityBus_0_0) <= 999 - 0 <= flow(powerplant_electricityBus_0_1) <= 999 - 0 <= flow(powerplant_electricityBus_1_2) <= 999 - 0 <= flow(powerplant_electricityBus_1_3) <= 999 - 0 <= flow(powerplant_electricityBus_2_4) <= 999 - 0 <= flow(powerplant_electricityBus_2_5) <= 999 + 0 <= flow(powerplant_electricityBus_0) <= 999 + 0 <= flow(powerplant_electricityBus_1) <= 999 + 0 <= flow(powerplant_electricityBus_2) <= 999 + 0 <= flow(powerplant_electricityBus_3) <= 999 + 0 <= flow(powerplant_electricityBus_4) <= 999 + 0 <= flow(powerplant_electricityBus_5) <= 999 0 <= NonConvexFlowBlock_status_nominal(powerplant_electricityBus_0) <= +inf - 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_0) <= 1 0 <= NonConvexFlowBlock_status_nominal(powerplant_electricityBus_1) <= +inf - 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_1) <= 1 0 <= NonConvexFlowBlock_status_nominal(powerplant_electricityBus_2) <= +inf - 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_2) <= 1 0 <= NonConvexFlowBlock_status_nominal(powerplant_electricityBus_3) <= +inf - 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_3) <= 1 0 <= NonConvexFlowBlock_status_nominal(powerplant_electricityBus_4) <= +inf - 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_4) <= 1 0 <= NonConvexFlowBlock_status_nominal(powerplant_electricityBus_5) <= +inf + 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_0) <= 1 + 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_1) <= 1 + 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_2) <= 1 + 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_3) <= 1 + 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_4) <= 1 0 <= NonConvexFlowBlock_status(powerplant_electricityBus_5) <= 1 0 <= NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_0) <= +inf 0 <= NonConvexFlowBlock_positive_gradient(powerplant_electricityBus_1) <= +inf diff --git a/tests/lp_files/storage.lp b/tests/lp_files/storage.lp index 073f266b7..603d6cbe6 100644 --- a/tests/lp_files/storage.lp +++ b/tests/lp_files/storage.lp @@ -2,52 +2,68 @@ min objective: -+4000.0 ONE_VAR_CONSTANT ++56 flow(electricityBus_storage_no_invest_0) ++56 flow(electricityBus_storage_no_invest_1) ++56 flow(electricityBus_storage_no_invest_2) ++24 flow(storage_no_invest_electricityBus_0) ++24 flow(storage_no_invest_electricityBus_1) ++24 flow(storage_no_invest_electricityBus_2) +0.1 GenericStorageBlock_storage_content(storage_no_invest_1) -+0.1 GenericStorageBlock_storage_content(storage_no_invest_2) -+0.1 GenericStorageBlock_storage_content(storage_no_invest_3) -+56 flow(electricityBus_storage_no_invest_0_0) -+56 flow(electricityBus_storage_no_invest_0_1) -+56 flow(electricityBus_storage_no_invest_0_2) -+24 flow(storage_no_invest_electricityBus_0_0) -+24 flow(storage_no_invest_electricityBus_0_1) -+24 flow(storage_no_invest_electricityBus_0_2) ++0.2 GenericStorageBlock_storage_content(storage_no_invest_2) ++0.3 GenericStorageBlock_storage_content(storage_no_invest_3) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage_no_invest_0_0) -+1 flow(storage_no_invest_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage_no_invest_0) ++1 flow(storage_no_invest_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage_no_invest_0_1) -+1 flow(storage_no_invest_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage_no_invest_1) ++1 flow(storage_no_invest_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: --1 flow(electricityBus_storage_no_invest_0_2) -+1 flow(storage_no_invest_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage_no_invest_2) ++1 flow(storage_no_invest_electricityBus_2) = 0 -c_e_GenericStorageBlock_balance(storage_no_invest_0_0)_: --0.97 flow(electricityBus_storage_no_invest_0_0) -+1.1627906976744187 flow(storage_no_invest_electricityBus_0_0) -+1 GenericStorageBlock_storage_content(storage_no_invest_1) -= 34800.0 +c_e_GenericStorageBlock_losses(storage_no_invest_0)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_0) += -5200.0 -c_e_GenericStorageBlock_balance(storage_no_invest_0_1)_: --0.97 flow(electricityBus_storage_no_invest_0_1) -+1.1627906976744187 flow(storage_no_invest_electricityBus_0_1) --0.87 GenericStorageBlock_storage_content(storage_no_invest_1) -+1 GenericStorageBlock_storage_content(storage_no_invest_2) +c_e_GenericStorageBlock_losses(storage_no_invest_1)_: ++0.13 GenericStorageBlock_storage_content(storage_no_invest_1) +-1 GenericStorageBlock_storage_losses(storage_no_invest_1) = 0 -c_e_GenericStorageBlock_balance(storage_no_invest_0_2)_: --0.97 flow(electricityBus_storage_no_invest_0_2) -+1.1627906976744187 flow(storage_no_invest_electricityBus_0_2) --0.87 GenericStorageBlock_storage_content(storage_no_invest_2) -+1 GenericStorageBlock_storage_content(storage_no_invest_3) +c_e_GenericStorageBlock_losses(storage_no_invest_2)_: ++0.13 GenericStorageBlock_storage_content(storage_no_invest_2) +-1 GenericStorageBlock_storage_losses(storage_no_invest_2) += 0 + +c_e_GenericStorageBlock_balance(storage_no_invest_0)_: ++0.97 flow(electricityBus_storage_no_invest_0) +-1.1627906976744187 flow(storage_no_invest_electricityBus_0) +-1 GenericStorageBlock_storage_content(storage_no_invest_1) +-1 GenericStorageBlock_storage_losses(storage_no_invest_0) += -40000.0 + +c_e_GenericStorageBlock_balance(storage_no_invest_1)_: ++0.97 flow(electricityBus_storage_no_invest_1) +-1.1627906976744187 flow(storage_no_invest_electricityBus_1) ++1 GenericStorageBlock_storage_content(storage_no_invest_1) +-1 GenericStorageBlock_storage_content(storage_no_invest_2) +-1 GenericStorageBlock_storage_losses(storage_no_invest_1) += 0 + +c_e_GenericStorageBlock_balance(storage_no_invest_2)_: ++0.97 flow(electricityBus_storage_no_invest_2) +-1.1627906976744187 flow(storage_no_invest_electricityBus_2) ++1 GenericStorageBlock_storage_content(storage_no_invest_2) +-1 GenericStorageBlock_storage_content(storage_no_invest_3) +-1 GenericStorageBlock_storage_losses(storage_no_invest_2) = 0 c_e_GenericStorageBlock_balanced_cstr(storage_no_invest)_: @@ -55,14 +71,16 @@ c_e_GenericStorageBlock_balanced_cstr(storage_no_invest)_: = 40000.0 bounds - +1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(electricityBus_storage_no_invest_0_0) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_0_1) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_0_2) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_0_0) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_0_1) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_0_2) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_0) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_1) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_2) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_0) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_1) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_2) <= 16667 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_1) <= 100000.0 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_2) <= 100000.0 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_3) <= 100000.0 + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_2) <= +inf end diff --git a/tests/lp_files/storage_fixed_losses.lp b/tests/lp_files/storage_fixed_losses.lp index ca4def3ee..d0b53a8fd 100644 --- a/tests/lp_files/storage_fixed_losses.lp +++ b/tests/lp_files/storage_fixed_losses.lp @@ -2,61 +2,81 @@ min objective: -+56 flow(electricityBus_storage_no_invest_0_0) -+56 flow(electricityBus_storage_no_invest_0_1) -+56 flow(electricityBus_storage_no_invest_0_2) -+24 flow(storage_no_invest_electricityBus_0_0) -+24 flow(storage_no_invest_electricityBus_0_1) -+24 flow(storage_no_invest_electricityBus_0_2) ++56 flow(electricityBus_storage_no_invest_0) ++56 flow(electricityBus_storage_no_invest_1) ++56 flow(electricityBus_storage_no_invest_2) ++24 flow(storage_no_invest_electricityBus_0) ++24 flow(storage_no_invest_electricityBus_1) ++24 flow(storage_no_invest_electricityBus_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage_no_invest_0_0) -+1 flow(storage_no_invest_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage_no_invest_0) ++1 flow(storage_no_invest_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage_no_invest_0_1) -+1 flow(storage_no_invest_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage_no_invest_1) ++1 flow(storage_no_invest_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: --1 flow(electricityBus_storage_no_invest_0_2) -+1 flow(storage_no_invest_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage_no_invest_2) ++1 flow(storage_no_invest_electricityBus_2) = 0 -c_e_GenericStorageBlock_balance(storage_no_invest_0_0)_: --0.97 flow(electricityBus_storage_no_invest_0_0) -+1.1627906976744187 flow(storage_no_invest_electricityBus_0_0) -+1 GenericStorageBlock_storage_content(storage_no_invest_1) -= 33797.0 +c_e_GenericStorageBlock_losses(storage_no_invest_0)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_0) += -6203.0 -c_e_GenericStorageBlock_balance(storage_no_invest_0_1)_: --0.97 flow(electricityBus_storage_no_invest_0_1) -+1.1627906976744187 flow(storage_no_invest_electricityBus_0_1) --0.87 GenericStorageBlock_storage_content(storage_no_invest_1) -+1 GenericStorageBlock_storage_content(storage_no_invest_2) +c_e_GenericStorageBlock_losses(storage_no_invest_1)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_1) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_1) = -1003.0 -c_e_GenericStorageBlock_balance(storage_no_invest_0_2)_: --0.97 flow(electricityBus_storage_no_invest_0_2) -+1.1627906976744187 flow(storage_no_invest_electricityBus_0_2) --0.87 GenericStorageBlock_storage_content(storage_no_invest_2) -+1 GenericStorageBlock_storage_content(storage_no_invest_3) +c_e_GenericStorageBlock_losses(storage_no_invest_2)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_2) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_2) = -1003.0 +c_e_GenericStorageBlock_balance(storage_no_invest_0)_: ++0.97 flow(electricityBus_storage_no_invest_0) +-1.1627906976744187 flow(storage_no_invest_electricityBus_0) +-1 GenericStorageBlock_storage_losses(storage_no_invest_0) +-1 GenericStorageBlock_storage_content(storage_no_invest_1) += -40000.0 + +c_e_GenericStorageBlock_balance(storage_no_invest_1)_: ++0.97 flow(electricityBus_storage_no_invest_1) +-1.1627906976744187 flow(storage_no_invest_electricityBus_1) +-1 GenericStorageBlock_storage_losses(storage_no_invest_1) ++1 GenericStorageBlock_storage_content(storage_no_invest_1) +-1 GenericStorageBlock_storage_content(storage_no_invest_2) += 0 + +c_e_GenericStorageBlock_balance(storage_no_invest_2)_: ++0.97 flow(electricityBus_storage_no_invest_2) +-1.1627906976744187 flow(storage_no_invest_electricityBus_2) +-1 GenericStorageBlock_storage_losses(storage_no_invest_2) ++1 GenericStorageBlock_storage_content(storage_no_invest_2) +-1 GenericStorageBlock_storage_content(storage_no_invest_3) += 0 + c_e_GenericStorageBlock_balanced_cstr(storage_no_invest)_: +1 GenericStorageBlock_storage_content(storage_no_invest_3) = 40000.0 bounds - 0 <= flow(electricityBus_storage_no_invest_0_0) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_0_1) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_0_2) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_0_0) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_0_1) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_0_2) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_0) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_1) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_2) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_0) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_1) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_2) <= 16667 + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_2) <= +inf 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_1) <= 100000.0 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_2) <= 100000.0 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_3) <= 100000.0 diff --git a/tests/lp_files/storage_fixed_losses_multi_period.lp b/tests/lp_files/storage_fixed_losses_multi_period.lp index 04ed25c3c..d75898a74 100644 --- a/tests/lp_files/storage_fixed_losses_multi_period.lp +++ b/tests/lp_files/storage_fixed_losses_multi_period.lp @@ -2,109 +2,150 @@ min objective: -+56 flow(electricityBus_storage_no_invest_0_0) -+56 flow(electricityBus_storage_no_invest_0_1) -+54.90196078431372 flow(electricityBus_storage_no_invest_1_2) -+54.90196078431372 flow(electricityBus_storage_no_invest_1_3) -+53.82545174932718 flow(electricityBus_storage_no_invest_2_4) -+53.82545174932718 flow(electricityBus_storage_no_invest_2_5) -+24 flow(storage_no_invest_electricityBus_0_0) -+24 flow(storage_no_invest_electricityBus_0_1) -+23.52941176470588 flow(storage_no_invest_electricityBus_1_2) -+23.52941176470588 flow(storage_no_invest_electricityBus_1_3) -+23.06805074971165 flow(storage_no_invest_electricityBus_2_4) -+23.06805074971165 flow(storage_no_invest_electricityBus_2_5) ++56 flow(electricityBus_storage_no_invest_0) ++56 flow(electricityBus_storage_no_invest_1) ++54.90196078431372 flow(electricityBus_storage_no_invest_2) ++54.90196078431372 flow(electricityBus_storage_no_invest_3) ++53.82545174932718 flow(electricityBus_storage_no_invest_4) ++53.82545174932718 flow(electricityBus_storage_no_invest_5) ++24 flow(storage_no_invest_electricityBus_0) ++24 flow(storage_no_invest_electricityBus_1) ++23.52941176470588 flow(storage_no_invest_electricityBus_2) ++23.52941176470588 flow(storage_no_invest_electricityBus_3) ++23.06805074971165 flow(storage_no_invest_electricityBus_4) ++23.06805074971165 flow(storage_no_invest_electricityBus_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage_no_invest_0_0) -+1 flow(storage_no_invest_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage_no_invest_0) ++1 flow(storage_no_invest_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage_no_invest_0_1) -+1 flow(storage_no_invest_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage_no_invest_1) ++1 flow(storage_no_invest_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: --1 flow(electricityBus_storage_no_invest_1_2) -+1 flow(storage_no_invest_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage_no_invest_2) ++1 flow(storage_no_invest_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: --1 flow(electricityBus_storage_no_invest_1_3) -+1 flow(storage_no_invest_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage_no_invest_3) ++1 flow(storage_no_invest_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: --1 flow(electricityBus_storage_no_invest_2_4) -+1 flow(storage_no_invest_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage_no_invest_4) ++1 flow(storage_no_invest_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: --1 flow(electricityBus_storage_no_invest_2_5) -+1 flow(storage_no_invest_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage_no_invest_5) ++1 flow(storage_no_invest_electricityBus_5) = 0 -c_e_GenericStorageBlock_balance(storage_no_invest_0_0)_: --0.97 flow(electricityBus_storage_no_invest_0_0) -+1.1627906976744187 flow(storage_no_invest_electricityBus_0_0) -+1 GenericStorageBlock_storage_content(storage_no_invest_1) -= 33797.0 +c_e_GenericStorageBlock_losses(storage_no_invest_0)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_0) += -6203.0 -c_e_GenericStorageBlock_balance(storage_no_invest_0_1)_: --0.97 flow(electricityBus_storage_no_invest_0_1) -+1.1627906976744187 flow(storage_no_invest_electricityBus_0_1) --0.87 GenericStorageBlock_storage_content(storage_no_invest_1) -+1 GenericStorageBlock_storage_content(storage_no_invest_2) +c_e_GenericStorageBlock_losses(storage_no_invest_1)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_1) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_1) = -1003.0 -c_e_GenericStorageBlock_balance(storage_no_invest_1_2)_: --0.97 flow(electricityBus_storage_no_invest_1_2) -+1.1627906976744187 flow(storage_no_invest_electricityBus_1_2) --0.87 GenericStorageBlock_storage_content(storage_no_invest_2) -+1 GenericStorageBlock_storage_content(storage_no_invest_3) +c_e_GenericStorageBlock_losses(storage_no_invest_2)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_2) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_2) = -1003.0 -c_e_GenericStorageBlock_balance(storage_no_invest_1_3)_: --0.97 flow(electricityBus_storage_no_invest_1_3) -+1.1627906976744187 flow(storage_no_invest_electricityBus_1_3) --0.87 GenericStorageBlock_storage_content(storage_no_invest_3) -+1 GenericStorageBlock_storage_content(storage_no_invest_4) +c_e_GenericStorageBlock_losses(storage_no_invest_3)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_3) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_3) = -1003.0 -c_e_GenericStorageBlock_balance(storage_no_invest_2_4)_: --0.97 flow(electricityBus_storage_no_invest_2_4) -+1.1627906976744187 flow(storage_no_invest_electricityBus_2_4) --0.87 GenericStorageBlock_storage_content(storage_no_invest_4) -+1 GenericStorageBlock_storage_content(storage_no_invest_5) +c_e_GenericStorageBlock_losses(storage_no_invest_4)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_4) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_4) = -1003.0 -c_e_GenericStorageBlock_balance(storage_no_invest_2_5)_: --0.97 flow(electricityBus_storage_no_invest_2_5) -+1.1627906976744187 flow(storage_no_invest_electricityBus_2_5) --0.87 GenericStorageBlock_storage_content(storage_no_invest_5) -+1 GenericStorageBlock_storage_content(storage_no_invest_6) +c_e_GenericStorageBlock_losses(storage_no_invest_5)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_5) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_5) = -1003.0 +c_e_GenericStorageBlock_balance(storage_no_invest_0)_: ++0.97 flow(electricityBus_storage_no_invest_0) +-1.1627906976744187 flow(storage_no_invest_electricityBus_0) +-1 GenericStorageBlock_storage_losses(storage_no_invest_0) +-1 GenericStorageBlock_storage_content(storage_no_invest_1) += -40000.0 + +c_e_GenericStorageBlock_balance(storage_no_invest_1)_: ++0.97 flow(electricityBus_storage_no_invest_1) +-1.1627906976744187 flow(storage_no_invest_electricityBus_1) +-1 GenericStorageBlock_storage_losses(storage_no_invest_1) ++1 GenericStorageBlock_storage_content(storage_no_invest_1) +-1 GenericStorageBlock_storage_content(storage_no_invest_2) += 0 + +c_e_GenericStorageBlock_balance(storage_no_invest_2)_: ++0.97 flow(electricityBus_storage_no_invest_2) +-1.1627906976744187 flow(storage_no_invest_electricityBus_2) +-1 GenericStorageBlock_storage_losses(storage_no_invest_2) ++1 GenericStorageBlock_storage_content(storage_no_invest_2) +-1 GenericStorageBlock_storage_content(storage_no_invest_3) += 0 + +c_e_GenericStorageBlock_balance(storage_no_invest_3)_: ++0.97 flow(electricityBus_storage_no_invest_3) +-1.1627906976744187 flow(storage_no_invest_electricityBus_3) +-1 GenericStorageBlock_storage_losses(storage_no_invest_3) ++1 GenericStorageBlock_storage_content(storage_no_invest_3) +-1 GenericStorageBlock_storage_content(storage_no_invest_4) += 0 + +c_e_GenericStorageBlock_balance(storage_no_invest_4)_: ++0.97 flow(electricityBus_storage_no_invest_4) +-1.1627906976744187 flow(storage_no_invest_electricityBus_4) +-1 GenericStorageBlock_storage_losses(storage_no_invest_4) ++1 GenericStorageBlock_storage_content(storage_no_invest_4) +-1 GenericStorageBlock_storage_content(storage_no_invest_5) += 0 + +c_e_GenericStorageBlock_balance(storage_no_invest_5)_: ++0.97 flow(electricityBus_storage_no_invest_5) +-1.1627906976744187 flow(storage_no_invest_electricityBus_5) +-1 GenericStorageBlock_storage_losses(storage_no_invest_5) ++1 GenericStorageBlock_storage_content(storage_no_invest_5) +-1 GenericStorageBlock_storage_content(storage_no_invest_6) += 0 + c_e_GenericStorageBlock_balanced_cstr(storage_no_invest)_: +1 GenericStorageBlock_storage_content(storage_no_invest_6) = 40000.0 bounds - 0 <= flow(electricityBus_storage_no_invest_0_0) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_0_1) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_1_2) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_1_3) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_2_4) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_2_5) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_0_0) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_0_1) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_1_2) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_1_3) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_2_4) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_2_5) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_0) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_1) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_2) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_3) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_4) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_5) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_0) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_1) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_2) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_3) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_4) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_5) <= 16667 + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_3) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_4) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_5) <= +inf 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_1) <= 100000.0 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_2) <= 100000.0 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_3) <= 100000.0 diff --git a/tests/lp_files/storage_invest_1.lp b/tests/lp_files/storage_invest_1.lp index d40a61114..c6f8a4183 100644 --- a/tests/lp_files/storage_invest_1.lp +++ b/tests/lp_files/storage_invest_1.lp @@ -2,29 +2,29 @@ min objective: -+56 flow(electricityBus_storage1_0_0) -+56 flow(electricityBus_storage1_0_1) -+56 flow(electricityBus_storage1_0_2) -+24 flow(storage1_electricityBus_0_0) -+24 flow(storage1_electricityBus_0_1) -+24 flow(storage1_electricityBus_0_2) ++56 flow(electricityBus_storage1_0) ++56 flow(electricityBus_storage1_1) ++56 flow(electricityBus_storage1_2) ++24 flow(storage1_electricityBus_0) ++24 flow(storage1_electricityBus_1) ++24 flow(storage1_electricityBus_2) +145 GenericInvestmentStorageBlock_invest(storage1_0) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage1_0_0) -+1 flow(storage1_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage1_0_1) -+1 flow(storage1_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: --1 flow(electricityBus_storage1_0_2) -+1 flow(storage1_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage1_0)_: @@ -38,32 +38,32 @@ c_e_InvestmentFlowBlock_total_rule(storage1_electricityBus_0)_: = 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_0)_: -+1 flow(electricityBus_storage1_0_0) ++1 flow(electricityBus_storage1_0) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_1)_: -+1 flow(electricityBus_storage1_0_1) ++1 flow(electricityBus_storage1_1) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_2)_: -+1 flow(electricityBus_storage1_0_2) ++1 flow(electricityBus_storage1_2) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_0)_: -+1 flow(storage1_electricityBus_0_0) ++1 flow(storage1_electricityBus_0) -1 InvestmentFlowBlock_total(storage1_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_1)_: -+1 flow(storage1_electricityBus_0_1) ++1 flow(storage1_electricityBus_1) -1 InvestmentFlowBlock_total(storage1_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_2)_: -+1 flow(storage1_electricityBus_0_2) ++1 flow(storage1_electricityBus_2) -1 InvestmentFlowBlock_total(storage1_electricityBus_0) <= 0 @@ -78,22 +78,22 @@ c_u_GenericInvestmentStorageBlock_init_content_limit(storage1)_: <= 0 c_e_GenericInvestmentStorageBlock_balance_first(storage1)_: --0.97 flow(electricityBus_storage1_0_0) -+1.1627906976744187 flow(storage1_electricityBus_0_0) +-0.97 flow(electricityBus_storage1_0) ++1.1627906976744187 flow(storage1_electricityBus_0) -0.87 GenericInvestmentStorageBlock_init_content(storage1) +1 GenericInvestmentStorageBlock_storage_content(storage1_0) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_1)_: --0.97 flow(electricityBus_storage1_0_1) -+1.1627906976744187 flow(storage1_electricityBus_0_1) +-0.97 flow(electricityBus_storage1_1) ++1.1627906976744187 flow(storage1_electricityBus_1) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_0) +1 GenericInvestmentStorageBlock_storage_content(storage1_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_2)_: --0.97 flow(electricityBus_storage1_0_2) -+1.1627906976744187 flow(storage1_electricityBus_0_2) +-0.97 flow(electricityBus_storage1_2) ++1.1627906976744187 flow(storage1_electricityBus_2) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_1) +1 GenericInvestmentStorageBlock_storage_content(storage1_2) = 0 @@ -144,16 +144,16 @@ c_u_GenericInvestmentStorageBlock_min_storage_content(storage1_0_2)_: <= 0 bounds - 0 <= flow(electricityBus_storage1_0_0) <= +inf - 0 <= flow(electricityBus_storage1_0_1) <= +inf - 0 <= flow(electricityBus_storage1_0_2) <= +inf - 0 <= flow(storage1_electricityBus_0_0) <= +inf - 0 <= flow(storage1_electricityBus_0_1) <= +inf - 0 <= flow(storage1_electricityBus_0_2) <= +inf + 0 <= flow(electricityBus_storage1_0) <= +inf + 0 <= flow(electricityBus_storage1_1) <= +inf + 0 <= flow(electricityBus_storage1_2) <= +inf + 0 <= flow(storage1_electricityBus_0) <= +inf + 0 <= flow(storage1_electricityBus_1) <= +inf + 0 <= flow(storage1_electricityBus_2) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage1_0) <= 234 0 <= InvestmentFlowBlock_total(electricityBus_storage1_0) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_0) <= +inf 0 <= InvestmentFlowBlock_total(storage1_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_0) <= +inf 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_init_content(storage1) <= +inf diff --git a/tests/lp_files/storage_invest_1_fixed_losses.lp b/tests/lp_files/storage_invest_1_fixed_losses.lp index 2ab9c0173..7675fad1e 100644 --- a/tests/lp_files/storage_invest_1_fixed_losses.lp +++ b/tests/lp_files/storage_invest_1_fixed_losses.lp @@ -2,29 +2,29 @@ min objective: -+56 flow(electricityBus_storage1_0_0) -+56 flow(electricityBus_storage1_0_1) -+56 flow(electricityBus_storage1_0_2) -+24 flow(storage1_electricityBus_0_0) -+24 flow(storage1_electricityBus_0_1) -+24 flow(storage1_electricityBus_0_2) ++56 flow(electricityBus_storage1_0) ++56 flow(electricityBus_storage1_1) ++56 flow(electricityBus_storage1_2) ++24 flow(storage1_electricityBus_0) ++24 flow(storage1_electricityBus_1) ++24 flow(storage1_electricityBus_2) +145 GenericInvestmentStorageBlock_invest(storage1_0) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage1_0_0) -+1 flow(storage1_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage1_0_1) -+1 flow(storage1_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: --1 flow(electricityBus_storage1_0_2) -+1 flow(storage1_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage1_0)_: @@ -38,32 +38,32 @@ c_e_InvestmentFlowBlock_total_rule(storage1_electricityBus_0)_: = 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_0)_: -+1 flow(electricityBus_storage1_0_0) ++1 flow(electricityBus_storage1_0) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_1)_: -+1 flow(electricityBus_storage1_0_1) ++1 flow(electricityBus_storage1_1) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_2)_: -+1 flow(electricityBus_storage1_0_2) ++1 flow(electricityBus_storage1_2) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_0)_: -+1 flow(storage1_electricityBus_0_0) ++1 flow(storage1_electricityBus_0) -1 InvestmentFlowBlock_total(storage1_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_1)_: -+1 flow(storage1_electricityBus_0_1) ++1 flow(storage1_electricityBus_1) -1 InvestmentFlowBlock_total(storage1_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_2)_: -+1 flow(storage1_electricityBus_0_2) ++1 flow(storage1_electricityBus_2) -1 InvestmentFlowBlock_total(storage1_electricityBus_0) <= 0 @@ -78,24 +78,24 @@ c_u_GenericInvestmentStorageBlock_init_content_limit(storage1)_: <= 0 c_e_GenericInvestmentStorageBlock_balance_first(storage1)_: --0.97 flow(electricityBus_storage1_0_0) -+1.1627906976744187 flow(storage1_electricityBus_0_0) +-0.97 flow(electricityBus_storage1_0) ++1.1627906976744187 flow(storage1_electricityBus_0) +0.01 GenericInvestmentStorageBlock_invest(storage1_0) -0.87 GenericInvestmentStorageBlock_init_content(storage1) +1 GenericInvestmentStorageBlock_storage_content(storage1_0) = -3.0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_1)_: --0.97 flow(electricityBus_storage1_0_1) -+1.1627906976744187 flow(storage1_electricityBus_0_1) +-0.97 flow(electricityBus_storage1_1) ++1.1627906976744187 flow(storage1_electricityBus_1) +0.01 GenericInvestmentStorageBlock_total(storage1_0) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_0) +1 GenericInvestmentStorageBlock_storage_content(storage1_1) = -3.0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_2)_: --0.97 flow(electricityBus_storage1_0_2) -+1.1627906976744187 flow(storage1_electricityBus_0_2) +-0.97 flow(electricityBus_storage1_2) ++1.1627906976744187 flow(storage1_electricityBus_2) +0.01 GenericInvestmentStorageBlock_total(storage1_0) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_1) +1 GenericInvestmentStorageBlock_storage_content(storage1_2) @@ -147,16 +147,16 @@ c_u_GenericInvestmentStorageBlock_min_storage_content(storage1_0_2)_: <= 0 bounds - 0 <= flow(electricityBus_storage1_0_0) <= +inf - 0 <= flow(electricityBus_storage1_0_1) <= +inf - 0 <= flow(electricityBus_storage1_0_2) <= +inf - 0 <= flow(storage1_electricityBus_0_0) <= +inf - 0 <= flow(storage1_electricityBus_0_1) <= +inf - 0 <= flow(storage1_electricityBus_0_2) <= +inf + 0 <= flow(electricityBus_storage1_0) <= +inf + 0 <= flow(electricityBus_storage1_1) <= +inf + 0 <= flow(electricityBus_storage1_2) <= +inf + 0 <= flow(storage1_electricityBus_0) <= +inf + 0 <= flow(storage1_electricityBus_1) <= +inf + 0 <= flow(storage1_electricityBus_2) <= +inf 1 <= GenericInvestmentStorageBlock_invest(storage1_0) <= 234 0 <= InvestmentFlowBlock_total(electricityBus_storage1_0) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_0) <= +inf 0 <= InvestmentFlowBlock_total(storage1_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_0) <= +inf 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_init_content(storage1) <= +inf diff --git a/tests/lp_files/storage_invest_1_multi_period.lp b/tests/lp_files/storage_invest_1_multi_period.lp index bd64f44ed..09a4b975e 100644 --- a/tests/lp_files/storage_invest_1_multi_period.lp +++ b/tests/lp_files/storage_invest_1_multi_period.lp @@ -2,52 +2,52 @@ min objective: -+56 flow(electricityBus_storage1_0_0) -+56 flow(electricityBus_storage1_0_1) -+54.90196078431372 flow(electricityBus_storage1_1_2) -+54.90196078431372 flow(electricityBus_storage1_1_3) -+53.82545174932718 flow(electricityBus_storage1_2_4) -+53.82545174932718 flow(electricityBus_storage1_2_5) -+24 flow(storage1_electricityBus_0_0) -+24 flow(storage1_electricityBus_0_1) -+23.52941176470588 flow(storage1_electricityBus_1_2) -+23.52941176470588 flow(storage1_electricityBus_1_3) -+23.06805074971165 flow(storage1_electricityBus_2_4) -+23.06805074971165 flow(storage1_electricityBus_2_5) ++56 flow(electricityBus_storage1_0) ++56 flow(electricityBus_storage1_1) ++54.90196078431372 flow(electricityBus_storage1_2) ++54.90196078431372 flow(electricityBus_storage1_3) ++53.82545174932718 flow(electricityBus_storage1_4) ++53.82545174932718 flow(electricityBus_storage1_5) ++24 flow(storage1_electricityBus_0) ++24 flow(storage1_electricityBus_1) ++23.52941176470588 flow(storage1_electricityBus_2) ++23.52941176470588 flow(storage1_electricityBus_3) ++23.06805074971165 flow(storage1_electricityBus_4) ++23.06805074971165 flow(storage1_electricityBus_5) +31.685467778602654 GenericInvestmentStorageBlock_invest(storage1_0) +21.210358847924045 GenericInvestmentStorageBlock_invest(storage1_1) +10.650825820334894 GenericInvestmentStorageBlock_invest(storage1_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage1_0_0) -+1 flow(storage1_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage1_0_1) -+1 flow(storage1_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: --1 flow(electricityBus_storage1_1_2) -+1 flow(storage1_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: --1 flow(electricityBus_storage1_1_3) -+1 flow(storage1_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage1_3) ++1 flow(storage1_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: --1 flow(electricityBus_storage1_2_4) -+1 flow(storage1_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage1_4) ++1 flow(storage1_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: --1 flow(electricityBus_storage1_2_5) -+1 flow(storage1_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage1_5) ++1 flow(storage1_electricityBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage1_0)_: @@ -137,9 +137,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(storage1_electricityBus_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage1_0)_: ++1 InvestmentFlowBlock_old(electricityBus_storage1_0) -1 InvestmentFlowBlock_old_end(electricityBus_storage1_0) -1 InvestmentFlowBlock_old_exo(electricityBus_storage1_0) -+1 InvestmentFlowBlock_old(electricityBus_storage1_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage1_1)_: @@ -155,9 +155,9 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_storage1_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(storage1_electricityBus_0)_: ++1 InvestmentFlowBlock_old(storage1_electricityBus_0) -1 InvestmentFlowBlock_old_end(storage1_electricityBus_0) -1 InvestmentFlowBlock_old_exo(storage1_electricityBus_0) -+1 InvestmentFlowBlock_old(storage1_electricityBus_0) = 0 c_e_InvestmentFlowBlock_old_rule(storage1_electricityBus_1)_: @@ -173,62 +173,62 @@ c_e_InvestmentFlowBlock_old_rule(storage1_electricityBus_2)_: = 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_0)_: -+1 flow(electricityBus_storage1_0_0) ++1 flow(electricityBus_storage1_0) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_1)_: -+1 flow(electricityBus_storage1_0_1) ++1 flow(electricityBus_storage1_1) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_1_2)_: -+1 flow(electricityBus_storage1_1_2) ++1 flow(electricityBus_storage1_2) -1 InvestmentFlowBlock_total(electricityBus_storage1_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_1_3)_: -+1 flow(electricityBus_storage1_1_3) ++1 flow(electricityBus_storage1_3) -1 InvestmentFlowBlock_total(electricityBus_storage1_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_2_4)_: -+1 flow(electricityBus_storage1_2_4) ++1 flow(electricityBus_storage1_4) -1 InvestmentFlowBlock_total(electricityBus_storage1_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_2_5)_: -+1 flow(electricityBus_storage1_2_5) ++1 flow(electricityBus_storage1_5) -1 InvestmentFlowBlock_total(electricityBus_storage1_2) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_0)_: -+1 flow(storage1_electricityBus_0_0) ++1 flow(storage1_electricityBus_0) -1 InvestmentFlowBlock_total(storage1_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_1)_: -+1 flow(storage1_electricityBus_0_1) ++1 flow(storage1_electricityBus_1) -1 InvestmentFlowBlock_total(storage1_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_1_2)_: -+1 flow(storage1_electricityBus_1_2) ++1 flow(storage1_electricityBus_2) -1 InvestmentFlowBlock_total(storage1_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_1_3)_: -+1 flow(storage1_electricityBus_1_3) ++1 flow(storage1_electricityBus_3) -1 InvestmentFlowBlock_total(storage1_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_2_4)_: -+1 flow(storage1_electricityBus_2_4) ++1 flow(storage1_electricityBus_4) -1 InvestmentFlowBlock_total(storage1_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_2_5)_: -+1 flow(storage1_electricityBus_2_5) ++1 flow(storage1_electricityBus_5) -1 InvestmentFlowBlock_total(storage1_electricityBus_2) <= 0 @@ -276,9 +276,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage1_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage1_0)_: ++1 GenericInvestmentStorageBlock_old(storage1_0) -1 GenericInvestmentStorageBlock_old_end(storage1_0) -1 GenericInvestmentStorageBlock_old_exo(storage1_0) -+1 GenericInvestmentStorageBlock_old(storage1_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage1_1)_: @@ -298,36 +298,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage1_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_1)_: --0.97 flow(electricityBus_storage1_0_1) -+1.1627906976744187 flow(storage1_electricityBus_0_1) +-0.97 flow(electricityBus_storage1_1) ++1.1627906976744187 flow(storage1_electricityBus_1) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_0) +1 GenericInvestmentStorageBlock_storage_content(storage1_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_1_2)_: --0.97 flow(electricityBus_storage1_1_2) -+1.1627906976744187 flow(storage1_electricityBus_1_2) +-0.97 flow(electricityBus_storage1_2) ++1.1627906976744187 flow(storage1_electricityBus_2) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_1) +1 GenericInvestmentStorageBlock_storage_content(storage1_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_1_3)_: --0.97 flow(electricityBus_storage1_1_3) -+1.1627906976744187 flow(storage1_electricityBus_1_3) +-0.97 flow(electricityBus_storage1_3) ++1.1627906976744187 flow(storage1_electricityBus_3) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_2) +1 GenericInvestmentStorageBlock_storage_content(storage1_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_2_4)_: --0.97 flow(electricityBus_storage1_2_4) -+1.1627906976744187 flow(storage1_electricityBus_2_4) +-0.97 flow(electricityBus_storage1_4) ++1.1627906976744187 flow(storage1_electricityBus_4) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_3) +1 GenericInvestmentStorageBlock_storage_content(storage1_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_2_5)_: --0.97 flow(electricityBus_storage1_2_5) -+1.1627906976744187 flow(storage1_electricityBus_2_5) +-0.97 flow(electricityBus_storage1_5) ++1.1627906976744187 flow(storage1_electricityBus_5) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_4) +1 GenericInvestmentStorageBlock_storage_content(storage1_5) = 0 @@ -439,36 +439,38 @@ c_l_GenericInvestmentStorageBlock_overall_minimum(storage1)_: >= 2 bounds - 0 <= flow(electricityBus_storage1_0_0) <= +inf - 0 <= flow(electricityBus_storage1_0_1) <= +inf - 0 <= flow(electricityBus_storage1_1_2) <= +inf - 0 <= flow(electricityBus_storage1_1_3) <= +inf - 0 <= flow(electricityBus_storage1_2_4) <= +inf - 0 <= flow(electricityBus_storage1_2_5) <= +inf - 0 <= flow(storage1_electricityBus_0_0) <= +inf - 0 <= flow(storage1_electricityBus_0_1) <= +inf - 0 <= flow(storage1_electricityBus_1_2) <= +inf - 0 <= flow(storage1_electricityBus_1_3) <= +inf - 0 <= flow(storage1_electricityBus_2_4) <= +inf - 0 <= flow(storage1_electricityBus_2_5) <= +inf + 0 <= flow(electricityBus_storage1_0) <= +inf + 0 <= flow(electricityBus_storage1_1) <= +inf + 0 <= flow(electricityBus_storage1_2) <= +inf + 0 <= flow(electricityBus_storage1_3) <= +inf + 0 <= flow(electricityBus_storage1_4) <= +inf + 0 <= flow(electricityBus_storage1_5) <= +inf + 0 <= flow(storage1_electricityBus_0) <= +inf + 0 <= flow(storage1_electricityBus_1) <= +inf + 0 <= flow(storage1_electricityBus_2) <= +inf + 0 <= flow(storage1_electricityBus_3) <= +inf + 0 <= flow(storage1_electricityBus_4) <= +inf + 0 <= flow(storage1_electricityBus_5) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage1_0) <= 234 0 <= GenericInvestmentStorageBlock_invest(storage1_1) <= 234 0 <= GenericInvestmentStorageBlock_invest(storage1_2) <= 234 0 <= InvestmentFlowBlock_total(electricityBus_storage1_0) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage1_1) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage1_1) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage1_2) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage1_2) <= +inf 0 <= InvestmentFlowBlock_total(storage1_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(storage1_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(storage1_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(storage1_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_0) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_1) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_2) <= +inf + 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage1_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage1_1) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage1_2) <= +inf + 0 <= InvestmentFlowBlock_old(storage1_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(storage1_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old(storage1_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage1_0) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage1_1) <= +inf @@ -482,12 +484,11 @@ bounds 0 <= InvestmentFlowBlock_old_exo(storage1_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage1_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage1_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage1_0) <= +inf - 0 <= InvestmentFlowBlock_old(storage1_electricityBus_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage1_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage1_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage1_1) <= +inf @@ -495,7 +496,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage1_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_2) <= +inf diff --git a/tests/lp_files/storage_invest_1_multi_period_remaining_value.lp b/tests/lp_files/storage_invest_1_multi_period_remaining_value.lp index 674580183..ec26ba614 100644 --- a/tests/lp_files/storage_invest_1_multi_period_remaining_value.lp +++ b/tests/lp_files/storage_invest_1_multi_period_remaining_value.lp @@ -2,71 +2,52 @@ min objective: -+56 flow(electricityBus_storage1_0_0) -+56 flow(electricityBus_storage1_0_1) -+54.90196078431372 flow(electricityBus_storage1_1_2) -+54.90196078431372 flow(electricityBus_storage1_1_3) -+53.82545174932718 flow(electricityBus_storage1_2_4) -+53.82545174932718 flow(electricityBus_storage1_2_5) -+24 flow(storage1_electricityBus_0_0) -+24 flow(storage1_electricityBus_0_1) -+23.52941176470588 flow(storage1_electricityBus_1_2) -+23.52941176470588 flow(storage1_electricityBus_1_3) -+23.06805074971165 flow(storage1_electricityBus_2_4) -+23.06805074971165 flow(storage1_electricityBus_2_5) ++56 flow(electricityBus_storage1_0) ++56 flow(electricityBus_storage1_1) ++54.90196078431372 flow(electricityBus_storage1_2) ++54.90196078431372 flow(electricityBus_storage1_3) ++53.82545174932718 flow(electricityBus_storage1_4) ++53.82545174932718 flow(electricityBus_storage1_5) ++24 flow(storage1_electricityBus_0) ++24 flow(storage1_electricityBus_1) ++23.52941176470588 flow(storage1_electricityBus_2) ++23.52941176470588 flow(storage1_electricityBus_3) ++23.06805074971165 flow(storage1_electricityBus_4) ++23.06805074971165 flow(storage1_electricityBus_5) +3.415797742191323 GenericInvestmentStorageBlock_invest(storage1_0) +4.881348776484851 GenericInvestmentStorageBlock_invest(storage1_1) +8.44720668509319 GenericInvestmentStorageBlock_invest(storage1_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage1_0_0) -+1 flow(storage1_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage1_0_1) -+1 flow(storage1_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: --1 flow(electricityBus_storage1_1_2) -+1 flow(storage1_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: --1 flow(electricityBus_storage1_1_3) -+1 flow(storage1_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage1_3) ++1 flow(storage1_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: --1 flow(electricityBus_storage1_2_4) -+1 flow(storage1_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage1_4) ++1 flow(storage1_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: --1 flow(electricityBus_storage1_2_5) -+1 flow(storage1_electricityBus_2_5) -= 0 - -c_e_InvestmentFlowBlock_total_rule(storage1_electricityBus_0)_: -+1 InvestmentFlowBlock_total(storage1_electricityBus_0) --1 InvestmentFlowBlock_invest(storage1_electricityBus_0) -= 0 - -c_e_InvestmentFlowBlock_total_rule(storage1_electricityBus_1)_: --1 InvestmentFlowBlock_total(storage1_electricityBus_0) -+1 InvestmentFlowBlock_total(storage1_electricityBus_1) --1 InvestmentFlowBlock_invest(storage1_electricityBus_1) -+1 InvestmentFlowBlock_old(storage1_electricityBus_1) -= 0 - -c_e_InvestmentFlowBlock_total_rule(storage1_electricityBus_2)_: --1 InvestmentFlowBlock_total(storage1_electricityBus_1) -+1 InvestmentFlowBlock_total(storage1_electricityBus_2) --1 InvestmentFlowBlock_invest(storage1_electricityBus_2) -+1 InvestmentFlowBlock_old(storage1_electricityBus_2) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage1_5) ++1 flow(storage1_electricityBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage1_0)_: @@ -88,16 +69,23 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_storage1_2)_: +1 InvestmentFlowBlock_old(electricityBus_storage1_2) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage1_electricityBus_0)_: -+1 InvestmentFlowBlock_old_end(storage1_electricityBus_0) +c_e_InvestmentFlowBlock_total_rule(storage1_electricityBus_0)_: ++1 InvestmentFlowBlock_total(storage1_electricityBus_0) +-1 InvestmentFlowBlock_invest(storage1_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage1_electricityBus_1)_: -+1 InvestmentFlowBlock_old_end(storage1_electricityBus_1) +c_e_InvestmentFlowBlock_total_rule(storage1_electricityBus_1)_: +-1 InvestmentFlowBlock_total(storage1_electricityBus_0) ++1 InvestmentFlowBlock_total(storage1_electricityBus_1) +-1 InvestmentFlowBlock_invest(storage1_electricityBus_1) ++1 InvestmentFlowBlock_old(storage1_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage1_electricityBus_2)_: -+1 InvestmentFlowBlock_old_end(storage1_electricityBus_2) +c_e_InvestmentFlowBlock_total_rule(storage1_electricityBus_2)_: +-1 InvestmentFlowBlock_total(storage1_electricityBus_1) ++1 InvestmentFlowBlock_total(storage1_electricityBus_2) +-1 InvestmentFlowBlock_invest(storage1_electricityBus_2) ++1 InvestmentFlowBlock_old(storage1_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule_end(electricityBus_storage1_0)_: @@ -112,16 +100,16 @@ c_e_InvestmentFlowBlock_old_rule_end(electricityBus_storage1_2)_: +1 InvestmentFlowBlock_old_end(electricityBus_storage1_2) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage1_electricityBus_0)_: -+1 InvestmentFlowBlock_old_exo(storage1_electricityBus_0) +c_e_InvestmentFlowBlock_old_rule_end(storage1_electricityBus_0)_: ++1 InvestmentFlowBlock_old_end(storage1_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage1_electricityBus_1)_: -+1 InvestmentFlowBlock_old_exo(storage1_electricityBus_1) +c_e_InvestmentFlowBlock_old_rule_end(storage1_electricityBus_1)_: ++1 InvestmentFlowBlock_old_end(storage1_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage1_electricityBus_2)_: -+1 InvestmentFlowBlock_old_exo(storage1_electricityBus_2) +c_e_InvestmentFlowBlock_old_rule_end(storage1_electricityBus_2)_: ++1 InvestmentFlowBlock_old_end(storage1_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage1_0)_: @@ -136,28 +124,22 @@ c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage1_2)_: +1 InvestmentFlowBlock_old_exo(electricityBus_storage1_2) = 0 -c_e_InvestmentFlowBlock_old_rule(storage1_electricityBus_0)_: --1 InvestmentFlowBlock_old_end(storage1_electricityBus_0) --1 InvestmentFlowBlock_old_exo(storage1_electricityBus_0) -+1 InvestmentFlowBlock_old(storage1_electricityBus_0) +c_e_InvestmentFlowBlock_old_rule_exo(storage1_electricityBus_0)_: ++1 InvestmentFlowBlock_old_exo(storage1_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule(storage1_electricityBus_1)_: -+1 InvestmentFlowBlock_old(storage1_electricityBus_1) --1 InvestmentFlowBlock_old_end(storage1_electricityBus_1) --1 InvestmentFlowBlock_old_exo(storage1_electricityBus_1) +c_e_InvestmentFlowBlock_old_rule_exo(storage1_electricityBus_1)_: ++1 InvestmentFlowBlock_old_exo(storage1_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule(storage1_electricityBus_2)_: -+1 InvestmentFlowBlock_old(storage1_electricityBus_2) --1 InvestmentFlowBlock_old_end(storage1_electricityBus_2) --1 InvestmentFlowBlock_old_exo(storage1_electricityBus_2) +c_e_InvestmentFlowBlock_old_rule_exo(storage1_electricityBus_2)_: ++1 InvestmentFlowBlock_old_exo(storage1_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage1_0)_: ++1 InvestmentFlowBlock_old(electricityBus_storage1_0) -1 InvestmentFlowBlock_old_end(electricityBus_storage1_0) -1 InvestmentFlowBlock_old_exo(electricityBus_storage1_0) -+1 InvestmentFlowBlock_old(electricityBus_storage1_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage1_1)_: @@ -172,66 +154,84 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_storage1_2)_: -1 InvestmentFlowBlock_old_exo(electricityBus_storage1_2) = 0 -c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_0)_: -+1 flow(storage1_electricityBus_0_0) --1 InvestmentFlowBlock_total(storage1_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 InvestmentFlowBlock_total(storage1_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage1_electricityBus_1_2)_: -+1 flow(storage1_electricityBus_1_2) --1 InvestmentFlowBlock_total(storage1_electricityBus_1) -<= 0 - -c_u_InvestmentFlowBlock_max(storage1_electricityBus_1_3)_: -+1 flow(storage1_electricityBus_1_3) --1 InvestmentFlowBlock_total(storage1_electricityBus_1) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage1_electricityBus_0)_: ++1 InvestmentFlowBlock_old(storage1_electricityBus_0) +-1 InvestmentFlowBlock_old_end(storage1_electricityBus_0) +-1 InvestmentFlowBlock_old_exo(storage1_electricityBus_0) += 0 -c_u_InvestmentFlowBlock_max(storage1_electricityBus_2_4)_: -+1 flow(storage1_electricityBus_2_4) --1 InvestmentFlowBlock_total(storage1_electricityBus_2) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage1_electricityBus_1)_: ++1 InvestmentFlowBlock_old(storage1_electricityBus_1) +-1 InvestmentFlowBlock_old_end(storage1_electricityBus_1) +-1 InvestmentFlowBlock_old_exo(storage1_electricityBus_1) += 0 -c_u_InvestmentFlowBlock_max(storage1_electricityBus_2_5)_: -+1 flow(storage1_electricityBus_2_5) --1 InvestmentFlowBlock_total(storage1_electricityBus_2) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage1_electricityBus_2)_: ++1 InvestmentFlowBlock_old(storage1_electricityBus_2) +-1 InvestmentFlowBlock_old_end(storage1_electricityBus_2) +-1 InvestmentFlowBlock_old_exo(storage1_electricityBus_2) += 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_0)_: -+1 flow(electricityBus_storage1_0_0) ++1 flow(electricityBus_storage1_0) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_1)_: -+1 flow(electricityBus_storage1_0_1) ++1 flow(electricityBus_storage1_1) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_1_2)_: -+1 flow(electricityBus_storage1_1_2) ++1 flow(electricityBus_storage1_2) -1 InvestmentFlowBlock_total(electricityBus_storage1_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_1_3)_: -+1 flow(electricityBus_storage1_1_3) ++1 flow(electricityBus_storage1_3) -1 InvestmentFlowBlock_total(electricityBus_storage1_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_2_4)_: -+1 flow(electricityBus_storage1_2_4) ++1 flow(electricityBus_storage1_4) -1 InvestmentFlowBlock_total(electricityBus_storage1_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_2_5)_: -+1 flow(electricityBus_storage1_2_5) ++1 flow(electricityBus_storage1_5) -1 InvestmentFlowBlock_total(electricityBus_storage1_2) <= 0 +c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_0)_: ++1 flow(storage1_electricityBus_0) +-1 InvestmentFlowBlock_total(storage1_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_1)_: ++1 flow(storage1_electricityBus_1) +-1 InvestmentFlowBlock_total(storage1_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage1_electricityBus_1_2)_: ++1 flow(storage1_electricityBus_2) +-1 InvestmentFlowBlock_total(storage1_electricityBus_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage1_electricityBus_1_3)_: ++1 flow(storage1_electricityBus_3) +-1 InvestmentFlowBlock_total(storage1_electricityBus_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage1_electricityBus_2_4)_: ++1 flow(storage1_electricityBus_4) +-1 InvestmentFlowBlock_total(storage1_electricityBus_2) +<= 0 + +c_u_InvestmentFlowBlock_max(storage1_electricityBus_2_5)_: ++1 flow(storage1_electricityBus_5) +-1 InvestmentFlowBlock_total(storage1_electricityBus_2) +<= 0 + c_e_GenericInvestmentStorageBlock_total_storage_rule(storage1_0)_: -1 GenericInvestmentStorageBlock_invest(storage1_0) +1 GenericInvestmentStorageBlock_total(storage1_0) @@ -276,9 +276,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage1_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage1_0)_: ++1 GenericInvestmentStorageBlock_old(storage1_0) -1 GenericInvestmentStorageBlock_old_end(storage1_0) -1 GenericInvestmentStorageBlock_old_exo(storage1_0) -+1 GenericInvestmentStorageBlock_old(storage1_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage1_1)_: @@ -298,36 +298,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage1_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_1)_: --0.97 flow(electricityBus_storage1_0_1) -+1.1627906976744187 flow(storage1_electricityBus_0_1) +-0.97 flow(electricityBus_storage1_1) ++1.1627906976744187 flow(storage1_electricityBus_1) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_0) +1 GenericInvestmentStorageBlock_storage_content(storage1_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_1_2)_: --0.97 flow(electricityBus_storage1_1_2) -+1.1627906976744187 flow(storage1_electricityBus_1_2) +-0.97 flow(electricityBus_storage1_2) ++1.1627906976744187 flow(storage1_electricityBus_2) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_1) +1 GenericInvestmentStorageBlock_storage_content(storage1_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_1_3)_: --0.97 flow(electricityBus_storage1_1_3) -+1.1627906976744187 flow(storage1_electricityBus_1_3) +-0.97 flow(electricityBus_storage1_3) ++1.1627906976744187 flow(storage1_electricityBus_3) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_2) +1 GenericInvestmentStorageBlock_storage_content(storage1_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_2_4)_: --0.97 flow(electricityBus_storage1_2_4) -+1.1627906976744187 flow(storage1_electricityBus_2_4) +-0.97 flow(electricityBus_storage1_4) ++1.1627906976744187 flow(storage1_electricityBus_4) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_3) +1 GenericInvestmentStorageBlock_storage_content(storage1_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_2_5)_: --0.97 flow(electricityBus_storage1_2_5) -+1.1627906976744187 flow(storage1_electricityBus_2_5) +-0.97 flow(electricityBus_storage1_5) ++1.1627906976744187 flow(storage1_electricityBus_5) -0.87 GenericInvestmentStorageBlock_storage_content(storage1_4) +1 GenericInvestmentStorageBlock_storage_content(storage1_5) = 0 @@ -439,55 +439,56 @@ c_l_GenericInvestmentStorageBlock_overall_minimum(storage1)_: >= 2 bounds - 0 <= flow(electricityBus_storage1_0_0) <= +inf - 0 <= flow(electricityBus_storage1_0_1) <= +inf - 0 <= flow(electricityBus_storage1_1_2) <= +inf - 0 <= flow(electricityBus_storage1_1_3) <= +inf - 0 <= flow(electricityBus_storage1_2_4) <= +inf - 0 <= flow(electricityBus_storage1_2_5) <= +inf - 0 <= flow(storage1_electricityBus_0_0) <= +inf - 0 <= flow(storage1_electricityBus_0_1) <= +inf - 0 <= flow(storage1_electricityBus_1_2) <= +inf - 0 <= flow(storage1_electricityBus_1_3) <= +inf - 0 <= flow(storage1_electricityBus_2_4) <= +inf - 0 <= flow(storage1_electricityBus_2_5) <= +inf + 0 <= flow(electricityBus_storage1_0) <= +inf + 0 <= flow(electricityBus_storage1_1) <= +inf + 0 <= flow(electricityBus_storage1_2) <= +inf + 0 <= flow(electricityBus_storage1_3) <= +inf + 0 <= flow(electricityBus_storage1_4) <= +inf + 0 <= flow(electricityBus_storage1_5) <= +inf + 0 <= flow(storage1_electricityBus_0) <= +inf + 0 <= flow(storage1_electricityBus_1) <= +inf + 0 <= flow(storage1_electricityBus_2) <= +inf + 0 <= flow(storage1_electricityBus_3) <= +inf + 0 <= flow(storage1_electricityBus_4) <= +inf + 0 <= flow(storage1_electricityBus_5) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage1_0) <= 234 0 <= GenericInvestmentStorageBlock_invest(storage1_1) <= 234 0 <= GenericInvestmentStorageBlock_invest(storage1_2) <= 234 + 0 <= InvestmentFlowBlock_total(electricityBus_storage1_0) <= +inf + 0 <= InvestmentFlowBlock_total(electricityBus_storage1_1) <= +inf + 0 <= InvestmentFlowBlock_total(electricityBus_storage1_2) <= +inf 0 <= InvestmentFlowBlock_total(storage1_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(storage1_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(storage1_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(storage1_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage1_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage1_0) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_0) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage1_1) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage1_1) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage1_2) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_2) <= +inf + 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage1_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage1_1) <= +inf 0 <= InvestmentFlowBlock_old(electricityBus_storage1_2) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage1_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage1_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage1_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(storage1_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(storage1_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old(storage1_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage1_0) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage1_1) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage1_2) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage1_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage1_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage1_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage1_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage1_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage1_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage1_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage1_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage1_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage1_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage1_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage1_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage1_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage1_electricityBus_2) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage1_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage1_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage1_1) <= +inf @@ -495,7 +496,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage1_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_2) <= +inf diff --git a/tests/lp_files/storage_invest_2.lp b/tests/lp_files/storage_invest_2.lp index 27a460ba8..3f62ef36b 100644 --- a/tests/lp_files/storage_invest_2.lp +++ b/tests/lp_files/storage_invest_2.lp @@ -8,19 +8,19 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage2_electricityBus_0_0) --1 flow(electricityBus_storage2_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage2_0) ++1 flow(storage2_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage2_electricityBus_0_1) --1 flow(electricityBus_storage2_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage2_1) ++1 flow(storage2_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(storage2_electricityBus_0_2) --1 flow(electricityBus_storage2_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage2_2) ++1 flow(storage2_electricityBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage2_0)_: @@ -34,32 +34,32 @@ c_e_InvestmentFlowBlock_total_rule(storage2_electricityBus_0)_: = 0 c_u_InvestmentFlowBlock_max(electricityBus_storage2_0_0)_: -+1 flow(electricityBus_storage2_0_0) ++1 flow(electricityBus_storage2_0) -1 InvestmentFlowBlock_total(electricityBus_storage2_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage2_0_1)_: -+1 flow(electricityBus_storage2_0_1) ++1 flow(electricityBus_storage2_1) -1 InvestmentFlowBlock_total(electricityBus_storage2_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage2_0_2)_: -+1 flow(electricityBus_storage2_0_2) ++1 flow(electricityBus_storage2_2) -1 InvestmentFlowBlock_total(electricityBus_storage2_0) <= 0 c_u_InvestmentFlowBlock_max(storage2_electricityBus_0_0)_: -+1 flow(storage2_electricityBus_0_0) ++1 flow(storage2_electricityBus_0) -1 InvestmentFlowBlock_total(storage2_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage2_electricityBus_0_1)_: -+1 flow(storage2_electricityBus_0_1) ++1 flow(storage2_electricityBus_1) -1 InvestmentFlowBlock_total(storage2_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage2_electricityBus_0_2)_: -+1 flow(storage2_electricityBus_0_2) ++1 flow(storage2_electricityBus_2) -1 InvestmentFlowBlock_total(storage2_electricityBus_0) <= 0 @@ -74,22 +74,22 @@ c_e_GenericInvestmentStorageBlock_init_content_fix(storage2)_: = 0 c_e_GenericInvestmentStorageBlock_balance_first(storage2)_: -+1 flow(storage2_electricityBus_0_0) --1 flow(electricityBus_storage2_0_0) +-1 flow(electricityBus_storage2_0) ++1 flow(storage2_electricityBus_0) -1 GenericInvestmentStorageBlock_init_content(storage2) +1 GenericInvestmentStorageBlock_storage_content(storage2_0) = 0 c_e_GenericInvestmentStorageBlock_balance(storage2_0_1)_: -+1 flow(storage2_electricityBus_0_1) --1 flow(electricityBus_storage2_0_1) +-1 flow(electricityBus_storage2_1) ++1 flow(storage2_electricityBus_1) -1 GenericInvestmentStorageBlock_storage_content(storage2_0) +1 GenericInvestmentStorageBlock_storage_content(storage2_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage2_0_2)_: -+1 flow(storage2_electricityBus_0_2) --1 flow(electricityBus_storage2_0_2) +-1 flow(electricityBus_storage2_2) ++1 flow(storage2_electricityBus_2) -1 GenericInvestmentStorageBlock_storage_content(storage2_1) +1 GenericInvestmentStorageBlock_storage_content(storage2_2) = 0 @@ -118,12 +118,12 @@ bounds 0 <= InvestmentFlowBlock_invest(electricityBus_storage2_0) <= +inf 0 <= InvestmentFlowBlock_invest(storage2_electricityBus_0) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage2_0) <= +inf - 0 <= flow(storage2_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage2_0_0) <= +inf - 0 <= flow(storage2_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage2_0_1) <= +inf - 0 <= flow(storage2_electricityBus_0_2) <= +inf - 0 <= flow(electricityBus_storage2_0_2) <= +inf + 0 <= flow(electricityBus_storage2_0) <= +inf + 0 <= flow(electricityBus_storage2_1) <= +inf + 0 <= flow(electricityBus_storage2_2) <= +inf + 0 <= flow(storage2_electricityBus_0) <= +inf + 0 <= flow(storage2_electricityBus_1) <= +inf + 0 <= flow(storage2_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage2_0) <= +inf 0 <= InvestmentFlowBlock_total(storage2_electricityBus_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage2_0) <= +inf diff --git a/tests/lp_files/storage_invest_2_multi_period.lp b/tests/lp_files/storage_invest_2_multi_period.lp index 816985cb6..e21fc5743 100644 --- a/tests/lp_files/storage_invest_2_multi_period.lp +++ b/tests/lp_files/storage_invest_2_multi_period.lp @@ -2,65 +2,46 @@ min objective: -+1.5873195277040417 InvestmentFlowBlock_invest(storage2_electricityBus_0) -+1.0477014265985347 InvestmentFlowBlock_invest(storage2_electricityBus_1) -+0.5186640725735326 InvestmentFlowBlock_invest(storage2_electricityBus_2) +17.46051480474446 InvestmentFlowBlock_invest(electricityBus_storage2_0) +11.524715692583884 InvestmentFlowBlock_invest(electricityBus_storage2_1) +5.705304798308859 InvestmentFlowBlock_invest(electricityBus_storage2_2) ++1.5873195277040417 InvestmentFlowBlock_invest(storage2_electricityBus_0) ++1.0477014265985347 InvestmentFlowBlock_invest(storage2_electricityBus_1) ++0.5186640725735326 InvestmentFlowBlock_invest(storage2_electricityBus_2) +25.57348127967623 GenericInvestmentStorageBlock_invest(storage2_0) +16.879634095198618 GenericInvestmentStorageBlock_invest(storage2_1) +8.35625450257358 GenericInvestmentStorageBlock_invest(storage2_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage2_electricityBus_0_0) --1 flow(electricityBus_storage2_0_0) -= 0 - -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage2_electricityBus_0_1) --1 flow(electricityBus_storage2_0_1) -= 0 - -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(storage2_electricityBus_1_2) --1 flow(electricityBus_storage2_1_2) -= 0 - -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(storage2_electricityBus_1_3) --1 flow(electricityBus_storage2_1_3) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage2_0) ++1 flow(storage2_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(storage2_electricityBus_2_4) --1 flow(electricityBus_storage2_2_4) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage2_1) ++1 flow(storage2_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(storage2_electricityBus_2_5) --1 flow(electricityBus_storage2_2_5) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage2_2) ++1 flow(storage2_electricityBus_2) = 0 -c_e_InvestmentFlowBlock_total_rule(storage2_electricityBus_0)_: --1 InvestmentFlowBlock_invest(storage2_electricityBus_0) -+1 InvestmentFlowBlock_total(storage2_electricityBus_0) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage2_3) ++1 flow(storage2_electricityBus_3) = 0 -c_e_InvestmentFlowBlock_total_rule(storage2_electricityBus_1)_: --1 InvestmentFlowBlock_invest(storage2_electricityBus_1) --1 InvestmentFlowBlock_total(storage2_electricityBus_0) -+1 InvestmentFlowBlock_total(storage2_electricityBus_1) -+1 InvestmentFlowBlock_old(storage2_electricityBus_1) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage2_4) ++1 flow(storage2_electricityBus_4) = 0 -c_e_InvestmentFlowBlock_total_rule(storage2_electricityBus_2)_: --1 InvestmentFlowBlock_invest(storage2_electricityBus_2) --1 InvestmentFlowBlock_total(storage2_electricityBus_1) -+1 InvestmentFlowBlock_total(storage2_electricityBus_2) -+1 InvestmentFlowBlock_old(storage2_electricityBus_2) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage2_5) ++1 flow(storage2_electricityBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage2_0)_: @@ -82,16 +63,23 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_storage2_2)_: +1 InvestmentFlowBlock_old(electricityBus_storage2_2) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage2_electricityBus_0)_: -+1 InvestmentFlowBlock_old_end(storage2_electricityBus_0) +c_e_InvestmentFlowBlock_total_rule(storage2_electricityBus_0)_: +-1 InvestmentFlowBlock_invest(storage2_electricityBus_0) ++1 InvestmentFlowBlock_total(storage2_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage2_electricityBus_1)_: -+1 InvestmentFlowBlock_old_end(storage2_electricityBus_1) +c_e_InvestmentFlowBlock_total_rule(storage2_electricityBus_1)_: +-1 InvestmentFlowBlock_invest(storage2_electricityBus_1) +-1 InvestmentFlowBlock_total(storage2_electricityBus_0) ++1 InvestmentFlowBlock_total(storage2_electricityBus_1) ++1 InvestmentFlowBlock_old(storage2_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage2_electricityBus_2)_: -+1 InvestmentFlowBlock_old_end(storage2_electricityBus_2) +c_e_InvestmentFlowBlock_total_rule(storage2_electricityBus_2)_: +-1 InvestmentFlowBlock_invest(storage2_electricityBus_2) +-1 InvestmentFlowBlock_total(storage2_electricityBus_1) ++1 InvestmentFlowBlock_total(storage2_electricityBus_2) ++1 InvestmentFlowBlock_old(storage2_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule_end(electricityBus_storage2_0)_: @@ -106,16 +94,16 @@ c_e_InvestmentFlowBlock_old_rule_end(electricityBus_storage2_2)_: +1 InvestmentFlowBlock_old_end(electricityBus_storage2_2) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage2_electricityBus_0)_: -+1 InvestmentFlowBlock_old_exo(storage2_electricityBus_0) +c_e_InvestmentFlowBlock_old_rule_end(storage2_electricityBus_0)_: ++1 InvestmentFlowBlock_old_end(storage2_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage2_electricityBus_1)_: -+1 InvestmentFlowBlock_old_exo(storage2_electricityBus_1) +c_e_InvestmentFlowBlock_old_rule_end(storage2_electricityBus_1)_: ++1 InvestmentFlowBlock_old_end(storage2_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage2_electricityBus_2)_: -+1 InvestmentFlowBlock_old_exo(storage2_electricityBus_2) +c_e_InvestmentFlowBlock_old_rule_end(storage2_electricityBus_2)_: ++1 InvestmentFlowBlock_old_end(storage2_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage2_0)_: @@ -130,28 +118,22 @@ c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage2_2)_: +1 InvestmentFlowBlock_old_exo(electricityBus_storage2_2) = 0 -c_e_InvestmentFlowBlock_old_rule(storage2_electricityBus_0)_: --1 InvestmentFlowBlock_old_end(storage2_electricityBus_0) --1 InvestmentFlowBlock_old_exo(storage2_electricityBus_0) -+1 InvestmentFlowBlock_old(storage2_electricityBus_0) +c_e_InvestmentFlowBlock_old_rule_exo(storage2_electricityBus_0)_: ++1 InvestmentFlowBlock_old_exo(storage2_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule(storage2_electricityBus_1)_: -+1 InvestmentFlowBlock_old(storage2_electricityBus_1) --1 InvestmentFlowBlock_old_end(storage2_electricityBus_1) --1 InvestmentFlowBlock_old_exo(storage2_electricityBus_1) +c_e_InvestmentFlowBlock_old_rule_exo(storage2_electricityBus_1)_: ++1 InvestmentFlowBlock_old_exo(storage2_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule(storage2_electricityBus_2)_: -+1 InvestmentFlowBlock_old(storage2_electricityBus_2) --1 InvestmentFlowBlock_old_end(storage2_electricityBus_2) --1 InvestmentFlowBlock_old_exo(storage2_electricityBus_2) +c_e_InvestmentFlowBlock_old_rule_exo(storage2_electricityBus_2)_: ++1 InvestmentFlowBlock_old_exo(storage2_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage2_0)_: ++1 InvestmentFlowBlock_old(electricityBus_storage2_0) -1 InvestmentFlowBlock_old_end(electricityBus_storage2_0) -1 InvestmentFlowBlock_old_exo(electricityBus_storage2_0) -+1 InvestmentFlowBlock_old(electricityBus_storage2_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage2_1)_: @@ -166,66 +148,84 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_storage2_2)_: -1 InvestmentFlowBlock_old_exo(electricityBus_storage2_2) = 0 -c_u_InvestmentFlowBlock_max(storage2_electricityBus_0_0)_: -+1 flow(storage2_electricityBus_0_0) --1 InvestmentFlowBlock_total(storage2_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage2_electricityBus_0_1)_: -+1 flow(storage2_electricityBus_0_1) --1 InvestmentFlowBlock_total(storage2_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage2_electricityBus_1_2)_: -+1 flow(storage2_electricityBus_1_2) --1 InvestmentFlowBlock_total(storage2_electricityBus_1) -<= 0 - -c_u_InvestmentFlowBlock_max(storage2_electricityBus_1_3)_: -+1 flow(storage2_electricityBus_1_3) --1 InvestmentFlowBlock_total(storage2_electricityBus_1) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage2_electricityBus_0)_: ++1 InvestmentFlowBlock_old(storage2_electricityBus_0) +-1 InvestmentFlowBlock_old_end(storage2_electricityBus_0) +-1 InvestmentFlowBlock_old_exo(storage2_electricityBus_0) += 0 -c_u_InvestmentFlowBlock_max(storage2_electricityBus_2_4)_: -+1 flow(storage2_electricityBus_2_4) --1 InvestmentFlowBlock_total(storage2_electricityBus_2) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage2_electricityBus_1)_: ++1 InvestmentFlowBlock_old(storage2_electricityBus_1) +-1 InvestmentFlowBlock_old_end(storage2_electricityBus_1) +-1 InvestmentFlowBlock_old_exo(storage2_electricityBus_1) += 0 -c_u_InvestmentFlowBlock_max(storage2_electricityBus_2_5)_: -+1 flow(storage2_electricityBus_2_5) --1 InvestmentFlowBlock_total(storage2_electricityBus_2) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage2_electricityBus_2)_: ++1 InvestmentFlowBlock_old(storage2_electricityBus_2) +-1 InvestmentFlowBlock_old_end(storage2_electricityBus_2) +-1 InvestmentFlowBlock_old_exo(storage2_electricityBus_2) += 0 c_u_InvestmentFlowBlock_max(electricityBus_storage2_0_0)_: -+1 flow(electricityBus_storage2_0_0) ++1 flow(electricityBus_storage2_0) -1 InvestmentFlowBlock_total(electricityBus_storage2_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage2_0_1)_: -+1 flow(electricityBus_storage2_0_1) ++1 flow(electricityBus_storage2_1) -1 InvestmentFlowBlock_total(electricityBus_storage2_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage2_1_2)_: -+1 flow(electricityBus_storage2_1_2) ++1 flow(electricityBus_storage2_2) -1 InvestmentFlowBlock_total(electricityBus_storage2_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage2_1_3)_: -+1 flow(electricityBus_storage2_1_3) ++1 flow(electricityBus_storage2_3) -1 InvestmentFlowBlock_total(electricityBus_storage2_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage2_2_4)_: -+1 flow(electricityBus_storage2_2_4) ++1 flow(electricityBus_storage2_4) -1 InvestmentFlowBlock_total(electricityBus_storage2_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage2_2_5)_: -+1 flow(electricityBus_storage2_2_5) ++1 flow(electricityBus_storage2_5) -1 InvestmentFlowBlock_total(electricityBus_storage2_2) <= 0 +c_u_InvestmentFlowBlock_max(storage2_electricityBus_0_0)_: ++1 flow(storage2_electricityBus_0) +-1 InvestmentFlowBlock_total(storage2_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage2_electricityBus_0_1)_: ++1 flow(storage2_electricityBus_1) +-1 InvestmentFlowBlock_total(storage2_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage2_electricityBus_1_2)_: ++1 flow(storage2_electricityBus_2) +-1 InvestmentFlowBlock_total(storage2_electricityBus_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage2_electricityBus_1_3)_: ++1 flow(storage2_electricityBus_3) +-1 InvestmentFlowBlock_total(storage2_electricityBus_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage2_electricityBus_2_4)_: ++1 flow(storage2_electricityBus_4) +-1 InvestmentFlowBlock_total(storage2_electricityBus_2) +<= 0 + +c_u_InvestmentFlowBlock_max(storage2_electricityBus_2_5)_: ++1 flow(storage2_electricityBus_5) +-1 InvestmentFlowBlock_total(storage2_electricityBus_2) +<= 0 + c_e_GenericInvestmentStorageBlock_total_storage_rule(storage2_0)_: -1 GenericInvestmentStorageBlock_invest(storage2_0) +1 GenericInvestmentStorageBlock_total(storage2_0) @@ -270,9 +270,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage2_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage2_0)_: ++1 GenericInvestmentStorageBlock_old(storage2_0) -1 GenericInvestmentStorageBlock_old_end(storage2_0) -1 GenericInvestmentStorageBlock_old_exo(storage2_0) -+1 GenericInvestmentStorageBlock_old(storage2_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage2_1)_: @@ -292,36 +292,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage2_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage2_0_1)_: -+1 flow(storage2_electricityBus_0_1) --1 flow(electricityBus_storage2_0_1) +-1 flow(electricityBus_storage2_1) ++1 flow(storage2_electricityBus_1) -1 GenericInvestmentStorageBlock_storage_content(storage2_0) +1 GenericInvestmentStorageBlock_storage_content(storage2_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage2_1_2)_: -+1 flow(storage2_electricityBus_1_2) --1 flow(electricityBus_storage2_1_2) +-1 flow(electricityBus_storage2_2) ++1 flow(storage2_electricityBus_2) -1 GenericInvestmentStorageBlock_storage_content(storage2_1) +1 GenericInvestmentStorageBlock_storage_content(storage2_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage2_1_3)_: -+1 flow(storage2_electricityBus_1_3) --1 flow(electricityBus_storage2_1_3) +-1 flow(electricityBus_storage2_3) ++1 flow(storage2_electricityBus_3) -1 GenericInvestmentStorageBlock_storage_content(storage2_2) +1 GenericInvestmentStorageBlock_storage_content(storage2_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage2_2_4)_: -+1 flow(storage2_electricityBus_2_4) --1 flow(electricityBus_storage2_2_4) +-1 flow(electricityBus_storage2_4) ++1 flow(storage2_electricityBus_4) -1 GenericInvestmentStorageBlock_storage_content(storage2_3) +1 GenericInvestmentStorageBlock_storage_content(storage2_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage2_2_5)_: -+1 flow(storage2_electricityBus_2_5) --1 flow(electricityBus_storage2_2_5) +-1 flow(electricityBus_storage2_5) ++1 flow(storage2_electricityBus_5) -1 GenericInvestmentStorageBlock_storage_content(storage2_4) +1 GenericInvestmentStorageBlock_storage_content(storage2_5) = 0 @@ -357,55 +357,56 @@ c_u_GenericInvestmentStorageBlock_max_storage_content(storage2_2_5)_: <= 0 bounds - 0 <= InvestmentFlowBlock_invest(storage2_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage2_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_invest(storage2_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage2_0) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage2_1) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage2_2) <= +inf + 0 <= InvestmentFlowBlock_invest(storage2_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage2_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_invest(storage2_electricityBus_2) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage2_0) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage2_1) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage2_2) <= +inf - 0 <= flow(storage2_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage2_0_0) <= +inf - 0 <= flow(storage2_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage2_0_1) <= +inf - 0 <= flow(storage2_electricityBus_1_2) <= +inf - 0 <= flow(electricityBus_storage2_1_2) <= +inf - 0 <= flow(storage2_electricityBus_1_3) <= +inf - 0 <= flow(electricityBus_storage2_1_3) <= +inf - 0 <= flow(storage2_electricityBus_2_4) <= +inf - 0 <= flow(electricityBus_storage2_2_4) <= +inf - 0 <= flow(storage2_electricityBus_2_5) <= +inf - 0 <= flow(electricityBus_storage2_2_5) <= +inf + 0 <= flow(electricityBus_storage2_0) <= +inf + 0 <= flow(electricityBus_storage2_1) <= +inf + 0 <= flow(electricityBus_storage2_2) <= +inf + 0 <= flow(electricityBus_storage2_3) <= +inf + 0 <= flow(electricityBus_storage2_4) <= +inf + 0 <= flow(electricityBus_storage2_5) <= +inf + 0 <= flow(storage2_electricityBus_0) <= +inf + 0 <= flow(storage2_electricityBus_1) <= +inf + 0 <= flow(storage2_electricityBus_2) <= +inf + 0 <= flow(storage2_electricityBus_3) <= +inf + 0 <= flow(storage2_electricityBus_4) <= +inf + 0 <= flow(storage2_electricityBus_5) <= +inf + 0 <= InvestmentFlowBlock_total(electricityBus_storage2_0) <= +inf + 0 <= InvestmentFlowBlock_total(electricityBus_storage2_1) <= +inf + 0 <= InvestmentFlowBlock_total(electricityBus_storage2_2) <= +inf 0 <= InvestmentFlowBlock_total(storage2_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(storage2_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(storage2_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(storage2_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage2_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage2_0) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage2_1) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage2_0) <= +inf 0 <= InvestmentFlowBlock_old(electricityBus_storage2_1) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage2_2) <= +inf 0 <= InvestmentFlowBlock_old(electricityBus_storage2_2) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage2_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage2_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage2_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(storage2_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(storage2_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old(storage2_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage2_0) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage2_1) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage2_2) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage2_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage2_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage2_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage2_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage2_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage2_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage2_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage2_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage2_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage2_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage2_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage2_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage2_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage2_electricityBus_2) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage2_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage2_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage2_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage2_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage2_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage2_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage2_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage2_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage2_1) <= +inf @@ -413,7 +414,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage2_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage2_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage2_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage2_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage2_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage2_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage2_2) <= +inf diff --git a/tests/lp_files/storage_invest_3.lp b/tests/lp_files/storage_invest_3.lp index 589d7e814..443171841 100644 --- a/tests/lp_files/storage_invest_3.lp +++ b/tests/lp_files/storage_invest_3.lp @@ -7,19 +7,19 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage3_electricityBus_0_0) --1 flow(electricityBus_storage3_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage3_0) ++1 flow(storage3_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage3_electricityBus_0_1) --1 flow(electricityBus_storage3_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage3_1) ++1 flow(storage3_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(storage3_electricityBus_0_2) --1 flow(electricityBus_storage3_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage3_2) ++1 flow(storage3_electricityBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(storage3_electricityBus_0)_: @@ -33,54 +33,69 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_storage3_0)_: = 0 c_u_InvestmentFlowBlock_max(storage3_electricityBus_0_0)_: -+1 flow(storage3_electricityBus_0_0) ++1 flow(storage3_electricityBus_0) -1 InvestmentFlowBlock_total(storage3_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage3_electricityBus_0_1)_: -+1 flow(storage3_electricityBus_0_1) ++1 flow(storage3_electricityBus_1) -1 InvestmentFlowBlock_total(storage3_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage3_electricityBus_0_2)_: -+1 flow(storage3_electricityBus_0_2) ++1 flow(storage3_electricityBus_2) -1 InvestmentFlowBlock_total(storage3_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage3_0_0)_: -+1 flow(electricityBus_storage3_0_0) ++1 flow(electricityBus_storage3_0) -1 InvestmentFlowBlock_total(electricityBus_storage3_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage3_0_1)_: -+1 flow(electricityBus_storage3_0_1) ++1 flow(electricityBus_storage3_1) -1 InvestmentFlowBlock_total(electricityBus_storage3_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage3_0_2)_: -+1 flow(electricityBus_storage3_0_2) ++1 flow(electricityBus_storage3_2) -1 InvestmentFlowBlock_total(electricityBus_storage3_0) <= 0 -c_e_GenericStorageBlock_balance(storage3_0_0)_: -+1 flow(storage3_electricityBus_0_0) --1 flow(electricityBus_storage3_0_0) -+1 GenericStorageBlock_storage_content(storage3_1) --1 GenericStorageBlock_storage_content(storage3_0) +c_e_GenericStorageBlock_losses(storage3_0)_: +-1 GenericStorageBlock_storage_losses(storage3_0) += 0 + +c_e_GenericStorageBlock_losses(storage3_1)_: +-1 GenericStorageBlock_storage_losses(storage3_1) = 0 -c_e_GenericStorageBlock_balance(storage3_0_1)_: -+1 flow(storage3_electricityBus_0_1) --1 flow(electricityBus_storage3_0_1) +c_e_GenericStorageBlock_losses(storage3_2)_: +-1 GenericStorageBlock_storage_losses(storage3_2) += 0 + +c_e_GenericStorageBlock_balance(storage3_0)_: ++1 flow(electricityBus_storage3_0) +-1 flow(storage3_electricityBus_0) +-1 GenericStorageBlock_storage_losses(storage3_0) ++1 GenericStorageBlock_storage_content(storage3_0) -1 GenericStorageBlock_storage_content(storage3_1) -+1 GenericStorageBlock_storage_content(storage3_2) = 0 -c_e_GenericStorageBlock_balance(storage3_0_2)_: -+1 flow(storage3_electricityBus_0_2) --1 flow(electricityBus_storage3_0_2) +c_e_GenericStorageBlock_balance(storage3_1)_: ++1 flow(electricityBus_storage3_1) +-1 flow(storage3_electricityBus_1) +-1 GenericStorageBlock_storage_losses(storage3_1) ++1 GenericStorageBlock_storage_content(storage3_1) -1 GenericStorageBlock_storage_content(storage3_2) -+1 GenericStorageBlock_storage_content(storage3_3) += 0 + +c_e_GenericStorageBlock_balance(storage3_2)_: ++1 flow(electricityBus_storage3_2) +-1 flow(storage3_electricityBus_2) +-1 GenericStorageBlock_storage_losses(storage3_2) ++1 GenericStorageBlock_storage_content(storage3_2) +-1 GenericStorageBlock_storage_content(storage3_3) = 0 c_e_GenericStorageBlock_balanced_cstr(storage3)_: @@ -91,16 +106,19 @@ c_e_GenericStorageBlock_balanced_cstr(storage3)_: bounds 0 <= InvestmentFlowBlock_invest(storage3_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage3_0) <= +inf - 0 <= flow(storage3_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage3_0_0) <= +inf - 0 <= flow(storage3_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage3_0_1) <= +inf - 0 <= flow(storage3_electricityBus_0_2) <= +inf - 0 <= flow(electricityBus_storage3_0_2) <= +inf + 0 <= flow(electricityBus_storage3_0) <= +inf + 0 <= flow(electricityBus_storage3_1) <= +inf + 0 <= flow(electricityBus_storage3_2) <= +inf + 0 <= flow(storage3_electricityBus_0) <= +inf + 0 <= flow(storage3_electricityBus_1) <= +inf + 0 <= flow(storage3_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_total(storage3_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage3_0) <= +inf - 0 <= GenericStorageBlock_storage_content(storage3_1) <= 5000 + -inf <= GenericStorageBlock_storage_losses(storage3_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage3_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage3_2) <= +inf 0 <= GenericStorageBlock_storage_content(storage3_0) <= 5000 + 0 <= GenericStorageBlock_storage_content(storage3_1) <= 5000 0 <= GenericStorageBlock_storage_content(storage3_2) <= 5000 0 <= GenericStorageBlock_storage_content(storage3_3) <= 5000 end diff --git a/tests/lp_files/storage_invest_3_multi_period.lp b/tests/lp_files/storage_invest_3_multi_period.lp index f5646972e..0c24907ff 100644 --- a/tests/lp_files/storage_invest_3_multi_period.lp +++ b/tests/lp_files/storage_invest_3_multi_period.lp @@ -2,43 +2,62 @@ min objective: -+98.99999999999999 InvestmentFlowBlock_invest(electricityBus_storage3_0) -+97.05882352941174 InvestmentFlowBlock_invest(electricityBus_storage3_1) -+48.0489225393128 InvestmentFlowBlock_invest(electricityBus_storage3_2) +1.5873195277040417 InvestmentFlowBlock_invest(storage3_electricityBus_0) +1.0477014265985347 InvestmentFlowBlock_invest(storage3_electricityBus_1) +0.5186640725735326 InvestmentFlowBlock_invest(storage3_electricityBus_2) ++98.99999999999999 InvestmentFlowBlock_invest(electricityBus_storage3_0) ++97.05882352941174 InvestmentFlowBlock_invest(electricityBus_storage3_1) ++48.0489225393128 InvestmentFlowBlock_invest(electricityBus_storage3_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage3_electricityBus_0_0) --1 flow(electricityBus_storage3_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage3_0) ++1 flow(storage3_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage3_electricityBus_0_1) --1 flow(electricityBus_storage3_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage3_1) ++1 flow(storage3_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(storage3_electricityBus_1_2) --1 flow(electricityBus_storage3_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage3_2) ++1 flow(storage3_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(storage3_electricityBus_1_3) --1 flow(electricityBus_storage3_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage3_3) ++1 flow(storage3_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(storage3_electricityBus_2_4) --1 flow(electricityBus_storage3_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage3_4) ++1 flow(storage3_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(storage3_electricityBus_2_5) --1 flow(electricityBus_storage3_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage3_5) ++1 flow(storage3_electricityBus_5) += 0 + +c_e_InvestmentFlowBlock_total_rule(storage3_electricityBus_0)_: +-1 InvestmentFlowBlock_invest(storage3_electricityBus_0) ++1 InvestmentFlowBlock_total(storage3_electricityBus_0) += 0 + +c_e_InvestmentFlowBlock_total_rule(storage3_electricityBus_1)_: +-1 InvestmentFlowBlock_invest(storage3_electricityBus_1) +-1 InvestmentFlowBlock_total(storage3_electricityBus_0) ++1 InvestmentFlowBlock_total(storage3_electricityBus_1) ++1 InvestmentFlowBlock_old(storage3_electricityBus_1) += 0 + +c_e_InvestmentFlowBlock_total_rule(storage3_electricityBus_2)_: +-1 InvestmentFlowBlock_invest(storage3_electricityBus_2) +-1 InvestmentFlowBlock_total(storage3_electricityBus_1) ++1 InvestmentFlowBlock_total(storage3_electricityBus_2) ++1 InvestmentFlowBlock_old(storage3_electricityBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage3_0)_: @@ -60,23 +79,16 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_storage3_2)_: +1 InvestmentFlowBlock_old(electricityBus_storage3_2) = 0 -c_e_InvestmentFlowBlock_total_rule(storage3_electricityBus_0)_: --1 InvestmentFlowBlock_invest(storage3_electricityBus_0) -+1 InvestmentFlowBlock_total(storage3_electricityBus_0) +c_e_InvestmentFlowBlock_old_rule_end(storage3_electricityBus_0)_: ++1 InvestmentFlowBlock_old_end(storage3_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_total_rule(storage3_electricityBus_1)_: --1 InvestmentFlowBlock_invest(storage3_electricityBus_1) --1 InvestmentFlowBlock_total(storage3_electricityBus_0) -+1 InvestmentFlowBlock_total(storage3_electricityBus_1) -+1 InvestmentFlowBlock_old(storage3_electricityBus_1) +c_e_InvestmentFlowBlock_old_rule_end(storage3_electricityBus_1)_: ++1 InvestmentFlowBlock_old_end(storage3_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_total_rule(storage3_electricityBus_2)_: --1 InvestmentFlowBlock_invest(storage3_electricityBus_2) --1 InvestmentFlowBlock_total(storage3_electricityBus_1) -+1 InvestmentFlowBlock_total(storage3_electricityBus_2) -+1 InvestmentFlowBlock_old(storage3_electricityBus_2) +c_e_InvestmentFlowBlock_old_rule_end(storage3_electricityBus_2)_: ++1 InvestmentFlowBlock_old_end(storage3_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule_end(electricityBus_storage3_0)_: @@ -92,16 +104,16 @@ c_e_InvestmentFlowBlock_old_rule_end(electricityBus_storage3_2)_: +1 InvestmentFlowBlock_old_end(electricityBus_storage3_2) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage3_electricityBus_0)_: -+1 InvestmentFlowBlock_old_end(storage3_electricityBus_0) +c_e_InvestmentFlowBlock_old_rule_exo(storage3_electricityBus_0)_: ++1 InvestmentFlowBlock_old_exo(storage3_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage3_electricityBus_1)_: -+1 InvestmentFlowBlock_old_end(storage3_electricityBus_1) +c_e_InvestmentFlowBlock_old_rule_exo(storage3_electricityBus_1)_: ++1 InvestmentFlowBlock_old_exo(storage3_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage3_electricityBus_2)_: -+1 InvestmentFlowBlock_old_end(storage3_electricityBus_2) +c_e_InvestmentFlowBlock_old_rule_exo(storage3_electricityBus_2)_: ++1 InvestmentFlowBlock_old_exo(storage3_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage3_0)_: @@ -116,22 +128,28 @@ c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage3_2)_: +1 InvestmentFlowBlock_old_exo(electricityBus_storage3_2) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage3_electricityBus_0)_: -+1 InvestmentFlowBlock_old_exo(storage3_electricityBus_0) +c_e_InvestmentFlowBlock_old_rule(storage3_electricityBus_0)_: ++1 InvestmentFlowBlock_old(storage3_electricityBus_0) +-1 InvestmentFlowBlock_old_end(storage3_electricityBus_0) +-1 InvestmentFlowBlock_old_exo(storage3_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage3_electricityBus_1)_: -+1 InvestmentFlowBlock_old_exo(storage3_electricityBus_1) +c_e_InvestmentFlowBlock_old_rule(storage3_electricityBus_1)_: ++1 InvestmentFlowBlock_old(storage3_electricityBus_1) +-1 InvestmentFlowBlock_old_end(storage3_electricityBus_1) +-1 InvestmentFlowBlock_old_exo(storage3_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage3_electricityBus_2)_: -+1 InvestmentFlowBlock_old_exo(storage3_electricityBus_2) +c_e_InvestmentFlowBlock_old_rule(storage3_electricityBus_2)_: ++1 InvestmentFlowBlock_old(storage3_electricityBus_2) +-1 InvestmentFlowBlock_old_end(storage3_electricityBus_2) +-1 InvestmentFlowBlock_old_exo(storage3_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage3_0)_: ++1 InvestmentFlowBlock_old(electricityBus_storage3_0) -1 InvestmentFlowBlock_old_end(electricityBus_storage3_0) -1 InvestmentFlowBlock_old_exo(electricityBus_storage3_0) -+1 InvestmentFlowBlock_old(electricityBus_storage3_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage3_1)_: @@ -146,124 +164,136 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_storage3_2)_: -1 InvestmentFlowBlock_old_exo(electricityBus_storage3_2) = 0 -c_e_InvestmentFlowBlock_old_rule(storage3_electricityBus_0)_: --1 InvestmentFlowBlock_old_end(storage3_electricityBus_0) --1 InvestmentFlowBlock_old_exo(storage3_electricityBus_0) -+1 InvestmentFlowBlock_old(storage3_electricityBus_0) -= 0 +c_u_InvestmentFlowBlock_max(storage3_electricityBus_0_0)_: ++1 flow(storage3_electricityBus_0) +-1 InvestmentFlowBlock_total(storage3_electricityBus_0) +<= 0 -c_e_InvestmentFlowBlock_old_rule(storage3_electricityBus_1)_: -+1 InvestmentFlowBlock_old(storage3_electricityBus_1) --1 InvestmentFlowBlock_old_end(storage3_electricityBus_1) --1 InvestmentFlowBlock_old_exo(storage3_electricityBus_1) -= 0 +c_u_InvestmentFlowBlock_max(storage3_electricityBus_0_1)_: ++1 flow(storage3_electricityBus_1) +-1 InvestmentFlowBlock_total(storage3_electricityBus_0) +<= 0 -c_e_InvestmentFlowBlock_old_rule(storage3_electricityBus_2)_: -+1 InvestmentFlowBlock_old(storage3_electricityBus_2) --1 InvestmentFlowBlock_old_end(storage3_electricityBus_2) --1 InvestmentFlowBlock_old_exo(storage3_electricityBus_2) -= 0 +c_u_InvestmentFlowBlock_max(storage3_electricityBus_1_2)_: ++1 flow(storage3_electricityBus_2) +-1 InvestmentFlowBlock_total(storage3_electricityBus_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage3_electricityBus_1_3)_: ++1 flow(storage3_electricityBus_3) +-1 InvestmentFlowBlock_total(storage3_electricityBus_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage3_electricityBus_2_4)_: ++1 flow(storage3_electricityBus_4) +-1 InvestmentFlowBlock_total(storage3_electricityBus_2) +<= 0 + +c_u_InvestmentFlowBlock_max(storage3_electricityBus_2_5)_: ++1 flow(storage3_electricityBus_5) +-1 InvestmentFlowBlock_total(storage3_electricityBus_2) +<= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage3_0_0)_: -+1 flow(electricityBus_storage3_0_0) ++1 flow(electricityBus_storage3_0) -1 InvestmentFlowBlock_total(electricityBus_storage3_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage3_0_1)_: -+1 flow(electricityBus_storage3_0_1) ++1 flow(electricityBus_storage3_1) -1 InvestmentFlowBlock_total(electricityBus_storage3_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage3_1_2)_: -+1 flow(electricityBus_storage3_1_2) ++1 flow(electricityBus_storage3_2) -1 InvestmentFlowBlock_total(electricityBus_storage3_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage3_1_3)_: -+1 flow(electricityBus_storage3_1_3) ++1 flow(electricityBus_storage3_3) -1 InvestmentFlowBlock_total(electricityBus_storage3_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage3_2_4)_: -+1 flow(electricityBus_storage3_2_4) ++1 flow(electricityBus_storage3_4) -1 InvestmentFlowBlock_total(electricityBus_storage3_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage3_2_5)_: -+1 flow(electricityBus_storage3_2_5) ++1 flow(electricityBus_storage3_5) -1 InvestmentFlowBlock_total(electricityBus_storage3_2) <= 0 -c_u_InvestmentFlowBlock_max(storage3_electricityBus_0_0)_: -+1 flow(storage3_electricityBus_0_0) --1 InvestmentFlowBlock_total(storage3_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage3_electricityBus_0_1)_: -+1 flow(storage3_electricityBus_0_1) --1 InvestmentFlowBlock_total(storage3_electricityBus_0) -<= 0 +c_e_GenericStorageBlock_losses(storage3_0)_: +-1 GenericStorageBlock_storage_losses(storage3_0) += 0 -c_u_InvestmentFlowBlock_max(storage3_electricityBus_1_2)_: -+1 flow(storage3_electricityBus_1_2) --1 InvestmentFlowBlock_total(storage3_electricityBus_1) -<= 0 +c_e_GenericStorageBlock_losses(storage3_1)_: +-1 GenericStorageBlock_storage_losses(storage3_1) += 0 -c_u_InvestmentFlowBlock_max(storage3_electricityBus_1_3)_: -+1 flow(storage3_electricityBus_1_3) --1 InvestmentFlowBlock_total(storage3_electricityBus_1) -<= 0 +c_e_GenericStorageBlock_losses(storage3_2)_: +-1 GenericStorageBlock_storage_losses(storage3_2) += 0 -c_u_InvestmentFlowBlock_max(storage3_electricityBus_2_4)_: -+1 flow(storage3_electricityBus_2_4) --1 InvestmentFlowBlock_total(storage3_electricityBus_2) -<= 0 +c_e_GenericStorageBlock_losses(storage3_3)_: +-1 GenericStorageBlock_storage_losses(storage3_3) += 0 -c_u_InvestmentFlowBlock_max(storage3_electricityBus_2_5)_: -+1 flow(storage3_electricityBus_2_5) --1 InvestmentFlowBlock_total(storage3_electricityBus_2) -<= 0 +c_e_GenericStorageBlock_losses(storage3_4)_: +-1 GenericStorageBlock_storage_losses(storage3_4) += 0 -c_e_GenericStorageBlock_balance(storage3_0_0)_: -+1 flow(storage3_electricityBus_0_0) --1 flow(electricityBus_storage3_0_0) -+1 GenericStorageBlock_storage_content(storage3_1) --1 GenericStorageBlock_storage_content(storage3_0) +c_e_GenericStorageBlock_losses(storage3_5)_: +-1 GenericStorageBlock_storage_losses(storage3_5) = 0 -c_e_GenericStorageBlock_balance(storage3_0_1)_: -+1 flow(storage3_electricityBus_0_1) --1 flow(electricityBus_storage3_0_1) +c_e_GenericStorageBlock_balance(storage3_0)_: ++1 flow(electricityBus_storage3_0) +-1 flow(storage3_electricityBus_0) +-1 GenericStorageBlock_storage_losses(storage3_0) ++1 GenericStorageBlock_storage_content(storage3_0) -1 GenericStorageBlock_storage_content(storage3_1) -+1 GenericStorageBlock_storage_content(storage3_2) = 0 -c_e_GenericStorageBlock_balance(storage3_1_2)_: -+1 flow(storage3_electricityBus_1_2) --1 flow(electricityBus_storage3_1_2) +c_e_GenericStorageBlock_balance(storage3_1)_: ++1 flow(electricityBus_storage3_1) +-1 flow(storage3_electricityBus_1) +-1 GenericStorageBlock_storage_losses(storage3_1) ++1 GenericStorageBlock_storage_content(storage3_1) -1 GenericStorageBlock_storage_content(storage3_2) -+1 GenericStorageBlock_storage_content(storage3_3) = 0 -c_e_GenericStorageBlock_balance(storage3_1_3)_: -+1 flow(storage3_electricityBus_1_3) --1 flow(electricityBus_storage3_1_3) +c_e_GenericStorageBlock_balance(storage3_2)_: ++1 flow(electricityBus_storage3_2) +-1 flow(storage3_electricityBus_2) +-1 GenericStorageBlock_storage_losses(storage3_2) ++1 GenericStorageBlock_storage_content(storage3_2) -1 GenericStorageBlock_storage_content(storage3_3) -+1 GenericStorageBlock_storage_content(storage3_4) = 0 -c_e_GenericStorageBlock_balance(storage3_2_4)_: -+1 flow(storage3_electricityBus_2_4) --1 flow(electricityBus_storage3_2_4) +c_e_GenericStorageBlock_balance(storage3_3)_: ++1 flow(electricityBus_storage3_3) +-1 flow(storage3_electricityBus_3) +-1 GenericStorageBlock_storage_losses(storage3_3) ++1 GenericStorageBlock_storage_content(storage3_3) -1 GenericStorageBlock_storage_content(storage3_4) -+1 GenericStorageBlock_storage_content(storage3_5) = 0 -c_e_GenericStorageBlock_balance(storage3_2_5)_: -+1 flow(storage3_electricityBus_2_5) --1 flow(electricityBus_storage3_2_5) +c_e_GenericStorageBlock_balance(storage3_4)_: ++1 flow(electricityBus_storage3_4) +-1 flow(storage3_electricityBus_4) +-1 GenericStorageBlock_storage_losses(storage3_4) ++1 GenericStorageBlock_storage_content(storage3_4) -1 GenericStorageBlock_storage_content(storage3_5) -+1 GenericStorageBlock_storage_content(storage3_6) += 0 + +c_e_GenericStorageBlock_balance(storage3_5)_: ++1 flow(electricityBus_storage3_5) +-1 flow(storage3_electricityBus_5) +-1 GenericStorageBlock_storage_losses(storage3_5) ++1 GenericStorageBlock_storage_content(storage3_5) +-1 GenericStorageBlock_storage_content(storage3_6) = 0 c_e_GenericStorageBlock_balanced_cstr(storage3)_: @@ -272,50 +302,56 @@ c_e_GenericStorageBlock_balanced_cstr(storage3)_: = 0 bounds - 0 <= InvestmentFlowBlock_invest(electricityBus_storage3_0) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage3_1) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage3_2) <= +inf 0 <= InvestmentFlowBlock_invest(storage3_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_invest(storage3_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_invest(storage3_electricityBus_2) <= +inf - 0 <= flow(storage3_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage3_0_0) <= +inf - 0 <= flow(storage3_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage3_0_1) <= +inf - 0 <= flow(storage3_electricityBus_1_2) <= +inf - 0 <= flow(electricityBus_storage3_1_2) <= +inf - 0 <= flow(storage3_electricityBus_1_3) <= +inf - 0 <= flow(electricityBus_storage3_1_3) <= +inf - 0 <= flow(storage3_electricityBus_2_4) <= +inf - 0 <= flow(electricityBus_storage3_2_4) <= +inf - 0 <= flow(storage3_electricityBus_2_5) <= +inf - 0 <= flow(electricityBus_storage3_2_5) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage3_0) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage3_1) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage3_2) <= +inf + 0 <= flow(electricityBus_storage3_0) <= +inf + 0 <= flow(electricityBus_storage3_1) <= +inf + 0 <= flow(electricityBus_storage3_2) <= +inf + 0 <= flow(electricityBus_storage3_3) <= +inf + 0 <= flow(electricityBus_storage3_4) <= +inf + 0 <= flow(electricityBus_storage3_5) <= +inf + 0 <= flow(storage3_electricityBus_0) <= +inf + 0 <= flow(storage3_electricityBus_1) <= +inf + 0 <= flow(storage3_electricityBus_2) <= +inf + 0 <= flow(storage3_electricityBus_3) <= +inf + 0 <= flow(storage3_electricityBus_4) <= +inf + 0 <= flow(storage3_electricityBus_5) <= +inf + 0 <= InvestmentFlowBlock_total(storage3_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_total(storage3_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_total(storage3_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage3_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage3_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage3_1) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage3_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage3_2) <= +inf - 0 <= InvestmentFlowBlock_total(storage3_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_total(storage3_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old(storage3_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old(storage3_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_total(storage3_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old(storage3_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old_end(electricityBus_storage3_0) <= +inf - 0 <= InvestmentFlowBlock_old_end(electricityBus_storage3_1) <= +inf - 0 <= InvestmentFlowBlock_old_end(electricityBus_storage3_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage3_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage3_1) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage3_2) <= +inf 0 <= InvestmentFlowBlock_old_end(storage3_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_end(storage3_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old_end(storage3_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage3_0) <= +inf - 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage3_1) <= +inf - 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage3_2) <= +inf + 0 <= InvestmentFlowBlock_old_end(electricityBus_storage3_0) <= +inf + 0 <= InvestmentFlowBlock_old_end(electricityBus_storage3_1) <= +inf + 0 <= InvestmentFlowBlock_old_end(electricityBus_storage3_2) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage3_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage3_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage3_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage3_0) <= +inf - 0 <= InvestmentFlowBlock_old(storage3_electricityBus_0) <= +inf - 0 <= GenericStorageBlock_storage_content(storage3_1) <= 5000 + 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage3_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage3_1) <= +inf + 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage3_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage3_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage3_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage3_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage3_3) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage3_4) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage3_5) <= +inf 0 <= GenericStorageBlock_storage_content(storage3_0) <= 5000 + 0 <= GenericStorageBlock_storage_content(storage3_1) <= 5000 0 <= GenericStorageBlock_storage_content(storage3_2) <= 5000 0 <= GenericStorageBlock_storage_content(storage3_3) <= 5000 0 <= GenericStorageBlock_storage_content(storage3_4) <= 5000 diff --git a/tests/lp_files/storage_invest_4.lp b/tests/lp_files/storage_invest_4.lp index 66fa233a2..2b90dd479 100644 --- a/tests/lp_files/storage_invest_4.lp +++ b/tests/lp_files/storage_invest_4.lp @@ -6,19 +6,19 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage4_electricityBus_0_0) --1 flow(electricityBus_storage4_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage4_0) ++1 flow(storage4_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage4_electricityBus_0_1) --1 flow(electricityBus_storage4_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage4_1) ++1 flow(storage4_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(storage4_electricityBus_0_2) --1 flow(electricityBus_storage4_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage4_2) ++1 flow(storage4_electricityBus_2) = 0 c_e_GenericInvestmentStorageBlock_total_storage_rule(storage4_0)_: @@ -32,22 +32,22 @@ c_u_GenericInvestmentStorageBlock_init_content_limit(storage4)_: <= 0 c_e_GenericInvestmentStorageBlock_balance_first(storage4)_: -+1 flow(storage4_electricityBus_0_0) --1 flow(electricityBus_storage4_0_0) +-1 flow(electricityBus_storage4_0) ++1 flow(storage4_electricityBus_0) -1 GenericInvestmentStorageBlock_init_content(storage4) +1 GenericInvestmentStorageBlock_storage_content(storage4_0) = 0 c_e_GenericInvestmentStorageBlock_balance(storage4_0_1)_: -+1 flow(storage4_electricityBus_0_1) --1 flow(electricityBus_storage4_0_1) +-1 flow(electricityBus_storage4_1) ++1 flow(storage4_electricityBus_1) -1 GenericInvestmentStorageBlock_storage_content(storage4_0) +1 GenericInvestmentStorageBlock_storage_content(storage4_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage4_0_2)_: -+1 flow(storage4_electricityBus_0_2) --1 flow(electricityBus_storage4_0_2) +-1 flow(electricityBus_storage4_2) ++1 flow(storage4_electricityBus_2) -1 GenericInvestmentStorageBlock_storage_content(storage4_1) +1 GenericInvestmentStorageBlock_storage_content(storage4_2) = 0 @@ -74,12 +74,12 @@ c_u_GenericInvestmentStorageBlock_max_storage_content(storage4_0_2)_: bounds 0 <= GenericInvestmentStorageBlock_invest(storage4_0) <= 500 - 0 <= flow(storage4_electricityBus_0_0) <= 100 - 0 <= flow(electricityBus_storage4_0_0) <= 80 - 0 <= flow(storage4_electricityBus_0_1) <= 100 - 0 <= flow(electricityBus_storage4_0_1) <= 80 - 0 <= flow(storage4_electricityBus_0_2) <= 100 - 0 <= flow(electricityBus_storage4_0_2) <= 80 + 0 <= flow(electricityBus_storage4_0) <= 80 + 0 <= flow(electricityBus_storage4_1) <= 80 + 0 <= flow(electricityBus_storage4_2) <= 80 + 0 <= flow(storage4_electricityBus_0) <= 100 + 0 <= flow(storage4_electricityBus_1) <= 100 + 0 <= flow(storage4_electricityBus_2) <= 100 0 <= GenericInvestmentStorageBlock_total(storage4_0) <= +inf 0 <= GenericInvestmentStorageBlock_init_content(storage4) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage4_0) <= +inf diff --git a/tests/lp_files/storage_invest_4_multi_period.lp b/tests/lp_files/storage_invest_4_multi_period.lp index c08305a40..9d7674d84 100644 --- a/tests/lp_files/storage_invest_4_multi_period.lp +++ b/tests/lp_files/storage_invest_4_multi_period.lp @@ -8,34 +8,34 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage4_electricityBus_0_0) --1 flow(electricityBus_storage4_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage4_0) ++1 flow(storage4_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage4_electricityBus_0_1) --1 flow(electricityBus_storage4_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage4_1) ++1 flow(storage4_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(storage4_electricityBus_1_2) --1 flow(electricityBus_storage4_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage4_2) ++1 flow(storage4_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(storage4_electricityBus_1_3) --1 flow(electricityBus_storage4_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage4_3) ++1 flow(storage4_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(storage4_electricityBus_2_4) --1 flow(electricityBus_storage4_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage4_4) ++1 flow(storage4_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(storage4_electricityBus_2_5) --1 flow(electricityBus_storage4_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage4_5) ++1 flow(storage4_electricityBus_5) = 0 c_e_GenericInvestmentStorageBlock_total_storage_rule(storage4_0)_: @@ -83,9 +83,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage4_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage4_0)_: ++1 GenericInvestmentStorageBlock_old(storage4_0) -1 GenericInvestmentStorageBlock_old_end(storage4_0) -1 GenericInvestmentStorageBlock_old_exo(storage4_0) -+1 GenericInvestmentStorageBlock_old(storage4_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage4_1)_: @@ -105,36 +105,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage4_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage4_0_1)_: -+1 flow(storage4_electricityBus_0_1) --1 flow(electricityBus_storage4_0_1) +-1 flow(electricityBus_storage4_1) ++1 flow(storage4_electricityBus_1) -1 GenericInvestmentStorageBlock_storage_content(storage4_0) +1 GenericInvestmentStorageBlock_storage_content(storage4_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage4_1_2)_: -+1 flow(storage4_electricityBus_1_2) --1 flow(electricityBus_storage4_1_2) +-1 flow(electricityBus_storage4_2) ++1 flow(storage4_electricityBus_2) -1 GenericInvestmentStorageBlock_storage_content(storage4_1) +1 GenericInvestmentStorageBlock_storage_content(storage4_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage4_1_3)_: -+1 flow(storage4_electricityBus_1_3) --1 flow(electricityBus_storage4_1_3) +-1 flow(electricityBus_storage4_3) ++1 flow(storage4_electricityBus_3) -1 GenericInvestmentStorageBlock_storage_content(storage4_2) +1 GenericInvestmentStorageBlock_storage_content(storage4_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage4_2_4)_: -+1 flow(storage4_electricityBus_2_4) --1 flow(electricityBus_storage4_2_4) +-1 flow(electricityBus_storage4_4) ++1 flow(storage4_electricityBus_4) -1 GenericInvestmentStorageBlock_storage_content(storage4_3) +1 GenericInvestmentStorageBlock_storage_content(storage4_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage4_2_5)_: -+1 flow(storage4_electricityBus_2_5) --1 flow(electricityBus_storage4_2_5) +-1 flow(electricityBus_storage4_5) ++1 flow(storage4_electricityBus_5) -1 GenericInvestmentStorageBlock_storage_content(storage4_4) +1 GenericInvestmentStorageBlock_storage_content(storage4_5) = 0 @@ -173,22 +173,23 @@ bounds 0 <= GenericInvestmentStorageBlock_invest(storage4_0) <= 500 0 <= GenericInvestmentStorageBlock_invest(storage4_1) <= 500 0 <= GenericInvestmentStorageBlock_invest(storage4_2) <= 500 - 0 <= flow(storage4_electricityBus_0_0) <= 100 - 0 <= flow(electricityBus_storage4_0_0) <= 80 - 0 <= flow(storage4_electricityBus_0_1) <= 100 - 0 <= flow(electricityBus_storage4_0_1) <= 80 - 0 <= flow(storage4_electricityBus_1_2) <= 100 - 0 <= flow(electricityBus_storage4_1_2) <= 80 - 0 <= flow(storage4_electricityBus_1_3) <= 100 - 0 <= flow(electricityBus_storage4_1_3) <= 80 - 0 <= flow(storage4_electricityBus_2_4) <= 100 - 0 <= flow(electricityBus_storage4_2_4) <= 80 - 0 <= flow(storage4_electricityBus_2_5) <= 100 - 0 <= flow(electricityBus_storage4_2_5) <= 80 + 0 <= flow(electricityBus_storage4_0) <= 80 + 0 <= flow(electricityBus_storage4_1) <= 80 + 0 <= flow(electricityBus_storage4_2) <= 80 + 0 <= flow(electricityBus_storage4_3) <= 80 + 0 <= flow(electricityBus_storage4_4) <= 80 + 0 <= flow(electricityBus_storage4_5) <= 80 + 0 <= flow(storage4_electricityBus_0) <= 100 + 0 <= flow(storage4_electricityBus_1) <= 100 + 0 <= flow(storage4_electricityBus_2) <= 100 + 0 <= flow(storage4_electricityBus_3) <= 100 + 0 <= flow(storage4_electricityBus_4) <= 100 + 0 <= flow(storage4_electricityBus_5) <= 100 0 <= GenericInvestmentStorageBlock_total(storage4_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage4_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage4_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage4_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage4_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage4_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage4_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage4_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage4_1) <= +inf @@ -196,7 +197,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage4_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage4_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage4_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage4_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage4_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage4_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage4_2) <= +inf diff --git a/tests/lp_files/storage_invest_5.lp b/tests/lp_files/storage_invest_5.lp index 853f833c0..cdc84a4ca 100644 --- a/tests/lp_files/storage_invest_5.lp +++ b/tests/lp_files/storage_invest_5.lp @@ -6,24 +6,24 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage5_electricityBus_0_0) --1 flow(electricityBus_storage5_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage5_0) ++1 flow(storage5_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage5_electricityBus_0_1) --1 flow(electricityBus_storage5_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage5_1) ++1 flow(storage5_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(storage5_electricityBus_0_2) --1 flow(electricityBus_storage5_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage5_2) ++1 flow(storage5_electricityBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(storage5_electricityBus_0)_: -+1 InvestmentFlowBlock_total(storage5_electricityBus_0) -1 InvestmentFlowBlock_invest(storage5_electricityBus_0) ++1 InvestmentFlowBlock_total(storage5_electricityBus_0) = 100 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage5_0)_: @@ -32,54 +32,69 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_storage5_0)_: = 110 c_u_InvestmentFlowBlock_max(storage5_electricityBus_0_0)_: -+1 flow(storage5_electricityBus_0_0) ++1 flow(storage5_electricityBus_0) -1 InvestmentFlowBlock_total(storage5_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage5_electricityBus_0_1)_: -+1 flow(storage5_electricityBus_0_1) ++1 flow(storage5_electricityBus_1) -1 InvestmentFlowBlock_total(storage5_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage5_electricityBus_0_2)_: -+1 flow(storage5_electricityBus_0_2) ++1 flow(storage5_electricityBus_2) -1 InvestmentFlowBlock_total(storage5_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage5_0_0)_: -+1 flow(electricityBus_storage5_0_0) ++1 flow(electricityBus_storage5_0) -1 InvestmentFlowBlock_total(electricityBus_storage5_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage5_0_1)_: -+1 flow(electricityBus_storage5_0_1) ++1 flow(electricityBus_storage5_1) -1 InvestmentFlowBlock_total(electricityBus_storage5_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage5_0_2)_: -+1 flow(electricityBus_storage5_0_2) ++1 flow(electricityBus_storage5_2) -1 InvestmentFlowBlock_total(electricityBus_storage5_0) <= 0 -c_e_GenericStorageBlock_balance(storage5_0_0)_: -+1 flow(storage5_electricityBus_0_0) --1 flow(electricityBus_storage5_0_0) -+1 GenericStorageBlock_storage_content(storage5_1) --1 GenericStorageBlock_storage_content(storage5_0) +c_e_GenericStorageBlock_losses(storage5_0)_: +-1 GenericStorageBlock_storage_losses(storage5_0) = 0 -c_e_GenericStorageBlock_balance(storage5_0_1)_: -+1 flow(storage5_electricityBus_0_1) --1 flow(electricityBus_storage5_0_1) +c_e_GenericStorageBlock_losses(storage5_1)_: +-1 GenericStorageBlock_storage_losses(storage5_1) += 0 + +c_e_GenericStorageBlock_losses(storage5_2)_: +-1 GenericStorageBlock_storage_losses(storage5_2) += 0 + +c_e_GenericStorageBlock_balance(storage5_0)_: ++1 flow(electricityBus_storage5_0) +-1 flow(storage5_electricityBus_0) +-1 GenericStorageBlock_storage_losses(storage5_0) ++1 GenericStorageBlock_storage_content(storage5_0) -1 GenericStorageBlock_storage_content(storage5_1) -+1 GenericStorageBlock_storage_content(storage5_2) = 0 -c_e_GenericStorageBlock_balance(storage5_0_2)_: -+1 flow(storage5_electricityBus_0_2) --1 flow(electricityBus_storage5_0_2) +c_e_GenericStorageBlock_balance(storage5_1)_: ++1 flow(electricityBus_storage5_1) +-1 flow(storage5_electricityBus_1) +-1 GenericStorageBlock_storage_losses(storage5_1) ++1 GenericStorageBlock_storage_content(storage5_1) -1 GenericStorageBlock_storage_content(storage5_2) -+1 GenericStorageBlock_storage_content(storage5_3) += 0 + +c_e_GenericStorageBlock_balance(storage5_2)_: ++1 flow(electricityBus_storage5_2) +-1 flow(storage5_electricityBus_2) +-1 GenericStorageBlock_storage_losses(storage5_2) ++1 GenericStorageBlock_storage_content(storage5_2) +-1 GenericStorageBlock_storage_content(storage5_3) = 0 c_e_GenericStorageBlock_balanced_cstr(storage5)_: @@ -93,18 +108,21 @@ c_e_GenericStorageBlock_power_coupled(storage5_0)_: = 0 bounds + 0 <= InvestmentFlowBlock_invest(storage5_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage5_0) <= +inf - 0 <= flow(storage5_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage5_0_0) <= +inf - 0 <= flow(storage5_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage5_0_1) <= +inf - 0 <= flow(storage5_electricityBus_0_2) <= +inf - 0 <= flow(electricityBus_storage5_0_2) <= +inf + 0 <= flow(electricityBus_storage5_0) <= +inf + 0 <= flow(electricityBus_storage5_1) <= +inf + 0 <= flow(electricityBus_storage5_2) <= +inf + 0 <= flow(storage5_electricityBus_0) <= +inf + 0 <= flow(storage5_electricityBus_1) <= +inf + 0 <= flow(storage5_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_total(storage5_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage5_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage5_0) <= +inf - 0 <= GenericStorageBlock_storage_content(storage5_1) <= 10000 + -inf <= GenericStorageBlock_storage_losses(storage5_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage5_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage5_2) <= +inf 0 <= GenericStorageBlock_storage_content(storage5_0) <= 10000 + 0 <= GenericStorageBlock_storage_content(storage5_1) <= 10000 0 <= GenericStorageBlock_storage_content(storage5_2) <= 10000 0 <= GenericStorageBlock_storage_content(storage5_3) <= 10000 end diff --git a/tests/lp_files/storage_invest_5_multi_period.lp b/tests/lp_files/storage_invest_5_multi_period.lp index e139e72db..9559e9eac 100644 --- a/tests/lp_files/storage_invest_5_multi_period.lp +++ b/tests/lp_files/storage_invest_5_multi_period.lp @@ -8,52 +8,52 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage5_electricityBus_0_0) --1 flow(electricityBus_storage5_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage5_0) ++1 flow(storage5_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage5_electricityBus_0_1) --1 flow(electricityBus_storage5_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage5_1) ++1 flow(storage5_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(storage5_electricityBus_1_2) --1 flow(electricityBus_storage5_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage5_2) ++1 flow(storage5_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(storage5_electricityBus_1_3) --1 flow(electricityBus_storage5_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage5_3) ++1 flow(storage5_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(storage5_electricityBus_2_4) --1 flow(electricityBus_storage5_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage5_4) ++1 flow(storage5_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(storage5_electricityBus_2_5) --1 flow(electricityBus_storage5_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage5_5) ++1 flow(storage5_electricityBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(storage5_electricityBus_0)_: -+1 InvestmentFlowBlock_total(storage5_electricityBus_0) -1 InvestmentFlowBlock_invest(storage5_electricityBus_0) ++1 InvestmentFlowBlock_total(storage5_electricityBus_0) = 100 c_e_InvestmentFlowBlock_total_rule(storage5_electricityBus_1)_: +-1 InvestmentFlowBlock_invest(storage5_electricityBus_1) -1 InvestmentFlowBlock_total(storage5_electricityBus_0) +1 InvestmentFlowBlock_total(storage5_electricityBus_1) --1 InvestmentFlowBlock_invest(storage5_electricityBus_1) +1 InvestmentFlowBlock_old(storage5_electricityBus_1) = 0 c_e_InvestmentFlowBlock_total_rule(storage5_electricityBus_2)_: +-1 InvestmentFlowBlock_invest(storage5_electricityBus_2) -1 InvestmentFlowBlock_total(storage5_electricityBus_1) +1 InvestmentFlowBlock_total(storage5_electricityBus_2) --1 InvestmentFlowBlock_invest(storage5_electricityBus_2) +1 InvestmentFlowBlock_old(storage5_electricityBus_2) = 0 @@ -125,9 +125,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage5_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(storage5_electricityBus_0)_: ++1 InvestmentFlowBlock_old(storage5_electricityBus_0) -1 InvestmentFlowBlock_old_end(storage5_electricityBus_0) -1 InvestmentFlowBlock_old_exo(storage5_electricityBus_0) -+1 InvestmentFlowBlock_old(storage5_electricityBus_0) = 0 c_e_InvestmentFlowBlock_old_rule(storage5_electricityBus_1)_: @@ -143,9 +143,9 @@ c_e_InvestmentFlowBlock_old_rule(storage5_electricityBus_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage5_0)_: ++1 InvestmentFlowBlock_old(electricityBus_storage5_0) -1 InvestmentFlowBlock_old_end(electricityBus_storage5_0) -1 InvestmentFlowBlock_old_exo(electricityBus_storage5_0) -+1 InvestmentFlowBlock_old(electricityBus_storage5_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage5_1)_: @@ -161,105 +161,135 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_storage5_2)_: = 0 c_u_InvestmentFlowBlock_max(storage5_electricityBus_0_0)_: -+1 flow(storage5_electricityBus_0_0) ++1 flow(storage5_electricityBus_0) -1 InvestmentFlowBlock_total(storage5_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage5_electricityBus_0_1)_: -+1 flow(storage5_electricityBus_0_1) ++1 flow(storage5_electricityBus_1) -1 InvestmentFlowBlock_total(storage5_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage5_electricityBus_1_2)_: -+1 flow(storage5_electricityBus_1_2) ++1 flow(storage5_electricityBus_2) -1 InvestmentFlowBlock_total(storage5_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(storage5_electricityBus_1_3)_: -+1 flow(storage5_electricityBus_1_3) ++1 flow(storage5_electricityBus_3) -1 InvestmentFlowBlock_total(storage5_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(storage5_electricityBus_2_4)_: -+1 flow(storage5_electricityBus_2_4) ++1 flow(storage5_electricityBus_4) -1 InvestmentFlowBlock_total(storage5_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(storage5_electricityBus_2_5)_: -+1 flow(storage5_electricityBus_2_5) ++1 flow(storage5_electricityBus_5) -1 InvestmentFlowBlock_total(storage5_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage5_0_0)_: -+1 flow(electricityBus_storage5_0_0) ++1 flow(electricityBus_storage5_0) -1 InvestmentFlowBlock_total(electricityBus_storage5_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage5_0_1)_: -+1 flow(electricityBus_storage5_0_1) ++1 flow(electricityBus_storage5_1) -1 InvestmentFlowBlock_total(electricityBus_storage5_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage5_1_2)_: -+1 flow(electricityBus_storage5_1_2) ++1 flow(electricityBus_storage5_2) -1 InvestmentFlowBlock_total(electricityBus_storage5_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage5_1_3)_: -+1 flow(electricityBus_storage5_1_3) ++1 flow(electricityBus_storage5_3) -1 InvestmentFlowBlock_total(electricityBus_storage5_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage5_2_4)_: -+1 flow(electricityBus_storage5_2_4) ++1 flow(electricityBus_storage5_4) -1 InvestmentFlowBlock_total(electricityBus_storage5_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage5_2_5)_: -+1 flow(electricityBus_storage5_2_5) ++1 flow(electricityBus_storage5_5) -1 InvestmentFlowBlock_total(electricityBus_storage5_2) <= 0 -c_e_GenericStorageBlock_balance(storage5_0_0)_: -+1 flow(storage5_electricityBus_0_0) --1 flow(electricityBus_storage5_0_0) -+1 GenericStorageBlock_storage_content(storage5_1) --1 GenericStorageBlock_storage_content(storage5_0) +c_e_GenericStorageBlock_losses(storage5_0)_: +-1 GenericStorageBlock_storage_losses(storage5_0) += 0 + +c_e_GenericStorageBlock_losses(storage5_1)_: +-1 GenericStorageBlock_storage_losses(storage5_1) += 0 + +c_e_GenericStorageBlock_losses(storage5_2)_: +-1 GenericStorageBlock_storage_losses(storage5_2) += 0 + +c_e_GenericStorageBlock_losses(storage5_3)_: +-1 GenericStorageBlock_storage_losses(storage5_3) += 0 + +c_e_GenericStorageBlock_losses(storage5_4)_: +-1 GenericStorageBlock_storage_losses(storage5_4) = 0 -c_e_GenericStorageBlock_balance(storage5_0_1)_: -+1 flow(storage5_electricityBus_0_1) --1 flow(electricityBus_storage5_0_1) +c_e_GenericStorageBlock_losses(storage5_5)_: +-1 GenericStorageBlock_storage_losses(storage5_5) += 0 + +c_e_GenericStorageBlock_balance(storage5_0)_: ++1 flow(electricityBus_storage5_0) +-1 flow(storage5_electricityBus_0) +-1 GenericStorageBlock_storage_losses(storage5_0) ++1 GenericStorageBlock_storage_content(storage5_0) -1 GenericStorageBlock_storage_content(storage5_1) -+1 GenericStorageBlock_storage_content(storage5_2) = 0 -c_e_GenericStorageBlock_balance(storage5_1_2)_: -+1 flow(storage5_electricityBus_1_2) --1 flow(electricityBus_storage5_1_2) +c_e_GenericStorageBlock_balance(storage5_1)_: ++1 flow(electricityBus_storage5_1) +-1 flow(storage5_electricityBus_1) +-1 GenericStorageBlock_storage_losses(storage5_1) ++1 GenericStorageBlock_storage_content(storage5_1) -1 GenericStorageBlock_storage_content(storage5_2) -+1 GenericStorageBlock_storage_content(storage5_3) = 0 -c_e_GenericStorageBlock_balance(storage5_1_3)_: -+1 flow(storage5_electricityBus_1_3) --1 flow(electricityBus_storage5_1_3) +c_e_GenericStorageBlock_balance(storage5_2)_: ++1 flow(electricityBus_storage5_2) +-1 flow(storage5_electricityBus_2) +-1 GenericStorageBlock_storage_losses(storage5_2) ++1 GenericStorageBlock_storage_content(storage5_2) -1 GenericStorageBlock_storage_content(storage5_3) -+1 GenericStorageBlock_storage_content(storage5_4) = 0 -c_e_GenericStorageBlock_balance(storage5_2_4)_: -+1 flow(storage5_electricityBus_2_4) --1 flow(electricityBus_storage5_2_4) +c_e_GenericStorageBlock_balance(storage5_3)_: ++1 flow(electricityBus_storage5_3) +-1 flow(storage5_electricityBus_3) +-1 GenericStorageBlock_storage_losses(storage5_3) ++1 GenericStorageBlock_storage_content(storage5_3) -1 GenericStorageBlock_storage_content(storage5_4) -+1 GenericStorageBlock_storage_content(storage5_5) = 0 -c_e_GenericStorageBlock_balance(storage5_2_5)_: -+1 flow(storage5_electricityBus_2_5) --1 flow(electricityBus_storage5_2_5) +c_e_GenericStorageBlock_balance(storage5_4)_: ++1 flow(electricityBus_storage5_4) +-1 flow(storage5_electricityBus_4) +-1 GenericStorageBlock_storage_losses(storage5_4) ++1 GenericStorageBlock_storage_content(storage5_4) -1 GenericStorageBlock_storage_content(storage5_5) -+1 GenericStorageBlock_storage_content(storage5_6) += 0 + +c_e_GenericStorageBlock_balance(storage5_5)_: ++1 flow(electricityBus_storage5_5) +-1 flow(storage5_electricityBus_5) +-1 GenericStorageBlock_storage_losses(storage5_5) ++1 GenericStorageBlock_storage_content(storage5_5) +-1 GenericStorageBlock_storage_content(storage5_6) = 0 c_e_GenericStorageBlock_balanced_cstr(storage5)_: @@ -283,33 +313,35 @@ c_e_GenericStorageBlock_power_coupled(storage5_2)_: = 0 bounds + 0 <= InvestmentFlowBlock_invest(storage5_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage5_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_invest(storage5_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage5_0) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage5_1) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage5_2) <= +inf - 0 <= flow(storage5_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage5_0_0) <= +inf - 0 <= flow(storage5_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage5_0_1) <= +inf - 0 <= flow(storage5_electricityBus_1_2) <= +inf - 0 <= flow(electricityBus_storage5_1_2) <= +inf - 0 <= flow(storage5_electricityBus_1_3) <= +inf - 0 <= flow(electricityBus_storage5_1_3) <= +inf - 0 <= flow(storage5_electricityBus_2_4) <= +inf - 0 <= flow(electricityBus_storage5_2_4) <= +inf - 0 <= flow(storage5_electricityBus_2_5) <= +inf - 0 <= flow(electricityBus_storage5_2_5) <= +inf + 0 <= flow(electricityBus_storage5_0) <= +inf + 0 <= flow(electricityBus_storage5_1) <= +inf + 0 <= flow(electricityBus_storage5_2) <= +inf + 0 <= flow(electricityBus_storage5_3) <= +inf + 0 <= flow(electricityBus_storage5_4) <= +inf + 0 <= flow(electricityBus_storage5_5) <= +inf + 0 <= flow(storage5_electricityBus_0) <= +inf + 0 <= flow(storage5_electricityBus_1) <= +inf + 0 <= flow(storage5_electricityBus_2) <= +inf + 0 <= flow(storage5_electricityBus_3) <= +inf + 0 <= flow(storage5_electricityBus_4) <= +inf + 0 <= flow(storage5_electricityBus_5) <= +inf 0 <= InvestmentFlowBlock_total(storage5_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage5_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(storage5_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_invest(storage5_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(storage5_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(storage5_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_invest(storage5_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage5_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage5_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage5_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage5_1) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage5_2) <= +inf + 0 <= InvestmentFlowBlock_old(storage5_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(storage5_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old(storage5_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage5_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage5_1) <= +inf 0 <= InvestmentFlowBlock_old(electricityBus_storage5_2) <= +inf 0 <= InvestmentFlowBlock_old_end(storage5_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_end(storage5_electricityBus_1) <= +inf @@ -323,10 +355,14 @@ bounds 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage5_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage5_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage5_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage5_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage5_0) <= +inf - 0 <= GenericStorageBlock_storage_content(storage5_1) <= 10000 + -inf <= GenericStorageBlock_storage_losses(storage5_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage5_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage5_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage5_3) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage5_4) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage5_5) <= +inf 0 <= GenericStorageBlock_storage_content(storage5_0) <= 10000 + 0 <= GenericStorageBlock_storage_content(storage5_1) <= 10000 0 <= GenericStorageBlock_storage_content(storage5_2) <= 10000 0 <= GenericStorageBlock_storage_content(storage5_3) <= 10000 0 <= GenericStorageBlock_storage_content(storage5_4) <= 10000 diff --git a/tests/lp_files/storage_invest_6.lp b/tests/lp_files/storage_invest_6.lp index 59262db9b..6969982c1 100644 --- a/tests/lp_files/storage_invest_6.lp +++ b/tests/lp_files/storage_invest_6.lp @@ -7,24 +7,24 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage6_electricityBus_0_0) --1 flow(electricityBus_storage6_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage6_0) ++1 flow(storage6_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage6_electricityBus_0_1) --1 flow(electricityBus_storage6_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage6_1) ++1 flow(storage6_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(storage6_electricityBus_0_2) --1 flow(electricityBus_storage6_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage6_2) ++1 flow(storage6_electricityBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(storage6_electricityBus_0)_: -+1 InvestmentFlowBlock_total(storage6_electricityBus_0) -1 InvestmentFlowBlock_invest(storage6_electricityBus_0) ++1 InvestmentFlowBlock_total(storage6_electricityBus_0) = 100 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage6_0)_: @@ -33,32 +33,32 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_storage6_0)_: = 110 c_u_InvestmentFlowBlock_max(storage6_electricityBus_0_0)_: -+1 flow(storage6_electricityBus_0_0) ++1 flow(storage6_electricityBus_0) -1 InvestmentFlowBlock_total(storage6_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage6_electricityBus_0_1)_: -+1 flow(storage6_electricityBus_0_1) ++1 flow(storage6_electricityBus_1) -1 InvestmentFlowBlock_total(storage6_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage6_electricityBus_0_2)_: -+1 flow(storage6_electricityBus_0_2) ++1 flow(storage6_electricityBus_2) -1 InvestmentFlowBlock_total(storage6_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage6_0_0)_: -+1 flow(electricityBus_storage6_0_0) ++1 flow(electricityBus_storage6_0) -1 InvestmentFlowBlock_total(electricityBus_storage6_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage6_0_1)_: -+1 flow(electricityBus_storage6_0_1) ++1 flow(electricityBus_storage6_1) -1 InvestmentFlowBlock_total(electricityBus_storage6_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage6_0_2)_: -+1 flow(electricityBus_storage6_0_2) ++1 flow(electricityBus_storage6_2) -1 InvestmentFlowBlock_total(electricityBus_storage6_0) <= 0 @@ -73,22 +73,22 @@ c_u_GenericInvestmentStorageBlock_init_content_limit(storage6)_: <= 10000 c_e_GenericInvestmentStorageBlock_balance_first(storage6)_: -+1 flow(storage6_electricityBus_0_0) --1 flow(electricityBus_storage6_0_0) +-1 flow(electricityBus_storage6_0) ++1 flow(storage6_electricityBus_0) -1 GenericInvestmentStorageBlock_init_content(storage6) +1 GenericInvestmentStorageBlock_storage_content(storage6_0) = 0 c_e_GenericInvestmentStorageBlock_balance(storage6_0_1)_: -+1 flow(storage6_electricityBus_0_1) --1 flow(electricityBus_storage6_0_1) +-1 flow(electricityBus_storage6_1) ++1 flow(storage6_electricityBus_1) -1 GenericInvestmentStorageBlock_storage_content(storage6_0) +1 GenericInvestmentStorageBlock_storage_content(storage6_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage6_0_2)_: -+1 flow(storage6_electricityBus_0_2) --1 flow(electricityBus_storage6_0_2) +-1 flow(electricityBus_storage6_2) ++1 flow(storage6_electricityBus_2) -1 GenericInvestmentStorageBlock_storage_content(storage6_1) +1 GenericInvestmentStorageBlock_storage_content(storage6_2) = 0 @@ -119,16 +119,16 @@ c_u_GenericInvestmentStorageBlock_max_storage_content(storage6_0_2)_: <= 0 bounds + 0 <= InvestmentFlowBlock_invest(storage6_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage6_0) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage6_0) <= +inf - 0 <= flow(storage6_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage6_0_0) <= +inf - 0 <= flow(storage6_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage6_0_1) <= +inf - 0 <= flow(storage6_electricityBus_0_2) <= +inf - 0 <= flow(electricityBus_storage6_0_2) <= +inf + 0 <= flow(electricityBus_storage6_0) <= +inf + 0 <= flow(electricityBus_storage6_1) <= +inf + 0 <= flow(electricityBus_storage6_2) <= +inf + 0 <= flow(storage6_electricityBus_0) <= +inf + 0 <= flow(storage6_electricityBus_1) <= +inf + 0 <= flow(storage6_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_total(storage6_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage6_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage6_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage6_0) <= +inf 0 <= GenericInvestmentStorageBlock_init_content(storage6) <= +inf diff --git a/tests/lp_files/storage_invest_6_multi_period.lp b/tests/lp_files/storage_invest_6_multi_period.lp index 4fc195eda..fac0a4278 100644 --- a/tests/lp_files/storage_invest_6_multi_period.lp +++ b/tests/lp_files/storage_invest_6_multi_period.lp @@ -11,52 +11,52 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage6_electricityBus_0_0) --1 flow(electricityBus_storage6_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage6_0) ++1 flow(storage6_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage6_electricityBus_0_1) --1 flow(electricityBus_storage6_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage6_1) ++1 flow(storage6_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(storage6_electricityBus_1_2) --1 flow(electricityBus_storage6_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage6_2) ++1 flow(storage6_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(storage6_electricityBus_1_3) --1 flow(electricityBus_storage6_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage6_3) ++1 flow(storage6_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(storage6_electricityBus_2_4) --1 flow(electricityBus_storage6_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage6_4) ++1 flow(storage6_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(storage6_electricityBus_2_5) --1 flow(electricityBus_storage6_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage6_5) ++1 flow(storage6_electricityBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(storage6_electricityBus_0)_: -+1 InvestmentFlowBlock_total(storage6_electricityBus_0) -1 InvestmentFlowBlock_invest(storage6_electricityBus_0) ++1 InvestmentFlowBlock_total(storage6_electricityBus_0) = 100 c_e_InvestmentFlowBlock_total_rule(storage6_electricityBus_1)_: +-1 InvestmentFlowBlock_invest(storage6_electricityBus_1) -1 InvestmentFlowBlock_total(storage6_electricityBus_0) +1 InvestmentFlowBlock_total(storage6_electricityBus_1) --1 InvestmentFlowBlock_invest(storage6_electricityBus_1) +1 InvestmentFlowBlock_old(storage6_electricityBus_1) = 0 c_e_InvestmentFlowBlock_total_rule(storage6_electricityBus_2)_: +-1 InvestmentFlowBlock_invest(storage6_electricityBus_2) -1 InvestmentFlowBlock_total(storage6_electricityBus_1) +1 InvestmentFlowBlock_total(storage6_electricityBus_2) --1 InvestmentFlowBlock_invest(storage6_electricityBus_2) +1 InvestmentFlowBlock_old(storage6_electricityBus_2) = 0 @@ -128,9 +128,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage6_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(storage6_electricityBus_0)_: ++1 InvestmentFlowBlock_old(storage6_electricityBus_0) -1 InvestmentFlowBlock_old_end(storage6_electricityBus_0) -1 InvestmentFlowBlock_old_exo(storage6_electricityBus_0) -+1 InvestmentFlowBlock_old(storage6_electricityBus_0) = 0 c_e_InvestmentFlowBlock_old_rule(storage6_electricityBus_1)_: @@ -146,9 +146,9 @@ c_e_InvestmentFlowBlock_old_rule(storage6_electricityBus_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage6_0)_: ++1 InvestmentFlowBlock_old(electricityBus_storage6_0) -1 InvestmentFlowBlock_old_end(electricityBus_storage6_0) -1 InvestmentFlowBlock_old_exo(electricityBus_storage6_0) -+1 InvestmentFlowBlock_old(electricityBus_storage6_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage6_1)_: @@ -164,62 +164,62 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_storage6_2)_: = 0 c_u_InvestmentFlowBlock_max(storage6_electricityBus_0_0)_: -+1 flow(storage6_electricityBus_0_0) ++1 flow(storage6_electricityBus_0) -1 InvestmentFlowBlock_total(storage6_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage6_electricityBus_0_1)_: -+1 flow(storage6_electricityBus_0_1) ++1 flow(storage6_electricityBus_1) -1 InvestmentFlowBlock_total(storage6_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage6_electricityBus_1_2)_: -+1 flow(storage6_electricityBus_1_2) ++1 flow(storage6_electricityBus_2) -1 InvestmentFlowBlock_total(storage6_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(storage6_electricityBus_1_3)_: -+1 flow(storage6_electricityBus_1_3) ++1 flow(storage6_electricityBus_3) -1 InvestmentFlowBlock_total(storage6_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(storage6_electricityBus_2_4)_: -+1 flow(storage6_electricityBus_2_4) ++1 flow(storage6_electricityBus_4) -1 InvestmentFlowBlock_total(storage6_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(storage6_electricityBus_2_5)_: -+1 flow(storage6_electricityBus_2_5) ++1 flow(storage6_electricityBus_5) -1 InvestmentFlowBlock_total(storage6_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage6_0_0)_: -+1 flow(electricityBus_storage6_0_0) ++1 flow(electricityBus_storage6_0) -1 InvestmentFlowBlock_total(electricityBus_storage6_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage6_0_1)_: -+1 flow(electricityBus_storage6_0_1) ++1 flow(electricityBus_storage6_1) -1 InvestmentFlowBlock_total(electricityBus_storage6_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage6_1_2)_: -+1 flow(electricityBus_storage6_1_2) ++1 flow(electricityBus_storage6_2) -1 InvestmentFlowBlock_total(electricityBus_storage6_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage6_1_3)_: -+1 flow(electricityBus_storage6_1_3) ++1 flow(electricityBus_storage6_3) -1 InvestmentFlowBlock_total(electricityBus_storage6_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage6_2_4)_: -+1 flow(electricityBus_storage6_2_4) ++1 flow(electricityBus_storage6_4) -1 InvestmentFlowBlock_total(electricityBus_storage6_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage6_2_5)_: -+1 flow(electricityBus_storage6_2_5) ++1 flow(electricityBus_storage6_5) -1 InvestmentFlowBlock_total(electricityBus_storage6_2) <= 0 @@ -267,9 +267,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage6_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage6_0)_: ++1 GenericInvestmentStorageBlock_old(storage6_0) -1 GenericInvestmentStorageBlock_old_end(storage6_0) -1 GenericInvestmentStorageBlock_old_exo(storage6_0) -+1 GenericInvestmentStorageBlock_old(storage6_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage6_1)_: @@ -289,36 +289,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage6_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage6_0_1)_: -+1 flow(storage6_electricityBus_0_1) --1 flow(electricityBus_storage6_0_1) +-1 flow(electricityBus_storage6_1) ++1 flow(storage6_electricityBus_1) -1 GenericInvestmentStorageBlock_storage_content(storage6_0) +1 GenericInvestmentStorageBlock_storage_content(storage6_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage6_1_2)_: -+1 flow(storage6_electricityBus_1_2) --1 flow(electricityBus_storage6_1_2) +-1 flow(electricityBus_storage6_2) ++1 flow(storage6_electricityBus_2) -1 GenericInvestmentStorageBlock_storage_content(storage6_1) +1 GenericInvestmentStorageBlock_storage_content(storage6_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage6_1_3)_: -+1 flow(storage6_electricityBus_1_3) --1 flow(electricityBus_storage6_1_3) +-1 flow(electricityBus_storage6_3) ++1 flow(storage6_electricityBus_3) -1 GenericInvestmentStorageBlock_storage_content(storage6_2) +1 GenericInvestmentStorageBlock_storage_content(storage6_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage6_2_4)_: -+1 flow(storage6_electricityBus_2_4) --1 flow(electricityBus_storage6_2_4) +-1 flow(electricityBus_storage6_4) ++1 flow(storage6_electricityBus_4) -1 GenericInvestmentStorageBlock_storage_content(storage6_3) +1 GenericInvestmentStorageBlock_storage_content(storage6_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage6_2_5)_: -+1 flow(storage6_electricityBus_2_5) --1 flow(electricityBus_storage6_2_5) +-1 flow(electricityBus_storage6_5) ++1 flow(storage6_electricityBus_5) -1 GenericInvestmentStorageBlock_storage_content(storage6_4) +1 GenericInvestmentStorageBlock_storage_content(storage6_5) = 0 @@ -369,36 +369,38 @@ c_u_GenericInvestmentStorageBlock_max_storage_content(storage6_2_5)_: <= 0 bounds + 0 <= InvestmentFlowBlock_invest(storage6_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage6_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_invest(storage6_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage6_0) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage6_1) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage6_2) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage6_0) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage6_1) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage6_2) <= +inf - 0 <= flow(storage6_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage6_0_0) <= +inf - 0 <= flow(storage6_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage6_0_1) <= +inf - 0 <= flow(storage6_electricityBus_1_2) <= +inf - 0 <= flow(electricityBus_storage6_1_2) <= +inf - 0 <= flow(storage6_electricityBus_1_3) <= +inf - 0 <= flow(electricityBus_storage6_1_3) <= +inf - 0 <= flow(storage6_electricityBus_2_4) <= +inf - 0 <= flow(electricityBus_storage6_2_4) <= +inf - 0 <= flow(storage6_electricityBus_2_5) <= +inf - 0 <= flow(electricityBus_storage6_2_5) <= +inf + 0 <= flow(electricityBus_storage6_0) <= +inf + 0 <= flow(electricityBus_storage6_1) <= +inf + 0 <= flow(electricityBus_storage6_2) <= +inf + 0 <= flow(electricityBus_storage6_3) <= +inf + 0 <= flow(electricityBus_storage6_4) <= +inf + 0 <= flow(electricityBus_storage6_5) <= +inf + 0 <= flow(storage6_electricityBus_0) <= +inf + 0 <= flow(storage6_electricityBus_1) <= +inf + 0 <= flow(storage6_electricityBus_2) <= +inf + 0 <= flow(storage6_electricityBus_3) <= +inf + 0 <= flow(storage6_electricityBus_4) <= +inf + 0 <= flow(storage6_electricityBus_5) <= +inf 0 <= InvestmentFlowBlock_total(storage6_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage6_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(storage6_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_invest(storage6_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(storage6_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(storage6_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_invest(storage6_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage6_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage6_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage6_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage6_1) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage6_2) <= +inf + 0 <= InvestmentFlowBlock_old(storage6_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(storage6_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old(storage6_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage6_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage6_1) <= +inf 0 <= InvestmentFlowBlock_old(electricityBus_storage6_2) <= +inf 0 <= InvestmentFlowBlock_old_end(storage6_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_end(storage6_electricityBus_1) <= +inf @@ -412,12 +414,11 @@ bounds 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage6_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage6_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage6_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage6_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage6_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage6_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage6_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage6_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage6_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage6_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage6_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage6_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage6_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage6_1) <= +inf @@ -425,7 +426,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage6_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage6_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage6_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage6_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage6_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage6_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage6_2) <= +inf diff --git a/tests/lp_files/storage_invest_all_nonconvex.lp b/tests/lp_files/storage_invest_all_nonconvex.lp index 9711a6c35..9b92cf049 100644 --- a/tests/lp_files/storage_invest_all_nonconvex.lp +++ b/tests/lp_files/storage_invest_all_nonconvex.lp @@ -2,43 +2,38 @@ min objective: -+10 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) -+15 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) +10 InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_0) ++10 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) +10 InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_0) ++15 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) +20 GenericInvestmentStorageBlock_invest(storage_all_nonconvex_0) +30 GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_0) s.t. -c_e_BusBlock_balance(bus1_0_0)_: -+1 flow(storage_all_nonconvex_bus1_0_0) --1 flow(bus1_storage_all_nonconvex_0_0) +c_e_BusBlock_balance(bus1_0)_: +-1 flow(bus1_storage_all_nonconvex_0) ++1 flow(storage_all_nonconvex_bus1_0) = 0 -c_e_BusBlock_balance(bus1_0_1)_: -+1 flow(storage_all_nonconvex_bus1_0_1) --1 flow(bus1_storage_all_nonconvex_0_1) +c_e_BusBlock_balance(bus1_1)_: +-1 flow(bus1_storage_all_nonconvex_1) ++1 flow(storage_all_nonconvex_bus1_1) = 0 -c_e_BusBlock_balance(bus1_0_2)_: -+1 flow(storage_all_nonconvex_bus1_0_2) --1 flow(bus1_storage_all_nonconvex_0_2) +c_e_BusBlock_balance(bus1_2)_: +-1 flow(bus1_storage_all_nonconvex_2) ++1 flow(storage_all_nonconvex_bus1_2) = 0 -c_u_InvestmentFlowBlock_minimum_rule(storage_all_nonconvex_bus1_0)_: --1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) -+8 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) -<= 0 - c_u_InvestmentFlowBlock_minimum_rule(bus1_storage_all_nonconvex_0)_: -1 InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_0) +5 InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_0) <= 0 -c_u_InvestmentFlowBlock_maximum_rule(storage_all_nonconvex_bus1_0)_: -+1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) --20 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) +c_u_InvestmentFlowBlock_minimum_rule(storage_all_nonconvex_bus1_0)_: +-1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) ++8 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) <= 0 c_u_InvestmentFlowBlock_maximum_rule(bus1_storage_all_nonconvex_0)_: @@ -46,46 +41,51 @@ c_u_InvestmentFlowBlock_maximum_rule(bus1_storage_all_nonconvex_0)_: -30 InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_0) <= 0 -c_e_InvestmentFlowBlock_total_rule(storage_all_nonconvex_bus1_0)_: --1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) -+1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) -= 0 +c_u_InvestmentFlowBlock_maximum_rule(storage_all_nonconvex_bus1_0)_: ++1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) +-20 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) +<= 0 c_e_InvestmentFlowBlock_total_rule(bus1_storage_all_nonconvex_0)_: -1 InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_0) +1 InvestmentFlowBlock_total(bus1_storage_all_nonconvex_0) = 0 -c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_0_0)_: -+1 flow(storage_all_nonconvex_bus1_0_0) --1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_0_1)_: -+1 flow(storage_all_nonconvex_bus1_0_1) --1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_0_2)_: -+1 flow(storage_all_nonconvex_bus1_0_2) --1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) -<= 0 +c_e_InvestmentFlowBlock_total_rule(storage_all_nonconvex_bus1_0)_: +-1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) ++1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) += 0 c_u_InvestmentFlowBlock_max(bus1_storage_all_nonconvex_0_0)_: -+1 flow(bus1_storage_all_nonconvex_0_0) ++1 flow(bus1_storage_all_nonconvex_0) -1 InvestmentFlowBlock_total(bus1_storage_all_nonconvex_0) <= 0 c_u_InvestmentFlowBlock_max(bus1_storage_all_nonconvex_0_1)_: -+1 flow(bus1_storage_all_nonconvex_0_1) ++1 flow(bus1_storage_all_nonconvex_1) -1 InvestmentFlowBlock_total(bus1_storage_all_nonconvex_0) <= 0 c_u_InvestmentFlowBlock_max(bus1_storage_all_nonconvex_0_2)_: -+1 flow(bus1_storage_all_nonconvex_0_2) ++1 flow(bus1_storage_all_nonconvex_2) -1 InvestmentFlowBlock_total(bus1_storage_all_nonconvex_0) <= 0 +c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_0_0)_: ++1 flow(storage_all_nonconvex_bus1_0) +-1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_0_1)_: ++1 flow(storage_all_nonconvex_bus1_1) +-1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_0_2)_: ++1 flow(storage_all_nonconvex_bus1_2) +-1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) +<= 0 + c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_all_nonconvex_0)_: -1 GenericInvestmentStorageBlock_invest(storage_all_nonconvex_0) +1 GenericInvestmentStorageBlock_total(storage_all_nonconvex_0) @@ -97,22 +97,22 @@ c_u_GenericInvestmentStorageBlock_init_content_limit(storage_all_nonconvex)_: <= 0 c_e_GenericInvestmentStorageBlock_balance_first(storage_all_nonconvex)_: -+1 flow(storage_all_nonconvex_bus1_0_0) --1 flow(bus1_storage_all_nonconvex_0_0) +-1 flow(bus1_storage_all_nonconvex_0) ++1 flow(storage_all_nonconvex_bus1_0) -1 GenericInvestmentStorageBlock_init_content(storage_all_nonconvex) +1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_0) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_all_nonconvex_0_1)_: -+1 flow(storage_all_nonconvex_bus1_0_1) --1 flow(bus1_storage_all_nonconvex_0_1) +-1 flow(bus1_storage_all_nonconvex_1) ++1 flow(storage_all_nonconvex_bus1_1) -1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_0) +1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_all_nonconvex_0_2)_: -+1 flow(storage_all_nonconvex_bus1_0_2) --1 flow(bus1_storage_all_nonconvex_0_2) +-1 flow(bus1_storage_all_nonconvex_2) ++1 flow(storage_all_nonconvex_bus1_2) -1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_1) +1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_2) = 0 @@ -148,27 +148,27 @@ c_l_GenericInvestmentStorageBlock_limit_min(storage_all_nonconvex_0)_: >= 0 bounds - 0 <= InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) <= 20 - 0 <= InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) <= 1 0 <= InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_0) <= 30 + 0 <= InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) <= 20 0 <= InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_0) <= 1 + 0 <= InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) <= 1 0 <= GenericInvestmentStorageBlock_invest(storage_all_nonconvex_0) <= 100 0 <= GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_0) <= 1 - 0 <= flow(storage_all_nonconvex_bus1_0_0) <= +inf - 0 <= flow(bus1_storage_all_nonconvex_0_0) <= +inf - 0 <= flow(storage_all_nonconvex_bus1_0_1) <= +inf - 0 <= flow(bus1_storage_all_nonconvex_0_1) <= +inf - 0 <= flow(storage_all_nonconvex_bus1_0_2) <= +inf - 0 <= flow(bus1_storage_all_nonconvex_0_2) <= +inf - 0 <= InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) <= +inf + 0 <= flow(bus1_storage_all_nonconvex_0) <= +inf + 0 <= flow(bus1_storage_all_nonconvex_1) <= +inf + 0 <= flow(bus1_storage_all_nonconvex_2) <= +inf + 0 <= flow(storage_all_nonconvex_bus1_0) <= +inf + 0 <= flow(storage_all_nonconvex_bus1_1) <= +inf + 0 <= flow(storage_all_nonconvex_bus1_2) <= +inf 0 <= InvestmentFlowBlock_total(bus1_storage_all_nonconvex_0) <= +inf + 0 <= InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_all_nonconvex_0) <= +inf 0 <= GenericInvestmentStorageBlock_init_content(storage_all_nonconvex) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_2) <= +inf binary - InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_0) + InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_0) end diff --git a/tests/lp_files/storage_invest_all_nonconvex_multi_period.lp b/tests/lp_files/storage_invest_all_nonconvex_multi_period.lp index b78eca2f7..15fbce66f 100644 --- a/tests/lp_files/storage_invest_all_nonconvex_multi_period.lp +++ b/tests/lp_files/storage_invest_all_nonconvex_multi_period.lp @@ -2,72 +2,57 @@ min objective: ++1.7636883641156018 InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_0) ++1.164112696220594 InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_1) ++0.5762934139705919 InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_2) +1.7636883641156018 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) -+15 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) +1.164112696220594 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_1) -+14.705882352941176 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_1) +0.5762934139705919 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_2) -+14.41753171856978 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_2) -+1.7636883641156018 InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_0) +10 InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_0) -+1.164112696220594 InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_1) +9.80392156862745 InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_1) -+0.5762934139705919 InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_2) +9.611687812379854 InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_2) ++15 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) ++14.705882352941176 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_1) ++14.41753171856978 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_2) +3.5273767282312036 GenericInvestmentStorageBlock_invest(storage_all_nonconvex_0) -+30 GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_0) +2.328225392441188 GenericInvestmentStorageBlock_invest(storage_all_nonconvex_1) -+29.41176470588235 GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_1) +1.1525868279411837 GenericInvestmentStorageBlock_invest(storage_all_nonconvex_2) ++30 GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_0) ++29.41176470588235 GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_1) +28.83506343713956 GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_2) s.t. -c_e_BusBlock_balance(bus1_0_0)_: -+1 flow(storage_all_nonconvex_bus1_0_0) --1 flow(bus1_storage_all_nonconvex_0_0) +c_e_BusBlock_balance(bus1_0)_: +-1 flow(bus1_storage_all_nonconvex_0) ++1 flow(storage_all_nonconvex_bus1_0) = 0 -c_e_BusBlock_balance(bus1_0_1)_: -+1 flow(storage_all_nonconvex_bus1_0_1) --1 flow(bus1_storage_all_nonconvex_0_1) +c_e_BusBlock_balance(bus1_1)_: +-1 flow(bus1_storage_all_nonconvex_1) ++1 flow(storage_all_nonconvex_bus1_1) = 0 -c_e_BusBlock_balance(bus1_1_2)_: -+1 flow(storage_all_nonconvex_bus1_1_2) --1 flow(bus1_storage_all_nonconvex_1_2) +c_e_BusBlock_balance(bus1_2)_: +-1 flow(bus1_storage_all_nonconvex_2) ++1 flow(storage_all_nonconvex_bus1_2) = 0 -c_e_BusBlock_balance(bus1_1_3)_: -+1 flow(storage_all_nonconvex_bus1_1_3) --1 flow(bus1_storage_all_nonconvex_1_3) +c_e_BusBlock_balance(bus1_3)_: +-1 flow(bus1_storage_all_nonconvex_3) ++1 flow(storage_all_nonconvex_bus1_3) = 0 -c_e_BusBlock_balance(bus1_2_4)_: -+1 flow(storage_all_nonconvex_bus1_2_4) --1 flow(bus1_storage_all_nonconvex_2_4) +c_e_BusBlock_balance(bus1_4)_: +-1 flow(bus1_storage_all_nonconvex_4) ++1 flow(storage_all_nonconvex_bus1_4) = 0 -c_e_BusBlock_balance(bus1_2_5)_: -+1 flow(storage_all_nonconvex_bus1_2_5) --1 flow(bus1_storage_all_nonconvex_2_5) +c_e_BusBlock_balance(bus1_5)_: +-1 flow(bus1_storage_all_nonconvex_5) ++1 flow(storage_all_nonconvex_bus1_5) = 0 -c_u_InvestmentFlowBlock_minimum_rule(storage_all_nonconvex_bus1_0)_: --1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) -+8 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) -<= 0 - -c_u_InvestmentFlowBlock_minimum_rule(storage_all_nonconvex_bus1_1)_: --1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_1) -+8 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_1) -<= 0 - -c_u_InvestmentFlowBlock_minimum_rule(storage_all_nonconvex_bus1_2)_: --1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_2) -+8 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_2) -<= 0 - c_u_InvestmentFlowBlock_minimum_rule(bus1_storage_all_nonconvex_0)_: -1 InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_0) +5 InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_0) @@ -83,19 +68,19 @@ c_u_InvestmentFlowBlock_minimum_rule(bus1_storage_all_nonconvex_2)_: +5 InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_2) <= 0 -c_u_InvestmentFlowBlock_maximum_rule(storage_all_nonconvex_bus1_0)_: -+1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) --20 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) +c_u_InvestmentFlowBlock_minimum_rule(storage_all_nonconvex_bus1_0)_: +-1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) ++8 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) <= 0 -c_u_InvestmentFlowBlock_maximum_rule(storage_all_nonconvex_bus1_1)_: -+1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_1) --20 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_1) +c_u_InvestmentFlowBlock_minimum_rule(storage_all_nonconvex_bus1_1)_: +-1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_1) ++8 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_1) <= 0 -c_u_InvestmentFlowBlock_maximum_rule(storage_all_nonconvex_bus1_2)_: -+1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_2) --20 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_2) +c_u_InvestmentFlowBlock_minimum_rule(storage_all_nonconvex_bus1_2)_: +-1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_2) ++8 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_2) <= 0 c_u_InvestmentFlowBlock_maximum_rule(bus1_storage_all_nonconvex_0)_: @@ -113,24 +98,20 @@ c_u_InvestmentFlowBlock_maximum_rule(bus1_storage_all_nonconvex_2)_: -30 InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_2) <= 0 -c_e_InvestmentFlowBlock_total_rule(storage_all_nonconvex_bus1_0)_: --1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) -+1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) -= 0 +c_u_InvestmentFlowBlock_maximum_rule(storage_all_nonconvex_bus1_0)_: ++1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) +-20 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) +<= 0 -c_e_InvestmentFlowBlock_total_rule(storage_all_nonconvex_bus1_1)_: --1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_1) --1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) -+1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_1) -+1 InvestmentFlowBlock_old(storage_all_nonconvex_bus1_1) -= 0 +c_u_InvestmentFlowBlock_maximum_rule(storage_all_nonconvex_bus1_1)_: ++1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_1) +-20 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_1) +<= 0 -c_e_InvestmentFlowBlock_total_rule(storage_all_nonconvex_bus1_2)_: --1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_2) --1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_1) -+1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_2) -+1 InvestmentFlowBlock_old(storage_all_nonconvex_bus1_2) -= 0 +c_u_InvestmentFlowBlock_maximum_rule(storage_all_nonconvex_bus1_2)_: ++1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_2) +-20 InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_2) +<= 0 c_e_InvestmentFlowBlock_total_rule(bus1_storage_all_nonconvex_0)_: -1 InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_0) @@ -151,16 +132,23 @@ c_e_InvestmentFlowBlock_total_rule(bus1_storage_all_nonconvex_2)_: +1 InvestmentFlowBlock_old(bus1_storage_all_nonconvex_2) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_all_nonconvex_bus1_0)_: -+1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_0) +c_e_InvestmentFlowBlock_total_rule(storage_all_nonconvex_bus1_0)_: +-1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) ++1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_all_nonconvex_bus1_1)_: -+1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_1) +c_e_InvestmentFlowBlock_total_rule(storage_all_nonconvex_bus1_1)_: +-1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_1) +-1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) ++1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_1) ++1 InvestmentFlowBlock_old(storage_all_nonconvex_bus1_1) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_all_nonconvex_bus1_2)_: -+1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_2) +c_e_InvestmentFlowBlock_total_rule(storage_all_nonconvex_bus1_2)_: +-1 InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_2) +-1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_1) ++1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_2) ++1 InvestmentFlowBlock_old(storage_all_nonconvex_bus1_2) = 0 c_e_InvestmentFlowBlock_old_rule_end(bus1_storage_all_nonconvex_0)_: @@ -175,16 +163,16 @@ c_e_InvestmentFlowBlock_old_rule_end(bus1_storage_all_nonconvex_2)_: +1 InvestmentFlowBlock_old_end(bus1_storage_all_nonconvex_2) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_all_nonconvex_bus1_0)_: -+1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_0) +c_e_InvestmentFlowBlock_old_rule_end(storage_all_nonconvex_bus1_0)_: ++1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_0) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_all_nonconvex_bus1_1)_: -+1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_1) +c_e_InvestmentFlowBlock_old_rule_end(storage_all_nonconvex_bus1_1)_: ++1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_1) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_all_nonconvex_bus1_2)_: -+1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_2) +c_e_InvestmentFlowBlock_old_rule_end(storage_all_nonconvex_bus1_2)_: ++1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_2) = 0 c_e_InvestmentFlowBlock_old_rule_exo(bus1_storage_all_nonconvex_0)_: @@ -199,28 +187,22 @@ c_e_InvestmentFlowBlock_old_rule_exo(bus1_storage_all_nonconvex_2)_: +1 InvestmentFlowBlock_old_exo(bus1_storage_all_nonconvex_2) = 0 -c_e_InvestmentFlowBlock_old_rule(storage_all_nonconvex_bus1_0)_: --1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_0) --1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_0) -+1 InvestmentFlowBlock_old(storage_all_nonconvex_bus1_0) +c_e_InvestmentFlowBlock_old_rule_exo(storage_all_nonconvex_bus1_0)_: ++1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_0) = 0 -c_e_InvestmentFlowBlock_old_rule(storage_all_nonconvex_bus1_1)_: -+1 InvestmentFlowBlock_old(storage_all_nonconvex_bus1_1) --1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_1) --1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_1) +c_e_InvestmentFlowBlock_old_rule_exo(storage_all_nonconvex_bus1_1)_: ++1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_1) = 0 -c_e_InvestmentFlowBlock_old_rule(storage_all_nonconvex_bus1_2)_: -+1 InvestmentFlowBlock_old(storage_all_nonconvex_bus1_2) --1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_2) --1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_2) +c_e_InvestmentFlowBlock_old_rule_exo(storage_all_nonconvex_bus1_2)_: ++1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_2) = 0 c_e_InvestmentFlowBlock_old_rule(bus1_storage_all_nonconvex_0)_: ++1 InvestmentFlowBlock_old(bus1_storage_all_nonconvex_0) -1 InvestmentFlowBlock_old_end(bus1_storage_all_nonconvex_0) -1 InvestmentFlowBlock_old_exo(bus1_storage_all_nonconvex_0) -+1 InvestmentFlowBlock_old(bus1_storage_all_nonconvex_0) = 0 c_e_InvestmentFlowBlock_old_rule(bus1_storage_all_nonconvex_1)_: @@ -235,66 +217,84 @@ c_e_InvestmentFlowBlock_old_rule(bus1_storage_all_nonconvex_2)_: -1 InvestmentFlowBlock_old_exo(bus1_storage_all_nonconvex_2) = 0 -c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_0_0)_: -+1 flow(storage_all_nonconvex_bus1_0_0) --1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_0_1)_: -+1 flow(storage_all_nonconvex_bus1_0_1) --1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_1_2)_: -+1 flow(storage_all_nonconvex_bus1_1_2) --1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_1) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_1_3)_: -+1 flow(storage_all_nonconvex_bus1_1_3) --1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_1) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage_all_nonconvex_bus1_0)_: ++1 InvestmentFlowBlock_old(storage_all_nonconvex_bus1_0) +-1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_0) +-1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_0) += 0 -c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_2_4)_: -+1 flow(storage_all_nonconvex_bus1_2_4) --1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_2) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage_all_nonconvex_bus1_1)_: ++1 InvestmentFlowBlock_old(storage_all_nonconvex_bus1_1) +-1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_1) +-1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_1) += 0 -c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_2_5)_: -+1 flow(storage_all_nonconvex_bus1_2_5) --1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_2) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage_all_nonconvex_bus1_2)_: ++1 InvestmentFlowBlock_old(storage_all_nonconvex_bus1_2) +-1 InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_2) +-1 InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_2) += 0 c_u_InvestmentFlowBlock_max(bus1_storage_all_nonconvex_0_0)_: -+1 flow(bus1_storage_all_nonconvex_0_0) ++1 flow(bus1_storage_all_nonconvex_0) -1 InvestmentFlowBlock_total(bus1_storage_all_nonconvex_0) <= 0 c_u_InvestmentFlowBlock_max(bus1_storage_all_nonconvex_0_1)_: -+1 flow(bus1_storage_all_nonconvex_0_1) ++1 flow(bus1_storage_all_nonconvex_1) -1 InvestmentFlowBlock_total(bus1_storage_all_nonconvex_0) <= 0 c_u_InvestmentFlowBlock_max(bus1_storage_all_nonconvex_1_2)_: -+1 flow(bus1_storage_all_nonconvex_1_2) ++1 flow(bus1_storage_all_nonconvex_2) -1 InvestmentFlowBlock_total(bus1_storage_all_nonconvex_1) <= 0 c_u_InvestmentFlowBlock_max(bus1_storage_all_nonconvex_1_3)_: -+1 flow(bus1_storage_all_nonconvex_1_3) ++1 flow(bus1_storage_all_nonconvex_3) -1 InvestmentFlowBlock_total(bus1_storage_all_nonconvex_1) <= 0 c_u_InvestmentFlowBlock_max(bus1_storage_all_nonconvex_2_4)_: -+1 flow(bus1_storage_all_nonconvex_2_4) ++1 flow(bus1_storage_all_nonconvex_4) -1 InvestmentFlowBlock_total(bus1_storage_all_nonconvex_2) <= 0 c_u_InvestmentFlowBlock_max(bus1_storage_all_nonconvex_2_5)_: -+1 flow(bus1_storage_all_nonconvex_2_5) ++1 flow(bus1_storage_all_nonconvex_5) -1 InvestmentFlowBlock_total(bus1_storage_all_nonconvex_2) <= 0 +c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_0_0)_: ++1 flow(storage_all_nonconvex_bus1_0) +-1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_0_1)_: ++1 flow(storage_all_nonconvex_bus1_1) +-1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_1_2)_: ++1 flow(storage_all_nonconvex_bus1_2) +-1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_1_3)_: ++1 flow(storage_all_nonconvex_bus1_3) +-1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_2_4)_: ++1 flow(storage_all_nonconvex_bus1_4) +-1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_2) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_all_nonconvex_bus1_2_5)_: ++1 flow(storage_all_nonconvex_bus1_5) +-1 InvestmentFlowBlock_total(storage_all_nonconvex_bus1_2) +<= 0 + c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_all_nonconvex_0)_: -1 GenericInvestmentStorageBlock_invest(storage_all_nonconvex_0) +1 GenericInvestmentStorageBlock_total(storage_all_nonconvex_0) @@ -339,9 +339,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage_all_nonconvex_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_all_nonconvex_0)_: ++1 GenericInvestmentStorageBlock_old(storage_all_nonconvex_0) -1 GenericInvestmentStorageBlock_old_end(storage_all_nonconvex_0) -1 GenericInvestmentStorageBlock_old_exo(storage_all_nonconvex_0) -+1 GenericInvestmentStorageBlock_old(storage_all_nonconvex_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_all_nonconvex_1)_: @@ -361,36 +361,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage_all_nonconvex_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage_all_nonconvex_0_1)_: -+1 flow(storage_all_nonconvex_bus1_0_1) --1 flow(bus1_storage_all_nonconvex_0_1) +-1 flow(bus1_storage_all_nonconvex_1) ++1 flow(storage_all_nonconvex_bus1_1) -1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_0) +1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_all_nonconvex_1_2)_: -+1 flow(storage_all_nonconvex_bus1_1_2) --1 flow(bus1_storage_all_nonconvex_1_2) +-1 flow(bus1_storage_all_nonconvex_2) ++1 flow(storage_all_nonconvex_bus1_2) -1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_1) +1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_all_nonconvex_1_3)_: -+1 flow(storage_all_nonconvex_bus1_1_3) --1 flow(bus1_storage_all_nonconvex_1_3) +-1 flow(bus1_storage_all_nonconvex_3) ++1 flow(storage_all_nonconvex_bus1_3) -1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_2) +1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_all_nonconvex_2_4)_: -+1 flow(storage_all_nonconvex_bus1_2_4) --1 flow(bus1_storage_all_nonconvex_2_4) +-1 flow(bus1_storage_all_nonconvex_4) ++1 flow(storage_all_nonconvex_bus1_4) -1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_3) +1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_all_nonconvex_2_5)_: -+1 flow(storage_all_nonconvex_bus1_2_5) --1 flow(bus1_storage_all_nonconvex_2_5) +-1 flow(bus1_storage_all_nonconvex_5) ++1 flow(storage_all_nonconvex_bus1_5) -1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_4) +1 GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_5) = 0 @@ -456,64 +456,65 @@ c_l_GenericInvestmentStorageBlock_limit_min(storage_all_nonconvex_2)_: >= 0 bounds + 0 <= InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_0) <= 30 + 0 <= InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_1) <= 30 + 0 <= InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_2) <= 30 0 <= InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_0) <= 20 - 0 <= InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) <= 1 0 <= InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_1) <= 20 - 0 <= InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_1) <= 1 0 <= InvestmentFlowBlock_invest(storage_all_nonconvex_bus1_2) <= 20 - 0 <= InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_2) <= 1 - 0 <= InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_0) <= 30 0 <= InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_0) <= 1 - 0 <= InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_1) <= 30 0 <= InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_1) <= 1 - 0 <= InvestmentFlowBlock_invest(bus1_storage_all_nonconvex_2) <= 30 0 <= InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_2) <= 1 + 0 <= InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) <= 1 + 0 <= InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_1) <= 1 + 0 <= InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_2) <= 1 0 <= GenericInvestmentStorageBlock_invest(storage_all_nonconvex_0) <= 100 - 0 <= GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_0) <= 1 0 <= GenericInvestmentStorageBlock_invest(storage_all_nonconvex_1) <= 100 - 0 <= GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_1) <= 1 0 <= GenericInvestmentStorageBlock_invest(storage_all_nonconvex_2) <= 100 + 0 <= GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_0) <= 1 + 0 <= GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_1) <= 1 0 <= GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_2) <= 1 - 0 <= flow(storage_all_nonconvex_bus1_0_0) <= +inf - 0 <= flow(bus1_storage_all_nonconvex_0_0) <= +inf - 0 <= flow(storage_all_nonconvex_bus1_0_1) <= +inf - 0 <= flow(bus1_storage_all_nonconvex_0_1) <= +inf - 0 <= flow(storage_all_nonconvex_bus1_1_2) <= +inf - 0 <= flow(bus1_storage_all_nonconvex_1_2) <= +inf - 0 <= flow(storage_all_nonconvex_bus1_1_3) <= +inf - 0 <= flow(bus1_storage_all_nonconvex_1_3) <= +inf - 0 <= flow(storage_all_nonconvex_bus1_2_4) <= +inf - 0 <= flow(bus1_storage_all_nonconvex_2_4) <= +inf - 0 <= flow(storage_all_nonconvex_bus1_2_5) <= +inf - 0 <= flow(bus1_storage_all_nonconvex_2_5) <= +inf + 0 <= flow(bus1_storage_all_nonconvex_0) <= +inf + 0 <= flow(bus1_storage_all_nonconvex_1) <= +inf + 0 <= flow(bus1_storage_all_nonconvex_2) <= +inf + 0 <= flow(bus1_storage_all_nonconvex_3) <= +inf + 0 <= flow(bus1_storage_all_nonconvex_4) <= +inf + 0 <= flow(bus1_storage_all_nonconvex_5) <= +inf + 0 <= flow(storage_all_nonconvex_bus1_0) <= +inf + 0 <= flow(storage_all_nonconvex_bus1_1) <= +inf + 0 <= flow(storage_all_nonconvex_bus1_2) <= +inf + 0 <= flow(storage_all_nonconvex_bus1_3) <= +inf + 0 <= flow(storage_all_nonconvex_bus1_4) <= +inf + 0 <= flow(storage_all_nonconvex_bus1_5) <= +inf + 0 <= InvestmentFlowBlock_total(bus1_storage_all_nonconvex_0) <= +inf + 0 <= InvestmentFlowBlock_total(bus1_storage_all_nonconvex_1) <= +inf + 0 <= InvestmentFlowBlock_total(bus1_storage_all_nonconvex_2) <= +inf 0 <= InvestmentFlowBlock_total(storage_all_nonconvex_bus1_0) <= +inf 0 <= InvestmentFlowBlock_total(storage_all_nonconvex_bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old(storage_all_nonconvex_bus1_1) <= +inf 0 <= InvestmentFlowBlock_total(storage_all_nonconvex_bus1_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage_all_nonconvex_bus1_2) <= +inf - 0 <= InvestmentFlowBlock_total(bus1_storage_all_nonconvex_0) <= +inf - 0 <= InvestmentFlowBlock_total(bus1_storage_all_nonconvex_1) <= +inf + 0 <= InvestmentFlowBlock_old(bus1_storage_all_nonconvex_0) <= +inf 0 <= InvestmentFlowBlock_old(bus1_storage_all_nonconvex_1) <= +inf - 0 <= InvestmentFlowBlock_total(bus1_storage_all_nonconvex_2) <= +inf 0 <= InvestmentFlowBlock_old(bus1_storage_all_nonconvex_2) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_0) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old(storage_all_nonconvex_bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old(storage_all_nonconvex_bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old(storage_all_nonconvex_bus1_2) <= +inf 0 <= InvestmentFlowBlock_old_end(bus1_storage_all_nonconvex_0) <= +inf 0 <= InvestmentFlowBlock_old_end(bus1_storage_all_nonconvex_1) <= +inf 0 <= InvestmentFlowBlock_old_end(bus1_storage_all_nonconvex_2) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_0) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_1) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_2) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_all_nonconvex_bus1_2) <= +inf 0 <= InvestmentFlowBlock_old_exo(bus1_storage_all_nonconvex_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(bus1_storage_all_nonconvex_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(bus1_storage_all_nonconvex_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage_all_nonconvex_bus1_0) <= +inf - 0 <= InvestmentFlowBlock_old(bus1_storage_all_nonconvex_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_1) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_all_nonconvex_bus1_2) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_all_nonconvex_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_all_nonconvex_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_all_nonconvex_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_all_nonconvex_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_all_nonconvex_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_all_nonconvex_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage_all_nonconvex_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_all_nonconvex_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_all_nonconvex_1) <= +inf @@ -521,7 +522,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage_all_nonconvex_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_all_nonconvex_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_all_nonconvex_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_all_nonconvex_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_2) <= +inf @@ -529,12 +529,12 @@ bounds 0 <= GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_4) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_all_nonconvex_5) <= +inf binary - InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) - InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_1) - InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_2) InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_0) InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_1) InvestmentFlowBlock_invest_status(bus1_storage_all_nonconvex_2) + InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_0) + InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_1) + InvestmentFlowBlock_invest_status(storage_all_nonconvex_bus1_2) GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_0) GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_1) GenericInvestmentStorageBlock_invest_status(storage_all_nonconvex_2) diff --git a/tests/lp_files/storage_invest_minimum.lp b/tests/lp_files/storage_invest_minimum.lp index b20a7966f..be41ebe5e 100644 --- a/tests/lp_files/storage_invest_minimum.lp +++ b/tests/lp_files/storage_invest_minimum.lp @@ -6,19 +6,19 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage1_electricityBus_0_0) --1 flow(electricityBus_storage1_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(storage1_electricityBus_0_2) --1 flow(electricityBus_storage1_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) = 0 c_e_GenericInvestmentStorageBlock_total_storage_rule(storage1_0)_: @@ -32,22 +32,22 @@ c_u_GenericInvestmentStorageBlock_init_content_limit(storage1)_: <= 0 c_e_GenericInvestmentStorageBlock_balance_first(storage1)_: -+1 flow(storage1_electricityBus_0_0) --1 flow(electricityBus_storage1_0_0) +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) -1 GenericInvestmentStorageBlock_init_content(storage1) +1 GenericInvestmentStorageBlock_storage_content(storage1_0) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) -1 GenericInvestmentStorageBlock_storage_content(storage1_0) +1 GenericInvestmentStorageBlock_storage_content(storage1_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_2)_: -+1 flow(storage1_electricityBus_0_2) --1 flow(electricityBus_storage1_0_2) +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) -1 GenericInvestmentStorageBlock_storage_content(storage1_1) +1 GenericInvestmentStorageBlock_storage_content(storage1_2) = 0 @@ -74,12 +74,12 @@ c_u_GenericInvestmentStorageBlock_max_storage_content(storage1_0_2)_: bounds 100 <= GenericInvestmentStorageBlock_invest(storage1_0) <= 200 - 0 <= flow(storage1_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage1_0_0) <= +inf - 0 <= flow(storage1_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage1_0_1) <= +inf - 0 <= flow(storage1_electricityBus_0_2) <= +inf - 0 <= flow(electricityBus_storage1_0_2) <= +inf + 0 <= flow(electricityBus_storage1_0) <= +inf + 0 <= flow(electricityBus_storage1_1) <= +inf + 0 <= flow(electricityBus_storage1_2) <= +inf + 0 <= flow(storage1_electricityBus_0) <= +inf + 0 <= flow(storage1_electricityBus_1) <= +inf + 0 <= flow(storage1_electricityBus_2) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_init_content(storage1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_0) <= +inf diff --git a/tests/lp_files/storage_invest_minimum_multi_period.lp b/tests/lp_files/storage_invest_minimum_multi_period.lp index c61a64544..d1854ec25 100644 --- a/tests/lp_files/storage_invest_minimum_multi_period.lp +++ b/tests/lp_files/storage_invest_minimum_multi_period.lp @@ -8,34 +8,34 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage1_electricityBus_0_0) --1 flow(electricityBus_storage1_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(storage1_electricityBus_1_2) --1 flow(electricityBus_storage1_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(storage1_electricityBus_1_3) --1 flow(electricityBus_storage1_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage1_3) ++1 flow(storage1_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(storage1_electricityBus_2_4) --1 flow(electricityBus_storage1_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage1_4) ++1 flow(storage1_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(storage1_electricityBus_2_5) --1 flow(electricityBus_storage1_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage1_5) ++1 flow(storage1_electricityBus_5) = 0 c_e_GenericInvestmentStorageBlock_total_storage_rule(storage1_0)_: @@ -82,9 +82,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage1_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage1_0)_: ++1 GenericInvestmentStorageBlock_old(storage1_0) -1 GenericInvestmentStorageBlock_old_end(storage1_0) -1 GenericInvestmentStorageBlock_old_exo(storage1_0) -+1 GenericInvestmentStorageBlock_old(storage1_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage1_1)_: @@ -104,36 +104,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage1_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) -1 GenericInvestmentStorageBlock_storage_content(storage1_0) +1 GenericInvestmentStorageBlock_storage_content(storage1_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_1_2)_: -+1 flow(storage1_electricityBus_1_2) --1 flow(electricityBus_storage1_1_2) +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) -1 GenericInvestmentStorageBlock_storage_content(storage1_1) +1 GenericInvestmentStorageBlock_storage_content(storage1_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_1_3)_: -+1 flow(storage1_electricityBus_1_3) --1 flow(electricityBus_storage1_1_3) +-1 flow(electricityBus_storage1_3) ++1 flow(storage1_electricityBus_3) -1 GenericInvestmentStorageBlock_storage_content(storage1_2) +1 GenericInvestmentStorageBlock_storage_content(storage1_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_2_4)_: -+1 flow(storage1_electricityBus_2_4) --1 flow(electricityBus_storage1_2_4) +-1 flow(electricityBus_storage1_4) ++1 flow(storage1_electricityBus_4) -1 GenericInvestmentStorageBlock_storage_content(storage1_3) +1 GenericInvestmentStorageBlock_storage_content(storage1_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_2_5)_: -+1 flow(storage1_electricityBus_2_5) --1 flow(electricityBus_storage1_2_5) +-1 flow(electricityBus_storage1_5) ++1 flow(storage1_electricityBus_5) -1 GenericInvestmentStorageBlock_storage_content(storage1_4) +1 GenericInvestmentStorageBlock_storage_content(storage1_5) = 0 @@ -172,22 +172,23 @@ bounds 100 <= GenericInvestmentStorageBlock_invest(storage1_0) <= 200 100 <= GenericInvestmentStorageBlock_invest(storage1_1) <= 200 100 <= GenericInvestmentStorageBlock_invest(storage1_2) <= 200 - 0 <= flow(storage1_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage1_0_0) <= +inf - 0 <= flow(storage1_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage1_0_1) <= +inf - 0 <= flow(storage1_electricityBus_1_2) <= +inf - 0 <= flow(electricityBus_storage1_1_2) <= +inf - 0 <= flow(storage1_electricityBus_1_3) <= +inf - 0 <= flow(electricityBus_storage1_1_3) <= +inf - 0 <= flow(storage1_electricityBus_2_4) <= +inf - 0 <= flow(electricityBus_storage1_2_4) <= +inf - 0 <= flow(storage1_electricityBus_2_5) <= +inf - 0 <= flow(electricityBus_storage1_2_5) <= +inf + 0 <= flow(electricityBus_storage1_0) <= +inf + 0 <= flow(electricityBus_storage1_1) <= +inf + 0 <= flow(electricityBus_storage1_2) <= +inf + 0 <= flow(electricityBus_storage1_3) <= +inf + 0 <= flow(electricityBus_storage1_4) <= +inf + 0 <= flow(electricityBus_storage1_5) <= +inf + 0 <= flow(storage1_electricityBus_0) <= +inf + 0 <= flow(storage1_electricityBus_1) <= +inf + 0 <= flow(storage1_electricityBus_2) <= +inf + 0 <= flow(storage1_electricityBus_3) <= +inf + 0 <= flow(storage1_electricityBus_4) <= +inf + 0 <= flow(storage1_electricityBus_5) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage1_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage1_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage1_1) <= +inf @@ -195,7 +196,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage1_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_2) <= +inf diff --git a/tests/lp_files/storage_invest_multi_period.lp b/tests/lp_files/storage_invest_multi_period.lp index e8b1246e4..34c877f70 100644 --- a/tests/lp_files/storage_invest_multi_period.lp +++ b/tests/lp_files/storage_invest_multi_period.lp @@ -9,34 +9,34 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage1_electricityBus_0_0) --1 flow(electricityBus_storage1_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(storage1_electricityBus_1_2) --1 flow(electricityBus_storage1_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(storage1_electricityBus_1_3) --1 flow(electricityBus_storage1_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage1_3) ++1 flow(storage1_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(storage1_electricityBus_2_4) --1 flow(electricityBus_storage1_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage1_4) ++1 flow(storage1_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(storage1_electricityBus_2_5) --1 flow(electricityBus_storage1_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage1_5) ++1 flow(storage1_electricityBus_5) = 0 c_e_GenericInvestmentStorageBlock_total_storage_rule(storage1_0)_: @@ -83,9 +83,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage1_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage1_0)_: ++1 GenericInvestmentStorageBlock_old(storage1_0) -1 GenericInvestmentStorageBlock_old_end(storage1_0) -1 GenericInvestmentStorageBlock_old_exo(storage1_0) -+1 GenericInvestmentStorageBlock_old(storage1_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage1_1)_: @@ -105,36 +105,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage1_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) -1 GenericInvestmentStorageBlock_storage_content(storage1_0) +1 GenericInvestmentStorageBlock_storage_content(storage1_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_1_2)_: -+1 flow(storage1_electricityBus_1_2) --1 flow(electricityBus_storage1_1_2) +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) -1 GenericInvestmentStorageBlock_storage_content(storage1_1) +1 GenericInvestmentStorageBlock_storage_content(storage1_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_1_3)_: -+1 flow(storage1_electricityBus_1_3) --1 flow(electricityBus_storage1_1_3) +-1 flow(electricityBus_storage1_3) ++1 flow(storage1_electricityBus_3) -1 GenericInvestmentStorageBlock_storage_content(storage1_2) +1 GenericInvestmentStorageBlock_storage_content(storage1_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_2_4)_: -+1 flow(storage1_electricityBus_2_4) --1 flow(electricityBus_storage1_2_4) +-1 flow(electricityBus_storage1_4) ++1 flow(storage1_electricityBus_4) -1 GenericInvestmentStorageBlock_storage_content(storage1_3) +1 GenericInvestmentStorageBlock_storage_content(storage1_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_2_5)_: -+1 flow(storage1_electricityBus_2_5) --1 flow(electricityBus_storage1_2_5) +-1 flow(electricityBus_storage1_5) ++1 flow(storage1_electricityBus_5) -1 GenericInvestmentStorageBlock_storage_content(storage1_4) +1 GenericInvestmentStorageBlock_storage_content(storage1_5) = 0 @@ -190,22 +190,23 @@ bounds 100 <= GenericInvestmentStorageBlock_invest(storage1_0) <= 200 100 <= GenericInvestmentStorageBlock_invest(storage1_1) <= 200 100 <= GenericInvestmentStorageBlock_invest(storage1_2) <= 200 - 0 <= flow(storage1_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage1_0_0) <= +inf - 0 <= flow(storage1_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage1_0_1) <= +inf - 0 <= flow(storage1_electricityBus_1_2) <= +inf - 0 <= flow(electricityBus_storage1_1_2) <= +inf - 0 <= flow(storage1_electricityBus_1_3) <= +inf - 0 <= flow(electricityBus_storage1_1_3) <= +inf - 0 <= flow(storage1_electricityBus_2_4) <= +inf - 0 <= flow(electricityBus_storage1_2_4) <= +inf - 0 <= flow(storage1_electricityBus_2_5) <= +inf - 0 <= flow(electricityBus_storage1_2_5) <= +inf + 0 <= flow(electricityBus_storage1_0) <= +inf + 0 <= flow(electricityBus_storage1_1) <= +inf + 0 <= flow(electricityBus_storage1_2) <= +inf + 0 <= flow(electricityBus_storage1_3) <= +inf + 0 <= flow(electricityBus_storage1_4) <= +inf + 0 <= flow(electricityBus_storage1_5) <= +inf + 0 <= flow(storage1_electricityBus_0) <= +inf + 0 <= flow(storage1_electricityBus_1) <= +inf + 0 <= flow(storage1_electricityBus_2) <= +inf + 0 <= flow(storage1_electricityBus_3) <= +inf + 0 <= flow(storage1_electricityBus_4) <= +inf + 0 <= flow(storage1_electricityBus_5) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage1_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage1_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage1_1) <= +inf @@ -213,7 +214,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage1_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage1_2) <= +inf diff --git a/tests/lp_files/storage_invest_unbalanced.lp b/tests/lp_files/storage_invest_unbalanced.lp index 2dbed4e9b..a26377921 100644 --- a/tests/lp_files/storage_invest_unbalanced.lp +++ b/tests/lp_files/storage_invest_unbalanced.lp @@ -6,19 +6,19 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage1_electricityBus_0_0) --1 flow(electricityBus_storage1_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(storage1_electricityBus_0_2) --1 flow(electricityBus_storage1_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage1_0)_: @@ -32,32 +32,32 @@ c_e_InvestmentFlowBlock_total_rule(storage1_electricityBus_0)_: = 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_0)_: -+1 flow(electricityBus_storage1_0_0) ++1 flow(electricityBus_storage1_0) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_1)_: -+1 flow(electricityBus_storage1_0_1) ++1 flow(electricityBus_storage1_1) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage1_0_2)_: -+1 flow(electricityBus_storage1_0_2) ++1 flow(electricityBus_storage1_2) -1 InvestmentFlowBlock_total(electricityBus_storage1_0) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_0)_: -+1 flow(storage1_electricityBus_0_0) ++1 flow(storage1_electricityBus_0) -1 InvestmentFlowBlock_total(storage1_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_1)_: -+1 flow(storage1_electricityBus_0_1) ++1 flow(storage1_electricityBus_1) -1 InvestmentFlowBlock_total(storage1_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage1_electricityBus_0_2)_: -+1 flow(storage1_electricityBus_0_2) ++1 flow(storage1_electricityBus_2) -1 InvestmentFlowBlock_total(storage1_electricityBus_0) <= 0 @@ -72,22 +72,22 @@ c_e_GenericInvestmentStorageBlock_init_content_fix(storage1)_: = 0 c_e_GenericInvestmentStorageBlock_balance_first(storage1)_: -+1 flow(storage1_electricityBus_0_0) --1 flow(electricityBus_storage1_0_0) +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) -1 GenericInvestmentStorageBlock_init_content(storage1) +1 GenericInvestmentStorageBlock_storage_content(storage1_0) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) -1 GenericInvestmentStorageBlock_storage_content(storage1_0) +1 GenericInvestmentStorageBlock_storage_content(storage1_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage1_0_2)_: -+1 flow(storage1_electricityBus_0_2) --1 flow(electricityBus_storage1_0_2) +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) -1 GenericInvestmentStorageBlock_storage_content(storage1_1) +1 GenericInvestmentStorageBlock_storage_content(storage1_2) = 0 @@ -119,15 +119,15 @@ c_u_GenericInvestmentStorageBlock_max_storage_content(storage1_0_2)_: bounds 0 <= GenericInvestmentStorageBlock_invest(storage1_0) <= +inf - 0 <= flow(storage1_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage1_0_0) <= +inf - 0 <= flow(storage1_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage1_0_1) <= +inf - 0 <= flow(storage1_electricityBus_0_2) <= +inf - 0 <= flow(electricityBus_storage1_0_2) <= +inf + 0 <= flow(electricityBus_storage1_0) <= +inf + 0 <= flow(electricityBus_storage1_1) <= +inf + 0 <= flow(electricityBus_storage1_2) <= +inf + 0 <= flow(storage1_electricityBus_0) <= +inf + 0 <= flow(storage1_electricityBus_1) <= +inf + 0 <= flow(storage1_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage1_0) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_0) <= +inf 0 <= InvestmentFlowBlock_total(storage1_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage1_0) <= +inf 0 <= InvestmentFlowBlock_invest(storage1_electricityBus_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage1_0) <= +inf 0 <= GenericInvestmentStorageBlock_init_content(storage1) <= +inf diff --git a/tests/lp_files/storage_invest_with_offset.lp b/tests/lp_files/storage_invest_with_offset.lp index 18cc0c966..ccc18b41f 100644 --- a/tests/lp_files/storage_invest_with_offset.lp +++ b/tests/lp_files/storage_invest_with_offset.lp @@ -2,35 +2,30 @@ min objective: -+56 flow(electricityBus_storage_non_convex_0_0) -+56 flow(electricityBus_storage_non_convex_0_1) -+56 flow(electricityBus_storage_non_convex_0_2) -+24 flow(storage_non_convex_electricityBus_0_0) -+24 flow(storage_non_convex_electricityBus_0_1) -+24 flow(storage_non_convex_electricityBus_0_2) ++56 flow(electricityBus_storage_non_convex_0) ++56 flow(electricityBus_storage_non_convex_1) ++56 flow(electricityBus_storage_non_convex_2) ++24 flow(storage_non_convex_electricityBus_0) ++24 flow(storage_non_convex_electricityBus_1) ++24 flow(storage_non_convex_electricityBus_2) +145 GenericInvestmentStorageBlock_invest(storage_non_convex_0) +5 GenericInvestmentStorageBlock_invest_status(storage_non_convex_0) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage_non_convex_0_0) -+1 flow(storage_non_convex_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage_non_convex_0) ++1 flow(storage_non_convex_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage_non_convex_0_1) -+1 flow(storage_non_convex_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage_non_convex_1) ++1 flow(storage_non_convex_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: --1 flow(electricityBus_storage_non_convex_0_2) -+1 flow(storage_non_convex_electricityBus_0_2) -= 0 - -c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_0)_: -+1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) --1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage_non_convex_2) ++1 flow(storage_non_convex_electricityBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage_non_convex_0)_: @@ -38,36 +33,41 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_storage_non_convex_0)_: -1 InvestmentFlowBlock_invest(electricityBus_storage_non_convex_0) = 0 -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_0)_: -+1 flow(storage_non_convex_electricityBus_0_0) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_1)_: -+1 flow(storage_non_convex_electricityBus_0_1) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_2)_: -+1 flow(storage_non_convex_electricityBus_0_2) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -<= 0 +c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) += 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_0)_: -+1 flow(electricityBus_storage_non_convex_0_0) ++1 flow(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_1)_: -+1 flow(electricityBus_storage_non_convex_0_1) ++1 flow(electricityBus_storage_non_convex_1) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_2)_: -+1 flow(electricityBus_storage_non_convex_0_2) ++1 flow(electricityBus_storage_non_convex_2) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_0)_: ++1 flow(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_1)_: ++1 flow(storage_non_convex_electricityBus_1) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_2)_: ++1 flow(storage_non_convex_electricityBus_2) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +<= 0 + c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_non_convex_0)_: -1 GenericInvestmentStorageBlock_invest(storage_non_convex_0) +1 GenericInvestmentStorageBlock_total(storage_non_convex_0) @@ -79,22 +79,22 @@ c_u_GenericInvestmentStorageBlock_init_content_limit(storage_non_convex)_: <= 0 c_e_GenericInvestmentStorageBlock_balance_first(storage_non_convex)_: --0.97 flow(electricityBus_storage_non_convex_0_0) -+1.1627906976744187 flow(storage_non_convex_electricityBus_0_0) +-0.97 flow(electricityBus_storage_non_convex_0) ++1.1627906976744187 flow(storage_non_convex_electricityBus_0) -0.87 GenericInvestmentStorageBlock_init_content(storage_non_convex) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_0_1)_: --0.97 flow(electricityBus_storage_non_convex_0_1) -+1.1627906976744187 flow(storage_non_convex_electricityBus_0_1) +-0.97 flow(electricityBus_storage_non_convex_1) ++1.1627906976744187 flow(storage_non_convex_electricityBus_1) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_0_2)_: --0.97 flow(electricityBus_storage_non_convex_0_2) -+1.1627906976744187 flow(storage_non_convex_electricityBus_0_2) +-0.97 flow(electricityBus_storage_non_convex_2) ++1.1627906976744187 flow(storage_non_convex_electricityBus_2) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) = 0 @@ -155,18 +155,18 @@ c_l_GenericInvestmentStorageBlock_limit_min(storage_non_convex_0)_: >= 0 bounds - 0 <= flow(electricityBus_storage_non_convex_0_0) <= +inf - 0 <= flow(electricityBus_storage_non_convex_0_1) <= +inf - 0 <= flow(electricityBus_storage_non_convex_0_2) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_0) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_1) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_2) <= +inf + 0 <= flow(electricityBus_storage_non_convex_0) <= +inf + 0 <= flow(electricityBus_storage_non_convex_1) <= +inf + 0 <= flow(electricityBus_storage_non_convex_2) <= +inf + 0 <= flow(storage_non_convex_electricityBus_0) <= +inf + 0 <= flow(storage_non_convex_electricityBus_1) <= +inf + 0 <= flow(storage_non_convex_electricityBus_2) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_0) <= 1454 0 <= GenericInvestmentStorageBlock_invest_status(storage_non_convex_0) <= 1 - 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_init_content(storage_non_convex) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) <= +inf diff --git a/tests/lp_files/storage_invest_with_offset_multi_period.lp b/tests/lp_files/storage_invest_with_offset_multi_period.lp index 0391a3236..71d9e8e07 100644 --- a/tests/lp_files/storage_invest_with_offset_multi_period.lp +++ b/tests/lp_files/storage_invest_with_offset_multi_period.lp @@ -2,55 +2,55 @@ min objective: -+56 flow(electricityBus_storage_non_convex_0_0) -+56 flow(electricityBus_storage_non_convex_0_1) -+54.90196078431372 flow(electricityBus_storage_non_convex_1_2) -+54.90196078431372 flow(electricityBus_storage_non_convex_1_3) -+53.82545174932718 flow(electricityBus_storage_non_convex_2_4) -+53.82545174932718 flow(electricityBus_storage_non_convex_2_5) -+24 flow(storage_non_convex_electricityBus_0_0) -+24 flow(storage_non_convex_electricityBus_0_1) -+23.52941176470588 flow(storage_non_convex_electricityBus_1_2) -+23.52941176470588 flow(storage_non_convex_electricityBus_1_3) -+23.06805074971165 flow(storage_non_convex_electricityBus_2_4) -+23.06805074971165 flow(storage_non_convex_electricityBus_2_5) ++56 flow(electricityBus_storage_non_convex_0) ++56 flow(electricityBus_storage_non_convex_1) ++54.90196078431372 flow(electricityBus_storage_non_convex_2) ++54.90196078431372 flow(electricityBus_storage_non_convex_3) ++53.82545174932718 flow(electricityBus_storage_non_convex_4) ++53.82545174932718 flow(electricityBus_storage_non_convex_5) ++24 flow(storage_non_convex_electricityBus_0) ++24 flow(storage_non_convex_electricityBus_1) ++23.52941176470588 flow(storage_non_convex_electricityBus_2) ++23.52941176470588 flow(storage_non_convex_electricityBus_3) ++23.06805074971165 flow(storage_non_convex_electricityBus_4) ++23.06805074971165 flow(storage_non_convex_electricityBus_5) +25.57348127967623 GenericInvestmentStorageBlock_invest(storage_non_convex_0) -+5 GenericInvestmentStorageBlock_invest_status(storage_non_convex_0) +16.879634095198618 GenericInvestmentStorageBlock_invest(storage_non_convex_1) -+4.901960784313725 GenericInvestmentStorageBlock_invest_status(storage_non_convex_1) +8.35625450257358 GenericInvestmentStorageBlock_invest(storage_non_convex_2) ++5 GenericInvestmentStorageBlock_invest_status(storage_non_convex_0) ++4.901960784313725 GenericInvestmentStorageBlock_invest_status(storage_non_convex_1) +4.805843906189927 GenericInvestmentStorageBlock_invest_status(storage_non_convex_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage_non_convex_0_0) -+1 flow(storage_non_convex_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage_non_convex_0) ++1 flow(storage_non_convex_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage_non_convex_0_1) -+1 flow(storage_non_convex_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage_non_convex_1) ++1 flow(storage_non_convex_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: --1 flow(electricityBus_storage_non_convex_1_2) -+1 flow(storage_non_convex_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage_non_convex_2) ++1 flow(storage_non_convex_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: --1 flow(electricityBus_storage_non_convex_1_3) -+1 flow(storage_non_convex_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage_non_convex_3) ++1 flow(storage_non_convex_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: --1 flow(electricityBus_storage_non_convex_2_4) -+1 flow(storage_non_convex_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage_non_convex_4) ++1 flow(storage_non_convex_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: --1 flow(electricityBus_storage_non_convex_2_5) -+1 flow(storage_non_convex_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage_non_convex_5) ++1 flow(storage_non_convex_electricityBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage_non_convex_0)_: @@ -140,9 +140,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_0)_: ++1 InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_0) -+1 InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_1)_: @@ -158,9 +158,9 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) -1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) -1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) = 0 c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_1)_: @@ -176,62 +176,62 @@ c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_2)_: = 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_0)_: -+1 flow(electricityBus_storage_non_convex_0_0) ++1 flow(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_1)_: -+1 flow(electricityBus_storage_non_convex_0_1) ++1 flow(electricityBus_storage_non_convex_1) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_1_2)_: -+1 flow(electricityBus_storage_non_convex_1_2) ++1 flow(electricityBus_storage_non_convex_2) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_1_3)_: -+1 flow(electricityBus_storage_non_convex_1_3) ++1 flow(electricityBus_storage_non_convex_3) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_2_4)_: -+1 flow(electricityBus_storage_non_convex_2_4) ++1 flow(electricityBus_storage_non_convex_4) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_2_5)_: -+1 flow(electricityBus_storage_non_convex_2_5) ++1 flow(electricityBus_storage_non_convex_5) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_0)_: -+1 flow(storage_non_convex_electricityBus_0_0) ++1 flow(storage_non_convex_electricityBus_0) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_1)_: -+1 flow(storage_non_convex_electricityBus_0_1) ++1 flow(storage_non_convex_electricityBus_1) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_2)_: -+1 flow(storage_non_convex_electricityBus_1_2) ++1 flow(storage_non_convex_electricityBus_2) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_3)_: -+1 flow(storage_non_convex_electricityBus_1_3) ++1 flow(storage_non_convex_electricityBus_3) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_4)_: -+1 flow(storage_non_convex_electricityBus_2_4) ++1 flow(storage_non_convex_electricityBus_4) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_5)_: -+1 flow(storage_non_convex_electricityBus_2_5) ++1 flow(storage_non_convex_electricityBus_5) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) <= 0 @@ -279,9 +279,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage_non_convex_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_non_convex_0)_: ++1 GenericInvestmentStorageBlock_old(storage_non_convex_0) -1 GenericInvestmentStorageBlock_old_end(storage_non_convex_0) -1 GenericInvestmentStorageBlock_old_exo(storage_non_convex_0) -+1 GenericInvestmentStorageBlock_old(storage_non_convex_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_non_convex_1)_: @@ -301,36 +301,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage_non_convex_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_0_1)_: --0.97 flow(electricityBus_storage_non_convex_0_1) -+1.1627906976744187 flow(storage_non_convex_electricityBus_0_1) +-0.97 flow(electricityBus_storage_non_convex_1) ++1.1627906976744187 flow(storage_non_convex_electricityBus_1) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_1_2)_: --0.97 flow(electricityBus_storage_non_convex_1_2) -+1.1627906976744187 flow(storage_non_convex_electricityBus_1_2) +-0.97 flow(electricityBus_storage_non_convex_2) ++1.1627906976744187 flow(storage_non_convex_electricityBus_2) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_1_3)_: --0.97 flow(electricityBus_storage_non_convex_1_3) -+1.1627906976744187 flow(storage_non_convex_electricityBus_1_3) +-0.97 flow(electricityBus_storage_non_convex_3) ++1.1627906976744187 flow(storage_non_convex_electricityBus_3) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_2_4)_: --0.97 flow(electricityBus_storage_non_convex_2_4) -+1.1627906976744187 flow(storage_non_convex_electricityBus_2_4) +-0.97 flow(electricityBus_storage_non_convex_4) ++1.1627906976744187 flow(storage_non_convex_electricityBus_4) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_3) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_2_5)_: --0.97 flow(electricityBus_storage_non_convex_2_5) -+1.1627906976744187 flow(storage_non_convex_electricityBus_2_5) +-0.97 flow(electricityBus_storage_non_convex_5) ++1.1627906976744187 flow(storage_non_convex_electricityBus_5) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_4) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_5) = 0 @@ -456,39 +456,41 @@ c_l_GenericInvestmentStorageBlock_limit_min(storage_non_convex_2)_: >= 0 bounds - 0 <= flow(electricityBus_storage_non_convex_0_0) <= +inf - 0 <= flow(electricityBus_storage_non_convex_0_1) <= +inf - 0 <= flow(electricityBus_storage_non_convex_1_2) <= +inf - 0 <= flow(electricityBus_storage_non_convex_1_3) <= +inf - 0 <= flow(electricityBus_storage_non_convex_2_4) <= +inf - 0 <= flow(electricityBus_storage_non_convex_2_5) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_0) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_1) <= +inf - 0 <= flow(storage_non_convex_electricityBus_1_2) <= +inf - 0 <= flow(storage_non_convex_electricityBus_1_3) <= +inf - 0 <= flow(storage_non_convex_electricityBus_2_4) <= +inf - 0 <= flow(storage_non_convex_electricityBus_2_5) <= +inf + 0 <= flow(electricityBus_storage_non_convex_0) <= +inf + 0 <= flow(electricityBus_storage_non_convex_1) <= +inf + 0 <= flow(electricityBus_storage_non_convex_2) <= +inf + 0 <= flow(electricityBus_storage_non_convex_3) <= +inf + 0 <= flow(electricityBus_storage_non_convex_4) <= +inf + 0 <= flow(electricityBus_storage_non_convex_5) <= +inf + 0 <= flow(storage_non_convex_electricityBus_0) <= +inf + 0 <= flow(storage_non_convex_electricityBus_1) <= +inf + 0 <= flow(storage_non_convex_electricityBus_2) <= +inf + 0 <= flow(storage_non_convex_electricityBus_3) <= +inf + 0 <= flow(storage_non_convex_electricityBus_4) <= +inf + 0 <= flow(storage_non_convex_electricityBus_5) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_0) <= 1454 - 0 <= GenericInvestmentStorageBlock_invest_status(storage_non_convex_0) <= 1 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_1) <= 1454 - 0 <= GenericInvestmentStorageBlock_invest_status(storage_non_convex_1) <= 1 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_2) <= 1454 + 0 <= GenericInvestmentStorageBlock_invest_status(storage_non_convex_0) <= 1 + 0 <= GenericInvestmentStorageBlock_invest_status(storage_non_convex_1) <= 1 0 <= GenericInvestmentStorageBlock_invest_status(storage_non_convex_2) <= 1 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_1) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_2) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_1) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_2) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_1) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_2) <= +inf + 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_0) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_1) <= +inf @@ -502,12 +504,11 @@ bounds 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) <= +inf - 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_non_convex_1) <= +inf @@ -515,7 +516,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) <= +inf diff --git a/tests/lp_files/storage_invest_with_offset_multi_period_remaining_value.lp b/tests/lp_files/storage_invest_with_offset_multi_period_remaining_value.lp index 9347789d9..71d9e8e07 100644 --- a/tests/lp_files/storage_invest_with_offset_multi_period_remaining_value.lp +++ b/tests/lp_files/storage_invest_with_offset_multi_period_remaining_value.lp @@ -2,74 +2,55 @@ min objective: -+56 flow(electricityBus_storage_non_convex_0_0) -+56 flow(electricityBus_storage_non_convex_0_1) -+54.90196078431372 flow(electricityBus_storage_non_convex_1_2) -+54.90196078431372 flow(electricityBus_storage_non_convex_1_3) -+53.82545174932718 flow(electricityBus_storage_non_convex_2_4) -+53.82545174932718 flow(electricityBus_storage_non_convex_2_5) -+24 flow(storage_non_convex_electricityBus_0_0) -+24 flow(storage_non_convex_electricityBus_0_1) -+23.52941176470588 flow(storage_non_convex_electricityBus_1_2) -+23.52941176470588 flow(storage_non_convex_electricityBus_1_3) -+23.06805074971165 flow(storage_non_convex_electricityBus_2_4) -+23.06805074971165 flow(storage_non_convex_electricityBus_2_5) ++56 flow(electricityBus_storage_non_convex_0) ++56 flow(electricityBus_storage_non_convex_1) ++54.90196078431372 flow(electricityBus_storage_non_convex_2) ++54.90196078431372 flow(electricityBus_storage_non_convex_3) ++53.82545174932718 flow(electricityBus_storage_non_convex_4) ++53.82545174932718 flow(electricityBus_storage_non_convex_5) ++24 flow(storage_non_convex_electricityBus_0) ++24 flow(storage_non_convex_electricityBus_1) ++23.52941176470588 flow(storage_non_convex_electricityBus_2) ++23.52941176470588 flow(storage_non_convex_electricityBus_3) ++23.06805074971165 flow(storage_non_convex_electricityBus_4) ++23.06805074971165 flow(storage_non_convex_electricityBus_5) +25.57348127967623 GenericInvestmentStorageBlock_invest(storage_non_convex_0) -+5 GenericInvestmentStorageBlock_invest_status(storage_non_convex_0) +16.879634095198618 GenericInvestmentStorageBlock_invest(storage_non_convex_1) -+4.901960784313725 GenericInvestmentStorageBlock_invest_status(storage_non_convex_1) +8.35625450257358 GenericInvestmentStorageBlock_invest(storage_non_convex_2) ++5 GenericInvestmentStorageBlock_invest_status(storage_non_convex_0) ++4.901960784313725 GenericInvestmentStorageBlock_invest_status(storage_non_convex_1) +4.805843906189927 GenericInvestmentStorageBlock_invest_status(storage_non_convex_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage_non_convex_0_0) -+1 flow(storage_non_convex_electricityBus_0_0) -= 0 - -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage_non_convex_0_1) -+1 flow(storage_non_convex_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage_non_convex_0) ++1 flow(storage_non_convex_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: --1 flow(electricityBus_storage_non_convex_1_2) -+1 flow(storage_non_convex_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage_non_convex_1) ++1 flow(storage_non_convex_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: --1 flow(electricityBus_storage_non_convex_1_3) -+1 flow(storage_non_convex_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage_non_convex_2) ++1 flow(storage_non_convex_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: --1 flow(electricityBus_storage_non_convex_2_4) -+1 flow(storage_non_convex_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage_non_convex_3) ++1 flow(storage_non_convex_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: --1 flow(electricityBus_storage_non_convex_2_5) -+1 flow(storage_non_convex_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage_non_convex_4) ++1 flow(storage_non_convex_electricityBus_4) = 0 -c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_0)_: -+1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) --1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) -= 0 - -c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_1)_: --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -+1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) --1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) -= 0 - -c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_2)_: --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) -+1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) --1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_2) -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage_non_convex_5) ++1 flow(storage_non_convex_electricityBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage_non_convex_0)_: @@ -91,16 +72,23 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_storage_non_convex_2)_: +1 InvestmentFlowBlock_old(electricityBus_storage_non_convex_2) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_0)_: -+1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) +c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_1)_: -+1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) +c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_1)_: +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) ++1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) +-1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_2)_: -+1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) +c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_2)_: +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) ++1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) +-1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_2) ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule_end(electricityBus_storage_non_convex_0)_: @@ -115,16 +103,16 @@ c_e_InvestmentFlowBlock_old_rule_end(electricityBus_storage_non_convex_2)_: +1 InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_2) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_0)_: -+1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) +c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_1)_: -+1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) +c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_1)_: ++1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_2)_: -+1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) +c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_2)_: ++1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage_non_convex_0)_: @@ -139,28 +127,22 @@ c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage_non_convex_2)_: +1 InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_2) = 0 -c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_0)_: --1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) --1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) +c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_1)_: -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) --1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) --1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) +c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_1)_: ++1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_2)_: -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) --1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) --1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) +c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_2)_: ++1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_0)_: ++1 InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_0) -+1 InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_1)_: @@ -175,66 +157,84 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_2)_: -1 InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_2) = 0 -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_0)_: -+1 flow(storage_non_convex_electricityBus_0_0) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_1)_: -+1 flow(storage_non_convex_electricityBus_0_1) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_2)_: -+1 flow(storage_non_convex_electricityBus_1_2) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_3)_: -+1 flow(storage_non_convex_electricityBus_1_3) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) += 0 -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_4)_: -+1 flow(storage_non_convex_electricityBus_2_4) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_1)_: ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) +-1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) +-1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) += 0 -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_5)_: -+1 flow(storage_non_convex_electricityBus_2_5) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_2)_: ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) +-1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) +-1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) += 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_0)_: -+1 flow(electricityBus_storage_non_convex_0_0) ++1 flow(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_1)_: -+1 flow(electricityBus_storage_non_convex_0_1) ++1 flow(electricityBus_storage_non_convex_1) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_1_2)_: -+1 flow(electricityBus_storage_non_convex_1_2) ++1 flow(electricityBus_storage_non_convex_2) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_1_3)_: -+1 flow(electricityBus_storage_non_convex_1_3) ++1 flow(electricityBus_storage_non_convex_3) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_2_4)_: -+1 flow(electricityBus_storage_non_convex_2_4) ++1 flow(electricityBus_storage_non_convex_4) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_2_5)_: -+1 flow(electricityBus_storage_non_convex_2_5) ++1 flow(electricityBus_storage_non_convex_5) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= 0 +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_0)_: ++1 flow(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_1)_: ++1 flow(storage_non_convex_electricityBus_1) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_2)_: ++1 flow(storage_non_convex_electricityBus_2) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_3)_: ++1 flow(storage_non_convex_electricityBus_3) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_4)_: ++1 flow(storage_non_convex_electricityBus_4) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_5)_: ++1 flow(storage_non_convex_electricityBus_5) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) +<= 0 + c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_non_convex_0)_: -1 GenericInvestmentStorageBlock_invest(storage_non_convex_0) +1 GenericInvestmentStorageBlock_total(storage_non_convex_0) @@ -279,9 +279,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage_non_convex_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_non_convex_0)_: ++1 GenericInvestmentStorageBlock_old(storage_non_convex_0) -1 GenericInvestmentStorageBlock_old_end(storage_non_convex_0) -1 GenericInvestmentStorageBlock_old_exo(storage_non_convex_0) -+1 GenericInvestmentStorageBlock_old(storage_non_convex_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_non_convex_1)_: @@ -301,36 +301,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage_non_convex_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_0_1)_: --0.97 flow(electricityBus_storage_non_convex_0_1) -+1.1627906976744187 flow(storage_non_convex_electricityBus_0_1) +-0.97 flow(electricityBus_storage_non_convex_1) ++1.1627906976744187 flow(storage_non_convex_electricityBus_1) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_1_2)_: --0.97 flow(electricityBus_storage_non_convex_1_2) -+1.1627906976744187 flow(storage_non_convex_electricityBus_1_2) +-0.97 flow(electricityBus_storage_non_convex_2) ++1.1627906976744187 flow(storage_non_convex_electricityBus_2) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_1_3)_: --0.97 flow(electricityBus_storage_non_convex_1_3) -+1.1627906976744187 flow(storage_non_convex_electricityBus_1_3) +-0.97 flow(electricityBus_storage_non_convex_3) ++1.1627906976744187 flow(storage_non_convex_electricityBus_3) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_2_4)_: --0.97 flow(electricityBus_storage_non_convex_2_4) -+1.1627906976744187 flow(storage_non_convex_electricityBus_2_4) +-0.97 flow(electricityBus_storage_non_convex_4) ++1.1627906976744187 flow(storage_non_convex_electricityBus_4) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_3) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_2_5)_: --0.97 flow(electricityBus_storage_non_convex_2_5) -+1.1627906976744187 flow(storage_non_convex_electricityBus_2_5) +-0.97 flow(electricityBus_storage_non_convex_5) ++1.1627906976744187 flow(storage_non_convex_electricityBus_5) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_4) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_5) = 0 @@ -456,58 +456,59 @@ c_l_GenericInvestmentStorageBlock_limit_min(storage_non_convex_2)_: >= 0 bounds - 0 <= flow(electricityBus_storage_non_convex_0_0) <= +inf - 0 <= flow(electricityBus_storage_non_convex_0_1) <= +inf - 0 <= flow(electricityBus_storage_non_convex_1_2) <= +inf - 0 <= flow(electricityBus_storage_non_convex_1_3) <= +inf - 0 <= flow(electricityBus_storage_non_convex_2_4) <= +inf - 0 <= flow(electricityBus_storage_non_convex_2_5) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_0) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_1) <= +inf - 0 <= flow(storage_non_convex_electricityBus_1_2) <= +inf - 0 <= flow(storage_non_convex_electricityBus_1_3) <= +inf - 0 <= flow(storage_non_convex_electricityBus_2_4) <= +inf - 0 <= flow(storage_non_convex_electricityBus_2_5) <= +inf + 0 <= flow(electricityBus_storage_non_convex_0) <= +inf + 0 <= flow(electricityBus_storage_non_convex_1) <= +inf + 0 <= flow(electricityBus_storage_non_convex_2) <= +inf + 0 <= flow(electricityBus_storage_non_convex_3) <= +inf + 0 <= flow(electricityBus_storage_non_convex_4) <= +inf + 0 <= flow(electricityBus_storage_non_convex_5) <= +inf + 0 <= flow(storage_non_convex_electricityBus_0) <= +inf + 0 <= flow(storage_non_convex_electricityBus_1) <= +inf + 0 <= flow(storage_non_convex_electricityBus_2) <= +inf + 0 <= flow(storage_non_convex_electricityBus_3) <= +inf + 0 <= flow(storage_non_convex_electricityBus_4) <= +inf + 0 <= flow(storage_non_convex_electricityBus_5) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_0) <= 1454 - 0 <= GenericInvestmentStorageBlock_invest_status(storage_non_convex_0) <= 1 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_1) <= 1454 - 0 <= GenericInvestmentStorageBlock_invest_status(storage_non_convex_1) <= 1 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_2) <= 1454 + 0 <= GenericInvestmentStorageBlock_invest_status(storage_non_convex_0) <= 1 + 0 <= GenericInvestmentStorageBlock_invest_status(storage_non_convex_1) <= 1 0 <= GenericInvestmentStorageBlock_invest_status(storage_non_convex_2) <= 1 + 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= +inf + 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_0) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_1) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_2) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_1) <= +inf 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_2) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_0) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_1) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_2) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_non_convex_1) <= +inf @@ -515,7 +516,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) <= +inf diff --git a/tests/lp_files/storage_invest_without_offset.lp b/tests/lp_files/storage_invest_without_offset.lp index 248ce6848..8b7eb5244 100644 --- a/tests/lp_files/storage_invest_without_offset.lp +++ b/tests/lp_files/storage_invest_without_offset.lp @@ -2,34 +2,29 @@ min objective: -+56 flow(electricityBus_storage_non_convex_0_0) -+56 flow(electricityBus_storage_non_convex_0_1) -+56 flow(electricityBus_storage_non_convex_0_2) -+24 flow(storage_non_convex_electricityBus_0_0) -+24 flow(storage_non_convex_electricityBus_0_1) -+24 flow(storage_non_convex_electricityBus_0_2) ++56 flow(electricityBus_storage_non_convex_0) ++56 flow(electricityBus_storage_non_convex_1) ++56 flow(electricityBus_storage_non_convex_2) ++24 flow(storage_non_convex_electricityBus_0) ++24 flow(storage_non_convex_electricityBus_1) ++24 flow(storage_non_convex_electricityBus_2) +141 GenericInvestmentStorageBlock_invest(storage_non_convex_0) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage_non_convex_0_0) -+1 flow(storage_non_convex_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage_non_convex_0) ++1 flow(storage_non_convex_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage_non_convex_0_1) -+1 flow(storage_non_convex_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage_non_convex_1) ++1 flow(storage_non_convex_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: --1 flow(electricityBus_storage_non_convex_0_2) -+1 flow(storage_non_convex_electricityBus_0_2) -= 0 - -c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_0)_: -+1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) --1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage_non_convex_2) ++1 flow(storage_non_convex_electricityBus_2) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage_non_convex_0)_: @@ -37,36 +32,41 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_storage_non_convex_0)_: -1 InvestmentFlowBlock_invest(electricityBus_storage_non_convex_0) = 0 -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_0)_: -+1 flow(storage_non_convex_electricityBus_0_0) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_1)_: -+1 flow(storage_non_convex_electricityBus_0_1) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_2)_: -+1 flow(storage_non_convex_electricityBus_0_2) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -<= 0 +c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) += 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_0)_: -+1 flow(electricityBus_storage_non_convex_0_0) ++1 flow(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_1)_: -+1 flow(electricityBus_storage_non_convex_0_1) ++1 flow(electricityBus_storage_non_convex_1) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_2)_: -+1 flow(electricityBus_storage_non_convex_0_2) ++1 flow(electricityBus_storage_non_convex_2) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_0)_: ++1 flow(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_1)_: ++1 flow(storage_non_convex_electricityBus_1) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_2)_: ++1 flow(storage_non_convex_electricityBus_2) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +<= 0 + c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_non_convex_0)_: -1 GenericInvestmentStorageBlock_invest(storage_non_convex_0) +1 GenericInvestmentStorageBlock_total(storage_non_convex_0) @@ -78,22 +78,22 @@ c_u_GenericInvestmentStorageBlock_init_content_limit(storage_non_convex)_: <= 0 c_e_GenericInvestmentStorageBlock_balance_first(storage_non_convex)_: --0.97 flow(electricityBus_storage_non_convex_0_0) -+1.1627906976744187 flow(storage_non_convex_electricityBus_0_0) +-0.97 flow(electricityBus_storage_non_convex_0) ++1.1627906976744187 flow(storage_non_convex_electricityBus_0) -0.87 GenericInvestmentStorageBlock_init_content(storage_non_convex) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_0_1)_: --0.97 flow(electricityBus_storage_non_convex_0_1) -+1.1627906976744187 flow(storage_non_convex_electricityBus_0_1) +-0.97 flow(electricityBus_storage_non_convex_1) ++1.1627906976744187 flow(storage_non_convex_electricityBus_1) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_0_2)_: --0.97 flow(electricityBus_storage_non_convex_0_2) -+1.1627906976744187 flow(storage_non_convex_electricityBus_0_2) +-0.97 flow(electricityBus_storage_non_convex_2) ++1.1627906976744187 flow(storage_non_convex_electricityBus_2) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) = 0 @@ -154,17 +154,17 @@ c_l_GenericInvestmentStorageBlock_limit_min(storage_non_convex_0)_: >= 0 bounds - 0 <= flow(electricityBus_storage_non_convex_0_0) <= +inf - 0 <= flow(electricityBus_storage_non_convex_0_1) <= +inf - 0 <= flow(electricityBus_storage_non_convex_0_2) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_0) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_1) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_2) <= +inf + 0 <= flow(electricityBus_storage_non_convex_0) <= +inf + 0 <= flow(electricityBus_storage_non_convex_1) <= +inf + 0 <= flow(electricityBus_storage_non_convex_2) <= +inf + 0 <= flow(storage_non_convex_electricityBus_0) <= +inf + 0 <= flow(storage_non_convex_electricityBus_1) <= +inf + 0 <= flow(storage_non_convex_electricityBus_2) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_0) <= 244 - 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_init_content(storage_non_convex) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) <= +inf diff --git a/tests/lp_files/storage_invest_without_offset_multi_period.lp b/tests/lp_files/storage_invest_without_offset_multi_period.lp index f4a182548..f102db068 100644 --- a/tests/lp_files/storage_invest_without_offset_multi_period.lp +++ b/tests/lp_files/storage_invest_without_offset_multi_period.lp @@ -2,52 +2,52 @@ min objective: -+56 flow(electricityBus_storage_non_convex_0_0) -+56 flow(electricityBus_storage_non_convex_0_1) -+54.90196078431372 flow(electricityBus_storage_non_convex_1_2) -+54.90196078431372 flow(electricityBus_storage_non_convex_1_3) -+53.82545174932718 flow(electricityBus_storage_non_convex_2_4) -+53.82545174932718 flow(electricityBus_storage_non_convex_2_5) -+24 flow(storage_non_convex_electricityBus_0_0) -+24 flow(storage_non_convex_electricityBus_0_1) -+23.52941176470588 flow(storage_non_convex_electricityBus_1_2) -+23.52941176470588 flow(storage_non_convex_electricityBus_1_3) -+23.06805074971165 flow(storage_non_convex_electricityBus_2_4) -+23.06805074971165 flow(storage_non_convex_electricityBus_2_5) ++56 flow(electricityBus_storage_non_convex_0) ++56 flow(electricityBus_storage_non_convex_1) ++54.90196078431372 flow(electricityBus_storage_non_convex_2) ++54.90196078431372 flow(electricityBus_storage_non_convex_3) ++53.82545174932718 flow(electricityBus_storage_non_convex_4) ++53.82545174932718 flow(electricityBus_storage_non_convex_5) ++24 flow(storage_non_convex_electricityBus_0) ++24 flow(storage_non_convex_electricityBus_1) ++23.52941176470588 flow(storage_non_convex_electricityBus_2) ++23.52941176470588 flow(storage_non_convex_electricityBus_3) ++23.06805074971165 flow(storage_non_convex_electricityBus_4) ++23.06805074971165 flow(storage_non_convex_electricityBus_5) +24.868005934029988 GenericInvestmentStorageBlock_invest(storage_non_convex_0) +16.413989016710378 GenericInvestmentStorageBlock_invest(storage_non_convex_1) +8.125737136985347 GenericInvestmentStorageBlock_invest(storage_non_convex_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage_non_convex_0_0) -+1 flow(storage_non_convex_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage_non_convex_0) ++1 flow(storage_non_convex_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage_non_convex_0_1) -+1 flow(storage_non_convex_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage_non_convex_1) ++1 flow(storage_non_convex_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: --1 flow(electricityBus_storage_non_convex_1_2) -+1 flow(storage_non_convex_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage_non_convex_2) ++1 flow(storage_non_convex_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: --1 flow(electricityBus_storage_non_convex_1_3) -+1 flow(storage_non_convex_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage_non_convex_3) ++1 flow(storage_non_convex_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: --1 flow(electricityBus_storage_non_convex_2_4) -+1 flow(storage_non_convex_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage_non_convex_4) ++1 flow(storage_non_convex_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: --1 flow(electricityBus_storage_non_convex_2_5) -+1 flow(storage_non_convex_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage_non_convex_5) ++1 flow(storage_non_convex_electricityBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage_non_convex_0)_: @@ -137,9 +137,9 @@ c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_0)_: ++1 InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_0) -+1 InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_1)_: @@ -155,9 +155,9 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_2)_: = 0 c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) -1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) -1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) = 0 c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_1)_: @@ -173,62 +173,62 @@ c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_2)_: = 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_0)_: -+1 flow(electricityBus_storage_non_convex_0_0) ++1 flow(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_1)_: -+1 flow(electricityBus_storage_non_convex_0_1) ++1 flow(electricityBus_storage_non_convex_1) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_1_2)_: -+1 flow(electricityBus_storage_non_convex_1_2) ++1 flow(electricityBus_storage_non_convex_2) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_1_3)_: -+1 flow(electricityBus_storage_non_convex_1_3) ++1 flow(electricityBus_storage_non_convex_3) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_2_4)_: -+1 flow(electricityBus_storage_non_convex_2_4) ++1 flow(electricityBus_storage_non_convex_4) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_2_5)_: -+1 flow(electricityBus_storage_non_convex_2_5) ++1 flow(electricityBus_storage_non_convex_5) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_0)_: -+1 flow(storage_non_convex_electricityBus_0_0) ++1 flow(storage_non_convex_electricityBus_0) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_1)_: -+1 flow(storage_non_convex_electricityBus_0_1) ++1 flow(storage_non_convex_electricityBus_1) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_2)_: -+1 flow(storage_non_convex_electricityBus_1_2) ++1 flow(storage_non_convex_electricityBus_2) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_3)_: -+1 flow(storage_non_convex_electricityBus_1_3) ++1 flow(storage_non_convex_electricityBus_3) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_4)_: -+1 flow(storage_non_convex_electricityBus_2_4) ++1 flow(storage_non_convex_electricityBus_4) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) <= 0 c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_5)_: -+1 flow(storage_non_convex_electricityBus_2_5) ++1 flow(storage_non_convex_electricityBus_5) -1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) <= 0 @@ -276,9 +276,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage_non_convex_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_non_convex_0)_: ++1 GenericInvestmentStorageBlock_old(storage_non_convex_0) -1 GenericInvestmentStorageBlock_old_end(storage_non_convex_0) -1 GenericInvestmentStorageBlock_old_exo(storage_non_convex_0) -+1 GenericInvestmentStorageBlock_old(storage_non_convex_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_non_convex_1)_: @@ -298,36 +298,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage_non_convex_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_0_1)_: --0.97 flow(electricityBus_storage_non_convex_0_1) -+1.1627906976744187 flow(storage_non_convex_electricityBus_0_1) +-0.97 flow(electricityBus_storage_non_convex_1) ++1.1627906976744187 flow(storage_non_convex_electricityBus_1) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_1_2)_: --0.97 flow(electricityBus_storage_non_convex_1_2) -+1.1627906976744187 flow(storage_non_convex_electricityBus_1_2) +-0.97 flow(electricityBus_storage_non_convex_2) ++1.1627906976744187 flow(storage_non_convex_electricityBus_2) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_1_3)_: --0.97 flow(electricityBus_storage_non_convex_1_3) -+1.1627906976744187 flow(storage_non_convex_electricityBus_1_3) +-0.97 flow(electricityBus_storage_non_convex_3) ++1.1627906976744187 flow(storage_non_convex_electricityBus_3) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_2_4)_: --0.97 flow(electricityBus_storage_non_convex_2_4) -+1.1627906976744187 flow(storage_non_convex_electricityBus_2_4) +-0.97 flow(electricityBus_storage_non_convex_4) ++1.1627906976744187 flow(storage_non_convex_electricityBus_4) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_3) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_2_5)_: --0.97 flow(electricityBus_storage_non_convex_2_5) -+1.1627906976744187 flow(storage_non_convex_electricityBus_2_5) +-0.97 flow(electricityBus_storage_non_convex_5) ++1.1627906976744187 flow(storage_non_convex_electricityBus_5) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_4) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_5) = 0 @@ -453,36 +453,38 @@ c_l_GenericInvestmentStorageBlock_limit_min(storage_non_convex_2)_: >= 0 bounds - 0 <= flow(electricityBus_storage_non_convex_0_0) <= +inf - 0 <= flow(electricityBus_storage_non_convex_0_1) <= +inf - 0 <= flow(electricityBus_storage_non_convex_1_2) <= +inf - 0 <= flow(electricityBus_storage_non_convex_1_3) <= +inf - 0 <= flow(electricityBus_storage_non_convex_2_4) <= +inf - 0 <= flow(electricityBus_storage_non_convex_2_5) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_0) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_1) <= +inf - 0 <= flow(storage_non_convex_electricityBus_1_2) <= +inf - 0 <= flow(storage_non_convex_electricityBus_1_3) <= +inf - 0 <= flow(storage_non_convex_electricityBus_2_4) <= +inf - 0 <= flow(storage_non_convex_electricityBus_2_5) <= +inf + 0 <= flow(electricityBus_storage_non_convex_0) <= +inf + 0 <= flow(electricityBus_storage_non_convex_1) <= +inf + 0 <= flow(electricityBus_storage_non_convex_2) <= +inf + 0 <= flow(electricityBus_storage_non_convex_3) <= +inf + 0 <= flow(electricityBus_storage_non_convex_4) <= +inf + 0 <= flow(electricityBus_storage_non_convex_5) <= +inf + 0 <= flow(storage_non_convex_electricityBus_0) <= +inf + 0 <= flow(storage_non_convex_electricityBus_1) <= +inf + 0 <= flow(storage_non_convex_electricityBus_2) <= +inf + 0 <= flow(storage_non_convex_electricityBus_3) <= +inf + 0 <= flow(storage_non_convex_electricityBus_4) <= +inf + 0 <= flow(storage_non_convex_electricityBus_5) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_0) <= 244 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_1) <= 244 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_2) <= 244 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_0) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_1) <= +inf 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= +inf - 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_2) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_1) <= +inf + 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_2) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_1) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_2) <= +inf + 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_0) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_1) <= +inf @@ -496,12 +498,11 @@ bounds 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) <= +inf - 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_non_convex_1) <= +inf @@ -509,7 +510,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) <= +inf diff --git a/tests/lp_files/storage_invest_without_offset_multi_period_remaining_value.lp b/tests/lp_files/storage_invest_without_offset_multi_period_remaining_value.lp index 179c59847..f102db068 100644 --- a/tests/lp_files/storage_invest_without_offset_multi_period_remaining_value.lp +++ b/tests/lp_files/storage_invest_without_offset_multi_period_remaining_value.lp @@ -2,71 +2,52 @@ min objective: -+56 flow(electricityBus_storage_non_convex_0_0) -+56 flow(electricityBus_storage_non_convex_0_1) -+54.90196078431372 flow(electricityBus_storage_non_convex_1_2) -+54.90196078431372 flow(electricityBus_storage_non_convex_1_3) -+53.82545174932718 flow(electricityBus_storage_non_convex_2_4) -+53.82545174932718 flow(electricityBus_storage_non_convex_2_5) -+24 flow(storage_non_convex_electricityBus_0_0) -+24 flow(storage_non_convex_electricityBus_0_1) -+23.52941176470588 flow(storage_non_convex_electricityBus_1_2) -+23.52941176470588 flow(storage_non_convex_electricityBus_1_3) -+23.06805074971165 flow(storage_non_convex_electricityBus_2_4) -+23.06805074971165 flow(storage_non_convex_electricityBus_2_5) ++56 flow(electricityBus_storage_non_convex_0) ++56 flow(electricityBus_storage_non_convex_1) ++54.90196078431372 flow(electricityBus_storage_non_convex_2) ++54.90196078431372 flow(electricityBus_storage_non_convex_3) ++53.82545174932718 flow(electricityBus_storage_non_convex_4) ++53.82545174932718 flow(electricityBus_storage_non_convex_5) ++24 flow(storage_non_convex_electricityBus_0) ++24 flow(storage_non_convex_electricityBus_1) ++23.52941176470588 flow(storage_non_convex_electricityBus_2) ++23.52941176470588 flow(storage_non_convex_electricityBus_3) ++23.06805074971165 flow(storage_non_convex_electricityBus_4) ++23.06805074971165 flow(storage_non_convex_electricityBus_5) +24.868005934029988 GenericInvestmentStorageBlock_invest(storage_non_convex_0) +16.413989016710378 GenericInvestmentStorageBlock_invest(storage_non_convex_1) +8.125737136985347 GenericInvestmentStorageBlock_invest(storage_non_convex_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage_non_convex_0_0) -+1 flow(storage_non_convex_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage_non_convex_0) ++1 flow(storage_non_convex_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage_non_convex_0_1) -+1 flow(storage_non_convex_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage_non_convex_1) ++1 flow(storage_non_convex_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: --1 flow(electricityBus_storage_non_convex_1_2) -+1 flow(storage_non_convex_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage_non_convex_2) ++1 flow(storage_non_convex_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: --1 flow(electricityBus_storage_non_convex_1_3) -+1 flow(storage_non_convex_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage_non_convex_3) ++1 flow(storage_non_convex_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: --1 flow(electricityBus_storage_non_convex_2_4) -+1 flow(storage_non_convex_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage_non_convex_4) ++1 flow(storage_non_convex_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: --1 flow(electricityBus_storage_non_convex_2_5) -+1 flow(storage_non_convex_electricityBus_2_5) -= 0 - -c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_0)_: -+1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) --1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) -= 0 - -c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_1)_: --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -+1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) --1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) -= 0 - -c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_2)_: --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) -+1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) --1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_2) -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage_non_convex_5) ++1 flow(storage_non_convex_electricityBus_5) = 0 c_e_InvestmentFlowBlock_total_rule(electricityBus_storage_non_convex_0)_: @@ -88,16 +69,23 @@ c_e_InvestmentFlowBlock_total_rule(electricityBus_storage_non_convex_2)_: +1 InvestmentFlowBlock_old(electricityBus_storage_non_convex_2) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_0)_: -+1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) +c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_1)_: -+1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) +c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_1)_: +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) ++1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) +-1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_2)_: -+1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) +c_e_InvestmentFlowBlock_total_rule(storage_non_convex_electricityBus_2)_: +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) ++1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) +-1 InvestmentFlowBlock_invest(storage_non_convex_electricityBus_2) ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule_end(electricityBus_storage_non_convex_0)_: @@ -112,16 +100,16 @@ c_e_InvestmentFlowBlock_old_rule_end(electricityBus_storage_non_convex_2)_: +1 InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_2) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_0)_: -+1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) +c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_1)_: -+1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) +c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_1)_: ++1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_2)_: -+1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) +c_e_InvestmentFlowBlock_old_rule_end(storage_non_convex_electricityBus_2)_: ++1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage_non_convex_0)_: @@ -136,28 +124,22 @@ c_e_InvestmentFlowBlock_old_rule_exo(electricityBus_storage_non_convex_2)_: +1 InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_2) = 0 -c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_0)_: --1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) --1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) +c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) = 0 -c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_1)_: -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) --1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) --1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) +c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_1)_: ++1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) = 0 -c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_2)_: -+1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) --1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) --1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) +c_e_InvestmentFlowBlock_old_rule_exo(storage_non_convex_electricityBus_2)_: ++1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_0)_: ++1 InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_0) -+1 InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) = 0 c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_1)_: @@ -172,66 +154,84 @@ c_e_InvestmentFlowBlock_old_rule(electricityBus_storage_non_convex_2)_: -1 InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_2) = 0 -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_0)_: -+1 flow(storage_non_convex_electricityBus_0_0) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_1)_: -+1 flow(storage_non_convex_electricityBus_0_1) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_2)_: -+1 flow(storage_non_convex_electricityBus_1_2) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) -<= 0 - -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_3)_: -+1 flow(storage_non_convex_electricityBus_1_3) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_0)_: ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) += 0 -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_4)_: -+1 flow(storage_non_convex_electricityBus_2_4) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_1)_: ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) +-1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) +-1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) += 0 -c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_5)_: -+1 flow(storage_non_convex_electricityBus_2_5) --1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) -<= 0 +c_e_InvestmentFlowBlock_old_rule(storage_non_convex_electricityBus_2)_: ++1 InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) +-1 InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) +-1 InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) += 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_0)_: -+1 flow(electricityBus_storage_non_convex_0_0) ++1 flow(electricityBus_storage_non_convex_0) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_0_1)_: -+1 flow(electricityBus_storage_non_convex_0_1) ++1 flow(electricityBus_storage_non_convex_1) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_1_2)_: -+1 flow(electricityBus_storage_non_convex_1_2) ++1 flow(electricityBus_storage_non_convex_2) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_1_3)_: -+1 flow(electricityBus_storage_non_convex_1_3) ++1 flow(electricityBus_storage_non_convex_3) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_2_4)_: -+1 flow(electricityBus_storage_non_convex_2_4) ++1 flow(electricityBus_storage_non_convex_4) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= 0 c_u_InvestmentFlowBlock_max(electricityBus_storage_non_convex_2_5)_: -+1 flow(electricityBus_storage_non_convex_2_5) ++1 flow(electricityBus_storage_non_convex_5) -1 InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= 0 +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_0)_: ++1 flow(storage_non_convex_electricityBus_0) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_0_1)_: ++1 flow(storage_non_convex_electricityBus_1) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_2)_: ++1 flow(storage_non_convex_electricityBus_2) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_1_3)_: ++1 flow(storage_non_convex_electricityBus_3) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_4)_: ++1 flow(storage_non_convex_electricityBus_4) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) +<= 0 + +c_u_InvestmentFlowBlock_max(storage_non_convex_electricityBus_2_5)_: ++1 flow(storage_non_convex_electricityBus_5) +-1 InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) +<= 0 + c_e_GenericInvestmentStorageBlock_total_storage_rule(storage_non_convex_0)_: -1 GenericInvestmentStorageBlock_invest(storage_non_convex_0) +1 GenericInvestmentStorageBlock_total(storage_non_convex_0) @@ -276,9 +276,9 @@ c_e_GenericInvestmentStorageBlock_old_rule_exo(storage_non_convex_2)_: = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_non_convex_0)_: ++1 GenericInvestmentStorageBlock_old(storage_non_convex_0) -1 GenericInvestmentStorageBlock_old_end(storage_non_convex_0) -1 GenericInvestmentStorageBlock_old_exo(storage_non_convex_0) -+1 GenericInvestmentStorageBlock_old(storage_non_convex_0) = 0 c_e_GenericInvestmentStorageBlock_old_rule(storage_non_convex_1)_: @@ -298,36 +298,36 @@ c_e_GenericInvestmentStorageBlock_initially_empty(storage_non_convex_0)_: = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_0_1)_: --0.97 flow(electricityBus_storage_non_convex_0_1) -+1.1627906976744187 flow(storage_non_convex_electricityBus_0_1) +-0.97 flow(electricityBus_storage_non_convex_1) ++1.1627906976744187 flow(storage_non_convex_electricityBus_1) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_1_2)_: --0.97 flow(electricityBus_storage_non_convex_1_2) -+1.1627906976744187 flow(storage_non_convex_electricityBus_1_2) +-0.97 flow(electricityBus_storage_non_convex_2) ++1.1627906976744187 flow(storage_non_convex_electricityBus_2) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_1_3)_: --0.97 flow(electricityBus_storage_non_convex_1_3) -+1.1627906976744187 flow(storage_non_convex_electricityBus_1_3) +-0.97 flow(electricityBus_storage_non_convex_3) ++1.1627906976744187 flow(storage_non_convex_electricityBus_3) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_3) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_2_4)_: --0.97 flow(electricityBus_storage_non_convex_2_4) -+1.1627906976744187 flow(storage_non_convex_electricityBus_2_4) +-0.97 flow(electricityBus_storage_non_convex_4) ++1.1627906976744187 flow(storage_non_convex_electricityBus_4) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_3) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_4) = 0 c_e_GenericInvestmentStorageBlock_balance(storage_non_convex_2_5)_: --0.97 flow(electricityBus_storage_non_convex_2_5) -+1.1627906976744187 flow(storage_non_convex_electricityBus_2_5) +-0.97 flow(electricityBus_storage_non_convex_5) ++1.1627906976744187 flow(storage_non_convex_electricityBus_5) -0.87 GenericInvestmentStorageBlock_storage_content(storage_non_convex_4) +1 GenericInvestmentStorageBlock_storage_content(storage_non_convex_5) = 0 @@ -453,55 +453,56 @@ c_l_GenericInvestmentStorageBlock_limit_min(storage_non_convex_2)_: >= 0 bounds - 0 <= flow(electricityBus_storage_non_convex_0_0) <= +inf - 0 <= flow(electricityBus_storage_non_convex_0_1) <= +inf - 0 <= flow(electricityBus_storage_non_convex_1_2) <= +inf - 0 <= flow(electricityBus_storage_non_convex_1_3) <= +inf - 0 <= flow(electricityBus_storage_non_convex_2_4) <= +inf - 0 <= flow(electricityBus_storage_non_convex_2_5) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_0) <= +inf - 0 <= flow(storage_non_convex_electricityBus_0_1) <= +inf - 0 <= flow(storage_non_convex_electricityBus_1_2) <= +inf - 0 <= flow(storage_non_convex_electricityBus_1_3) <= +inf - 0 <= flow(storage_non_convex_electricityBus_2_4) <= +inf - 0 <= flow(storage_non_convex_electricityBus_2_5) <= +inf + 0 <= flow(electricityBus_storage_non_convex_0) <= +inf + 0 <= flow(electricityBus_storage_non_convex_1) <= +inf + 0 <= flow(electricityBus_storage_non_convex_2) <= +inf + 0 <= flow(electricityBus_storage_non_convex_3) <= +inf + 0 <= flow(electricityBus_storage_non_convex_4) <= +inf + 0 <= flow(electricityBus_storage_non_convex_5) <= +inf + 0 <= flow(storage_non_convex_electricityBus_0) <= +inf + 0 <= flow(storage_non_convex_electricityBus_1) <= +inf + 0 <= flow(storage_non_convex_electricityBus_2) <= +inf + 0 <= flow(storage_non_convex_electricityBus_3) <= +inf + 0 <= flow(storage_non_convex_electricityBus_4) <= +inf + 0 <= flow(storage_non_convex_electricityBus_5) <= +inf 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_0) <= 244 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_1) <= 244 0 <= GenericInvestmentStorageBlock_invest(storage_non_convex_2) <= 244 + 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= +inf + 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) <= +inf 0 <= InvestmentFlowBlock_total(storage_non_convex_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_0) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_0) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_1) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_1) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_1) <= +inf - 0 <= InvestmentFlowBlock_total(electricityBus_storage_non_convex_2) <= +inf 0 <= InvestmentFlowBlock_invest(electricityBus_storage_non_convex_2) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_invest(storage_non_convex_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_1) <= +inf 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_2) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_0) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_1) <= +inf 0 <= InvestmentFlowBlock_old_end(electricityBus_storage_non_convex_2) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) <= +inf - 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old_end(storage_non_convex_electricityBus_2) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_0) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_1) <= +inf 0 <= InvestmentFlowBlock_old_exo(electricityBus_storage_non_convex_2) <= +inf - 0 <= InvestmentFlowBlock_old(storage_non_convex_electricityBus_0) <= +inf - 0 <= InvestmentFlowBlock_old(electricityBus_storage_non_convex_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_0) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_1) <= +inf + 0 <= InvestmentFlowBlock_old_exo(storage_non_convex_electricityBus_2) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_1) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_total(storage_non_convex_2) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_0) <= +inf + 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_2) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_end(storage_non_convex_1) <= +inf @@ -509,7 +510,6 @@ bounds 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_old_exo(storage_non_convex_2) <= +inf - 0 <= GenericInvestmentStorageBlock_old(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_0) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_1) <= +inf 0 <= GenericInvestmentStorageBlock_storage_content(storage_non_convex_2) <= +inf diff --git a/tests/lp_files/storage_level_constraint.lp b/tests/lp_files/storage_level_constraint.lp index e64ec8e92..602d2298b 100644 --- a/tests/lp_files/storage_level_constraint.lp +++ b/tests/lp_files/storage_level_constraint.lp @@ -2,12 +2,12 @@ min objective: --0.125 flow(multiplexer_out_0_0_0) --0.125 flow(multiplexer_out_0_0_1) --0.125 flow(multiplexer_out_1_0_0) --0.125 flow(multiplexer_out_1_0_1) -+0.25 flow(in_0_multiplexer_0_0) -+0.25 flow(in_0_multiplexer_0_1) +-0.125 flow(multiplexer_out_0_0) +-0.125 flow(multiplexer_out_0_1) +-0.125 flow(multiplexer_out_1_0) +-0.125 flow(multiplexer_out_1_1) ++0.25 flow(in_0_multiplexer_0) ++0.25 flow(in_0_multiplexer_1) s.t. @@ -22,32 +22,32 @@ c_u_multiplexer_output_active_constraint(out_0_1)_: <= 0 c_u_multiplexer_output_active_constraint(out_1_0)_: --0.25 GenericStorageBlock_storage_content(storage_1) +0.5 multiplexer_active_output(out_1_0) +-0.25 GenericStorageBlock_storage_content(storage_1) <= 0 c_u_multiplexer_output_active_constraint(out_1_1)_: --0.25 GenericStorageBlock_storage_content(storage_2) +0.5 multiplexer_active_output(out_1_1) +-0.25 GenericStorageBlock_storage_content(storage_2) <= 0 -c_u_multiplexer_output_constraint(out_0_0_0)_: -+4.0 flow(multiplexer_out_0_0_0) +c_u_multiplexer_output_constraint(out_0_0)_: ++4.0 flow(multiplexer_out_0_0) -1 multiplexer_active_output(out_0_0) <= 0 -c_u_multiplexer_output_constraint(out_0_0_1)_: -+4.0 flow(multiplexer_out_0_0_1) +c_u_multiplexer_output_constraint(out_0_1)_: ++4.0 flow(multiplexer_out_0_1) -1 multiplexer_active_output(out_0_1) <= 0 -c_u_multiplexer_output_constraint(out_1_0_0)_: -+8.0 flow(multiplexer_out_1_0_0) +c_u_multiplexer_output_constraint(out_1_0)_: ++8.0 flow(multiplexer_out_1_0) -1 multiplexer_active_output(out_1_0) <= 0 -c_u_multiplexer_output_constraint(out_1_0_1)_: -+8.0 flow(multiplexer_out_1_0_1) +c_u_multiplexer_output_constraint(out_1_1)_: ++8.0 flow(multiplexer_out_1_1) -1 multiplexer_active_output(out_1_1) <= 0 @@ -60,45 +60,56 @@ c_u_multiplexer_input_active_constraint(in_1_1)_: -1 multiplexer_active_input(in_1_1) <= 0.25 -c_u_multiplexer_input_constraint(in_1_0_0)_: +c_u_multiplexer_input_constraint(in_1_0)_: ++8.0 flow(in_1_multiplexer_0) +1 multiplexer_active_input(in_1_0) -+8.0 flow(in_1_multiplexer_0_0) <= 1 -c_u_multiplexer_input_constraint(in_1_0_1)_: +c_u_multiplexer_input_constraint(in_1_1)_: ++8.0 flow(in_1_multiplexer_1) +1 multiplexer_active_input(in_1_1) -+8.0 flow(in_1_multiplexer_0_1) <= 1 -c_e_BusBlock_balance(multiplexer_0_0)_: --1 flow(multiplexer_out_0_0_0) --1 flow(multiplexer_out_1_0_0) -+1 flow(in_0_multiplexer_0_0) -+1 flow(in_1_multiplexer_0_0) -+1 flow(storage_multiplexer_0_0) --1 flow(multiplexer_storage_0_0) +c_e_BusBlock_balance(multiplexer_0)_: +-1 flow(multiplexer_storage_0) +-1 flow(multiplexer_out_0_0) +-1 flow(multiplexer_out_1_0) ++1 flow(storage_multiplexer_0) ++1 flow(in_0_multiplexer_0) ++1 flow(in_1_multiplexer_0) = 0 -c_e_BusBlock_balance(multiplexer_0_1)_: --1 flow(multiplexer_out_0_0_1) --1 flow(multiplexer_out_1_0_1) -+1 flow(in_0_multiplexer_0_1) -+1 flow(in_1_multiplexer_0_1) -+1 flow(storage_multiplexer_0_1) --1 flow(multiplexer_storage_0_1) +c_e_BusBlock_balance(multiplexer_1)_: +-1 flow(multiplexer_storage_1) +-1 flow(multiplexer_out_0_1) +-1 flow(multiplexer_out_1_1) ++1 flow(storage_multiplexer_1) ++1 flow(in_0_multiplexer_1) ++1 flow(in_1_multiplexer_1) = 0 -c_e_GenericStorageBlock_balance(storage_0_0)_: -+1 GenericStorageBlock_storage_content(storage_1) -+1 flow(storage_multiplexer_0_0) --1 flow(multiplexer_storage_0_0) -= 3.0 +c_e_GenericStorageBlock_losses(storage_0)_: +-1 GenericStorageBlock_storage_losses(storage_0) += -1.0 -c_e_GenericStorageBlock_balance(storage_0_1)_: --0.75 GenericStorageBlock_storage_content(storage_1) -+1 GenericStorageBlock_storage_content(storage_2) -+1 flow(storage_multiplexer_0_1) --1 flow(multiplexer_storage_0_1) +c_e_GenericStorageBlock_losses(storage_1)_: ++0.25 GenericStorageBlock_storage_content(storage_1) +-1 GenericStorageBlock_storage_losses(storage_1) += 0 + +c_e_GenericStorageBlock_balance(storage_0)_: ++1 flow(multiplexer_storage_0) +-1 flow(storage_multiplexer_0) +-1 GenericStorageBlock_storage_content(storage_1) +-1 GenericStorageBlock_storage_losses(storage_0) += -4 + +c_e_GenericStorageBlock_balance(storage_1)_: ++1 flow(multiplexer_storage_1) +-1 flow(storage_multiplexer_1) ++1 GenericStorageBlock_storage_content(storage_1) +-1 GenericStorageBlock_storage_content(storage_2) +-1 GenericStorageBlock_storage_losses(storage_1) = 0 c_e_GenericStorageBlock_balanced_cstr(storage)_: @@ -106,26 +117,28 @@ c_e_GenericStorageBlock_balanced_cstr(storage)_: = 4 bounds - 0.0 <= flow(multiplexer_out_0_0_0) <= 0.25 - 0.0 <= flow(multiplexer_out_0_0_1) <= 0.25 - 0.0 <= flow(multiplexer_out_1_0_0) <= 0.125 - 0.0 <= flow(multiplexer_out_1_0_1) <= 0.125 - 0.0 <= flow(in_0_multiplexer_0_0) <= 0.5 - 0.0 <= flow(in_0_multiplexer_0_1) <= 0.5 + 0 <= flow(multiplexer_storage_0) <= +inf + 0 <= flow(multiplexer_storage_1) <= +inf + 0.0 <= flow(multiplexer_out_0_0) <= 0.25 + 0.0 <= flow(multiplexer_out_0_1) <= 0.25 + 0.0 <= flow(multiplexer_out_1_0) <= 0.125 + 0.0 <= flow(multiplexer_out_1_1) <= 0.125 + 0 <= flow(storage_multiplexer_0) <= +inf + 0 <= flow(storage_multiplexer_1) <= +inf + 0.0 <= flow(in_0_multiplexer_0) <= 0.5 + 0.0 <= flow(in_0_multiplexer_1) <= 0.5 + 0.0 <= flow(in_1_multiplexer_0) <= 0.125 + 0.0 <= flow(in_1_multiplexer_1) <= 0.125 0 <= multiplexer_active_output(out_0_0) <= 1 - 0 <= GenericStorageBlock_storage_content(storage_1) <= 4 0 <= multiplexer_active_output(out_0_1) <= 1 - 0 <= GenericStorageBlock_storage_content(storage_2) <= 4 0 <= multiplexer_active_output(out_1_0) <= 1 0 <= multiplexer_active_output(out_1_1) <= 1 + 0 <= GenericStorageBlock_storage_content(storage_1) <= 4 + 0 <= GenericStorageBlock_storage_content(storage_2) <= 4 0 <= multiplexer_active_input(in_1_0) <= 1 0 <= multiplexer_active_input(in_1_1) <= 1 - 0.0 <= flow(in_1_multiplexer_0_0) <= 0.125 - 0.0 <= flow(in_1_multiplexer_0_1) <= 0.125 - 0 <= flow(storage_multiplexer_0_0) <= +inf - 0 <= flow(multiplexer_storage_0_0) <= +inf - 0 <= flow(storage_multiplexer_0_1) <= +inf - 0 <= flow(multiplexer_storage_0_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_1) <= +inf binary multiplexer_active_output(out_0_0) multiplexer_active_output(out_0_1) diff --git a/tests/lp_files/storage_multi_period.lp b/tests/lp_files/storage_multi_period.lp index 8fc170517..c35aa666c 100644 --- a/tests/lp_files/storage_multi_period.lp +++ b/tests/lp_files/storage_multi_period.lp @@ -2,90 +2,125 @@ min objective: -+56 flow(electricityBus_storage_no_invest_0_0) -+56 flow(electricityBus_storage_no_invest_0_1) -+54.90196078431372 flow(electricityBus_storage_no_invest_1_2) -+54.90196078431372 flow(electricityBus_storage_no_invest_1_3) -+53.82545174932718 flow(electricityBus_storage_no_invest_2_4) -+53.82545174932718 flow(electricityBus_storage_no_invest_2_5) -+24 flow(storage_no_invest_electricityBus_0_0) -+24 flow(storage_no_invest_electricityBus_0_1) -+23.52941176470588 flow(storage_no_invest_electricityBus_1_2) -+23.52941176470588 flow(storage_no_invest_electricityBus_1_3) -+23.06805074971165 flow(storage_no_invest_electricityBus_2_4) -+23.06805074971165 flow(storage_no_invest_electricityBus_2_5) ++56 flow(electricityBus_storage_no_invest_0) ++56 flow(electricityBus_storage_no_invest_1) ++54.90196078431372 flow(electricityBus_storage_no_invest_2) ++54.90196078431372 flow(electricityBus_storage_no_invest_3) ++53.82545174932718 flow(electricityBus_storage_no_invest_4) ++53.82545174932718 flow(electricityBus_storage_no_invest_5) ++24 flow(storage_no_invest_electricityBus_0) ++24 flow(storage_no_invest_electricityBus_1) ++23.52941176470588 flow(storage_no_invest_electricityBus_2) ++23.52941176470588 flow(storage_no_invest_electricityBus_3) ++23.06805074971165 flow(storage_no_invest_electricityBus_4) ++23.06805074971165 flow(storage_no_invest_electricityBus_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: --1 flow(electricityBus_storage_no_invest_0_0) -+1 flow(storage_no_invest_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage_no_invest_0) ++1 flow(storage_no_invest_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: --1 flow(electricityBus_storage_no_invest_0_1) -+1 flow(storage_no_invest_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage_no_invest_1) ++1 flow(storage_no_invest_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: --1 flow(electricityBus_storage_no_invest_1_2) -+1 flow(storage_no_invest_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage_no_invest_2) ++1 flow(storage_no_invest_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: --1 flow(electricityBus_storage_no_invest_1_3) -+1 flow(storage_no_invest_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage_no_invest_3) ++1 flow(storage_no_invest_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: --1 flow(electricityBus_storage_no_invest_2_4) -+1 flow(storage_no_invest_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage_no_invest_4) ++1 flow(storage_no_invest_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: --1 flow(electricityBus_storage_no_invest_2_5) -+1 flow(storage_no_invest_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage_no_invest_5) ++1 flow(storage_no_invest_electricityBus_5) = 0 -c_e_GenericStorageBlock_balance(storage_no_invest_0_0)_: --0.97 flow(electricityBus_storage_no_invest_0_0) -+1.1627906976744187 flow(storage_no_invest_electricityBus_0_0) +c_e_GenericStorageBlock_losses(storage_no_invest_0)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_0) += -5200.0 + +c_e_GenericStorageBlock_losses(storage_no_invest_1)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_1) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_1) += 0 + +c_e_GenericStorageBlock_losses(storage_no_invest_2)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_2) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_2) += 0 + +c_e_GenericStorageBlock_losses(storage_no_invest_3)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_3) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_3) += 0 + +c_e_GenericStorageBlock_losses(storage_no_invest_4)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_4) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_4) += 0 + +c_e_GenericStorageBlock_losses(storage_no_invest_5)_: +-1 GenericStorageBlock_storage_losses(storage_no_invest_5) ++0.13 GenericStorageBlock_storage_content(storage_no_invest_5) += 0 + +c_e_GenericStorageBlock_balance(storage_no_invest_0)_: ++0.97 flow(electricityBus_storage_no_invest_0) +-1.1627906976744187 flow(storage_no_invest_electricityBus_0) +-1 GenericStorageBlock_storage_losses(storage_no_invest_0) +-1 GenericStorageBlock_storage_content(storage_no_invest_1) += -40000.0 + +c_e_GenericStorageBlock_balance(storage_no_invest_1)_: ++0.97 flow(electricityBus_storage_no_invest_1) +-1.1627906976744187 flow(storage_no_invest_electricityBus_1) +-1 GenericStorageBlock_storage_losses(storage_no_invest_1) +1 GenericStorageBlock_storage_content(storage_no_invest_1) -= 34800.0 +-1 GenericStorageBlock_storage_content(storage_no_invest_2) += 0 -c_e_GenericStorageBlock_balance(storage_no_invest_0_1)_: --0.97 flow(electricityBus_storage_no_invest_0_1) -+1.1627906976744187 flow(storage_no_invest_electricityBus_0_1) --0.87 GenericStorageBlock_storage_content(storage_no_invest_1) +c_e_GenericStorageBlock_balance(storage_no_invest_2)_: ++0.97 flow(electricityBus_storage_no_invest_2) +-1.1627906976744187 flow(storage_no_invest_electricityBus_2) +-1 GenericStorageBlock_storage_losses(storage_no_invest_2) +1 GenericStorageBlock_storage_content(storage_no_invest_2) +-1 GenericStorageBlock_storage_content(storage_no_invest_3) = 0 -c_e_GenericStorageBlock_balance(storage_no_invest_1_2)_: --0.97 flow(electricityBus_storage_no_invest_1_2) -+1.1627906976744187 flow(storage_no_invest_electricityBus_1_2) --0.87 GenericStorageBlock_storage_content(storage_no_invest_2) +c_e_GenericStorageBlock_balance(storage_no_invest_3)_: ++0.97 flow(electricityBus_storage_no_invest_3) +-1.1627906976744187 flow(storage_no_invest_electricityBus_3) +-1 GenericStorageBlock_storage_losses(storage_no_invest_3) +1 GenericStorageBlock_storage_content(storage_no_invest_3) +-1 GenericStorageBlock_storage_content(storage_no_invest_4) = 0 -c_e_GenericStorageBlock_balance(storage_no_invest_1_3)_: --0.97 flow(electricityBus_storage_no_invest_1_3) -+1.1627906976744187 flow(storage_no_invest_electricityBus_1_3) --0.87 GenericStorageBlock_storage_content(storage_no_invest_3) +c_e_GenericStorageBlock_balance(storage_no_invest_4)_: ++0.97 flow(electricityBus_storage_no_invest_4) +-1.1627906976744187 flow(storage_no_invest_electricityBus_4) +-1 GenericStorageBlock_storage_losses(storage_no_invest_4) +1 GenericStorageBlock_storage_content(storage_no_invest_4) +-1 GenericStorageBlock_storage_content(storage_no_invest_5) = 0 -c_e_GenericStorageBlock_balance(storage_no_invest_2_4)_: --0.97 flow(electricityBus_storage_no_invest_2_4) -+1.1627906976744187 flow(storage_no_invest_electricityBus_2_4) --0.87 GenericStorageBlock_storage_content(storage_no_invest_4) +c_e_GenericStorageBlock_balance(storage_no_invest_5)_: ++0.97 flow(electricityBus_storage_no_invest_5) +-1.1627906976744187 flow(storage_no_invest_electricityBus_5) +-1 GenericStorageBlock_storage_losses(storage_no_invest_5) +1 GenericStorageBlock_storage_content(storage_no_invest_5) -= 0 - -c_e_GenericStorageBlock_balance(storage_no_invest_2_5)_: --0.97 flow(electricityBus_storage_no_invest_2_5) -+1.1627906976744187 flow(storage_no_invest_electricityBus_2_5) --0.87 GenericStorageBlock_storage_content(storage_no_invest_5) -+1 GenericStorageBlock_storage_content(storage_no_invest_6) +-1 GenericStorageBlock_storage_content(storage_no_invest_6) = 0 c_e_GenericStorageBlock_balanced_cstr(storage_no_invest)_: @@ -93,18 +128,24 @@ c_e_GenericStorageBlock_balanced_cstr(storage_no_invest)_: = 40000.0 bounds - 0 <= flow(electricityBus_storage_no_invest_0_0) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_0_1) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_1_2) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_1_3) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_2_4) <= 16667 - 0 <= flow(electricityBus_storage_no_invest_2_5) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_0_0) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_0_1) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_1_2) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_1_3) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_2_4) <= 16667 - 0 <= flow(storage_no_invest_electricityBus_2_5) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_0) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_1) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_2) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_3) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_4) <= 16667 + 0 <= flow(electricityBus_storage_no_invest_5) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_0) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_1) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_2) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_3) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_4) <= 16667 + 0 <= flow(storage_no_invest_electricityBus_5) <= 16667 + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_3) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_4) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage_no_invest_5) <= +inf 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_1) <= 100000.0 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_2) <= 100000.0 0.0 <= GenericStorageBlock_storage_content(storage_no_invest_3) <= 100000.0 diff --git a/tests/lp_files/storage_unbalanced.lp b/tests/lp_files/storage_unbalanced.lp index dfe57f128..8645919ec 100644 --- a/tests/lp_files/storage_unbalanced.lp +++ b/tests/lp_files/storage_unbalanced.lp @@ -6,52 +6,70 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage1_electricityBus_0_0) --1 flow(electricityBus_storage1_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(storage1_electricityBus_0_2) --1 flow(electricityBus_storage1_0_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) = 0 -c_e_GenericStorageBlock_balance(storage1_0_0)_: -+1 flow(storage1_electricityBus_0_0) --1 flow(electricityBus_storage1_0_0) -+1 GenericStorageBlock_storage_content(storage1_1) --1 GenericStorageBlock_storage_content(storage1_0) +c_e_GenericStorageBlock_losses(storage1_0)_: +-1 GenericStorageBlock_storage_losses(storage1_0) += 0 + +c_e_GenericStorageBlock_losses(storage1_1)_: +-1 GenericStorageBlock_storage_losses(storage1_1) = 0 -c_e_GenericStorageBlock_balance(storage1_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +c_e_GenericStorageBlock_losses(storage1_2)_: +-1 GenericStorageBlock_storage_losses(storage1_2) += 0 + +c_e_GenericStorageBlock_balance(storage1_0)_: ++1 flow(electricityBus_storage1_0) +-1 flow(storage1_electricityBus_0) +-1 GenericStorageBlock_storage_losses(storage1_0) ++1 GenericStorageBlock_storage_content(storage1_0) -1 GenericStorageBlock_storage_content(storage1_1) -+1 GenericStorageBlock_storage_content(storage1_2) = 0 -c_e_GenericStorageBlock_balance(storage1_0_2)_: -+1 flow(storage1_electricityBus_0_2) --1 flow(electricityBus_storage1_0_2) +c_e_GenericStorageBlock_balance(storage1_1)_: ++1 flow(electricityBus_storage1_1) +-1 flow(storage1_electricityBus_1) +-1 GenericStorageBlock_storage_losses(storage1_1) ++1 GenericStorageBlock_storage_content(storage1_1) -1 GenericStorageBlock_storage_content(storage1_2) -+1 GenericStorageBlock_storage_content(storage1_3) += 0 + +c_e_GenericStorageBlock_balance(storage1_2)_: ++1 flow(electricityBus_storage1_2) +-1 flow(storage1_electricityBus_2) +-1 GenericStorageBlock_storage_losses(storage1_2) ++1 GenericStorageBlock_storage_content(storage1_2) +-1 GenericStorageBlock_storage_content(storage1_3) = 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(storage1_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage1_0_0) <= +inf - 0 <= flow(storage1_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage1_0_1) <= +inf - 0 <= flow(storage1_electricityBus_0_2) <= +inf - 0 <= flow(electricityBus_storage1_0_2) <= +inf - 0 <= GenericStorageBlock_storage_content(storage1_1) <= 1111 + 0 <= flow(electricityBus_storage1_0) <= +inf + 0 <= flow(electricityBus_storage1_1) <= +inf + 0 <= flow(electricityBus_storage1_2) <= +inf + 0 <= flow(storage1_electricityBus_0) <= +inf + 0 <= flow(storage1_electricityBus_1) <= +inf + 0 <= flow(storage1_electricityBus_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_2) <= +inf 0 <= GenericStorageBlock_storage_content(storage1_0) <= 1111 + 0 <= GenericStorageBlock_storage_content(storage1_1) <= 1111 0 <= GenericStorageBlock_storage_content(storage1_2) <= 1111 0 <= GenericStorageBlock_storage_content(storage1_3) <= 1111 end diff --git a/tests/lp_files/storage_unbalanced_multi_period.lp b/tests/lp_files/storage_unbalanced_multi_period.lp index 3cb5b79b8..9d583b4b2 100644 --- a/tests/lp_files/storage_unbalanced_multi_period.lp +++ b/tests/lp_files/storage_unbalanced_multi_period.lp @@ -6,94 +6,130 @@ objective: s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(storage1_electricityBus_0_0) --1 flow(electricityBus_storage1_0_0) +c_e_BusBlock_balance(electricityBus_0)_: +-1 flow(electricityBus_storage1_0) ++1 flow(storage1_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +c_e_BusBlock_balance(electricityBus_1)_: +-1 flow(electricityBus_storage1_1) ++1 flow(storage1_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(storage1_electricityBus_1_2) --1 flow(electricityBus_storage1_1_2) +c_e_BusBlock_balance(electricityBus_2)_: +-1 flow(electricityBus_storage1_2) ++1 flow(storage1_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(storage1_electricityBus_1_3) --1 flow(electricityBus_storage1_1_3) +c_e_BusBlock_balance(electricityBus_3)_: +-1 flow(electricityBus_storage1_3) ++1 flow(storage1_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(storage1_electricityBus_2_4) --1 flow(electricityBus_storage1_2_4) +c_e_BusBlock_balance(electricityBus_4)_: +-1 flow(electricityBus_storage1_4) ++1 flow(storage1_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(storage1_electricityBus_2_5) --1 flow(electricityBus_storage1_2_5) +c_e_BusBlock_balance(electricityBus_5)_: +-1 flow(electricityBus_storage1_5) ++1 flow(storage1_electricityBus_5) = 0 -c_e_GenericStorageBlock_balance(storage1_0_0)_: -+1 flow(storage1_electricityBus_0_0) --1 flow(electricityBus_storage1_0_0) -+1 GenericStorageBlock_storage_content(storage1_1) --1 GenericStorageBlock_storage_content(storage1_0) +c_e_GenericStorageBlock_losses(storage1_0)_: +-1 GenericStorageBlock_storage_losses(storage1_0) += 0 + +c_e_GenericStorageBlock_losses(storage1_1)_: +-1 GenericStorageBlock_storage_losses(storage1_1) += 0 + +c_e_GenericStorageBlock_losses(storage1_2)_: +-1 GenericStorageBlock_storage_losses(storage1_2) += 0 + +c_e_GenericStorageBlock_losses(storage1_3)_: +-1 GenericStorageBlock_storage_losses(storage1_3) += 0 + +c_e_GenericStorageBlock_losses(storage1_4)_: +-1 GenericStorageBlock_storage_losses(storage1_4) = 0 -c_e_GenericStorageBlock_balance(storage1_0_1)_: -+1 flow(storage1_electricityBus_0_1) --1 flow(electricityBus_storage1_0_1) +c_e_GenericStorageBlock_losses(storage1_5)_: +-1 GenericStorageBlock_storage_losses(storage1_5) += 0 + +c_e_GenericStorageBlock_balance(storage1_0)_: ++1 flow(electricityBus_storage1_0) +-1 flow(storage1_electricityBus_0) +-1 GenericStorageBlock_storage_losses(storage1_0) ++1 GenericStorageBlock_storage_content(storage1_0) -1 GenericStorageBlock_storage_content(storage1_1) -+1 GenericStorageBlock_storage_content(storage1_2) = 0 -c_e_GenericStorageBlock_balance(storage1_1_2)_: -+1 flow(storage1_electricityBus_1_2) --1 flow(electricityBus_storage1_1_2) +c_e_GenericStorageBlock_balance(storage1_1)_: ++1 flow(electricityBus_storage1_1) +-1 flow(storage1_electricityBus_1) +-1 GenericStorageBlock_storage_losses(storage1_1) ++1 GenericStorageBlock_storage_content(storage1_1) -1 GenericStorageBlock_storage_content(storage1_2) -+1 GenericStorageBlock_storage_content(storage1_3) = 0 -c_e_GenericStorageBlock_balance(storage1_1_3)_: -+1 flow(storage1_electricityBus_1_3) --1 flow(electricityBus_storage1_1_3) +c_e_GenericStorageBlock_balance(storage1_2)_: ++1 flow(electricityBus_storage1_2) +-1 flow(storage1_electricityBus_2) +-1 GenericStorageBlock_storage_losses(storage1_2) ++1 GenericStorageBlock_storage_content(storage1_2) -1 GenericStorageBlock_storage_content(storage1_3) -+1 GenericStorageBlock_storage_content(storage1_4) = 0 -c_e_GenericStorageBlock_balance(storage1_2_4)_: -+1 flow(storage1_electricityBus_2_4) --1 flow(electricityBus_storage1_2_4) +c_e_GenericStorageBlock_balance(storage1_3)_: ++1 flow(electricityBus_storage1_3) +-1 flow(storage1_electricityBus_3) +-1 GenericStorageBlock_storage_losses(storage1_3) ++1 GenericStorageBlock_storage_content(storage1_3) -1 GenericStorageBlock_storage_content(storage1_4) -+1 GenericStorageBlock_storage_content(storage1_5) = 0 -c_e_GenericStorageBlock_balance(storage1_2_5)_: -+1 flow(storage1_electricityBus_2_5) --1 flow(electricityBus_storage1_2_5) +c_e_GenericStorageBlock_balance(storage1_4)_: ++1 flow(electricityBus_storage1_4) +-1 flow(storage1_electricityBus_4) +-1 GenericStorageBlock_storage_losses(storage1_4) ++1 GenericStorageBlock_storage_content(storage1_4) -1 GenericStorageBlock_storage_content(storage1_5) -+1 GenericStorageBlock_storage_content(storage1_6) += 0 + +c_e_GenericStorageBlock_balance(storage1_5)_: ++1 flow(electricityBus_storage1_5) +-1 flow(storage1_electricityBus_5) +-1 GenericStorageBlock_storage_losses(storage1_5) ++1 GenericStorageBlock_storage_content(storage1_5) +-1 GenericStorageBlock_storage_content(storage1_6) = 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(storage1_electricityBus_0_0) <= +inf - 0 <= flow(electricityBus_storage1_0_0) <= +inf - 0 <= flow(storage1_electricityBus_0_1) <= +inf - 0 <= flow(electricityBus_storage1_0_1) <= +inf - 0 <= flow(storage1_electricityBus_1_2) <= +inf - 0 <= flow(electricityBus_storage1_1_2) <= +inf - 0 <= flow(storage1_electricityBus_1_3) <= +inf - 0 <= flow(electricityBus_storage1_1_3) <= +inf - 0 <= flow(storage1_electricityBus_2_4) <= +inf - 0 <= flow(electricityBus_storage1_2_4) <= +inf - 0 <= flow(storage1_electricityBus_2_5) <= +inf - 0 <= flow(electricityBus_storage1_2_5) <= +inf - 0 <= GenericStorageBlock_storage_content(storage1_1) <= 1111 + 0 <= flow(electricityBus_storage1_0) <= +inf + 0 <= flow(electricityBus_storage1_1) <= +inf + 0 <= flow(electricityBus_storage1_2) <= +inf + 0 <= flow(electricityBus_storage1_3) <= +inf + 0 <= flow(electricityBus_storage1_4) <= +inf + 0 <= flow(electricityBus_storage1_5) <= +inf + 0 <= flow(storage1_electricityBus_0) <= +inf + 0 <= flow(storage1_electricityBus_1) <= +inf + 0 <= flow(storage1_electricityBus_2) <= +inf + 0 <= flow(storage1_electricityBus_3) <= +inf + 0 <= flow(storage1_electricityBus_4) <= +inf + 0 <= flow(storage1_electricityBus_5) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_0) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_1) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_2) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_3) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_4) <= +inf + -inf <= GenericStorageBlock_storage_losses(storage1_5) <= +inf 0 <= GenericStorageBlock_storage_content(storage1_0) <= 1111 + 0 <= GenericStorageBlock_storage_content(storage1_1) <= 1111 0 <= GenericStorageBlock_storage_content(storage1_2) <= 1111 0 <= GenericStorageBlock_storage_content(storage1_3) <= 1111 0 <= GenericStorageBlock_storage_content(storage1_4) <= 1111 diff --git a/tests/lp_files/summed_min_source.lp b/tests/lp_files/summed_min_source.lp index f2cf9022b..7b55d77f8 100644 --- a/tests/lp_files/summed_min_source.lp +++ b/tests/lp_files/summed_min_source.lp @@ -2,38 +2,38 @@ min objective: -+25 flow(electricityBus_excess_0_0) -+25 flow(electricityBus_excess_0_1) -+25 flow(electricityBus_excess_0_2) ++25 flow(electricityBus_excess_0) ++25 flow(electricityBus_excess_1) ++25 flow(electricityBus_excess_2) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(electricityBus_excess_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(electricityBus_excess_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(electricityBus_excess_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(electricityBus_excess_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(electricityBus_excess_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(electricityBus_excess_2) = 0 c_u_SimpleFlowBlock_full_load_time_max_constr(electricityBus_excess)_: -+1 flow(electricityBus_excess_0_0) -+1 flow(electricityBus_excess_0_1) -+1 flow(electricityBus_excess_0_2) ++1 flow(electricityBus_excess_0) ++1 flow(electricityBus_excess_1) ++1 flow(electricityBus_excess_2) <= 1000 c_l_SimpleFlowBlock_full_load_time_min_constr(electricityBus_excess)_: -+1 flow(electricityBus_excess_0_0) -+1 flow(electricityBus_excess_0_1) -+1 flow(electricityBus_excess_0_2) ++1 flow(electricityBus_excess_0) ++1 flow(electricityBus_excess_1) ++1 flow(electricityBus_excess_2) >= 30 bounds - 0 <= flow(electricityBus_excess_0_0) <= 8.0 - 0 <= flow(electricityBus_excess_0_1) <= 8.0 - 0 <= flow(electricityBus_excess_0_2) <= 8.0 + 0 <= flow(electricityBus_excess_0) <= 8.0 + 0 <= flow(electricityBus_excess_1) <= 8.0 + 0 <= flow(electricityBus_excess_2) <= 8.0 end diff --git a/tests/lp_files/summed_min_source_multi_period.lp b/tests/lp_files/summed_min_source_multi_period.lp index ed2085dcf..99929ee41 100644 --- a/tests/lp_files/summed_min_source_multi_period.lp +++ b/tests/lp_files/summed_min_source_multi_period.lp @@ -2,62 +2,62 @@ min objective: -+25 flow(electricityBus_excess_0_0) -+25 flow(electricityBus_excess_0_1) -+24.509803921568626 flow(electricityBus_excess_1_2) -+24.509803921568626 flow(electricityBus_excess_1_3) -+24.029219530949632 flow(electricityBus_excess_2_4) -+24.029219530949632 flow(electricityBus_excess_2_5) ++25 flow(electricityBus_excess_0) ++25 flow(electricityBus_excess_1) ++24.509803921568626 flow(electricityBus_excess_2) ++24.509803921568626 flow(electricityBus_excess_3) ++24.029219530949632 flow(electricityBus_excess_4) ++24.029219530949632 flow(electricityBus_excess_5) s.t. -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(electricityBus_excess_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(electricityBus_excess_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(electricityBus_excess_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(electricityBus_excess_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(electricityBus_excess_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(electricityBus_excess_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(electricityBus_excess_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(electricityBus_excess_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(electricityBus_excess_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(electricityBus_excess_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(electricityBus_excess_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(electricityBus_excess_5) = 0 c_u_SimpleFlowBlock_full_load_time_max_constr(electricityBus_excess)_: -+1 flow(electricityBus_excess_0_0) -+1 flow(electricityBus_excess_0_1) -+1 flow(electricityBus_excess_1_2) -+1 flow(electricityBus_excess_1_3) -+1 flow(electricityBus_excess_2_4) -+1 flow(electricityBus_excess_2_5) ++1 flow(electricityBus_excess_0) ++1 flow(electricityBus_excess_1) ++1 flow(electricityBus_excess_2) ++1 flow(electricityBus_excess_3) ++1 flow(electricityBus_excess_4) ++1 flow(electricityBus_excess_5) <= 1000 c_l_SimpleFlowBlock_full_load_time_min_constr(electricityBus_excess)_: -+1 flow(electricityBus_excess_0_0) -+1 flow(electricityBus_excess_0_1) -+1 flow(electricityBus_excess_1_2) -+1 flow(electricityBus_excess_1_3) -+1 flow(electricityBus_excess_2_4) -+1 flow(electricityBus_excess_2_5) ++1 flow(electricityBus_excess_0) ++1 flow(electricityBus_excess_1) ++1 flow(electricityBus_excess_2) ++1 flow(electricityBus_excess_3) ++1 flow(electricityBus_excess_4) ++1 flow(electricityBus_excess_5) >= 30 bounds - 0 <= flow(electricityBus_excess_0_0) <= 8.0 - 0 <= flow(electricityBus_excess_0_1) <= 8.0 - 0 <= flow(electricityBus_excess_1_2) <= 8.0 - 0 <= flow(electricityBus_excess_1_3) <= 8.0 - 0 <= flow(electricityBus_excess_2_4) <= 8.0 - 0 <= flow(electricityBus_excess_2_5) <= 8.0 + 0 <= flow(electricityBus_excess_0) <= 8.0 + 0 <= flow(electricityBus_excess_1) <= 8.0 + 0 <= flow(electricityBus_excess_2) <= 8.0 + 0 <= flow(electricityBus_excess_3) <= 8.0 + 0 <= flow(electricityBus_excess_4) <= 8.0 + 0 <= flow(electricityBus_excess_5) <= 8.0 end diff --git a/tests/lp_files/variable_chp.lp b/tests/lp_files/variable_chp.lp index 9ec030a3e..62189040a 100644 --- a/tests/lp_files/variable_chp.lp +++ b/tests/lp_files/variable_chp.lp @@ -6,135 +6,135 @@ objective: s.t. -c_e_BusBlock_balance(commodityBus_0_0)_: -+1 flow(commodityBus_variable_chp_gas1_0_0) -+1 flow(commodityBus_variable_chp_gas2_0_0) +c_e_BusBlock_balance(commodityBus_0)_: ++1 flow(commodityBus_variable_chp_gas1_0) ++1 flow(commodityBus_variable_chp_gas2_0) = 0 -c_e_BusBlock_balance(commodityBus_0_1)_: -+1 flow(commodityBus_variable_chp_gas1_0_1) -+1 flow(commodityBus_variable_chp_gas2_0_1) +c_e_BusBlock_balance(commodityBus_1)_: ++1 flow(commodityBus_variable_chp_gas1_1) ++1 flow(commodityBus_variable_chp_gas2_1) = 0 -c_e_BusBlock_balance(commodityBus_0_2)_: -+1 flow(commodityBus_variable_chp_gas1_0_2) -+1 flow(commodityBus_variable_chp_gas2_0_2) +c_e_BusBlock_balance(commodityBus_2)_: ++1 flow(commodityBus_variable_chp_gas1_2) ++1 flow(commodityBus_variable_chp_gas2_2) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(variable_chp_gas1_electricityBus_0_0) -+1 flow(variable_chp_gas2_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(variable_chp_gas1_electricityBus_0) ++1 flow(variable_chp_gas2_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(variable_chp_gas1_electricityBus_0_1) -+1 flow(variable_chp_gas2_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(variable_chp_gas1_electricityBus_1) ++1 flow(variable_chp_gas2_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_0_2)_: -+1 flow(variable_chp_gas1_electricityBus_0_2) -+1 flow(variable_chp_gas2_electricityBus_0_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(variable_chp_gas1_electricityBus_2) ++1 flow(variable_chp_gas2_electricityBus_2) = 0 -c_e_BusBlock_balance(heatBus_0_0)_: -+1 flow(variable_chp_gas1_heatBus_0_0) -+1 flow(variable_chp_gas2_heatBus_0_0) +c_e_BusBlock_balance(heatBus_0)_: ++1 flow(variable_chp_gas1_heatBus_0) ++1 flow(variable_chp_gas2_heatBus_0) = 0 -c_e_BusBlock_balance(heatBus_0_1)_: -+1 flow(variable_chp_gas1_heatBus_0_1) -+1 flow(variable_chp_gas2_heatBus_0_1) +c_e_BusBlock_balance(heatBus_1)_: ++1 flow(variable_chp_gas1_heatBus_1) ++1 flow(variable_chp_gas2_heatBus_1) = 0 -c_e_BusBlock_balance(heatBus_0_2)_: -+1 flow(variable_chp_gas1_heatBus_0_2) -+1 flow(variable_chp_gas2_heatBus_0_2) +c_e_BusBlock_balance(heatBus_2)_: ++1 flow(variable_chp_gas1_heatBus_2) ++1 flow(variable_chp_gas2_heatBus_2) = 0 -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_0_0)_: -+1 flow(commodityBus_variable_chp_gas1_0_0) --2.0 flow(variable_chp_gas1_electricityBus_0_0) --0.8 flow(variable_chp_gas1_heatBus_0_0) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_0_1)_: -+1 flow(commodityBus_variable_chp_gas1_0_1) --2.0 flow(variable_chp_gas1_electricityBus_0_1) --0.8 flow(variable_chp_gas1_heatBus_0_1) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_0_2)_: -+1 flow(commodityBus_variable_chp_gas1_0_2) --2.0 flow(variable_chp_gas1_electricityBus_0_2) --0.8 flow(variable_chp_gas1_heatBus_0_2) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_0_0)_: -+1 flow(commodityBus_variable_chp_gas2_0_0) --2.0 flow(variable_chp_gas2_electricityBus_0_0) --0.8 flow(variable_chp_gas2_heatBus_0_0) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_0_1)_: -+1 flow(commodityBus_variable_chp_gas2_0_1) --2.0 flow(variable_chp_gas2_electricityBus_0_1) --0.8 flow(variable_chp_gas2_heatBus_0_1) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_0_2)_: -+1 flow(commodityBus_variable_chp_gas2_0_2) --2.0 flow(variable_chp_gas2_electricityBus_0_2) --0.8 flow(variable_chp_gas2_heatBus_0_2) -= 0.0 - -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_0_0)_: --1 flow(variable_chp_gas1_electricityBus_0_0) -+0.6 flow(variable_chp_gas1_heatBus_0_0) +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_0)_: ++1 flow(commodityBus_variable_chp_gas1_0) +-2.0 flow(variable_chp_gas1_electricityBus_0) +-0.8 flow(variable_chp_gas1_heatBus_0) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_1)_: ++1 flow(commodityBus_variable_chp_gas1_1) +-2.0 flow(variable_chp_gas1_electricityBus_1) +-0.8 flow(variable_chp_gas1_heatBus_1) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_2)_: ++1 flow(commodityBus_variable_chp_gas1_2) +-2.0 flow(variable_chp_gas1_electricityBus_2) +-0.8 flow(variable_chp_gas1_heatBus_2) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_0)_: ++1 flow(commodityBus_variable_chp_gas2_0) +-2.0 flow(variable_chp_gas2_electricityBus_0) +-0.8 flow(variable_chp_gas2_heatBus_0) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_1)_: ++1 flow(commodityBus_variable_chp_gas2_1) +-2.0 flow(variable_chp_gas2_electricityBus_1) +-0.8 flow(variable_chp_gas2_heatBus_1) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_2)_: ++1 flow(commodityBus_variable_chp_gas2_2) +-2.0 flow(variable_chp_gas2_electricityBus_2) +-0.8 flow(variable_chp_gas2_heatBus_2) += 0 + +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_0)_: +-1 flow(variable_chp_gas1_electricityBus_0) ++0.6 flow(variable_chp_gas1_heatBus_0) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_0_1)_: --1 flow(variable_chp_gas1_electricityBus_0_1) -+0.6 flow(variable_chp_gas1_heatBus_0_1) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_1)_: +-1 flow(variable_chp_gas1_electricityBus_1) ++0.6 flow(variable_chp_gas1_heatBus_1) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_0_2)_: --1 flow(variable_chp_gas1_electricityBus_0_2) -+0.6 flow(variable_chp_gas1_heatBus_0_2) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_2)_: +-1 flow(variable_chp_gas1_electricityBus_2) ++0.6 flow(variable_chp_gas1_heatBus_2) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_0_0)_: --1 flow(variable_chp_gas2_electricityBus_0_0) -+0.6 flow(variable_chp_gas2_heatBus_0_0) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_0)_: +-1 flow(variable_chp_gas2_electricityBus_0) ++0.6 flow(variable_chp_gas2_heatBus_0) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_0_1)_: --1 flow(variable_chp_gas2_electricityBus_0_1) -+0.6 flow(variable_chp_gas2_heatBus_0_1) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_1)_: +-1 flow(variable_chp_gas2_electricityBus_1) ++0.6 flow(variable_chp_gas2_heatBus_1) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_0_2)_: --1 flow(variable_chp_gas2_electricityBus_0_2) -+0.6 flow(variable_chp_gas2_heatBus_0_2) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_2)_: +-1 flow(variable_chp_gas2_electricityBus_2) ++0.6 flow(variable_chp_gas2_heatBus_2) <= 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(commodityBus_variable_chp_gas1_0_0) <= 100 - 0 <= flow(commodityBus_variable_chp_gas2_0_0) <= 100 - 0 <= flow(commodityBus_variable_chp_gas1_0_1) <= 100 - 0 <= flow(commodityBus_variable_chp_gas2_0_1) <= 100 - 0 <= flow(commodityBus_variable_chp_gas1_0_2) <= 100 - 0 <= flow(commodityBus_variable_chp_gas2_0_2) <= 100 - 0 <= flow(variable_chp_gas1_electricityBus_0_0) <= +inf - 0 <= flow(variable_chp_gas2_electricityBus_0_0) <= +inf - 0 <= flow(variable_chp_gas1_electricityBus_0_1) <= +inf - 0 <= flow(variable_chp_gas2_electricityBus_0_1) <= +inf - 0 <= flow(variable_chp_gas1_electricityBus_0_2) <= +inf - 0 <= flow(variable_chp_gas2_electricityBus_0_2) <= +inf - 0 <= flow(variable_chp_gas1_heatBus_0_0) <= +inf - 0 <= flow(variable_chp_gas2_heatBus_0_0) <= +inf - 0 <= flow(variable_chp_gas1_heatBus_0_1) <= +inf - 0 <= flow(variable_chp_gas2_heatBus_0_1) <= +inf - 0 <= flow(variable_chp_gas1_heatBus_0_2) <= +inf - 0 <= flow(variable_chp_gas2_heatBus_0_2) <= +inf + 0 <= flow(commodityBus_variable_chp_gas1_0) <= 100 + 0 <= flow(commodityBus_variable_chp_gas1_1) <= 100 + 0 <= flow(commodityBus_variable_chp_gas1_2) <= 100 + 0 <= flow(commodityBus_variable_chp_gas2_0) <= 100 + 0 <= flow(commodityBus_variable_chp_gas2_1) <= 100 + 0 <= flow(commodityBus_variable_chp_gas2_2) <= 100 + 0 <= flow(variable_chp_gas1_electricityBus_0) <= +inf + 0 <= flow(variable_chp_gas1_electricityBus_1) <= +inf + 0 <= flow(variable_chp_gas1_electricityBus_2) <= +inf + 0 <= flow(variable_chp_gas1_heatBus_0) <= +inf + 0 <= flow(variable_chp_gas1_heatBus_1) <= +inf + 0 <= flow(variable_chp_gas1_heatBus_2) <= +inf + 0 <= flow(variable_chp_gas2_electricityBus_0) <= +inf + 0 <= flow(variable_chp_gas2_electricityBus_1) <= +inf + 0 <= flow(variable_chp_gas2_electricityBus_2) <= +inf + 0 <= flow(variable_chp_gas2_heatBus_0) <= +inf + 0 <= flow(variable_chp_gas2_heatBus_1) <= +inf + 0 <= flow(variable_chp_gas2_heatBus_2) <= +inf end diff --git a/tests/lp_files/variable_chp_multi_period.lp b/tests/lp_files/variable_chp_multi_period.lp index dee45b69a..d3c1af4a3 100644 --- a/tests/lp_files/variable_chp_multi_period.lp +++ b/tests/lp_files/variable_chp_multi_period.lp @@ -6,264 +6,264 @@ objective: s.t. -c_e_BusBlock_balance(commodityBus_0_0)_: -+1 flow(commodityBus_variable_chp_gas1_0_0) -+1 flow(commodityBus_variable_chp_gas2_0_0) +c_e_BusBlock_balance(commodityBus_0)_: ++1 flow(commodityBus_variable_chp_gas1_0) ++1 flow(commodityBus_variable_chp_gas2_0) = 0 -c_e_BusBlock_balance(commodityBus_0_1)_: -+1 flow(commodityBus_variable_chp_gas1_0_1) -+1 flow(commodityBus_variable_chp_gas2_0_1) +c_e_BusBlock_balance(commodityBus_1)_: ++1 flow(commodityBus_variable_chp_gas1_1) ++1 flow(commodityBus_variable_chp_gas2_1) = 0 -c_e_BusBlock_balance(commodityBus_1_2)_: -+1 flow(commodityBus_variable_chp_gas1_1_2) -+1 flow(commodityBus_variable_chp_gas2_1_2) +c_e_BusBlock_balance(commodityBus_2)_: ++1 flow(commodityBus_variable_chp_gas1_2) ++1 flow(commodityBus_variable_chp_gas2_2) = 0 -c_e_BusBlock_balance(commodityBus_1_3)_: -+1 flow(commodityBus_variable_chp_gas1_1_3) -+1 flow(commodityBus_variable_chp_gas2_1_3) +c_e_BusBlock_balance(commodityBus_3)_: ++1 flow(commodityBus_variable_chp_gas1_3) ++1 flow(commodityBus_variable_chp_gas2_3) = 0 -c_e_BusBlock_balance(commodityBus_2_4)_: -+1 flow(commodityBus_variable_chp_gas1_2_4) -+1 flow(commodityBus_variable_chp_gas2_2_4) +c_e_BusBlock_balance(commodityBus_4)_: ++1 flow(commodityBus_variable_chp_gas1_4) ++1 flow(commodityBus_variable_chp_gas2_4) = 0 -c_e_BusBlock_balance(commodityBus_2_5)_: -+1 flow(commodityBus_variable_chp_gas1_2_5) -+1 flow(commodityBus_variable_chp_gas2_2_5) +c_e_BusBlock_balance(commodityBus_5)_: ++1 flow(commodityBus_variable_chp_gas1_5) ++1 flow(commodityBus_variable_chp_gas2_5) = 0 -c_e_BusBlock_balance(electricityBus_0_0)_: -+1 flow(variable_chp_gas2_electricityBus_0_0) -+1 flow(variable_chp_gas1_electricityBus_0_0) +c_e_BusBlock_balance(electricityBus_0)_: ++1 flow(variable_chp_gas1_electricityBus_0) ++1 flow(variable_chp_gas2_electricityBus_0) = 0 -c_e_BusBlock_balance(electricityBus_0_1)_: -+1 flow(variable_chp_gas2_electricityBus_0_1) -+1 flow(variable_chp_gas1_electricityBus_0_1) +c_e_BusBlock_balance(electricityBus_1)_: ++1 flow(variable_chp_gas1_electricityBus_1) ++1 flow(variable_chp_gas2_electricityBus_1) = 0 -c_e_BusBlock_balance(electricityBus_1_2)_: -+1 flow(variable_chp_gas2_electricityBus_1_2) -+1 flow(variable_chp_gas1_electricityBus_1_2) +c_e_BusBlock_balance(electricityBus_2)_: ++1 flow(variable_chp_gas1_electricityBus_2) ++1 flow(variable_chp_gas2_electricityBus_2) = 0 -c_e_BusBlock_balance(electricityBus_1_3)_: -+1 flow(variable_chp_gas2_electricityBus_1_3) -+1 flow(variable_chp_gas1_electricityBus_1_3) +c_e_BusBlock_balance(electricityBus_3)_: ++1 flow(variable_chp_gas1_electricityBus_3) ++1 flow(variable_chp_gas2_electricityBus_3) = 0 -c_e_BusBlock_balance(electricityBus_2_4)_: -+1 flow(variable_chp_gas2_electricityBus_2_4) -+1 flow(variable_chp_gas1_electricityBus_2_4) +c_e_BusBlock_balance(electricityBus_4)_: ++1 flow(variable_chp_gas1_electricityBus_4) ++1 flow(variable_chp_gas2_electricityBus_4) = 0 -c_e_BusBlock_balance(electricityBus_2_5)_: -+1 flow(variable_chp_gas2_electricityBus_2_5) -+1 flow(variable_chp_gas1_electricityBus_2_5) +c_e_BusBlock_balance(electricityBus_5)_: ++1 flow(variable_chp_gas1_electricityBus_5) ++1 flow(variable_chp_gas2_electricityBus_5) = 0 -c_e_BusBlock_balance(heatBus_0_0)_: -+1 flow(variable_chp_gas2_heatBus_0_0) -+1 flow(variable_chp_gas1_heatBus_0_0) +c_e_BusBlock_balance(heatBus_0)_: ++1 flow(variable_chp_gas1_heatBus_0) ++1 flow(variable_chp_gas2_heatBus_0) = 0 -c_e_BusBlock_balance(heatBus_0_1)_: -+1 flow(variable_chp_gas2_heatBus_0_1) -+1 flow(variable_chp_gas1_heatBus_0_1) +c_e_BusBlock_balance(heatBus_1)_: ++1 flow(variable_chp_gas1_heatBus_1) ++1 flow(variable_chp_gas2_heatBus_1) = 0 -c_e_BusBlock_balance(heatBus_1_2)_: -+1 flow(variable_chp_gas2_heatBus_1_2) -+1 flow(variable_chp_gas1_heatBus_1_2) +c_e_BusBlock_balance(heatBus_2)_: ++1 flow(variable_chp_gas1_heatBus_2) ++1 flow(variable_chp_gas2_heatBus_2) = 0 -c_e_BusBlock_balance(heatBus_1_3)_: -+1 flow(variable_chp_gas2_heatBus_1_3) -+1 flow(variable_chp_gas1_heatBus_1_3) +c_e_BusBlock_balance(heatBus_3)_: ++1 flow(variable_chp_gas1_heatBus_3) ++1 flow(variable_chp_gas2_heatBus_3) = 0 -c_e_BusBlock_balance(heatBus_2_4)_: -+1 flow(variable_chp_gas2_heatBus_2_4) -+1 flow(variable_chp_gas1_heatBus_2_4) +c_e_BusBlock_balance(heatBus_4)_: ++1 flow(variable_chp_gas1_heatBus_4) ++1 flow(variable_chp_gas2_heatBus_4) = 0 -c_e_BusBlock_balance(heatBus_2_5)_: -+1 flow(variable_chp_gas2_heatBus_2_5) -+1 flow(variable_chp_gas1_heatBus_2_5) +c_e_BusBlock_balance(heatBus_5)_: ++1 flow(variable_chp_gas1_heatBus_5) ++1 flow(variable_chp_gas2_heatBus_5) = 0 -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_0_0)_: -+1 flow(commodityBus_variable_chp_gas2_0_0) --2.0 flow(variable_chp_gas2_electricityBus_0_0) --0.8 flow(variable_chp_gas2_heatBus_0_0) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_0_1)_: -+1 flow(commodityBus_variable_chp_gas2_0_1) --2.0 flow(variable_chp_gas2_electricityBus_0_1) --0.8 flow(variable_chp_gas2_heatBus_0_1) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_1_2)_: -+1 flow(commodityBus_variable_chp_gas2_1_2) --2.0 flow(variable_chp_gas2_electricityBus_1_2) --0.8 flow(variable_chp_gas2_heatBus_1_2) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_1_3)_: -+1 flow(commodityBus_variable_chp_gas2_1_3) --2.0 flow(variable_chp_gas2_electricityBus_1_3) --0.8 flow(variable_chp_gas2_heatBus_1_3) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_2_4)_: -+1 flow(commodityBus_variable_chp_gas2_2_4) --2.0 flow(variable_chp_gas2_electricityBus_2_4) --0.8 flow(variable_chp_gas2_heatBus_2_4) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_2_5)_: -+1 flow(commodityBus_variable_chp_gas2_2_5) --2.0 flow(variable_chp_gas2_electricityBus_2_5) --0.8 flow(variable_chp_gas2_heatBus_2_5) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_0_0)_: -+1 flow(commodityBus_variable_chp_gas1_0_0) --2.0 flow(variable_chp_gas1_electricityBus_0_0) --0.8 flow(variable_chp_gas1_heatBus_0_0) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_0_1)_: -+1 flow(commodityBus_variable_chp_gas1_0_1) --2.0 flow(variable_chp_gas1_electricityBus_0_1) --0.8 flow(variable_chp_gas1_heatBus_0_1) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_1_2)_: -+1 flow(commodityBus_variable_chp_gas1_1_2) --2.0 flow(variable_chp_gas1_electricityBus_1_2) --0.8 flow(variable_chp_gas1_heatBus_1_2) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_1_3)_: -+1 flow(commodityBus_variable_chp_gas1_1_3) --2.0 flow(variable_chp_gas1_electricityBus_1_3) --0.8 flow(variable_chp_gas1_heatBus_1_3) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_2_4)_: -+1 flow(commodityBus_variable_chp_gas1_2_4) --2.0 flow(variable_chp_gas1_electricityBus_2_4) --0.8 flow(variable_chp_gas1_heatBus_2_4) -= 0.0 - -c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_2_5)_: -+1 flow(commodityBus_variable_chp_gas1_2_5) --2.0 flow(variable_chp_gas1_electricityBus_2_5) --0.8 flow(variable_chp_gas1_heatBus_2_5) -= 0.0 - -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_0_0)_: --1 flow(variable_chp_gas2_electricityBus_0_0) -+0.6 flow(variable_chp_gas2_heatBus_0_0) +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_0)_: ++1 flow(commodityBus_variable_chp_gas1_0) +-2.0 flow(variable_chp_gas1_electricityBus_0) +-0.8 flow(variable_chp_gas1_heatBus_0) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_1)_: ++1 flow(commodityBus_variable_chp_gas1_1) +-2.0 flow(variable_chp_gas1_electricityBus_1) +-0.8 flow(variable_chp_gas1_heatBus_1) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_2)_: ++1 flow(commodityBus_variable_chp_gas1_2) +-2.0 flow(variable_chp_gas1_electricityBus_2) +-0.8 flow(variable_chp_gas1_heatBus_2) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_3)_: ++1 flow(commodityBus_variable_chp_gas1_3) +-2.0 flow(variable_chp_gas1_electricityBus_3) +-0.8 flow(variable_chp_gas1_heatBus_3) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_4)_: ++1 flow(commodityBus_variable_chp_gas1_4) +-2.0 flow(variable_chp_gas1_electricityBus_4) +-0.8 flow(variable_chp_gas1_heatBus_4) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas1_5)_: ++1 flow(commodityBus_variable_chp_gas1_5) +-2.0 flow(variable_chp_gas1_electricityBus_5) +-0.8 flow(variable_chp_gas1_heatBus_5) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_0)_: ++1 flow(commodityBus_variable_chp_gas2_0) +-2.0 flow(variable_chp_gas2_electricityBus_0) +-0.8 flow(variable_chp_gas2_heatBus_0) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_1)_: ++1 flow(commodityBus_variable_chp_gas2_1) +-2.0 flow(variable_chp_gas2_electricityBus_1) +-0.8 flow(variable_chp_gas2_heatBus_1) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_2)_: ++1 flow(commodityBus_variable_chp_gas2_2) +-2.0 flow(variable_chp_gas2_electricityBus_2) +-0.8 flow(variable_chp_gas2_heatBus_2) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_3)_: ++1 flow(commodityBus_variable_chp_gas2_3) +-2.0 flow(variable_chp_gas2_electricityBus_3) +-0.8 flow(variable_chp_gas2_heatBus_3) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_4)_: ++1 flow(commodityBus_variable_chp_gas2_4) +-2.0 flow(variable_chp_gas2_electricityBus_4) +-0.8 flow(variable_chp_gas2_heatBus_4) += 0 + +c_e_ExtractionTurbineCHPBlock_input_output_relation(variable_chp_gas2_5)_: ++1 flow(commodityBus_variable_chp_gas2_5) +-2.0 flow(variable_chp_gas2_electricityBus_5) +-0.8 flow(variable_chp_gas2_heatBus_5) += 0 + +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_0)_: +-1 flow(variable_chp_gas1_electricityBus_0) ++0.6 flow(variable_chp_gas1_heatBus_0) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_0_1)_: --1 flow(variable_chp_gas2_electricityBus_0_1) -+0.6 flow(variable_chp_gas2_heatBus_0_1) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_1)_: +-1 flow(variable_chp_gas1_electricityBus_1) ++0.6 flow(variable_chp_gas1_heatBus_1) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_1_2)_: --1 flow(variable_chp_gas2_electricityBus_1_2) -+0.6 flow(variable_chp_gas2_heatBus_1_2) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_2)_: +-1 flow(variable_chp_gas1_electricityBus_2) ++0.6 flow(variable_chp_gas1_heatBus_2) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_1_3)_: --1 flow(variable_chp_gas2_electricityBus_1_3) -+0.6 flow(variable_chp_gas2_heatBus_1_3) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_3)_: +-1 flow(variable_chp_gas1_electricityBus_3) ++0.6 flow(variable_chp_gas1_heatBus_3) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_2_4)_: --1 flow(variable_chp_gas2_electricityBus_2_4) -+0.6 flow(variable_chp_gas2_heatBus_2_4) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_4)_: +-1 flow(variable_chp_gas1_electricityBus_4) ++0.6 flow(variable_chp_gas1_heatBus_4) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_2_5)_: --1 flow(variable_chp_gas2_electricityBus_2_5) -+0.6 flow(variable_chp_gas2_heatBus_2_5) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_5)_: +-1 flow(variable_chp_gas1_electricityBus_5) ++0.6 flow(variable_chp_gas1_heatBus_5) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_0_0)_: --1 flow(variable_chp_gas1_electricityBus_0_0) -+0.6 flow(variable_chp_gas1_heatBus_0_0) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_0)_: +-1 flow(variable_chp_gas2_electricityBus_0) ++0.6 flow(variable_chp_gas2_heatBus_0) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_0_1)_: --1 flow(variable_chp_gas1_electricityBus_0_1) -+0.6 flow(variable_chp_gas1_heatBus_0_1) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_1)_: +-1 flow(variable_chp_gas2_electricityBus_1) ++0.6 flow(variable_chp_gas2_heatBus_1) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_1_2)_: --1 flow(variable_chp_gas1_electricityBus_1_2) -+0.6 flow(variable_chp_gas1_heatBus_1_2) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_2)_: +-1 flow(variable_chp_gas2_electricityBus_2) ++0.6 flow(variable_chp_gas2_heatBus_2) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_1_3)_: --1 flow(variable_chp_gas1_electricityBus_1_3) -+0.6 flow(variable_chp_gas1_heatBus_1_3) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_3)_: +-1 flow(variable_chp_gas2_electricityBus_3) ++0.6 flow(variable_chp_gas2_heatBus_3) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_2_4)_: --1 flow(variable_chp_gas1_electricityBus_2_4) -+0.6 flow(variable_chp_gas1_heatBus_2_4) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_4)_: +-1 flow(variable_chp_gas2_electricityBus_4) ++0.6 flow(variable_chp_gas2_heatBus_4) <= 0 -c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas1_2_5)_: --1 flow(variable_chp_gas1_electricityBus_2_5) -+0.6 flow(variable_chp_gas1_heatBus_2_5) +c_u_ExtractionTurbineCHPBlock_out_flow_relation(variable_chp_gas2_5)_: +-1 flow(variable_chp_gas2_electricityBus_5) ++0.6 flow(variable_chp_gas2_heatBus_5) <= 0 bounds 1 <= ONE_VAR_CONSTANT <= 1 - 0 <= flow(commodityBus_variable_chp_gas1_0_0) <= 100 - 0 <= flow(commodityBus_variable_chp_gas2_0_0) <= 100 - 0 <= flow(commodityBus_variable_chp_gas1_0_1) <= 100 - 0 <= flow(commodityBus_variable_chp_gas2_0_1) <= 100 - 0 <= flow(commodityBus_variable_chp_gas1_1_2) <= 100 - 0 <= flow(commodityBus_variable_chp_gas2_1_2) <= 100 - 0 <= flow(commodityBus_variable_chp_gas1_1_3) <= 100 - 0 <= flow(commodityBus_variable_chp_gas2_1_3) <= 100 - 0 <= flow(commodityBus_variable_chp_gas1_2_4) <= 100 - 0 <= flow(commodityBus_variable_chp_gas2_2_4) <= 100 - 0 <= flow(commodityBus_variable_chp_gas1_2_5) <= 100 - 0 <= flow(commodityBus_variable_chp_gas2_2_5) <= 100 - 0 <= flow(variable_chp_gas2_electricityBus_0_0) <= +inf - 0 <= flow(variable_chp_gas1_electricityBus_0_0) <= +inf - 0 <= flow(variable_chp_gas2_electricityBus_0_1) <= +inf - 0 <= flow(variable_chp_gas1_electricityBus_0_1) <= +inf - 0 <= flow(variable_chp_gas2_electricityBus_1_2) <= +inf - 0 <= flow(variable_chp_gas1_electricityBus_1_2) <= +inf - 0 <= flow(variable_chp_gas2_electricityBus_1_3) <= +inf - 0 <= flow(variable_chp_gas1_electricityBus_1_3) <= +inf - 0 <= flow(variable_chp_gas2_electricityBus_2_4) <= +inf - 0 <= flow(variable_chp_gas1_electricityBus_2_4) <= +inf - 0 <= flow(variable_chp_gas2_electricityBus_2_5) <= +inf - 0 <= flow(variable_chp_gas1_electricityBus_2_5) <= +inf - 0 <= flow(variable_chp_gas2_heatBus_0_0) <= +inf - 0 <= flow(variable_chp_gas1_heatBus_0_0) <= +inf - 0 <= flow(variable_chp_gas2_heatBus_0_1) <= +inf - 0 <= flow(variable_chp_gas1_heatBus_0_1) <= +inf - 0 <= flow(variable_chp_gas2_heatBus_1_2) <= +inf - 0 <= flow(variable_chp_gas1_heatBus_1_2) <= +inf - 0 <= flow(variable_chp_gas2_heatBus_1_3) <= +inf - 0 <= flow(variable_chp_gas1_heatBus_1_3) <= +inf - 0 <= flow(variable_chp_gas2_heatBus_2_4) <= +inf - 0 <= flow(variable_chp_gas1_heatBus_2_4) <= +inf - 0 <= flow(variable_chp_gas2_heatBus_2_5) <= +inf - 0 <= flow(variable_chp_gas1_heatBus_2_5) <= +inf + 0 <= flow(commodityBus_variable_chp_gas1_0) <= 100 + 0 <= flow(commodityBus_variable_chp_gas1_1) <= 100 + 0 <= flow(commodityBus_variable_chp_gas1_2) <= 100 + 0 <= flow(commodityBus_variable_chp_gas1_3) <= 100 + 0 <= flow(commodityBus_variable_chp_gas1_4) <= 100 + 0 <= flow(commodityBus_variable_chp_gas1_5) <= 100 + 0 <= flow(commodityBus_variable_chp_gas2_0) <= 100 + 0 <= flow(commodityBus_variable_chp_gas2_1) <= 100 + 0 <= flow(commodityBus_variable_chp_gas2_2) <= 100 + 0 <= flow(commodityBus_variable_chp_gas2_3) <= 100 + 0 <= flow(commodityBus_variable_chp_gas2_4) <= 100 + 0 <= flow(commodityBus_variable_chp_gas2_5) <= 100 + 0 <= flow(variable_chp_gas1_electricityBus_0) <= +inf + 0 <= flow(variable_chp_gas1_electricityBus_1) <= +inf + 0 <= flow(variable_chp_gas1_electricityBus_2) <= +inf + 0 <= flow(variable_chp_gas1_electricityBus_3) <= +inf + 0 <= flow(variable_chp_gas1_electricityBus_4) <= +inf + 0 <= flow(variable_chp_gas1_electricityBus_5) <= +inf + 0 <= flow(variable_chp_gas1_heatBus_0) <= +inf + 0 <= flow(variable_chp_gas1_heatBus_1) <= +inf + 0 <= flow(variable_chp_gas1_heatBus_2) <= +inf + 0 <= flow(variable_chp_gas1_heatBus_3) <= +inf + 0 <= flow(variable_chp_gas1_heatBus_4) <= +inf + 0 <= flow(variable_chp_gas1_heatBus_5) <= +inf + 0 <= flow(variable_chp_gas2_electricityBus_0) <= +inf + 0 <= flow(variable_chp_gas2_electricityBus_1) <= +inf + 0 <= flow(variable_chp_gas2_electricityBus_2) <= +inf + 0 <= flow(variable_chp_gas2_electricityBus_3) <= +inf + 0 <= flow(variable_chp_gas2_electricityBus_4) <= +inf + 0 <= flow(variable_chp_gas2_electricityBus_5) <= +inf + 0 <= flow(variable_chp_gas2_heatBus_0) <= +inf + 0 <= flow(variable_chp_gas2_heatBus_1) <= +inf + 0 <= flow(variable_chp_gas2_heatBus_2) <= +inf + 0 <= flow(variable_chp_gas2_heatBus_3) <= +inf + 0 <= flow(variable_chp_gas2_heatBus_4) <= +inf + 0 <= flow(variable_chp_gas2_heatBus_5) <= +inf end diff --git a/tests/multi_period_constraint_tests.py b/tests/multi_period_constraint_tests.py index 417fdf0dd..16a77d5d4 100644 --- a/tests/multi_period_constraint_tests.py +++ b/tests/multi_period_constraint_tests.py @@ -18,6 +18,9 @@ from pyomo.repn.tests.lp_diff import lp_diff from oemof import solph +from oemof.solph.components._offset_converter import ( + slope_offset_from_nonconvex_output, +) logging.disable(logging.INFO) @@ -45,9 +48,9 @@ def setup_class(cls): r"^objective.*(?=s\.t\.)", re.DOTALL | re.MULTILINE ) - timeindex1 = pd.date_range("1/1/2012", periods=2, freq="H") - timeindex2 = pd.date_range("1/1/2013", periods=2, freq="H") - timeindex3 = pd.date_range("1/1/2014", periods=2, freq="H") + timeindex1 = pd.date_range("1/1/2012", periods=2, freq="h") + timeindex2 = pd.date_range("1/1/2013", periods=2, freq="h") + timeindex3 = pd.date_range("1/1/2014", periods=2, freq="h") cls.date_time_index = timeindex1.append(timeindex2).append(timeindex3) cls.periods = [timeindex1, timeindex2, timeindex3] @@ -1521,15 +1524,26 @@ def test_offsetconverter(self): bgas = solph.buses.Bus(label="gasBus") bth = solph.buses.Bus(label="thermalBus") + min = 0.32 + eta_at_min = 0.7 + eta_at_nom = 0.9 + + slope, offset = slope_offset_from_nonconvex_output( + 1, min, eta_at_nom, eta_at_min + ) + otrf = solph.components.OffsetConverter( label="gasboiler", inputs={bgas: solph.flows.Flow()}, outputs={ bth: solph.flows.Flow( - nominal_value=100, min=0.32, nonconvex=solph.NonConvex() + nominal_value=100, + min=min, + nonconvex=solph.NonConvex(), ) }, - coefficients=[-17, 0.9], + conversion_factors={bgas: slope}, + normed_offsets={bgas: offset}, ) self.energysystem.add(bgas, bth, otrf) self.compare_lp_files("offsetconverter_multi_period.lp") @@ -2316,7 +2330,7 @@ def test_multi_period_varying_period_length(self): # Create a list of timeindex for each period periods = [ - pd.date_range(f"1/1/{i}", periods=3, freq="H") for i in years + pd.date_range(f"1/1/{i}", periods=3, freq="h") for i in years ] # Create an overall timeindex diff --git a/tests/regression_tests.py b/tests/regression_tests.py index 8ec62c759..f233d8fbf 100644 --- a/tests/regression_tests.py +++ b/tests/regression_tests.py @@ -24,7 +24,7 @@ def test_version_metadata(): def test_wrong_logging_level(): - datetimeindex = pd.date_range("1/1/2012", periods=12, freq="H") + datetimeindex = pd.date_range("1/1/2012", periods=12, freq="h") es = solph.EnergySystem(timeindex=datetimeindex, infer_last_interval=True) tools.logger.define_logging() my_logger = logging.getLogger() diff --git a/tests/test_components.py b/tests/test_components.py index f1db847b4..f66230bfc 100644 --- a/tests/test_components.py +++ b/tests/test_components.py @@ -215,119 +215,54 @@ def test_generic_storage_too_many_outputs(): def test_offsetconverter_without_nonconvex(): - """No NonConvex attribute is defined for the output flow.""" + """No NonConvex attribute is defined for any of the attached flows.""" with pytest.raises( - TypeError, match="Output flow must have the `NonConvex` attribute!" + ValueError, + match=( + "Exactly one flow of the `OffsetConverter` must have the " + "`NonConvex` attribute." + ), ): + b_diesel = Bus(label="bus_diesel") b_el = Bus(label="bus_electricity") components.OffsetConverter( label="diesel_genset", - inputs={b_el: Flow()}, + inputs={b_diesel: Flow()}, outputs={b_el: Flow()}, - coefficients=(2.5, 0.5), ) -def test_offsetconverter_nonconvex_on_inputs(): - """NonConvex attribute is defined for the input flow.""" +def test_offsetconverter_multiple_nonconvex(): + """NonConvex attribute is defined for more than one flow.""" with pytest.raises( - TypeError, - match="`NonConvex` attribute must be defined only for the output " - + "flow!", + ValueError, + match=( + "Exactly one flow of the `OffsetConverter` must have the " + "`NonConvex` attribute." + ), ): b_diesel = Bus(label="bus_diesel") + b_heat = Bus(label="bus_heat") components.OffsetConverter( inputs={b_diesel: Flow(nonconvex=NonConvex())}, - outputs={b_diesel: Flow(nonconvex=NonConvex())}, - coefficients=(2.5, 0.5), + outputs={b_heat: Flow(nonconvex=NonConvex())}, ) -def test_offsetconverter_investment_on_inputs(): - """Investment attribute is defined for the input flow.""" +def test_offsetconverter_investment_not_on_nonconvex(): + """Investment attribute is defined for a not NonConvex flow.""" with pytest.raises( TypeError, - match="`Investment` attribute must be defined only for the output " - + "flow!", + match=( + "`Investment` attribute must be defined only for the NonConvex " + "flow!" + ), ): b_diesel = Bus(label="bus_diesel") + b_heat = Bus(label="bus_heat") components.OffsetConverter( - inputs={b_diesel: Flow(nominal_value=Investment())}, - outputs={ - b_diesel: Flow( - nonconvex=NonConvex(), nominal_value=Investment(maximum=1) - ) - }, - coefficients=(2.5, 0.5), - ) - - -def test_offsetconverter_not_enough_coefficients(): - with pytest.raises( - ValueError, - match="Two coefficients or coefficient series have to be given.", - ): - bus = Bus(label="Bus") - components.OffsetConverter( - label="of1", - inputs={bus: Flow()}, - outputs={bus: Flow(nonconvex=NonConvex())}, - coefficients=([1, 4, 7]), - ) - - -def test_offsetconverter_too_many_coefficients(): - with pytest.raises( - ValueError, - match="Two coefficients or coefficient series have to be given.", - ): - bus = Bus(label="Bus") - components.OffsetConverter( - label="of2", - inputs={bus: Flow()}, - outputs={bus: Flow(nonconvex=NonConvex())}, - coefficients=(1, 4, 7), - ) - - -def test_offsetconverter__too_many_input_flows(): - """Too many Input Flows defined.""" - with pytest.raises( - ValueError, - match="Component `OffsetConverter` must not have more than 1 input " - + "and 1 output!", - ): - b_gas = Bus(label="bus_gas") - b_coal = Bus(label="bus_coal") - components.OffsetConverter( - inputs={ - b_gas: Flow(), - b_coal: Flow(), - }, - outputs={b_coal: Flow(nonconvex=NonConvex())}, - coefficients=(20, 0.5), - ) - - -def test_offsetconverter_too_many_output_flows(): - """Too many Output Flows defined.""" - with pytest.raises( - ValueError, - match="Component `OffsetConverter` must not have more than 1 input " - + "and 1 output!", - ): - b_el = Bus(label="bus_electricity") - b_th = Bus(label="bus_thermal") - - components.OffsetConverter( - inputs={ - b_el: Flow(), - }, - outputs={ - b_el: Flow(nonconvex=NonConvex()), - b_th: Flow(nonconvex=NonConvex()), - }, - coefficients=(20, 0.5), + inputs={b_diesel: Flow(nominal_value=Investment(maximum=1))}, + outputs={b_heat: Flow(nonconvex=NonConvex())}, ) diff --git a/tests/test_components/test_offset_converter.py b/tests/test_components/test_offset_converter.py new file mode 100644 index 000000000..6089f6555 --- /dev/null +++ b/tests/test_components/test_offset_converter.py @@ -0,0 +1,539 @@ +import warnings + +import numpy as np +import pytest + +from oemof import solph +from oemof.solph._plumbing import sequence +from oemof.solph.components._offset_converter import ( + slope_offset_from_nonconvex_input, +) +from oemof.solph.components._offset_converter import ( + slope_offset_from_nonconvex_output, +) + + +def create_energysystem_stub(num_in, num_out): + + es = solph.EnergySystem( + timeindex=solph.create_time_index(year=2023, number=9), + infer_last_interval=True, + ) + + for i in range(num_in): + bus_label = f"bus input {i}" + b = solph.Bus(bus_label) + es.add(b) + es.add( + solph.components.Source(f"source {i}", outputs={b: solph.Flow()}) + ) + + for o in range(num_out): + bus_label = f"bus output {o}" + b = solph.Bus(bus_label) + es.add(b) + es.add(solph.components.Sink(f"sink {o}", inputs={b: solph.Flow()})) + + return es + + +def solve_and_extract_results(es): + model = solph.Model(es) + model.solve("cbc") + results = solph.views.convert_keys_to_strings(model.results()) + + assert ( + model.solver_results["Solver"][0]["Termination condition"] + != "infeasible" + ) + return results + + +def check_results( + results, + reference_bus, + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, +): + for bus in eta_at_nom: + if "input" in reference_bus.label: + slope, offset = slope_offset_from_nonconvex_input( + 1, + minimal_value / nominal_value, + eta_at_nom[bus], + eta_at_min[bus], + ) + reference_flow = results[reference_bus.label, "offset converter"][ + "sequences" + ]["flow"] + reference_flow_status = results[ + reference_bus.label, "offset converter" + ]["sequences"]["status"] + else: + slope, offset = slope_offset_from_nonconvex_output( + 1, + minimal_value / nominal_value, + eta_at_nom[bus], + eta_at_min[bus], + ) + reference_flow = results["offset converter", reference_bus.label][ + "sequences" + ]["flow"] + reference_flow_status = results[ + "offset converter", reference_bus.label + ]["sequences"]["status"] + + flow_expected = ( + offset * nominal_value * reference_flow_status + + slope * reference_flow + ) + if "input" in bus.label: + flow_actual = results[bus.label, "offset converter"]["sequences"][ + "flow" + ] + else: + flow_actual = results["offset converter", bus.label]["sequences"][ + "flow" + ] + + np.testing.assert_array_almost_equal(flow_actual, flow_expected) + + +def add_OffsetConverter( + es, reference_bus, nominal_value, minimal_value, eta_at_nom, eta_at_min +): + + oc_inputs = { + b: solph.Flow() for label, b in es.node.items() if "bus input" in label + } + oc_outputs = { + b: solph.Flow() + for label, b in es.node.items() + if "bus output" in label + } + + if reference_bus in oc_outputs: + f = oc_outputs[reference_bus] + get_slope_and_offset = slope_offset_from_nonconvex_output + fix = [0] + np.linspace(minimal_value, nominal_value, 9).tolist() + else: + f = oc_inputs[reference_bus] + get_slope_and_offset = slope_offset_from_nonconvex_input + fix = [0] + np.linspace( + minimal_value * eta_at_min[es.node["bus output 0"]], + nominal_value * eta_at_nom[es.node["bus output 0"]], + 9, + ).tolist() + + fix_flow = es.flows()[es.node["bus output 0"], es.node["sink 0"]] + fix_flow.fix = fix + fix_flow.nominal_value = 1 + + slopes = {} + offsets = {} + + for bus in list(oc_inputs) + list(oc_outputs): + if bus == reference_bus: + continue + slope, offset = get_slope_and_offset( + 1, minimal_value / nominal_value, eta_at_nom[bus], eta_at_min[bus] + ) + slopes[bus] = slope + offsets[bus] = offset + + f.nonconvex = solph.NonConvex() + f.nominal_value = nominal_value + f.min = sequence(minimal_value / nominal_value) + + oc = solph.components.OffsetConverter( + label="offset converter", + inputs=oc_inputs, + outputs=oc_outputs, + conversion_factors=slopes, + normed_offsets=offsets, + ) + + es.add(oc) + + +def test_OffsetConverter_single_input_output_ref_output(): + num_in = 1 + num_out = 1 + es = create_energysystem_stub(num_in, num_out) + + nominal_value = 10 + minimal_value = 3 + + eta_at_nom = {es.groups["bus input 0"]: 0.7} + eta_at_min = {es.groups["bus input 0"]: 0.5} + + add_OffsetConverter( + es, + es.groups["bus output 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + results = solve_and_extract_results(es) + + check_results( + results, + es.groups["bus output 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + +def test_OffsetConverter_single_input_output_ref_output_eta_decreasing(): + num_in = 1 + num_out = 1 + es = create_energysystem_stub(num_in, num_out) + + nominal_value = 10 + minimal_value = 3 + + eta_at_nom = {es.groups["bus input 0"]: 0.5} + eta_at_min = {es.groups["bus input 0"]: 0.7} + + add_OffsetConverter( + es, + es.groups["bus output 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + results = solve_and_extract_results(es) + + check_results( + results, + es.groups["bus output 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + +def test_OffsetConverter_single_input_output_ref_input(): + num_in = 1 + num_out = 1 + es = create_energysystem_stub(num_in, num_out) + + nominal_value = 10 + minimal_value = 3 + + eta_at_nom = {es.groups["bus output 0"]: 0.7} + eta_at_min = {es.groups["bus output 0"]: 0.5} + + add_OffsetConverter( + es, + es.groups["bus input 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + results = solve_and_extract_results(es) + + check_results( + results, + es.groups["bus input 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + +def test_OffsetConverter_single_input_output_ref_input_eta_decreasing(): + num_in = 1 + num_out = 1 + es = create_energysystem_stub(num_in, num_out) + + nominal_value = 10 + minimal_value = 3 + + eta_at_nom = {es.groups["bus output 0"]: 0.5} + eta_at_min = {es.groups["bus output 0"]: 0.7} + + add_OffsetConverter( + es, + es.groups["bus input 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + results = solve_and_extract_results(es) + + check_results( + results, + es.groups["bus input 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + +def test_OffsetConverter_double_input_output_ref_input(): + num_in = 2 + num_out = 2 + es = create_energysystem_stub(num_in, num_out) + + nominal_value = 10 + minimal_value = 3 + + eta_at_nom = { + es.groups["bus output 0"]: 0.7, + es.groups["bus output 1"]: 0.2, + es.groups["bus input 1"]: 0.2, + } + eta_at_min = { + es.groups["bus output 0"]: 0.5, + es.groups["bus output 1"]: 0.3, + es.groups["bus input 1"]: 0.2, + } + + add_OffsetConverter( + es, + es.groups["bus input 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + results = solve_and_extract_results(es) + + check_results( + results, + es.groups["bus input 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + +def test_OffsetConverter_double_input_output_ref_output(): + num_in = 2 + num_out = 2 + + es = create_energysystem_stub(num_in, num_out) + + nominal_value = 10 + minimal_value = 3 + + eta_at_nom = { + es.groups["bus input 0"]: 0.7, + es.groups["bus output 1"]: 0.2, + es.groups["bus input 1"]: 0.2, + } + eta_at_min = { + es.groups["bus input 0"]: 0.5, + es.groups["bus output 1"]: 0.3, + es.groups["bus input 1"]: 0.2, + } + + add_OffsetConverter( + es, + es.groups["bus output 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + results = solve_and_extract_results(es) + + check_results( + results, + es.groups["bus output 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + +def test_two_OffsetConverters_with_and_without_investment(): + num_in = 1 + num_out = 1 + + es = create_energysystem_stub(num_in, num_out) + + nominal_value = 10 + minimal_value = 3 + + eta_at_nom = { + es.groups["bus input 0"]: 0.7, + } + eta_at_min = { + es.groups["bus input 0"]: 0.5, + } + + add_OffsetConverter( + es, + es.groups["bus output 0"], + nominal_value, + minimal_value, + eta_at_nom, + eta_at_min, + ) + + input_bus = es.groups["bus input 0"] + + oc = solph.components.OffsetConverter( + label="investment offset converter", + inputs={input_bus: solph.Flow()}, + outputs={ + es.groups["bus output 0"]: solph.Flow( + nonconvex=solph.NonConvex(), + nominal_value=solph.Investment( + maximum=nominal_value, ep_costs=10 + ), + ) + }, + conversion_factors={input_bus: 1}, + normed_offsets={input_bus: 0}, + ) + + es.add(oc) + + fix_flow = es.flows()[es.node["bus output 0"], es.node["sink 0"]] + fix_flow.fix = [v * 2 for v in fix_flow.fix] + # if the model solves it is feasible + _ = solve_and_extract_results(es) + + +def test_OffsetConverter_05x_compatibility(): + + num_in = 1 + num_out = 1 + es = create_energysystem_stub(num_in, num_out) + + nominal_value = 10 + minimal_value = 3 + + fix = [0] + np.linspace(minimal_value, nominal_value, 9).tolist() + fix_flow = es.flows()[es.node["bus output 0"], es.node["sink 0"]] + fix_flow.fix = fix + fix_flow.nominal_value = 1 + + eta_at_nom = 0.7 + eta_at_min = 0.5 + + slope = (nominal_value - minimal_value) / ( + nominal_value / eta_at_nom - minimal_value / eta_at_min + ) + offset = minimal_value / nominal_value * (1 - slope / eta_at_min) + + warnings.filterwarnings("ignore", "", DeprecationWarning) + oc = solph.components.OffsetConverter( + label="offset converter", + inputs={es.groups["bus input 0"]: solph.Flow()}, + outputs={ + es.groups["bus output 0"]: solph.Flow( + nonconvex=solph.NonConvex(), + nominal_value=nominal_value, + min=minimal_value / nominal_value, + ) + }, + coefficients=(offset, slope), + ) + + es.add(oc) + warnings.filterwarnings("always", "", DeprecationWarning) + + results = solve_and_extract_results(es) + + slope, offset = slope_offset_from_nonconvex_output( + 1, minimal_value / nominal_value, 0.7, 0.5 + ) + output_flow = results["offset converter", "bus output 0"]["sequences"][ + "flow" + ] + output_flow_status = results["offset converter", "bus output 0"][ + "sequences" + ]["status"] + + input_flow_expected = ( + offset * nominal_value * output_flow_status + slope * output_flow + ) + input_flow_actual = results["bus input 0", "offset converter"][ + "sequences" + ]["flow"] + + np.testing.assert_array_almost_equal( + input_flow_actual, input_flow_expected + ) + + +def test_error_handling(): + + input_bus = solph.Bus("bus1") + output_bus = solph.Bus("bus2") + + with pytest.raises(TypeError, match="cannot be used in combination"): + warnings.filterwarnings("ignore", "", DeprecationWarning) + _ = solph.components.OffsetConverter( + label="offset converter", + inputs={input_bus: solph.Flow()}, + outputs={ + output_bus: solph.Flow( + nonconvex=solph.NonConvex(), + nominal_value=10, + min=0.3, + ) + }, + # values are arbitarty just to test the error + coefficients=(-1, 0.4), + conversion_factors={input_bus: 1}, + normed_offsets={input_bus: 0}, + ) + warnings.filterwarnings("always", "", DeprecationWarning) + + with pytest.raises( + ValueError, match="Conversion factors cannot be specified for" + ): + _ = solph.components.OffsetConverter( + label="offset converter", + inputs={input_bus: solph.Flow()}, + outputs={ + output_bus: solph.Flow( + nonconvex=solph.NonConvex(), + nominal_value=10, + min=0.3, + ) + }, + conversion_factors={input_bus: 1, output_bus: 1}, + normed_offsets={input_bus: 0}, + ) + + with pytest.raises( + ValueError, match="Normed offsets cannot be specified for" + ): + _ = solph.components.OffsetConverter( + label="offset converter", + inputs={input_bus: solph.Flow()}, + outputs={ + output_bus: solph.Flow( + nonconvex=solph.NonConvex(), + nominal_value=10, + min=0.3, + ) + }, + conversion_factors={input_bus: 1}, + normed_offsets={input_bus: 0, output_bus: 0}, + ) diff --git a/tests/test_components/test_sink.py b/tests/test_components/test_sink.py new file mode 100644 index 000000000..97622a181 --- /dev/null +++ b/tests/test_components/test_sink.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +import pytest + +from oemof import solph + + +def test_multi_input_sink(): + num_in = 3 + steps = 10 + costs = -0.1 + + es = solph.EnergySystem( + timeindex=solph.create_time_index(year=2023, number=steps), + infer_last_interval=False, + ) + + for i in range(num_in): + bus_label = f"bus input {i}" + b = solph.Bus(bus_label) + es.add(b) + es.add( + solph.components.Source(f"source {i}", outputs={b: solph.Flow()}) + ) + + es.add( + solph.components.Sink( + inputs={ + es.node[f"bus input {i}"]: solph.Flow( + nominal_value=1, + variable_costs=costs, + ) + for i in range(num_in) + } + ) + ) + + model = solph.Model(es) + model.solve("cbc") + + assert ( + model.solver_results["Solver"][0]["Termination condition"] + != "infeasible" + ) + meta_results = solph.processing.meta_results(model) + + assert meta_results["objective"] == pytest.approx(num_in * steps * costs) diff --git a/tests/test_components/test_source.py b/tests/test_components/test_source.py new file mode 100644 index 000000000..16fa294fb --- /dev/null +++ b/tests/test_components/test_source.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +import pytest + +from oemof import solph + + +def test_multi_output_source(): + num_out = 3 + steps = 10 + costs = -0.1 + + es = solph.EnergySystem( + timeindex=solph.create_time_index(year=2023, number=steps), + infer_last_interval=False, + ) + + for i in range(num_out): + bus_label = f"bus input {i}" + b = solph.Bus(bus_label) + es.add(b) + es.add(solph.components.Sink(f"source {i}", inputs={b: solph.Flow()})) + + es.add( + solph.components.Source( + outputs={ + es.node[f"bus input {i}"]: solph.Flow( + nominal_value=1, + variable_costs=costs, + ) + for i in range(num_out) + } + ) + ) + + model = solph.Model(es) + model.solve("cbc") + + assert ( + model.solver_results["Solver"][0]["Termination condition"] + != "infeasible" + ) + meta_results = solph.processing.meta_results(model) + + assert meta_results["objective"] == pytest.approx(num_out * steps * costs) diff --git a/tests/test_components/test_storage.py b/tests/test_components/test_storage.py new file mode 100644 index 000000000..21c5e1f26 --- /dev/null +++ b/tests/test_components/test_storage.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +import numpy as np +import pytest + +from oemof import solph + + +def test_relative_losses(): + cases = [ + {"number": 500, "interval": 2}, + {"number": 1000, "interval": 1}, + {"number": 2000, "interval": 0.5}, + ] + + for case in cases: + es = solph.EnergySystem( + timeindex=solph.create_time_index( + year=2023, number=case["number"], interval=case["interval"] + ), + infer_last_interval=True, + ) + + bus = solph.Bus("slack_bus", balanced=False) + es.add(bus) + + storage = solph.components.GenericStorage( + "storage", + inputs={bus: solph.Flow(variable_costs=1)}, + outputs={bus: solph.Flow(variable_costs=1)}, + nominal_storage_capacity=10, + initial_storage_level=1, + loss_rate=0.004125876075, # half life of one week + ) + es.add(storage) + + model = solph.Model(es) + model.solve("cbc") + + result = solph.processing.results(model)[(storage, None)]["sequences"][ + "storage_content" + ] + case["result"] = np.array(result) + + for i in range(500): + assert ( + cases[0]["result"][i] + == pytest.approx(cases[1]["result"][2 * i]) + == pytest.approx(cases[2]["result"][4 * i]) + ) diff --git a/tests/test_constraints_module.py b/tests/test_constraints_module.py index e28889a55..82b696474 100644 --- a/tests/test_constraints_module.py +++ b/tests/test_constraints_module.py @@ -1,10 +1,11 @@ import pandas as pd +import pytest from oemof import solph -def test_special(): - date_time_index = pd.date_range("1/1/2012", periods=5, freq="H") +def test_integral_limit_wrapper(): + date_time_index = pd.date_range("1/1/2012", periods=5, freq="h") energysystem = solph.EnergySystem( timeindex=date_time_index, infer_last_interval=True, @@ -22,13 +23,28 @@ def test_special(): flow_with_keyword = { (src1, bel): flow1, } - solph.constraints.generic_integral_limit( - model, "my_factor", flow_with_keyword, limit=777 + with pytest.warns(FutureWarning): + solph.constraints.generic_integral_limit( + model, "my_factor", flow_with_keyword, limit=777 + ) + + +def test_limetless_limit(): + date_time_index = pd.date_range("1/1/2012", periods=5, freq="h") + energysystem = solph.EnergySystem( + timeindex=date_time_index, + infer_last_interval=True, ) + model = solph.Model(energysystem) + with pytest.raises( + ValueError, + match="At least one of upper_limit and lower_limit", + ): + solph.constraints.generic_integral_limit(model, "my_factor") def test_something_else(): - date_time_index = pd.date_range("1/1/2012", periods=5, freq="H") + date_time_index = pd.date_range("1/1/2012", periods=5, freq="h") energysystem = solph.EnergySystem( timeindex=date_time_index, infer_last_interval=True ) diff --git a/tests/test_energy_system.py b/tests/test_energy_system.py index d4a9b0cf4..77833087b 100644 --- a/tests/test_energy_system.py +++ b/tests/test_energy_system.py @@ -22,20 +22,20 @@ ) def test_add_periods(): """test method _add_periods of energy system""" - timeindex = pd.date_range(start="2012-01-01", periods=10000, freq="H") + timeindex = pd.date_range(start="2012-01-01", periods=10000, freq="h") periods = [ - pd.date_range(start="2012-01-01", periods=8784, freq="H"), - pd.date_range(start="2013-01-01", periods=1217, freq="H"), + pd.date_range(start="2012-01-01", periods=8784, freq="h"), + pd.date_range(start="2013-01-01", periods=1217, freq="h"), ] es = EnergySystem( timeindex=timeindex, periods=periods, infer_last_interval=True ) assert len(es.periods) == 2 assert es.periods[0].equals( - pd.date_range(start="2012-01-01", periods=8784, freq="H") + pd.date_range(start="2012-01-01", periods=8784, freq="h") ) assert es.periods[1].equals( - pd.date_range(start="2013-01-01", periods=1217, freq="H") + pd.date_range(start="2013-01-01", periods=1217, freq="h") ) @@ -48,9 +48,9 @@ def test_add_periods(): ) def test_extract_periods_years(): """test method _extract_periods_years of energy system""" - t_idx_1 = pd.date_range("1/1/2020", periods=3, freq="H").to_series() - t_idx_2 = pd.date_range("1/1/2041", periods=3, freq="H").to_series() - t_idx_3 = pd.date_range("1/1/2050", periods=3, freq="H").to_series() + t_idx_1 = pd.date_range("1/1/2020", periods=3, freq="h").to_series() + t_idx_2 = pd.date_range("1/1/2041", periods=3, freq="h").to_series() + t_idx_3 = pd.date_range("1/1/2050", periods=3, freq="h").to_series() timeindex = pd.concat([t_idx_1, t_idx_2, t_idx_3]).index periods = [t_idx_1, t_idx_2, t_idx_3] es = EnergySystem( diff --git a/tests/test_models.py b/tests/test_models.py index d450d887a..3f3e05d52 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -108,61 +108,3 @@ def test_multi_period_default_discount_rate(): with warnings.catch_warnings(record=True) as w: solph.Model(es) assert msg in str(w[0].message) - - -def test_cellular_structure_detection(): - """Test flag creation if list is passed as energysystem to model""" - timeindex = pd.date_range(start="2020-01-01", periods=1, freq="H") - es = solph.EnergySystem(timeindex=timeindex, infer_last_interval=True) - ec_1 = solph.EnergySystem(timeindex=timeindex, infer_last_interval=True) - ec_2 = solph.EnergySystem(timeindex=timeindex, infer_last_interval=True) - m = solph.Model(energysystem=[es, ec_1, ec_2]) - assert m.is_cellular - - -def test_sub_cell_node_consideration(): - """ - Test if the nodes of sub-cells are considered for cellular - energysystems. - """ - timeindex = pd.date_range(start="2020-01-01", periods=1, freq="H") - es = solph.EnergySystem(timeindex=timeindex, infer_last_interval=True) - ec_1 = solph.EnergySystem(timeindex=timeindex, infer_last_interval=True) - bus_es = solph.buses.Bus(label="bus_es") - bus_ec_1 = solph.buses.Bus(label="bus_ec_1") - es.add(bus_es) - ec_1.add(bus_ec_1) - m = solph.Model(energysystem=[es, ec_1]) - assert bus_ec_1 in m.nodes - - -def test_sub_cell_flow_consideration(): - """ - Test if the flows of sub-cells are considered for cellular - energysystems. - """ - timeindex = pd.date_range(start="2020-01-01", periods=1, freq="H") - es = solph.EnergySystem(timeindex=timeindex, infer_last_interval=True) - ec_1 = solph.EnergySystem(timeindex=timeindex, infer_last_interval=True) - bus_es = solph.buses.Bus(label="bus_es") - bus_ec_1 = solph.buses.Bus(label="bus_ec_1") - es.add(bus_es) - ec_1.add(bus_ec_1) - - connector_ec_1 = solph.buses.Bus( - label="connector_ec_1", - inputs={ - bus_es: solph.flows.Flow(), - bus_ec_1: solph.flows.Flow(), - }, - outputs={ - bus_es: solph.flows.Flow(), - bus_ec_1: solph.flows.Flow(), - }, - ) - es.add(connector_ec_1) - - test_flow = [io for io in ec_1.flows().keys()][0] - - m = solph.Model(energysystem=[es, ec_1]) - assert test_flow in m.FLOWS diff --git a/tests/test_non_equidistant_time_index.py b/tests/test_non_equidistant_time_index.py index d4f3592f3..1b68df738 100644 --- a/tests/test_non_equidistant_time_index.py +++ b/tests/test_non_equidistant_time_index.py @@ -24,7 +24,7 @@ class TestParameterResult: @classmethod def setup_class(cls): - dtindex1 = pd.date_range("1/1/2012", periods=24, freq="H") + dtindex1 = pd.date_range("1/1/2012", periods=24, freq="h") dtindex2 = pd.date_range("1/2/2012", periods=49, freq="30min") dtindex = dtindex1.union(dtindex2) es = EnergySystem(timeindex=dtindex, infer_last_interval=False) diff --git a/tests/test_options.py b/tests/test_options.py index a0700c329..2b26b9d2f 100644 --- a/tests/test_options.py +++ b/tests/test_options.py @@ -6,6 +6,7 @@ SPDX-License-Identifier: MIT """ + import pytest from oemof import solph @@ -15,6 +16,4 @@ def test_check_age_and_lifetime(): """Check error being thrown if age > lifetime""" msg = "A unit's age must be smaller than its expected lifetime." with pytest.raises(AttributeError, match=msg): - solph.components.Sink( - nominal_value=solph.Investment(age=41, lifetime=40) - ) + solph.Flow(nominal_value=solph.Investment(age=41, lifetime=40)) diff --git a/tests/test_outputlib/__init__.py b/tests/test_outputlib/__init__.py index 752119194..5e86927e3 100644 --- a/tests/test_outputlib/__init__.py +++ b/tests/test_outputlib/__init__.py @@ -122,7 +122,7 @@ conversion_factors={bel: 1 / 3, b_heat_source: (cop - 1) / cop}, ) -datetimeindex = pd.date_range("1/1/2012", periods=24, freq="H") +datetimeindex = pd.date_range("1/1/2012", periods=24, freq="h") energysystem = EnergySystem(timeindex=datetimeindex, infer_last_interval=True) energysystem.add( bcoal, diff --git a/tests/test_plumbing.py b/tests/test_plumbing.py index 4ed99c110..b51187be8 100644 --- a/tests/test_plumbing.py +++ b/tests/test_plumbing.py @@ -6,34 +6,60 @@ SPDX-License-Identifier: MIT """ +import numpy as np import pytest +from oemof.solph._plumbing import _FakeSequence from oemof.solph._plumbing import sequence -def test_sequence(): - seq0 = sequence(0) - assert seq0[0] == 0 - assert len(seq0) == 1 +def test_fake_sequence(): + seq0 = _FakeSequence(42) + assert seq0[0] == 42 + assert seq0.size is None + + assert seq0[10] == 42 + assert seq0.size is None + + assert seq0.max() == 42 + assert seq0.min() == 42 + assert seq0.value == 42 + assert seq0.sum() == np.inf + + assert str(seq0) == "[42, 42, ..., 42]" - assert seq0[10] == 0 - assert len(seq0) == 11 + with pytest.raises(TypeError): + seq0.to_numpy() + assert (seq0.to_numpy(length=5) == np.array(5 * [42])).all() - assert max(seq0) == 0 + with pytest.raises(TypeError): + len(seq0) - seq10 = sequence(10) - assert max(seq10) == 10 + seq0.size = 2 + assert seq0.size == 2 + assert len(seq0) == 2 - assert seq10[0] == 10 - assert len(seq10) == 1 + assert seq0.max() == 42 + assert seq0.min() == 42 + assert seq0.value == 42 + assert seq0.sum() == 84 - assert seq10[10] == 10 - assert len(seq10) == 11 + assert str(seq0) == "[42, 42]" + + assert (seq0.to_numpy() == np.array(2 * [42])).all() + assert (seq0.to_numpy(length=5) == np.array(5 * [42])).all() + + +def test_sequence(): + seq0 = sequence(0) + assert isinstance(seq0, _FakeSequence) + assert seq0.value == 0 + assert seq0.size is None - seq12 = sequence([1, 3]) - assert max(seq12) == 3 - assert seq12[0] == 1 - assert seq12[1] == 3 + seq13 = sequence([1, 3]) + assert isinstance(seq13, np.ndarray) + assert (seq13 == np.array([1, 3])).all() - with pytest.raises(IndexError): - _ = seq12[2] + seq_ab = sequence("ab") + assert isinstance(seq_ab, str) + assert seq_ab == "ab" diff --git a/tests/test_processing.py b/tests/test_processing.py index c7d9d5842..c7b93c900 100644 --- a/tests/test_processing.py +++ b/tests/test_processing.py @@ -34,7 +34,7 @@ def setup_class(cls): timeindex=pandas.date_range( "2016-01-01", periods=cls.period, - freq="H", + freq="h", ), infer_last_interval=True, ) @@ -290,7 +290,7 @@ def test_multiindex_sequences(self): def test_error_from_nan_values(self): trsf = self.es.groups["diesel"] bus = self.es.groups["b_el1"] - self.mod.flow[trsf, bus, 0, 5] = float("nan") + self.mod.flow[trsf, bus, 5] = float("nan") with pytest.raises(ValueError): processing.results(self.mod) diff --git a/tests/test_scripts/test_solph/test_connect_invest/test_connect_invest.py b/tests/test_scripts/test_solph/test_connect_invest/test_connect_invest.py index 498261204..a409177fb 100644 --- a/tests/test_scripts/test_solph/test_connect_invest/test_connect_invest.py +++ b/tests/test_scripts/test_solph/test_connect_invest/test_connect_invest.py @@ -28,7 +28,7 @@ def test_connect_invest(): - date_time_index = pd.date_range("1/1/2012", periods=24 * 7, freq="H") + date_time_index = pd.date_range("1/1/2012", periods=24 * 7, freq="h") es = EnergySystem(timeindex=date_time_index, infer_last_interval=True) diff --git a/tests/test_scripts/test_solph/test_flexible_modelling/test_add_constraints.py b/tests/test_scripts/test_solph/test_flexible_modelling/test_add_constraints.py index 7851f9d52..01a63e426 100644 --- a/tests/test_scripts/test_solph/test_flexible_modelling/test_add_constraints.py +++ b/tests/test_scripts/test_solph/test_flexible_modelling/test_add_constraints.py @@ -32,7 +32,7 @@ def test_add_constraints_example(solver="cbc", nologg=False): # ##### creating an oemof solph optimization model, nothing special here ## # create an energy system object for the oemof solph nodes es = EnergySystem( - timeindex=pd.date_range("1/1/2012", periods=4, freq="H"), + timeindex=pd.date_range("1/1/2012", periods=4, freq="h"), infer_last_interval=True, ) @@ -102,26 +102,26 @@ def test_add_constraints_example(solver="cbc", nologg=False): # add the sub-model to the oemof Model instance om.add_component("MyBlock", myblock) - def _inflow_share_rule(m, si, e, p, ti): + def _inflow_share_rule(m, si, e, ti): """pyomo rule definition: Here we can use all objects from the block or the om object, in this case we don't need anything from the block except the newly defined set MYFLOWS. """ - expr = om.flow[si, e, p, ti] >= om.flows[si, e].outflow_share[ - ti - ] * sum(om.flow[i, o, p, ti] for (i, o) in om.FLOWS if o == e) + expr = om.flow[si, e, ti] >= om.flows[si, e].outflow_share[ti] * sum( + om.flow[i, o, ti] for (i, o) in om.FLOWS if o == e + ) return expr myblock.inflow_share = po.Constraint( - myblock.MYFLOWS, om.TIMEINDEX, rule=_inflow_share_rule + myblock.MYFLOWS, om.TIMESTEPS, rule=_inflow_share_rule ) # add emission constraint myblock.emission_constr = po.Constraint( expr=( sum( - om.flow[i, o, p, t] + om.flow[i, o, t] for (i, o) in myblock.COMMODITYFLOWS - for p, t in om.TIMEINDEX + for t in om.TIMESTEPS ) <= emission_limit ) diff --git a/tests/test_scripts/test_solph/test_generic_caes/test_generic_caes.py b/tests/test_scripts/test_solph/test_generic_caes/test_generic_caes.py index 335e30964..dc40286cb 100644 --- a/tests/test_scripts/test_solph/test_generic_caes/test_generic_caes.py +++ b/tests/test_scripts/test_solph/test_generic_caes/test_generic_caes.py @@ -37,7 +37,7 @@ def test_gen_caes(): periods = len(data) - 1 # create an energy system - idx = pd.date_range("1/1/2017", periods=periods, freq="H") + idx = pd.date_range("1/1/2017", periods=periods, freq="h") es = EnergySystem(timeindex=idx, infer_last_interval=True) # resources diff --git a/tests/test_scripts/test_solph/test_generic_chp/test_generic_chp.py b/tests/test_scripts/test_solph/test_generic_chp/test_generic_chp.py index 910c83532..6c9f8c423 100644 --- a/tests/test_scripts/test_solph/test_generic_chp/test_generic_chp.py +++ b/tests/test_scripts/test_solph/test_generic_chp/test_generic_chp.py @@ -31,7 +31,7 @@ def test_gen_chp(): periods = len(data) - 1 # create an energy system - idx = pd.date_range("1/1/2017", periods=periods, freq="H") + idx = pd.date_range("1/1/2017", periods=periods, freq="h") es = solph.EnergySystem(timeindex=idx, infer_last_interval=True) # resources diff --git a/tests/test_scripts/test_solph/test_invest_fix_flow/test_simple_invest_fixed.py b/tests/test_scripts/test_solph/test_invest_fix_flow/test_simple_invest_fixed.py index 8f2eb1d71..1a025b9a6 100644 --- a/tests/test_scripts/test_solph/test_invest_fix_flow/test_simple_invest_fixed.py +++ b/tests/test_scripts/test_solph/test_invest_fix_flow/test_simple_invest_fixed.py @@ -60,7 +60,7 @@ def test_dispatch_fix_example(solver="cbc", periods=10): inputs={bel: Flow(nominal_value=85, fix=data["demand_el"])}, ) - datetimeindex = pd.date_range("1/1/2012", periods=periods, freq="H") + datetimeindex = pd.date_range("1/1/2012", periods=periods, freq="h") energysystem = EnergySystem( timeindex=datetimeindex, infer_last_interval=True diff --git a/tests/test_scripts/test_solph/test_lopf/test_lopf.py b/tests/test_scripts/test_solph/test_lopf/test_lopf.py index 26b2a1fa6..e831734a4 100644 --- a/tests/test_scripts/test_solph/test_lopf/test_lopf.py +++ b/tests/test_scripts/test_solph/test_lopf/test_lopf.py @@ -34,7 +34,7 @@ def test_lopf(solver="cbc"): logging.info("Initialize the energy system") # create time index for 192 hours in May. - date_time_index = pd.date_range("5/5/2012", periods=1, freq="H") + date_time_index = pd.date_range("5/5/2012", periods=1, freq="h") es = EnergySystem(timeindex=date_time_index, infer_last_interval=True) ########################################################################## diff --git a/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_dispatch_model.py b/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_dispatch_model.py index 9b1ceef27..c61952720 100644 --- a/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_dispatch_model.py +++ b/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_dispatch_model.py @@ -36,9 +36,9 @@ def test_multi_period_dispatch_model(solver="cbc"): """Test a simple multi_period dispatch model""" - t_idx_1 = pd.date_range("1/1/2020", periods=3, freq="H") - t_idx_2 = pd.date_range("1/1/2030", periods=3, freq="H") - t_idx_3 = pd.date_range("1/1/2040", periods=3, freq="H") + t_idx_1 = pd.date_range("1/1/2020", periods=3, freq="h") + t_idx_2 = pd.date_range("1/1/2030", periods=3, freq="h") + t_idx_3 = pd.date_range("1/1/2040", periods=3, freq="h") # Create an overall timeindex t_idx_1_series = pd.Series(index=t_idx_1, dtype="float64") diff --git a/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_investment_model.py b/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_investment_model.py index e8d36f7ce..43c45834b 100644 --- a/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_investment_model.py +++ b/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_investment_model.py @@ -39,9 +39,9 @@ def test_multi_period_investment_model(solver="cbc"): for multiple SinkDSM approaches""" for approach in ["oemof", "DLR", "DIW"]: - t_idx_1 = pd.date_range("1/1/2020", periods=3, freq="H") - t_idx_2 = pd.date_range("1/1/2030", periods=3, freq="H") - t_idx_3 = pd.date_range("1/1/2040", periods=3, freq="H") + t_idx_1 = pd.date_range("1/1/2020", periods=3, freq="h") + t_idx_2 = pd.date_range("1/1/2030", periods=3, freq="h") + t_idx_3 = pd.date_range("1/1/2040", periods=3, freq="h") # Create an overall timeindex t_idx_1_series = pd.Series(index=t_idx_1, dtype="float64") diff --git a/tests/test_scripts/test_solph/test_piecewiselineartransformer/test_piecewiselineartransformer.py b/tests/test_scripts/test_solph/test_piecewiselineartransformer/test_piecewiselineartransformer.py index 41b7a60b1..64823a6b9 100644 --- a/tests/test_scripts/test_solph/test_piecewiselineartransformer/test_piecewiselineartransformer.py +++ b/tests/test_scripts/test_solph/test_piecewiselineartransformer/test_piecewiselineartransformer.py @@ -26,7 +26,7 @@ def test_pwltf(): # Set timeindex and create data periods = 20 - datetimeindex = pd.date_range("1/1/2019", periods=periods, freq="H") + datetimeindex = pd.date_range("1/1/2019", periods=periods, freq="h") step = 5 demand = np.arange(0, step * periods, step) diff --git a/tests/test_scripts/test_solph/test_simple_model/test_simple_dispatch.py b/tests/test_scripts/test_solph/test_simple_model/test_simple_dispatch.py index d7fc978ec..e8d12b264 100644 --- a/tests/test_scripts/test_solph/test_simple_model/test_simple_dispatch.py +++ b/tests/test_scripts/test_solph/test_simple_model/test_simple_dispatch.py @@ -125,7 +125,7 @@ def test_dispatch_example(solver="cbc", periods=24 * 5): conversion_factors={bel: 1 / 3, b_heat_source: (cop - 1) / cop}, ) - datetimeindex = pd.date_range("1/1/2012", periods=periods, freq="H") + datetimeindex = pd.date_range("1/1/2012", periods=periods, freq="h") energysystem = EnergySystem( timeindex=datetimeindex, infer_last_interval=True ) diff --git a/tests/test_scripts/test_solph/test_simple_model/test_simple_invest.py b/tests/test_scripts/test_solph/test_simple_model/test_simple_invest.py index dcefb11e8..3634406f3 100644 --- a/tests/test_scripts/test_solph/test_simple_model/test_simple_invest.py +++ b/tests/test_scripts/test_solph/test_simple_model/test_simple_invest.py @@ -141,7 +141,7 @@ def test_dispatch_example(solver="cbc", periods=24 * 5): conversion_factors={bel: 1 / 3, b_heat_source: (cop - 1) / cop}, ) - datetimeindex = pd.date_range("1/1/2012", periods=periods, freq="H") + datetimeindex = pd.date_range("1/1/2012", periods=periods, freq="h") energysystem = EnergySystem( timeindex=datetimeindex, infer_last_interval=True ) diff --git a/tests/test_scripts/test_solph/test_storage_investment/test_invest_storage_regression.py b/tests/test_scripts/test_solph/test_storage_investment/test_invest_storage_regression.py index 1faa13677..b33f915e5 100644 --- a/tests/test_scripts/test_solph/test_storage_investment/test_invest_storage_regression.py +++ b/tests/test_scripts/test_solph/test_storage_investment/test_invest_storage_regression.py @@ -23,7 +23,7 @@ def test_regression_investment_storage(solver="cbc"): """ logging.info("Initialize the energy system") - date_time_index = pd.date_range("1/1/2012", periods=4, freq="H") + date_time_index = pd.date_range("1/1/2012", periods=4, freq="h") energysystem = solph.EnergySystem( timeindex=date_time_index, infer_last_interval=True diff --git a/tests/test_scripts/test_solph/test_storage_investment/test_storage_investment.py b/tests/test_scripts/test_solph/test_storage_investment/test_storage_investment.py index 3d89bde91..e67bec253 100644 --- a/tests/test_scripts/test_solph/test_storage_investment/test_storage_investment.py +++ b/tests/test_scripts/test_solph/test_storage_investment/test_storage_investment.py @@ -54,7 +54,7 @@ def test_optimise_storage_size( global PP_GAS logging.info("Initialize the energy system") - date_time_index = pd.date_range("1/1/2012", periods=400, freq="H") + date_time_index = pd.date_range("1/1/2012", periods=400, freq="h") es = solph.EnergySystem( timeindex=date_time_index, diff --git a/tests/test_scripts/test_solph/test_storage_investment/test_storage_with_tuple_label.py b/tests/test_scripts/test_solph/test_storage_investment/test_storage_with_tuple_label.py index 998373fac..7dea33903 100644 --- a/tests/test_scripts/test_solph/test_storage_investment/test_storage_with_tuple_label.py +++ b/tests/test_scripts/test_solph/test_storage_investment/test_storage_with_tuple_label.py @@ -63,7 +63,7 @@ def test_tuples_as_labels_example( filename="storage_investment.csv", solver="cbc" ): logging.info("Initialize the energy system") - date_time_index = pd.date_range("1/1/2012", periods=40, freq="H") + date_time_index = pd.date_range("1/1/2012", periods=40, freq="h") energysystem = solph.EnergySystem( timeindex=date_time_index, @@ -217,8 +217,8 @@ def test_tuples_as_labels_example( # Problem results assert int(meta["problem"]["Lower bound"]) == 37819254 assert int(meta["problem"]["Upper bound"]) == 37819254 - assert meta["problem"]["Number of variables"] == 280 - assert meta["problem"]["Number of constraints"] == 162 + assert meta["problem"]["Number of variables"] == 320 + assert meta["problem"]["Number of constraints"] == 202 assert meta["problem"]["Number of nonzeros"] == 116 assert meta["problem"]["Number of objectives"] == 1 assert str(meta["problem"]["Sense"]) == "minimize" diff --git a/tests/test_scripts/test_solph/test_variable_chp/test_variable_chp.py b/tests/test_scripts/test_solph/test_variable_chp/test_variable_chp.py index 9753e3684..4b790bd22 100644 --- a/tests/test_scripts/test_solph/test_variable_chp/test_variable_chp.py +++ b/tests/test_scripts/test_solph/test_variable_chp/test_variable_chp.py @@ -26,7 +26,7 @@ def test_variable_chp(filename="variable_chp.csv", solver="cbc"): logging.info("Initialize the energy system") # create time index for 192 hours in May. - date_time_index = pd.date_range("5/5/2012", periods=5, freq="H") + date_time_index = pd.date_range("5/5/2012", periods=5, freq="h") energysystem = solph.EnergySystem( timeindex=date_time_index, infer_last_interval=True ) @@ -195,8 +195,7 @@ def test_variable_chp(filename="variable_chp.csv", solver="cbc"): parameter[(energysystem.groups["('fixed_chp', 'gas')"], None)][ "scalars" ]["conversion_factors_('electricity', 2)"] - == 0.3 - ) + ) == pytest.approx(0.3) # objective function assert solph.processing.meta_results(om)["objective"] == pytest.approx( diff --git a/tests/test_solph_network_classes.py b/tests/test_solph_network_classes.py index 287c6740c..46f032da1 100644 --- a/tests/test_solph_network_classes.py +++ b/tests/test_solph_network_classes.py @@ -78,7 +78,10 @@ def test_transformer_wrapper(): def test_offset_transformer_wrapper(): with pytest.warns(FutureWarning): - solph.components.OffsetTransformer(inputs={}, outputs={}) + solph.components.OffsetTransformer( + inputs={solph.Bus("bus"): solph.Flow(nonconvex=solph.NonConvex())}, + outputs={}, + ) def test_wrong_combination_invest_and_nominal_value(): diff --git a/tests/test_time_index.py b/tests/test_time_index.py index f5a7aaf03..08d2b56cb 100644 --- a/tests/test_time_index.py +++ b/tests/test_time_index.py @@ -16,28 +16,28 @@ def test_energysystem_with_datetimeindex_infer_last_interval(): """Test EnergySystem with DatetimeIndex (equidistant)""" - datetimeindex = pd.date_range("1/1/2012", periods=24, freq="H") + datetimeindex = pd.date_range("1/1/2012", periods=24, freq="h") es = solph.EnergySystem(timeindex=datetimeindex, infer_last_interval=True) assert es.timeincrement[1] == 1.0 assert es.timeincrement.sum() == 24 def test_energysystem_with_datetimeindex(): - datetimeindex = pd.date_range("1/1/2012", periods=24, freq="H") + datetimeindex = pd.date_range("1/1/2012", periods=24, freq="h") es = solph.EnergySystem(timeindex=datetimeindex, infer_last_interval=False) assert es.timeincrement[1] == 1.0 assert es.timeincrement.sum() == 23 def test_energysystem_interval_inference_warning(): - datetimeindex = pd.date_range("1/1/2012", periods=24, freq="H") + datetimeindex = pd.date_range("1/1/2012", periods=24, freq="h") with pytest.warns(FutureWarning): _ = solph.EnergySystem(timeindex=datetimeindex) def test_energysystem_with_datetimeindex_non_equidistant_infer_last_interval(): """Test EnergySystem with DatetimeIndex (non-equidistant)""" - dtindex1 = pd.date_range("1/1/2012", periods=24, freq="H") + dtindex1 = pd.date_range("1/1/2012", periods=24, freq="h") dtindex2 = pd.date_range("1/2/2012", periods=49, freq="30min") dtindex = dtindex1.union(dtindex2) msg = ( @@ -50,7 +50,7 @@ def test_energysystem_with_datetimeindex_non_equidistant_infer_last_interval(): def test_energysystem_with_datetimeindex_non_equidistant(): """Test EnergySystem with DatetimeIndex (non-equidistant)""" - dtindex1 = pd.date_range("1/1/2012", periods=24, freq="H") + dtindex1 = pd.date_range("1/1/2012", periods=24, freq="h") dtindex2 = pd.date_range("1/2/2012", periods=49, freq="30min") dtindex = dtindex1.union(dtindex2) es = solph.EnergySystem(timeindex=dtindex, infer_last_interval=False) @@ -107,7 +107,7 @@ def test_energysystem_with_numeric_index_non_equidistant(): def test_model_timeincrement_with_valid_timeindex(): - datetimeindex = pd.date_range("1/1/2012", periods=5, freq="H") + datetimeindex = pd.date_range("1/1/2012", periods=5, freq="h") es = solph.EnergySystem(timeindex=datetimeindex, infer_last_interval=True) m = solph._models.BaseModel(es) assert es.timeincrement.sum() == 5 @@ -129,7 +129,7 @@ def test_conflicting_time_index(): ) with pytest.raises(AttributeError, match=msg): solph.EnergySystem( - timeindex=pd.date_range("1/1/2012", periods=2, freq="H"), + timeindex=pd.date_range("1/1/2012", periods=2, freq="h"), timeincrement=[1, 2, 3, 4], infer_last_interval=False, ) @@ -147,7 +147,7 @@ def test_missing_timeincrement(): def test_overwrite_timeincrement(): es = solph.EnergySystem( - timeindex=pd.date_range("1/1/2012", periods=2, freq="H"), + timeindex=pd.date_range("1/1/2012", periods=2, freq="h"), infer_last_interval=True, ) assert es.timeincrement[0] == 1 @@ -163,8 +163,8 @@ def test_model_timeincrement_list(): def test_nonequ_inconsistent_timeindex(): # with pytest.raises(IndexError): - timeindex_one = pd.date_range("1/1/2019", periods=1, freq="H") - timeindex_hourly = pd.date_range("1/1/2019", periods=3, freq="H") + timeindex_one = pd.date_range("1/1/2019", periods=1, freq="h") + timeindex_hourly = pd.date_range("1/1/2019", periods=3, freq="h") timeindex_45mins = pd.date_range("1/1/2019", periods=2, freq="45min") timeindex1 = timeindex_one.append(timeindex_hourly) timeindex2 = timeindex_hourly.append([timeindex_45mins]) diff --git a/tests/test_warnings.py b/tests/test_warnings.py index 446739277..6b66f961d 100644 --- a/tests/test_warnings.py +++ b/tests/test_warnings.py @@ -28,50 +28,6 @@ def warning_fixture(): warnings.simplefilter(action="ignore", category=FutureWarning) -def test_that_the_sink_errors_actually_get_raised(warning_fixture): - """Sink doesn't warn about potentially erroneous usage.""" - look_out = solph.Bus() - with pytest.raises( - TypeError, match="got an unexpected keyword argument 'outputs'" - ): - solph.components.Sink(label="test_sink", outputs={look_out: "A typo!"}) - - msg = ( - "A Sink is designed to have one input but you provided 0." - " If this is intended and you know what you are doing you can " - "disable the SuspiciousUsageWarning globally." - ) - with warnings.catch_warnings(record=True) as w: - solph.components.Sink( - label="no input", - ) - assert len(w) == 1 - assert msg in str(w[-1].message) - - -def test_that_the_source_warnings_actually_get_raised(warning_fixture): - """Source doesn't warn about potentially erroneous usage.""" - look_out = solph.Bus() - with pytest.raises( - TypeError, match="got an unexpected keyword argument 'inputs'" - ): - solph.components.Source( - label="test_source", inputs={look_out: "A typo!"} - ) - - msg = ( - "A Source is designed to have one output but you provided 0." - " If this is intended and you know what you are doing you can " - "disable the SuspiciousUsageWarning globally." - ) - with warnings.catch_warnings(record=True) as w: - solph.components.Source( - label="no output", - ) - assert len(w) == 1 - assert msg in str(w[-1].message) - - def test_that_the_converter_warnings_actually_get_raised(warning_fixture): """Converter doesn't warn about potentially erroneous usage.""" look_out = solph.Bus() @@ -173,7 +129,7 @@ def test_link_raise_key_error_in_Linkblock(warning_fixture): """Link raises KeyError if conversion factors don't match the connected busses.""" - date_time_index = pd.date_range("1/1/2012", periods=3, freq="H") + date_time_index = pd.date_range("1/1/2012", periods=3, freq="h") energysystem = solph.EnergySystem( timeindex=date_time_index, infer_last_interval=True, diff --git a/tox.ini b/tox.ini index b1fe2caf9..bbbaac9c0 100644 --- a/tox.ini +++ b/tox.ini @@ -3,17 +3,17 @@ envlist = clean, check, docs, - py38, py39, py310, + py311, py3-nocov, report [gh-actions] python = - 3.8: py38 3.9: py39 3.10: py310 + 3.11: py311 [testenv] basepython = @@ -53,8 +53,8 @@ commands = python -m build . twine check dist/oemof* check-manifest {toxinidir} - flake8 src tests setup.py - isort --check-only --profile black --diff src tests setup.py + flake8 src tests + isort --check-only --profile black --diff src tests [testenv:docs] @@ -102,8 +102,8 @@ deps = {[testenv]deps} pytest-cov -[testenv:py38] -basepython = {env:TOXPYTHON:python3.8} +[testenv:py311] +basepython = {env:TOXPYTHON:python3.11} setenv = {[testenv]setenv} usedevelop = true @@ -113,6 +113,7 @@ deps = {[testenv]deps} pytest-cov + [testenv:py39] basepython = {env:TOXPYTHON:python3.9} setenv = @@ -124,5 +125,16 @@ deps = {[testenv]deps} pytest-cov +[testenv:py38] +basepython = {env:TOXPYTHON:python3.8} +setenv = + {[testenv]setenv} +usedevelop = true +commands = + {posargs:pytest --cov --cov-report=term-missing -vv} +deps = + {[testenv]deps} + pytest-cov + [testenv:py3-nocov] basepython = {env:TOXPYTHON:python3}