Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Renewable + PEM Parameterized Bidder #1407

Merged
merged 38 commits into from
Aug 12, 2024
Merged
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
fd8a16d
improve the PEM parameterized bidder
Xinhe-Chen May 2, 2024
ac96407
improve pem bidder and add some tests
Xinhe-Chen May 7, 2024
a9db27d
update the logic and fix bugs
Xinhe-Chen May 9, 2024
681e2b5
Merge branch 'main' into param_bidder
Xinhe-Chen May 9, 2024
7477b28
change the test file names
Xinhe-Chen May 9, 2024
3d59d6b
Merge branch 'main' of https://github.com/IDAES/idaes-pse into param_…
Xinhe-Chen May 9, 2024
880fe69
Merge branch 'param_bidder' of https://github.com/Xinhe-Chen/idaes-ps…
Xinhe-Chen May 9, 2024
f30b2b5
use black
Xinhe-Chen May 9, 2024
351bde0
update tests
Xinhe-Chen May 9, 2024
9e779ae
Merge branch 'main' into param_bidder
Xinhe-Chen May 14, 2024
f6ac3e0
update tests
Xinhe-Chen May 14, 2024
5d9a205
update black and test
Xinhe-Chen May 14, 2024
0011b8f
add more tests
Xinhe-Chen May 14, 2024
aed28b8
move the docs to this branch
Xinhe-Chen May 14, 2024
fba6171
update docs
Xinhe-Chen May 16, 2024
92e4b5e
update the docs and code comments
Xinhe-Chen May 16, 2024
a0c11be
updates
Xinhe-Chen May 16, 2024
4639ecc
fix doc typos
Xinhe-Chen May 16, 2024
a034650
Merge branch 'main' into param_bidder
adowling2 May 28, 2024
59cc8b0
update the comments for tests
Xinhe-Chen May 29, 2024
9d9cc43
Merge branch 'param_bidder' of https://github.com/Xinhe-Chen/idaes-ps…
Xinhe-Chen May 29, 2024
531de16
Merge branch 'main' into param_bidder
Xinhe-Chen May 30, 2024
31b454c
fix typos and update bidder tests use real numbers
Xinhe-Chen Jun 18, 2024
b2551a1
use black to format codes
Xinhe-Chen Jun 18, 2024
da5f155
Merge branch 'main' into param_bidder
Xinhe-Chen Jun 25, 2024
365c72d
Merge branch 'main' into param_bidder
Xinhe-Chen Jun 27, 2024
25048f5
add/change comments as Alex suggests
Xinhe-Chen Jun 28, 2024
0e13af6
update docs
Xinhe-Chen Jun 28, 2024
4db3cac
use black to format codes
Xinhe-Chen Jun 28, 2024
a157a58
fix typos
Xinhe-Chen Jun 28, 2024
a4e9b49
fix typos
Xinhe-Chen Jul 1, 2024
31f6e46
minor change
Xinhe-Chen Jul 1, 2024
cbb7244
use logger
Xinhe-Chen Jul 9, 2024
e347b24
Merge branch 'main' into param_bidder
Xinhe-Chen Jul 9, 2024
1e2b0a0
Merge branch 'main' into param_bidder
ksbeattie Jul 19, 2024
58b2827
Merge branch 'main' into param_bidder
Xinhe-Chen Aug 1, 2024
eaf075f
use idaeslogger
Xinhe-Chen Aug 8, 2024
c22317a
update for site-packages installation
Xinhe-Chen Aug 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 159 additions & 0 deletions docs/reference_guides/apps/grid_integration/Bidder.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,155 @@ uncertain price scenario has a corresponding power output. As shown in the figur
each of these uncertain price and power output pairs formulates a segment in the
bidding curves.

Here we present a stochastic bidding model for a renewable integrated energy system (wind generator + polymer electrolyte membrane (PEM) electrolyzer).


Day-Ahead Bidding Problem for Wind + PEM IES
---------------------------------------------

The objective function is the expected profit, which equals the revenue subtract the cost.
We want to consider the revenue from the electricity market and the hydrogen market.

.. math:: \max \quad \sum_{s \in S, t \in T^{DA}}\omega_{s}[{(\pi_{t,s}^{DA}P_{t,s}^{DA} + \pi_{t,s}^{RT}(P_{t,s}^{RT}-P_{t,s}^{DA}))\Delta t + Pr^{H}m_{t,s}^{H}- c_{t,s}}] - C_{fix}

s.t.

.. math:: P_{t,s}^{DA} \leq P_{t,s}^{RT} \quad \forall t, s \quad \quad (1)
.. math:: P_{t,s} = P^{RT}_{t,s} \quad \forall t, s \quad \quad (2)
.. math:: (\pi_{t,s'}^{DA} - \pi_{t,s}^{DA})(P_{t,s'}^{DA} - P_{t,s}^{DA}) \geq 0 \quad \forall s \in S, \forall s' \in S \backslash s, \forall t \in T^{DA} \quad \quad (3)
.. math:: P_{t,s}^{DA} \leq P_{t,s}^{wind} \quad \forall t, s \quad \quad (4)
.. math:: P_{t,s}^{RT} \leq P_{t,s}^{wind} \quad \forall t, s \quad \quad (5)
.. math:: P_{t,s}^{wind} \leq f_{t} P_{max}^{wind} \quad \forall t, s \quad \quad (6)
.. math:: P_{t,s}^{DA} + P_{t,s}^{PEM} \leq P_{t, s}^{wind} \quad \forall t, s \quad \quad (7)
.. math:: P_{t,s}^{PEM} \leq P_{max}^{PEM} \quad \forall t, s \quad \quad (8)
.. math:: m_{t,s}^{H} = P_{t,s}^{PEM}C_{H}\Delta t \quad \forall t, s \quad \quad (9)
.. math:: c_{t,s} = C^{op} P_{t,s}^{PEM}\quad \forall t, s \quad \quad (10)
.. math:: C_{fix} = C_{fix}^{wind}P_{max}^{wind} + C_{fix}^{PEM}P_{max}^{PEM} \quad \quad (11)

Equation (1) requires the day-ahead offering power is less or equal to the real-time offering power
in order to avoid underbidding. Equation (2) states that the RT offering power is the same as the
IES power output to the grid. In the bidding mode, the market rules require the offering power is
non-decreasing (convex) with its marginal cost in an energy bid. This rule is represented by equation (3).
Equation (4) to (9) are process model constraints. Equation (10) calculates the operation costs for IES
and equation (11) calculate the fixed cost for IES.

**Parameters**

:math:`\omega_{s}`: Frequency of each scenario.

:math:`\pi^{DA}_{t,s}`: Day-ahead LMP forecasting from forecaster at hour t for scenario s, \$/MWh.

:math:`\pi^{RT}_{t,s}`: Real-time LMP forecasting from forecaster at hour t for scenario s, \$/MWh.

:math:`Pr^{H}`: Market price for hydrogen, \$/kg.

:math:`P_{max}^{PEM}`: PEM max capacity, MW.

:math:`f_{t}`: Wind power generation capacity factor at hour t, MW/MW.

:math:`P_{max}^{wind}`: Wind generator max capacity, MW.

:math:`C^{op}`: PEM operation cost coefficient, \$/MW.

:math:`C_{fix}^{wind}`: Wind generator fixed cost coefficient, \$/MW.

:math:`C_{fix}^{PEM}`: PEM fixed cost coefficient, \$/MW.

:math:`C_{H}`: Electricity to hydrogen conversion rate, kg/MWh.


**Variables**

:math:`P_{t,s}`: IES power output to the grid at hour t in scenario s, MW.

:math:`P_{t,s}^{DA}`: Day-ahead offering power at hour t in scenario s, MW.

:math:`P_{t,s}^{RT}`: Real-time offering power at hour t in scenario s, MW.

:math:`P_{t,s}^{wind}`: Wind power generation at hour t in scenario s, MW.

:math:`P_{t,s}^{PEM}`: Power delivered to PEM at hour t in scenario s, MW.

:math:`m_{t,s}^{H}`: Hydrogen production mass at hour t in scenario s, kg.

:math:`c_{t,s}`: IES operational cost at hour t in scenario s, \$.


Real-time Bidding Problem for Wind+PEM IES
------------------------------------------

