Can I model negative energy level in a Store component for Demand Response?

31 views
Skip to first unread message

Ties Van de Camp

unread,
May 18, 2024, 7:21:42 AMMay 18
to pypsa
Hello PyPSA community,

I have a question regarding the constraints regarding the "Store" component. I am attempting to model Demand response (Load shifting) through using a Store components with discharge and charge links in a small PyPSA-eur network. For this, i define 2 cases.

1. Delay: 
DR: decrease of load, future increase
Store: Discharge, future charge

2. Anticipation:
DR: increase in load, future decrease
Store: charge, future discharge

For both options, I have constrained the action to recover the action after L amount of timesteps, which prevents undue load recovery possible with StorageUnits.

When I apply this logic for my store, only anticipation actions occur in my optimisation. I think this has to do with constraints on the store component. However, when i inspect the linopy model, the Store components does not seem to be limited in the negative direction.

e_t = m.variables['Store-e'].loc[:,e_list] =>
[2013-01-01 00:00:00, Virtual DR store NL0 0]: Store-e[2013-01-01 00:00:00, Virtual DR store NL0 0] ∈ [-inf, inf]


example of my store level:
n.stores_t.e.loc['2013-01-01' : '2013-01-03', "Virtual DR store NL0 0"].plot() (recovery time L = 4 hrs.)
Store_level_DR.png
I would've hoped to find similar profiles in e, but below 0 for my delay cases.

Has anybody experience with including negative store levels? Many thanks in advance!

Regards



((For extra info on my DR constraints)):
DR_constraints.png

based on this paper: https://www.sciencedirect.com/science/article/pii/S0360544221027936

Ties Van de Camp

unread,
May 19, 2024, 5:02:14 AMMay 19
to pypsa
Just to be complete,  for the above results, I have already accounted for setting the e_nom_min to be negative. 
for bus in AC_index:
    n.add(
        "Store",
        f"Virtual DR store {bus}",
        bus= f"Store_bus {bus}",
        carrier="DR store",
        e_cyclic = False,
        e_nom_extendable = True,
        e_nom_min = np.inf*-1  
    )

Op zaterdag 18 mei 2024 om 13:21:42 UTC+2 schreef Ties Van de Camp:
Reply all
Reply to author
Forward
0 new messages