我建造了一个带有6个总线和oemof的电力系统。每辆公交车都有简单的输入。并且总线1在两个方向上连接到总线2(2个变换器)。总线2以相同的方式连接到总线3。 ...。总线6连接到总线1.因此它是环形结构。每辆巴士都有一个水槽。 公共汽车1还通过燃气发电厂与燃气公交车连接。燃气公交车有1个输入能量。 现在我开始将总线1上的一个需求与8760个时间步长(一年)连接起来。我让程序解决了这个能量系统中每个对象的流程。我在40秒后得到了解决方案。 但我的目标是在系统中提出更多要求来解决问题。所以我在总线2上集成了第二个需求。现在计算时间大约是3分钟。对于总线3的第三次需求,计算时间为15分钟。每辆公交车都需要40多分钟。
我的处理器是i5 4670K 3.4 GHz。
我的问题是:为什么CBC解算器需要这么多时间来解决问题,并且在energysystem中有更多的需求?有什么理由吗?
你现在解算器究竟是如何工作的吗?我找不到任何答案
系统中有一个需求:
compiler
系统有两个要求:
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
答案 0 :(得分:0)
我同意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()})
如果您将这些对象添加到每个总线,您的问题将是可解决的。之后您可以查看结果。如果这些汇和源的总和大于零,那么没有它们的问题是不可行的。现在,您可以分析结果以找出问题。