Могу ли я включить двухэтапное моделирование в CVXR?
Я пытаюсь смоделировать энергетическую систему, в которой есть два момента для продажи энергии. Второй момент служит для внесения некоторых корректировок в подачу питания, которая может быть дополнительной или меньшей мощностью.
Я смоделировал это с помощью CVXR следующим образом:
wbal <- Variable(t) #wind power sold in the balancing market (up-regulation)
el <- Variable(t) #power used to perform electrolysis
inst <- Variable(t) #hydrogen that goes to the storage
fc <- Variable(t) #power generated using the fuel cell for the day-ahead market
fcbal <- Variable(t) #power generated using the fuel cell for the balancing market (up-regulation)
sth <- Variable(t) #hydrogen sold to industry from the storage
h <- Variable(t) #hydrogen sold immediately after electrolysis
st <- Variable(t+1) #the storage level
wdown <- Variable(t) #negative amount of wind power sold in the balancing market (down-regulation)
fcdown <- Variable(t) #negative amount of fuel cell power sold in the balancing market (down-regulation)
#objective
objective <- Maximize(sum((wgen+fc)*p[1:(t)]+(wbal+fcbal)*pbal_up+(wdown+fcdown)*pbal_down+(h+sth)*h2p))
#contraints
constraints <- list(st[1]==0, wgen>=0, wbal>=0, wdown <= 0, el>=0, fc>=0, fcdown <=0, fcbal>=0,
h>=0, st>=0, inst>=0, sth>=0,
wgen + wbal + wdown+ el <= wind[1:(t)],
0 <= wbal + fcbal, wbal + fcbal <= max_up,
wdown + fcdown >= max_down, wdown + fcdown <= max_up,
abs(wdown) <= wgen, abs(fcdown) <= fc, #problematic constraint
h + sth <= heat[1:(t)],
el*eel==inst+h,
inst <= sendin,
el<= elmax, fc+fcbal+fcdown<= fcmax,
(fc+fcbal+fcdown)/efc+sth<= st[1:t],
(fc+fcbal+fcdown)/efc+sth<= sendout,
st[1:t+1] <= maxst,
diff(st)==inst-(fc+fcbal+fcdown)/efc-sth #diff is the increase from the last hour
)
Проблема, с которой я столкнулся, заключается в том, что в первый момент продается дополнительная мощность, потому что ожидается, что она в любом случае может быть продана как отрицательная мощность позже. Это имеет смысл, поскольку оба момента оптимизируются одновременно, и я изо всех сил пытаюсь найти способ гарантировать, что этого не произойдет. Возможно, сработает двухэтапная модель или логическое ограничение, но я не уверен, как и можно ли это сделать в CVXR.
Если кто-то знает больше об этих возможностях или альтернативном решении, мы будем очень благодарны за вашу помощь! Надеюсь, проблема ясна, в противном случае дайте мне знать.