gpt4 book ai didi

python - 创建 Pyomo 约束的性能

转载 作者:行者123 更新时间:2023-12-01 07:18:05 29 4
gpt4 key购买 nike

我正在用 pyomo 设置一个更大的能量优化问题。正如其他 questions 中提到的,设置花费了不合理的长时间。 ,但是我设法加速了大多数有问题的线路,除了能量流限制之外。

与所有其他约束相反,该流程包括所有元素的总和。因此,我决定重写流变量的创建方式,以便它们包含所有元素的索引,希望这会改善这种情况。我的代码现在如下所示:

def flows(model, et, t):
return pyo.quicksum(model.in_flow[:, et, t],
linear=True,
start=pyo.quicksum(model.out_flow[:, et, t],
linear=True)
) == 0

model.add_component("flows",
pyo.Constraint(model.energy_type,
model.t,
rule=flows)
)

但是,这仍然需要我的模型设置时间的 65%。

我将其分解为一个嵌套的 for 循环,只是为了看看谁花时间:

for t in model.t:
for et in model.energy_type:
e = model.in_flow[:, et, t]
f = model.out_flow[:, et, t]
es = pyo.quicksum(e)
fs = pyo.quicksum(f)

这需要大约相同的运行时间,并且“全部”都花费在最后两行中。链接快速求和并设置线性标志提供了一些小的改进,但没有实质性的改进。 shared code PyPSA 仍然使用旧的 coopr3 表达式生成器,因此它不再起作用。我也不知道如何使用它。

关于如何提高模型生成性能有什么建议吗?

最佳答案

好吧,事实证明问题出在切片上。

def flows(model, et, t):
vars = [model.in_flow[obj, et, t] for obj in model.objects_index]
vars.extend([model.out_flow[obj, et, t] for obj in model.objects_index])
return pyo.quicksum(vars) == 0

约束规则的重新制定使我的模型创建速度加快了约 60%。我发现另外两个地方也做了类似的重新制定。我现在从优化前的 120 秒下降到大约 7 秒。

关于python - 创建 Pyomo 约束的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57849478/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com