Replies: 1 comment
-
|
I should add that dispatch already seems to work with circularities so hopefully we don't have to do anything here, see #794 (comment) Whether the results make sense is another question... |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
I've had a go at trying to come up with a solution for loops that doesn't involve recursion. This would only work for small loops, and only makes sense for scenarios where a single agent is able to invest in all processes that make up the loop. For example a single agent may be able to invest in processes that produce hydrogen from electricity, and electricity back from hydrogen (e.g. as a way of buffering electricity supply demand and profiting by consuming electricity when cheap and producing when expensive). If hydrogen production/consumption are uncoupled (e.g. one agent produces hydrogen from electricity and puts this on the market, then another agent buys this hydrogen to produce electricity), then investment decisions about assets producing/consuming hydrogen are made separately, so I think my approach makes less sense, although you may be able to achieve something like this by creating distinct commodities (e.g. "hydrogen_raw" and "hydrogen_for_market")
Overall, for this approach, I think we need three things:
Example
Step 1: Perform a topological sort, where strongly connected components are considered as single "loop nodes"
Step 2: Move through the investment pathway using the order defined in step 1
For this example:
(1) A normal investment step: invest in P4 to meet demands for D, which creates a demand profile for B
(2) This is a little different as this is a loop node. The goal here is to invest in P1, P2 and P3 to meet demands for B. Whereas a normal investment appraisal optimisation would have capacity/activity decision variables for a single process, this has capacity/activity variables for all three processes:
P1: A -> B
P2: B -> C
P3: C -> B
The goal is that net B supply across all three processes has to equal demand. Since there's no external demand for C, net C supply is constrained to zero (balanced according to its timeslice level). Overall, hopefully, the results of the optimisation will give us investment capacities for P1, P2 and P3, as well as a demand profile for A to be used in step (3).
In this example, since there's a single pathway through the loop, there's only one investment option, but if there was, for example, an alternative to P2 then these would be considered different investment options, i.e. your options would be P1/P2/P3 or P1/P2_alternative/P3. I guess existing assets would also be considered distinct pathways through the loop, so if you had an existing P3 asset your options would be P1/P2/P3 or P1/P2/P3_existing.
(3) If there are further pathways upstream of A we continue with investments, otherwise we're done
More complex example
This is the same as above, but also has processes consuming/producing C external to the loop
I think this is still possible. We'd just need the investing agent in step (3) to be able to consider multiple commodity demands simultaneously. I.e. the goal is to invest in either P1/P2/P3 or P5/P2/P3 to meet demands for both D and F. Some challenges around considering multiple commodity demands simultaneously, see #360
Caveats
I think if the loop is large then this may not be practical. Also, if there are many different options for each of the conversion steps in the loop (where existing assets would also be considered distinct options), then these will combine to give a potentially huge number of candidate combinations (e.g. if 10 options each for A->B, B->C and C->B, then that's 1000 combinations. For larger loops this could be astronomical).
It assumes that single agents are able to make investment decisions about all processes that make up the loop, which may obviously not be true. In some cases you may be able to get somewhere by creating distinct (/"mock") commodities. For example, if investment decisions about the B->C/C->B loop should be uncoupled from decisions about A->B (e.g. a hydrogen loop that isn't coupled to any particular energy generating technology), then maybe you could add an intermediate commodity A-(P1)->B_pre_loop-(free)->B, where the B/C loop generates demand for B_pre_loop, which is then met by P1 in a separate step. This is actually a distinction for the user to decide, so we shouldn't make inferences about what investment decisions should/shouldn't be coupled, and need to make sure users have the language to clearly express what they want. E.g. a solar farm may only be profitable if excess electricity during the day can be stored as hydrogen. If the agent investing in solar can also own the infrastructure for producing/consuming hydrogen, then the solar farm may get commissioned. That's different from some other agent buying/selling electricity from the grid to make hydrogen which may have no impact on the feasibility of some distant solar farm.
Beta Was this translation helpful? Give feedback.
All reactions