无法用多处理加速Python DEAP的速度

问题描述 投票:1回答:1

我正在使用DEAP包和多进程对OneMax问题(最大限度地增加一个比特串的1的数量)使用以下示例代码。

我无法使用多处理来加速这个过程。我想在找出这里的问题之前,用这个来解决一个更复杂的问题。

谢谢您。

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")
python multiprocessing genetic-algorithm deap
1个回答
0
投票

如果你在windows中的交互式解释器内运行你的代码,请尝试在cmd中运行它。在我的情况下,它的工作。在DEAP中使用多处理进行遗传编程

© www.soinside.com 2019 - 2024. All rights reserved.