From 4b1a9c370949ecbe6df1ec96898c2529843182d1 Mon Sep 17 00:00:00 2001 From: George Lacey Date: Fri, 13 Oct 2017 13:46:56 +0100 Subject: [PATCH] Implement multiprocessing --- src/main.py | 50 +++++++++++++++++++++++++++++++++++++++++------ src/population.py | 6 ++++++ 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/main.py b/src/main.py index 7cf3bd2..d98859d 100644 --- a/src/main.py +++ b/src/main.py @@ -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) diff --git a/src/population.py b/src/population.py index 3d3bc22..1589df7 100644 --- a/src/population.py +++ b/src/population.py @@ -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