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

Bidirectional transmission in the same time step #280

Open
TDiaconu opened this issue May 25, 2020 · 3 comments
Open

Bidirectional transmission in the same time step #280

TDiaconu opened this issue May 25, 2020 · 3 comments

Comments

@TDiaconu
Copy link

The transmission constraints allow a bidirectional power flow at the same time, at the maximum capacity from region A to region B and at the maximum capacity from B to A. Therefore, a power flow two times the value of the actual transmission capacity is allowed. While this is not an optimal situation when the lines have losses, it can still happen when the lines are used as a curtailment by urbs.

My sugestion to eliminate this unwanted situation is to replace the two existing equations:

pi_in(from A to B) <= maximum capacity
and
pi_in(from B to A) <= maximum capacity

with the following equation:

pi_in(from A to B) + pi_in(from B to A) <= maximum capacity.

@maxhock
Copy link

maxhock commented Jul 5, 2021

Could you attach an example input file please as I am not aware of this issue in the existing input files.
I think some models use a defined curtailment process, so that this does not happen.

Alternatively I would assume it is fine to modify res_transmission_input_by_capacity_rule() like this:
# transmission input <= transmission capacity def res_transmission_input_by_capacity_rule(m, tm, stf, sin, sout, tra, com): return (m.e_tra_in[tm, stf, sin, sout, tra, com] + m.e_tra_in[tm, stf, sout, sin, tra, com] <= m.dt * m.cap_tra[stf, sin, sout, tra, com])

@Zhanwei-Liu
Copy link

I think the constraints mentioned above are not enough to limit possible bidirectional transmission. At least one of pi_in(from A to B) and pi_in(from B to A) equals 0 in the optimal result. We need to add a binary variable (dir) to guarantee results to meet reality. That dir is equals to 1 means the transmission direction is from A to B. That dir equals 0 means the transmission direction is from B to A. The required constraints are as follows:

  • pi_in(from A to B) <= maximum capacity * dir
  • pi_in(from B to A) <= maximum capacity * (1-dir)
    However, constraints above turn this model into a mixed integer linear programming. Generally speaking, even you don't introduce constraints above, the both of pi_in(from A to B) and pi_in(from B to A) of optimal results don't equal to 0 because this result isn't optimal.

@ojdo
Copy link
Contributor

ojdo commented Sep 5, 2022

I would even say: if your mathematically optimal solution has bidirectional flow, then the scenario is broken. There should always be another process/storage/demand avenue for some MWh to be consumed than it being "burned" in transmission losses because the energy has no other way to go. Even a near-zero (or even negative) revenue energy sell option would be a better.

This is the counter-side of the "Slack" power plant process that used to be present in most vertices, to prevent mathematically impossible scenarios, but clearly indicating that not enough other options are present.

I would therefore vote for allowing bidirectional flow, but possibly implement a warning that is emitted whenever it is present in an LP optimal solution - similar to the use of Slack power plants.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants