如何使用并行处理来运行for循环和某些功能?

问题描述

我有一个算法,其中包含多个for循环和一些功能,这些功能有时需要顺序运行,或者有时可以并行运行。我在下面提供了一个代码一个示例。

在这里item['@timestamp'] 一个数学模型,我正在尝试将模型m变量化。 m循环彼此独立(我有几个这样的for循环,而不是2)。

for

一旦模型for i in range(1,N+1): for d in range(1,delta+1): for t in range(1,T+1): for k in range(1,K+1): z[(i,d,t,k)] = m.addVar(vtype = GRB.BINARY,name="z%d,%d,%d" % (i,k)) for k in range(1,K+1): for d in range(1,delta+1): Q[(k,d)] = m.addVar(vtype = GRB.BINARY,name="Q%d,%d" % (k,d)) 完全构建完毕,即所有的for循环都完成了,我便有了解决优化问题的命令。仅在完全构建模型之后才能执行此操作。所以下一个命令是:

m

接下来,我正在使用其他for循环从模型z,Q = Solve(m) 复制结果。这些不能直接使用,必须按照我以前使用的方式进行复制。

m

此部分也彼此独立。我要运行两个以上的循环。

有没有一种方法可以对代码的这些部分使用并行处理。我该怎么办?

解决方法

您可以使用itertools.product将嵌套循环减少到一个循环,例如,无需嵌套即可将您的第一个循环简化为以下示例:

from itertools import product

for idtk in product(range(1,N+1),range(1,delta+1),T+1),K+1)):
    #idtk is a tuple the same as (i,d,t,k)
    z[idtk] = m.addVar(vtype = GRB.BINARY,name="z%d,%d,%d" % idtk)