I am trying Multiprocessing for python on a windows machine. However, the four process occurs, had not which only one operation (CPU = 0% in the Task Manager but the moving process 25%).If I want to multi-process, whether there are things to do to something else |
import random
import numpy
import matplotlib.pyplot
import time
import multiprocessing
from deap import algorithms
from deap import base
from deap import creator
from deap import tools
# from docutils.utils.punctuation_chars import delimiters
IND_INIT_SIZE = 3000
# MIN_ENERGY = 237178.013392/3600
MIN_ENERGY =7255
MIN_POWER = 303.4465137486
NBR_ITEMS = 3000
# Create the item dictionary: item name is an integer, and value is
# a (weight, value) 2-uple.
items = {}
# Create random items and store them in the items' dictionary.
for i in range(NBR_ITEMS):
items[i] = random.choice([[10,5],[10,10]])
creator.create("Fitness", base.Fitness, weights=(-1.0, -1.0))
creator.create("Individual", set, fitness=creator.Fitness)
toolbox = base.Toolbox()
# Attribute generator
toolbox.register("attr_item", random.randrange, NBR_ITEMS)
# Structure initializers
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_item, IND_INIT_SIZE)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
def evalKnapsack(individual):
energy = 0.0
power = 0.0
for item in individual:
energy += items[item][1]
power += items[item][0]
if power < MIN_POWER or energy < MIN_ENERGY:
return 100000000000,1000000000000
return energy, power
def cxSet(ind1, ind2):
"""Apply a crossover operation on input sets. The first child is the
intersection of the two sets, the second child is the difference of the
two sets.
"""
temp = set(ind1) # Used in order to keep type
ind1 &= ind2 # Intersection (inplace)
ind2 ^= temp # Symmetric Difference (inplace)
return ind1, ind2
def mutSet(individual):
"""Mutation that pops or add an element."""
for var in range(0,3000):
if random.random() < 0.5:
if len(individual) > 0: # We cannot pop from an empty set
individual.remove(random.choice(sorted(tuple(individual))))
else:
individual.add(random.randrange(NBR_ITEMS))
return individual,
toolbox.register("evaluate", evalKnapsack)
toolbox.register("mate", cxSet)
toolbox.register("mutate", mutSet)
toolbox.register("select", tools.selSPEA2)
toolbox.register("map", pool.map)
def main():
# random.seed(64)
NGEN = 5
MU = 75
LAMBDA = 75
CXPB = 0.6
MUTPB = 0.3
pop = toolbox.population(n=MU)
hof = tools.ParetoFront()
pool = multiprocessing.Pool(3)
toolbox.register("map", pool.map)
stats = tools.Statistics(lambda ind: ind.fitness.values)
stats.register("avg", numpy.mean, axis=0)
stats.register("std", numpy.std, axis=0)
stats.register("min", numpy.min, axis=0)
stats.register("max", numpy.max, axis=0)
algorithms.eaMuPlusLambda(pop, toolbox, MU, LAMBDA, CXPB, MUTPB, NGEN, stats,
halloffame=hof)
return pop, stats, hof
if __name__ == '__main__':
for var in range(0,5):
start = time.time()
pop, stats, hof= main()
lischp=[]
lisclp=[]
libatthp=[]
libattlp=[]
ligoukei=[]
for ind in hof:
itemslist=[]
print ind, ind.fitness
for k in ind:
itemslist.append(items[k])
schpkazu=itemslist.count([10,5])
lischp.append(schpkazu)
battlpkazu=itemslist.count([10,10])
libattlp.append(battlpkazu)
print libatthp
print lischp
print libattlp
print lisclp
ligoukei.append(ind.fitness)
print ligoukei
with open('battlpcazu.csv',mode='a')as fb:
numpy.savetxt(fb,libattlp,fmt="%.0f",delimiter=",")
with open('schpcazu.csv',mode='a')as fc:
numpy.savetxt(fc,lischp,fmt="%.0f",delimiter=",")
elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time)) + "[sec]"
--
You received this message because you are subscribed to the Google Groups "deap-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to deap-users+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
IND_INIT_SIZE = 30000 MIN_ENERGY =72550 MIN_POWER = 303000.4465137486 NBR_ITEMS = 30000
・・・NGEN =
More than 1000 MU = More than 5000 LAMBDA = More than 5000
def evalKnapsack(individual):
energy = 0.0
power = 0.0
for item in individual:
energy += items[item][1]
power += items[item][0]
if power < MIN_POWER or energy < MIN_ENERGY:
return 100000000000,1000000000000
return energy, power
Postscript
The parametar is
NGEN = 5 MU = 50 LAMBDA = 50