Pyomo 允许并行构建模型吗?

问题描述 投票:0回答:1

我有一个基于场景的大规模优化模型,需要很长时间才能使用 Gurobi 求解器在 Pyomo 上求解。虽然使用 Gurobi(因为它使用所有可用核心)求解模型很快,但约束定义部分(由 Pyomo 完成)却很耗时。我们可以在 Pyomo 上并行化模型定义部分吗?我问了chatGPT,它说模型定义部分本质上是在单个进程中完成的,不能并行化。我只是想知道您是否遇到了同样的问题并有解决方法。

** 我对使用 Pyomo 和 Gurobi 求解器求解优化模型的理解是 Pyomo 定义并构造模型并将其传递给 Gurobi 求解器来求解。我想利用并行计算机制来构建模型部分(由 Pyomo 完成)。显然,这是不可能的。

*** 以下两个约束占据了大部分时间:

for k in range(len(y)):
    for i in range(NumBus):
        model.Constraints.add(inequality(Pminm[i], model.P[i]-model.Lambda[i] * sum(y[k, :]), Pmaxm[i]))


for k in range(len(y)):
    for i in range(NumBus):
        for j in range(NumBus):
            if i != j:
                model.Constraints.add(
                    inequality(
                        -100, 
                        B[i, j] * (
                            model.Angles[i] + 
                            sum(B_u[i, m] * (y[k, i] - model.Lambda[m]) for m in range(NumBus)) - 
                            model.Angles[j] - 
                            sum(B_u[j, n] * (y[k, j] - model.Lambda[n]) for n in range(NumBus))
                        ),
                        100
                    )
                )  

这里,len(y)=10,000,NumBus=118。

python optimization pyomo
1个回答
0
投票

您可能会发现使用 Pyomo 的内置迭代会更快:

def rule(k, i, j):
    if i == j: 
        return Constraint.Skip
    
    return inequality(
        -100, 
        B[i, j] 
        * (
            model.Angles[i] 
            + sum(
                B_u[i, m] * (y[k, i] - model.Lambda[m]) 
                for m in range(NumBus)
            ) 
            - model.Angles[j] 
            - sum(
                B_u[j, n] * (y[k, j] - model.Lambda[n]) 
                for n in range(NumBus)
            )
        ),
        100
    )

model.The_Constraint = Constraint t(range(len(y)), range(NumBus), range(NumBus), rule=rule)

© www.soinside.com 2019 - 2024. All rights reserved.