我正在使用下面的示例代码来解决OneMax问题(最大化位串的个数),使用的是DEAP包和多处理。
我无法使用多处理来加速这个过程。在找出这里的问题之前,我想用它来解决一个更复杂的问题。
谢谢。
import array
import multiprocessing
from multiprocessing import Pool
import random
import time
import numpy as np
from deap import algorithms
from deap import base
from deap import creator
from deap import tools
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", array.array, typecode='b', fitness=creator.FitnessMax)
toolbox = base.Toolbox()
toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_bool, 10000)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
#OneMax problem is a simple problem consisting in maximizing the number of ones of a bitstring.
def evalOneMax(individual):
return sum(individual),
toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)
if __name__ == "__main__":
t1 = time.time()
CPU_count = multiprocessing.cpu_count()-1
p = Pool(CPU_count)
toolbox.register("map", p.map)
pop = toolbox.population(n=1000)
hof = tools.HallOfFame(1)
stats = tools.Statistics(lambda ind: ind.fitness.values)
stats.register("avg", np.mean)
stats.register("std", np.std)
stats.register("min", np.min)
stats.register("max", np.max)
algorithms.eaSimple(pop, toolbox, cxpb=0.5, mutpb=0.2, ngen=50,
stats=stats, halloffame=hof)
p.close()
p.join()
t2 = time.time()
print("Multiprocessing with",CPU_count,"core(s) took",round((t2-t1),2),"s")发布于 2020-05-25 23:49:46
如果您在windows的交互式解释器中运行代码,请尝试在cmd中运行它。它在我的案例中起作用了。Using multiprocessing in DEAP for genetic programming
https://stackoverflow.com/questions/61902235
复制相似问题