Implement multiprocessing

This commit is contained in:
George Lacey 2017-10-13 13:46:56 +01:00
parent 9fd63d5ae3
commit 4b1a9c3709
2 changed files with 50 additions and 6 deletions

View File

@ -1,6 +1,9 @@
import os
from multiprocessing import Process, Queue
from lifecycle import Lifecycle
from file import File
from time import sleep
import time
param_example = {'population_size': 10,
'elite': round(0.1 * 10),
@ -8,20 +11,55 @@ param_example = {'population_size': 10,
'iter': 1000}
def gen_param(pop, elite, crossover, iter):
return {'population_size': pop,
'elite': round(elite * pop),
'crossover': round(crossover * pop),
'iter': iter}
outputs = Queue()
def run_instance(instance, output_list):
instance.start()
output_list.put(instance.get_csv())
print(instance.id)
def cls():
os.system('cls' if os.name == 'nt' else 'clear')
output_file = File("output.csv", ['id', 'best_fit'] + list(param_example))
ga = Lifecycle(1, param_example)
ga.start()
output_file.write_header()
output_file.write_row(ga.get_csv())
instances = list()
id = 0
for i in [x * 0.01 for x in range(20, 80, 5)]:
instances.append(Process(name="Thread-%d" % i, target=run_instance,
args=[Lifecycle(id, gen_param(20, 0.1, i, 50)), outputs]))
id += 1
start_time = time.time()
for instance in instances:
instance.start()
while len([t for t in instances if t.is_alive()]) != 0:
print("here")
sleep(1)
end_time = time.time()
while not outputs.empty():
output_file.write_row(outputs.get())
output_file.close()
ga.generate_graph(show=True)
print("Execution took %f seconds" % (end_time - start_time))
#ga.generate_graph(show=True)

View File

@ -94,5 +94,11 @@ class Population(object):
self.mutate(10)
self.check_termination()
def remove_member(self, member):
self.members.remove(member)
def check_termination(self):
# todo: complete
pass