.. math:: \max \quad \sum_{t \in T_{DA}}\hat{\pi}_{t}^{DA}\hat{P}_{t}^{DA}\Delta t + \sum_{t\in T_{RT}, s\in S}\omega_{s}[\pi_{t,s}^{RT}(P_{t,s}^{RT} -\hat{P}_{t}^{DA})\Delta t + Pr^{H}m_{t,s}^{H} - c_{t,s} - \omega_{t}^{RT} P_{t,s}^{underbid}] - C_{fix}

s.t.

.. math:: \hat{P}^{DA}_{t} \leq P_{t,s}^{RT} + P_{t,s}^{underbid} \quad \forall t, s \quad \quad (12)
.. math:: P_{t,s}^{RT} = P_{t,s} \quad \forall t, s \quad \quad (13)
.. math:: (\pi_{t,s'}^{RT} - \pi_{t,s}^{RT})(P_{t,s'}^{RT} - P_{t,s}^{RT}) \geq 0 \quad \forall s \in S, \forall s' \in S \backslash s, \forall t \in T^{RT} \quad \quad (14)
.. math:: P_{t,s}^{RT} \leq P_{t,s}^{wind} \quad \forall t, s \quad \quad (15)
.. math:: P_{t,s}^{wind} \leq f_{t}P_{wind}^{max} \quad \forall t, s \quad \quad (16)
.. math:: P_{t,s}^{RT} + P_{t,s}^{PEM} \leq P_{t,s}^{wind} \quad \forall t, s \quad \quad (17)
.. math:: P_{t,s}^{PEM} \leq P_{max}^{PEM} \quad \forall t, s \quad \quad (18)
.. math:: m_{t,s}^{H} = P_{t,s}^{PEM}C_{H}\Delta t \quad \forall t, s \quad \quad (19)
.. math:: c_{t,s} = C^{op} P_{t,s}^{PEM}\quad \forall t, s \quad \quad (20)
.. math:: C_{fix} = C_{fix}^{wind}P_{max}^{wind} + C_{fix}^{PEM}P_{max}^{PEM} \quad \quad (21)

Before the actual operations, electricity markets allow the resources to submit real-time energy bids to
correct deviations from the day-ahead market. At this time, both day-ahead LMP :math:`\hat{\pi}_{t}^{DA}`
and day-ahead dispatch level :math:`\hat{P}_{t}^{DA}` have been realized as a result of the
day-ahead market clearing. In real-time market, due to the forecaster error and some other reasons, the
real-time offering power may not realize promises that generator owner makes in the day-ahead market. We
call this 'underbidding' and underbiding energy will be penaltized by the ISO. To prevent the underbidding
and loss of revenue, we add a relaxed lower bound for the real-time offering power with a slack
variable :math:`P_{t,s}^{underbid}` for underbidding in equation (12) and penalized in the objective function.

**Parameters**

:math:`\omega_{s}`: Frequency of each scenario.

:math:`\omega_{t}^{RT}`: Penalty for underbidding at real-time at hour t, \$/MWh.

:math:`\hat{\pi}_{t}^{DA}`: Realized day-ahead energy LMP signals at hour t, \$/MWh.

:math:`\hat{P}_{t}^{DA}`: Realized day-ahead dispatch level at hour t, \$/MWH.

:math:`\pi^{RT}_{t,s}`: Real-time LMP forecasting from forecaster at hour t for scenario s, \$/MWh.

:math:`Pr^{H}`: Market price for hydrogen, \$/kg.

:math:`P^{PEM}_{max}`: PEM max capacity, MW.

:math:`f_{t}`: Wind power generation capacity factor at hour t, MW/MW.

:math:`P_{max}^{wind}`: Wind generator max capacity, MW.

:math:`C^{op}`: PEM operation cost coefficient, \$/MW.

:math:`C_{fix}^{wind}`: Wind generator fixed cost coefficient, \$/MW.

:math:`C_{fix}^{PEM}`: PEM fixed cost coefficient, \$/MW.

:math:`C_{H}`: Electricity to hydrogen conversion rate, kg/MWh.

**Variables**

:math:`P_{t,s}`: IES power output to the grid at hour t in scenario s, MW.

:math:`P_{t,s}^{underbid}`: The amount of underbidding power in real-time at hour t in scenario s, MW.

:math:`P_{t,s}^{RT}`: Real-time offering power at hour t in scenario s, MW.

