【发布时间】:2020-12-09 06:32:08
【问题描述】:
我有一个算法,它有几个 for 循环和一些有时需要按顺序运行或有时可以并行运行的函数。我在下面提供一个伪代码和一个示例。
这里,m 是一个数学模型,我正在尝试将变量添加到模型 m。 for 循环彼此独立(我有几个这样的 for 循环而不是 2 个)。
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,%d" % (i,d,t,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))
一旦模型 m 完全构建,即所有 for 循环都完成,我就有了解决优化问题的命令。这只能在模型完全构建后才能完成。所以下一个命令是:
z,Q = Solve(m)
接下来,我使用其他 for 循环从模型 m 复制结果。这些不能直接使用,必须按照我使用的方式复制。
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_value[(i,d,t,k)] = z[(i,d,t,k)].X
for k in range(1,K+1):
for d in range(1,delta+1):
Q_value[(i,inst)] = Q[(k,d)].X
这部分也是相互独立的。我有两个以上的循环要运行。
有没有一种方法可以对我的代码的这些部分使用并行处理。我该怎么做?
【问题讨论】:
-
你不能在这里只使用
itertools.product而不是多线程吗?
标签: python parallel-processing multiprocessing python-multiprocessing