Python并行解决LP

时间:2018-01-03 20:01:21

标签: python optimization parallel-processing

我有一个LP列表,我想并行解决。 到目前为止,我已经尝试了multiprocessingjoblib。但两者都只使用1个CPU(8个)。

我的代码

import subprocess
from multiprocessing import Pool, cpu_count
from scipy.optimize import linprog
import numpy as np
from joblib import Parallel, delayed

def is_in_convex_hull(arg):
  A,v = arg
  res = linprog(np.zeros(A.shape[1]),A_eq = A,b_eq = v)
  return res['success']

def convex_hull_LP(A):
  pool = Pool(processes = cpu_count())
  res = pool.map(is_in_convex_hull,[(np.delete(A,i,axis=1),A[:,i]) for i in range(A.shape[1])])
  pool.close()
  pool.join()
  return [i for i in range(A.shape[1]) if not res[i]]

现在我在IPyton中运行

A = np.random.randint(0,60,size = (40,300))
%time l1 = convex_hull_LP(A)
%time l2 = Parallel(n_jobs=8)(delayed(is_in_convex_hull)((np.delete(A,i,axis=1),A[:,i])) for i in range(A.shape[1]))

虽然显示了8个不同的进程ID,但它们都导致大约7秒,但只使用一个CPU。

其他主题

我的问题

  • 如何在所有可用的CPU上拆分作业?
  • 或者甚至可以在GPU上运行它?

0 个答案:

没有答案