如何从池重用工人遗传算法
问题描述:
我对这个问题以前的相关的问题: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循环内为每一代创建了一组新的进程工作者。有没有办法重用这些工人,这样我可以加快速度?
答
加入下面是我从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)
了什么是nprocs设置功能问题是否解决?在CPU,内存,IO或其他方面,'self.costly_function''昂贵'? –
它设置为4,costly_function在CPU方面代价很高。 – Chicony