首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Alias的GAMS双向约束建模

基于Alias的GAMS双向约束建模
EN

Stack Overflow用户
提问于 2022-01-28 23:08:34
回答 1查看 51关注 0票数 0

我在GAMS上做一个很大的优化问题,所以我不可能把整个代码放在这里,但是我希望你能帮我解决我陷入困境的地方。我的模型中有4个功率节点,它们由2条双向传输线(r)连接,就像这样。

其中r_a、r_b是目前输电线路的容量。功率可以双向流动,我跟踪功率从A到A‘,B到B’,以及从A‘到A,B’到B,,所以在2条传输线(r)中有4种功率流(f)。我的决策变量是我需要在每条线路上构建多少容量升级(c(f)),以满足更多的潮流需求。因此,在GAMS中,我将升级的成本最小化为:

代码语言:javascript
复制
investment_cost..         cap_cost =e= sum(f,c(f)*capCost(f));

在这里,capCost(f)是提升输电线路容量的资本成本,使其能够额外流动1千兆瓦小时。

我的限制:在每个时间段( t),总潮流p(f,t)必须小于或等于现有线路容量+新升级的容量:

代码语言:javascript
复制
line_cap(f,t).. old_line_cap(l)+c(f) =g= p(f,t);

但是,我的解决方案如下所示:

  • fAA':6.7 (从A到A')
  • fA'A: 5.0的线路容量增加了6.7GW(从A‘到A)
  • fBB':5.5的线路容量增加了5.0GW)(从B到B')
  • fB'B: 8.1的线路容量增加了5.5GW(从B’到B增加了8.1GW的容量)

但这是不对的,因为如果我升级线路AA‘6.7GW,我不需要升级A’线,因为他们是相同的线。基本上,我花两倍的钱来升级同一行。

所以我解决了这个问题,我试着用这样的别名:

代码语言:javascript
复制
Alias(f,ff)
line_cap(f,t)..   old_line_cap(f)+c(f)+ sum((f,ff)$[line_source(f)=line_sink(ff) and line_source(ff)=line_sink(f)],c(ff)) =g= p(f,t);

但这仍然不能解决我的问题。

我很感谢你的帮助!谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-01-31 08:39:05

如果您想坚持您的4 fs,让我们称它们为您的虚拟行(因为其中的两条虚拟线实际上形成了一条物理线)。现在,让我们介绍一组新的物理行(fPhys)以及虚行和物理行(fMap)之间的映射:

代码语言:javascript
复制
Set fPhys          / fAA, fBB /
    fMap(f, fPhys) / ("fA'A", "fAA'").fAA
                     ("fB'B", "fBB'").fBB /;

现在,您可以继续对流使用set f,并在投资决策中使用fPhys,如下所示:

代码语言:javascript
复制
investment_cost..         cap_cost =e= sum(fPhys,c(fPhys)*capCost(fPhys));

line_cap(f,t).. sum(fMap(f,fPhys), old_line_cap(fPhys)+c(fPhys)) =g= p(f,t);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70901266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档