:math:`P_{t,s}^{wind}`: Wind power generation at hour t in scenario s, MW.

:math:`P_{t,s}^{PEM}`: Power delivered to PEM at hour t in scenario s, MW.

:math:`m_{t,s}^{H}`: Hydrogen production mass at hour t in scenario s, kg.

:math:`c_{t,s}`: IES operational cost at hour t in scenario s, \$.

Some wind, battery, PEM models and the double-loop simulation example can be found in Dispatches GitHub repository.

https://dispatches.readthedocs.io/en/main/models/renewables/index.html

.. |example_bid| image:: images/example_bid.png
:width: 800
:alt: Alternative text
Expand All @@ -27,3 +176,13 @@ bidding curves.

.. autoclass:: SelfScheduler
:members:

PEMParametrizedBidder
============================================
The ``PEMParametrizedBidder`` bids the renewable-PEM IES at a constant price.
The logic of ``PEMParametrizedBidder`` is to reserve a part of the renewable generation
to co-prodcue the hydrogen. The reserved power can be sold at the marginal cost of the hydrogen
price.

.. autoclass:: PEMParametrizedBidder
:members:
53 changes: 53 additions & 0 deletions docs/reference_guides/apps/grid_integration/Tracker.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,59 @@ integrated energy system which consists of a thermal generator and an energy sto
The figure shows that to track the dispatch (load) the energy system can optimally
use power output from charging and discharging cycle.


Tracking Problem for Wind+PEM IES
----------------------------------

Here we present a tracking problem example for wind + PEM IES.


.. math:: \min \quad \sum_{t \in T^{RT}} (c_{t,0} + \omega_{t}(P^{+}_{t,0} + P^{-}_{t,0})) - C_{fix}

s.t.

.. math:: P_{t,0} + P_{t,0}^{-} = \hat{P}^{RT}_{t} + P^{+}_{t,0} \quad \forall t

.. math:: P_{t,0} + \hat{P}_{t,0}^{PEM} \leq \hat{P}_{wind}^{RT} \quad \forall t

.. math:: P_{t,0}^{PEM} \leq P_{max}^{PEM} \quad \forall t

.. math:: m_{t,0}^{H} = P_{t,0}^{PEM}C_{H}\Delta t \quad \forall t

.. math:: c_{t,0} = C^{op} P_{t,0}^{PEM}\quad \forall t

.. math:: C_{fix} = C_{fix}^{wind}P_{max}^{wind} + C_{fix}^{PEM}P_{max}^{PEM}

**Parameters**

:math:`\hat{P}^{RT}_{t}`: Realized real-time dispatch level at hour t, MW.

:math:`\hat{P}_{wind}^{RT}`: Realized wind generation power at hour t, MW.

:math:`P_{max}^{PEM}`: PEM max capacity, MW.

:math:`C^{op}`: PEM operation cost coefficient, \$/MW.

:math:`C_{fix}^{wind}`: Wind generator fixed cost coefficient, \$/MW.

:math:`C_{fix}^{PEM}`: PEM fixed cost coefficient, \$/MW.

:math:`C_{H}`: Electricity to hydrogen conversion rate, kg/MWh.

**Variables**

:math:`P_{t,0}`: IES power output to the grid at hour t in scenario 0, MW.

:math:`P_{t,0}^{PEM}`: Power delivered to PEM at hour t in scenario 0, MW.

:math:`P_{t,0}^{+}`: Power over-delivered by the IES to the grid at hour t in scenario 0, MW.

:math:`P_{t,0}^{-}`: Power under-delivered by the IES to the grid at hour t in scenario 0, MW.

:math:`m_{t,0}^{H}`: Hydrogen production mass at hour t in scenario 0, kg.

:math:`c_{t,0}`: IES operational cost at hour t in scenario 0, \$.

.. |tracking_example| image:: images/tracking_example.png
:width: 1200
:alt: Alternative text
Expand Down
2 changes: 1 addition & 1 deletion docs/reference_guides/apps/grid_integration/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ the operational (hours to year timescale) interactions between energy systems an
wholesale electricity markets. For more information, please look at the introduction section.

.. toctree::
:maxdepth: 2
:maxdepth: 1

Introduction
Implementation
Expand Down
Loading
Loading