如何重用池中的工作人员进行遗传算法

时间:2016-11-07 10:24:23

标签: python python-2.7 parallel-processing genetic-algorithm python-multiprocessing

我之前有一个关于这个问题的相关问题:Parallelize for loop in python

我有一个遗传算法,我试图通过并行化评估函数来加快速度。 GA是一个类,代码看起来像这样:

copy_reg.pickle(types.MethodType,lambda method: (getattr, (method.im_self, method.im_func.__name__)),getattr) 

class GA:

    ...
    ...

    def evaluation(self):
        self.scores = Pool(processes=nprocs).map(self.costly_function,self.population)

    def run(self):
        self.initial_population()
        self.evaluation()
        while self.Gen > i:
            self.select()
            self.crossover()
            self.mutation()
            self.evaluation()
            i += 1

与顺序方法相比,这给出了正确的结果,但速度明显变慢。我的猜测是,这是因为我在函数evaluation中为while循环中的每一代创建了一组新的流程工作者。有没有办法重复工人,所以我可以加快速度?

1 个答案:

答案 0 :(得分:0)

通过添加我从https://stackoverflow.com/a/25385582/4759898

获得的函数来解决问题
def __getstate__(self):
    self_dict = self.__dict__.copy()
    del self_dict['pool']
    return self_dict

def __setstate__(self, state):
    self.__dict__.update(state)