【问题标题】:Solver time seems to be to high for a small energy model using oemof (solph) with CBC solver对于使用 oemof (solph) 和 CBC 求解器的小能量模型,求解器时间似乎太长了
【发布时间】:2017-04-03 22:58:17
【问题描述】:

我用 oemof 构建了一个有 6 条总线的电力能源系统。每辆公共汽车都有一个简单的输入。并且总线 1 在两个方向上连接到总线 2(2 个变压器)。总线 2 以相同的方式连接到总线 3。 ……总线 6 连接到总线 1。所以它是一个环形结构。每辆公共汽车都有一个水槽。 总线1还通过燃气发电厂与燃气总线相连。燃气总线有 1 个能量输入。 现在我开始将总线 1 上的一个需求与 8760 个时间步长(一年)连接起来。我让程序解决这个能量系统中每个物体的流动。 40秒后我得到了解决方案。 但我的目标是解决系统中更多需求的问题。于是我在2号巴士上集成了第二个需求。现在计算时间大约是3分钟。对于 3 号巴士的第三次请求,计算时间为 15 分钟。而且每辆公交车都有需求,需要40多分钟。

我的处理器是 i5 4670K 3.4 GHz。

我的问题是:为什么 CBC 求解器需要这么多时间来解决能源系统中更多需求的问题?有什么原因吗?

你现在知道求解器是如何工作的吗?我找不到任何答案

系统中有一个需求:

128382 Obj 1.6384541e+013 Primal inf 6.0004356e+008 (5) Dual inf 2.5973983e-006 (1)
Primal infeasible - objective value 1.6384541e+013
PrimalInfeasible objective 1.638454066e+013 - 128382 iterations time 36.552 

系统中有两个需求:

155933 Obj 1.1686988e+014 Primal inf 3.7517663e+010 (20494)
Primal infeasible - objective value 1.1686988e+014
PrimalInfeasible objective 1.16869879e+014 - 155933 iterations time 1728.062 

【问题讨论】:

  • 欢迎来到 SO。请编辑您对问题的补充。

标签: modeling


【解决方案1】:

我同意 40 分钟对于这么小的系统来说似乎太长了。

通常,如果问题不可行,求解器时间会显着增加。因此,您应该确保在添加额外的需求对象后问题仍然可以解决。顺便说一句,不同的单位(或前缀)是典型的错误来源。

使您的问题可解决的一种简单方法是在每辆公共汽车上添加无限的过剩和短缺对象(平衡)。确保求解器的短缺源比所有其他对象更昂贵,否则可能会使用它来代替您的发电厂。

对于 oemof.solph,它看起来像这样(例如 bus_1):

from oemof import solph

# shortage bus_1
solph.Source(label='shortage_1',
             outputs={bus_1: solph.Flow(variable_costs=50000)})

# excess bus_1
solph.Sink(label='excess_1', inputs={bus_1: solph.Flow()})

如果您将这些对象添加到每条总线,您的问题将是可以解决的。之后,您可以检查结果。如果这些汇和源的总和大于零,那么没有它们问题将是不可行的。现在您可以分析结果以找出问题所在。

【讨论】:

    猜你喜欢
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2020-03-09
    相关资源
    最近更新 更多