From 9f3d56264c1c6d7f8cc02eebc0110e4e9591eb94 Mon Sep 17 00:00:00 2001 From: Winnus <winnus@posteo.de> Date: Wed, 4 Oct 2023 14:43:10 +0200 Subject: [PATCH] added more precise readme on how to define the components in PyGMA --- README.md | 276 ++++++++++++++++++ User_interface.pdf | Bin 0 -> 70230 bytes .../config_logical_gate_construction.py | 6 +- src/components/evolutionary_phase.py | 7 +- src/components/experiment.py | 23 +- src/components/genetic_operators.py | 5 +- src/testing/Epoch_Amdahls_speedup.pdf | Bin src/testing/Epoch_Amdahls_speedup.png | Bin src/testing/Epoch_Gustavsons_speedup.pdf | Bin src/testing/Epoch_Gustavsons_speedup.png | Bin src/testing/Epoch_runtime.pdf | Bin src/testing/Epoch_runtime.png | Bin src/testing/Epoch_runtime_inlet.pdf | Bin src/testing/Epoch_runtime_inlet.png | Bin src/testing/Speedup_figures.ipynb | 0 15 files changed, 296 insertions(+), 21 deletions(-) create mode 100755 User_interface.pdf mode change 100644 => 100755 src/testing/Epoch_Amdahls_speedup.pdf mode change 100644 => 100755 src/testing/Epoch_Amdahls_speedup.png mode change 100644 => 100755 src/testing/Epoch_Gustavsons_speedup.pdf mode change 100644 => 100755 src/testing/Epoch_Gustavsons_speedup.png mode change 100644 => 100755 src/testing/Epoch_runtime.pdf mode change 100644 => 100755 src/testing/Epoch_runtime.png mode change 100644 => 100755 src/testing/Epoch_runtime_inlet.pdf mode change 100644 => 100755 src/testing/Epoch_runtime_inlet.png mode change 100644 => 100755 src/testing/Speedup_figures.ipynb diff --git a/README.md b/README.md index dcc7867..fed9664 100755 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ Pythonic Genetic MPI paralelized Algorithm + # PyGMA Documentation ### Words @@ -78,6 +79,281 @@ From this it should create/instantiate (genotype -> phenotype) an individual on By conductiong the experiment the a fitness value is generated for the gene. This should be returned. +# Usage Guide +This section explains how to step by step use PyGMA. +PyGMA works with user defined components/classes. +As such one needs to define the components one want to use. +Then set them up insid the configuration file and tell PyGMA to use this configuration. + +### 1. Define Evolutionary Phase +The first step is to define the evolutionary phase. +This component will contain the experiment component for the individuals and the stop conditions for the evolutionary process. +It will be defined in the file ```components/evolutionary_phase.py``` + +As example we create the following phase: + +``` +class Simple_evolutionary_phase(Evolutionary_phase): + + def completed(self, population_fitness: list, epochs: int) -> bool: + """Called to check if the phase has reached its end.""" + # population_fitness will be a list with the max fitness value in + # each island population + max_fitness = max(population_fitness) + if max_fitness > 90.9: + return True + + if epochs > 300: + return True + + return False +``` +This class inherits all needed variables from the ```Evolutionary_phase``` base class. +We only define the stop condition by overriding the ```completed(self, population_fitness: list, epochs: int) -> bool``` function. +This function will be called by PyGMA to check if the evolutionary process has finised. +As such we define that if the maximal fitness for all populations is > 90.9 or the evolutionary epochs are > 300 we want to stop the process. + + +### 2. Define Genetic Operators +Next we going to define Genetic Operators (GO). +These will be applied to modifie the gene strings of the individuals. +GO can be stacked into list (operator stack) and each operator in that lis is applied in sequence one after another. +All operators will mainly define then function ```operate(self, old_population, new_population)```. +Here ```old_population``` are the genes that are untouched by the GO and are sorted in ascending order based on their fitness, meaning ```old_population[0]``` is the gene with the highest fitness. +```new_population``` is a set of genes which where altered or produced by the genetic operator stack i.e. current state of modifications in operator stack. +GO's are defined in the file ```components/genetic_operators.py``` + +For example we could define a binary (meaning that it will work with binary genes like gene="100101010001001") mutation operator: + +``` +class Mutation_operator(Genetic_operator): + """ + This class represents a binary mutation operator. + It will produce n new individuals by mutating n genes with + the propability defined by mutation rate + """ + + def __init__(self, mutation_rate, new_individuals, rng_seed=9): + self.mutation_rate = mutation_rate + # how many new individuals should this operator produce? + self.new_individuals = new_individuals + self.rng = np.random.default_rng(rng_seed) + + def operate(self, old_population, new_population): + """ + Apply mutation to all genes of the current op stack. + """ + # take n individuals from the old_population (sorted by fitness) and mutate them + for n in range(self.new_individuals): + gene = np.copy(old_population[n]) + gene_size = len(gene) + # mutation indexes + # having at least one mutation + mutations = int(self.mutation_rate*gene_size) + if mutations == 0: + mutations = 1 + indexes = self.rng.integers(low=0, high=gene_size, size=mutations) + # flip the bits at indexes + # note, ~ is like np.invert() + gene[indexes] = ~gene[indexes] + # append the new individual + new_population.append(gene) + return new_population +``` + + +### 3. Define Experiment +If we have sucessfully defined all the operators we want to use then we can define our experiment. +An experiment is a test in which the gene is evaluated and rated with a fitness. +It can be an optimisation task, it can be that one wants to evolve cratures that can swim [https://www.karlsims.com/evolved-virtual-creatures.html](https://) or any other imagination. +Experiments will be defined in the file ```components/experiment.py``` + +For simplicity reasons we will define a simple dummy function optimisation experiment: +We want to find x, y, z such that f(x, y, z) = x*2 + y*3 + z = 424242. + +``` +class Function_optimisation_experiment(Experiment): + """ + Find values for the function such that it matches a certain output + """ + + def f(self, x, y, z): + """The function we want to optimize""" + return x*2 + y*3 + z + + def bool2int(self, x): + r = 0 + for i, b in enumerate(x): + if b: + r += b << i + return r + + def conduct(self, gene) -> float: + # split gene into blocks that are binary representation + # of the numbers + numbers = np.split(gene, 3) + # convert the bins to ints + x = bool2int(numbers[0]) + y = bool2int(numbers[1]) + z = bool2int(numbers[2]) + + # define the objective output for our function + output = 424242 + + # calculate the output + r = self.f(x, y, z) + + # calc error and fitness + error = abs(r-output) + + # if error is small fitness is high + # make sure that if error can not be 0 :) + fitness = 1.0/(error + 0.00000000000000001) + + # return the fitness of this gene to pygma + return fitness +``` +We inherit from the ```Experiment``` class and define the function ``` def conduct(self, gene) -> float:``` +This function will be called by PyGMA on each gene to conduct the experiment and retrieve a fitness value for this gene. + + + +### 4. Define Config +Now that all parts are defined we can definen a config that will make use of all the components we just defined. + +we make a new file ```components/config_function_optimisation.py``` + +Inside this file we put the following content: + +``` +# import the components we defined for further use +from components.genetic_operators import Mutation_operator, Removal_operator +from components.evolutionary_phase import Simple_evolutionary_phase +from components.experiment import Function_optimisation_experiment + + +# ----------------------------- +# Genetic operator definition +# ----------------------------- +# Genetic operators can be used for: +# Populations +# Genetic Phases + +# our mutation operator will crate 3 genes with a mutation propability of 6% +# for each bit +OP_MUTATION = Mutation_operator(0.06, 3) + +# additionally we will use a crossover operator +OP_CROSSOVER = Single_point_crossover_operator(3) + +# since the mutation and crossover operator will create 3+3=6 genes we need to remove 6 genes +# from the population otherwise we will increase the population size in each +# epoch/generation +OP_REMOVAL = Removal_operator(6) + + + +# ----------------------------- +# Phase definition +# ----------------------------- +# Genetic phases allowing for evolution of individuals in +# changing environments or conditions. + +# phase 0 +# phase starting operators (applied at phase start) +# we will mutate in the beginning +PHASE0_SOP = [OP_MUTATION] + +# phase Experiment (conducted on individuals) +# we will use our Function_optimisation_experiment +PHASE0_EXPERIMENT = Function_optimisation_experiment() + +# phase definition +PHASE0 = Simple_evolutionary_phase( + 'Phase_0', PHASE0_SOP, PHASE0_EXPERIMENT) + + + +# ----------------------------- +# GA Configuration parameters +# ----------------------------- +# These are all general parameters for the Algorithm +# in form of a dictionary +CONFIG_FUNC_OP = { + # ------------- + # Processes + # -------------- + # use mpi parallelization + # If use_mpi4py_futures=False start with: + # mpiexec -n 3 python PyGMA.py + # or use threads if not specified via slurm + # mpiexec -n 3 --use-hwthread-cpus python PyGMA.py + 'use_mpi': False, + + # use mpi4py.futures + # this will dynamically spawn workers. + # NOTE: you have to execute the programm in this manner: + # mpiexec -n 3 python -m mpi4py.futures PyGMA.py + 'use_mpi4py_futures': False, + + # if mpi=False, how many local processes to use + # Note if > 1 it will spawn additonal processes that independently + # solves the experiment. Spawning takes time (memcopys etc) + # if the experiment is very simple having only one process + # handling everyting might be faster. + # start programm with: + # python PyGMA.py + 'num_local_processes': 1, + + + # ------------- + # Populations + # -------------- + # how many island populations to use + # is defined by the genetic operators stack lenght + # used to recombine/produce, mutate, extend... + 'genetic_operator_stack': [ + # pop 0 + [OP_REMOVAL, OP_CROSSOVER, OP_CROSSOVER], + # pop 1 + [OP_REMOVAL, OP_CROSSOVER, OP_MUTATION], + # pop 2 + [OP_REMOVAL, OP_CROSSOVER, OP_MUTATION] + ], + + # how many individuals per population + 'num_individuals': 30, + + # genome lenght for each individual + 'genome_length': 60, + + # init populations from defined gene strings + # this will ovveride: + # num_populations, num_individuals, genome_length + 'use_predefined_defined_genes': False, + 'predefined_genes': [ + # pop 0 + [[0, 0, 1], [0, 1, 1]], + # pop 1 + [[0, 1, 1], [1, 1, 1]] + ], + + # ------------- + # Evolutinary Phases + # -------------- + # defining the phases that will be sequantially evolved + 'evolutionary_phases': [ + PHASE0, PHASE0 + ] + +} +``` + +### 5. Run PyGMA +Now we can run PyGMA to start the evolution. +Since we told it in the configuration file to not use MPI we can start it in a single Python process by running + +```python PyGMA.py``` diff --git a/User_interface.pdf b/User_interface.pdf new file mode 100755 index 0000000000000000000000000000000000000000..35c632b1f20acde3a9dd58d156f9b2ed0708f816 GIT binary patch literal 70230 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�H5&2sK}nXucn-;V|JeZ0$4F7e-D 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 Ab^rhX literal 0 HcmV?d00001 diff --git a/src/components/config_logical_gate_construction.py b/src/components/config_logical_gate_construction.py index 3c6b84b..750cff8 100755 --- a/src/components/config_logical_gate_construction.py +++ b/src/components/config_logical_gate_construction.py @@ -83,14 +83,14 @@ OP_REMOVAL = Removal_operator(90) # outputs, i.e. multiplies the numbers correctly # how many bits num a and b have? -num_bits = 3 +num_bits = 2 # calculating all possible combinations exp_inputs, exp_expected_outputs = n_bit_multiplication_inout(num_bits) num_logical_inputs = num_bits+num_bits # we have two numbers each having n bits num_logical_outputs = num_bits+num_bits# we need to save the result -num_logical_gates = 128 # how many logic gates we want to use +num_logical_gates = 42 # how many logic gates we want to use PHASE0_EXPERIMENT = Logical_circuit_experiment(exp_inputs, exp_expected_outputs, num_logical_inputs, num_logical_outputs, num_logical_gates) @@ -121,7 +121,7 @@ CONFIG_CIRCUIT_EVOLVE = { # mpiexec -n 3 python PyGMA.py # or use threads if not specified via slurm # mpiexec -n 3 --use-hwthread-cpus python PyGMA.py - 'use_mpi': True, + 'use_mpi': False, # use mpi4py.futures # this will dynamically spawn workers. diff --git a/src/components/evolutionary_phase.py b/src/components/evolutionary_phase.py index 3b28c13..af18d30 100755 --- a/src/components/evolutionary_phase.py +++ b/src/components/evolutionary_phase.py @@ -23,7 +23,7 @@ class Evolutionary_phase: def completed(self, population_fitness: list, epochs: int) -> bool: """ Called to check if the phase has reached its end. - You have to return true or false depending on if the pase is finished or not. + You have to return true or false depending on if the phase is finished or not. For example: max_fitness = max(population_fitness) if max_fitness > 90.9: @@ -56,13 +56,14 @@ class Simple_evolutionary_phase(Evolutionary_phase): def completed(self, population_fitness: list, epochs: int) -> bool: """ - Called to check if the phase has reached its end. + Called to check if the phase has reached its end. + """ max_fitness = max(population_fitness) if max_fitness > 90.9: return True - if epochs > 3: + if epochs > 3000: return True return False diff --git a/src/components/experiment.py b/src/components/experiment.py index 785643c..3c5a248 100755 --- a/src/components/experiment.py +++ b/src/components/experiment.py @@ -1,11 +1,8 @@ import numpy as np -# https://towardsdatascience.com/an-extensible-evolutionary-algorithm-example-in-python-7372c56a557b -# traveling salesman problem here + # -------------- # Interface idea # -------------- - - class Experiment: """ Class defining an experiment. @@ -48,15 +45,6 @@ class Experiment: # Experiments # -------------- - -def bool2int(x): - r = 0 - for i, b in enumerate(x): - if b: - r += b << i - return r - - class Function_optimisation_experiment(Experiment): """ Find values for the function such that it matches a certain output @@ -64,12 +52,19 @@ class Function_optimisation_experiment(Experiment): def f(self, x, y, z): return x*2 + y*3 + z + + def bool2int(self, x): + r = 0 + for i, b in enumerate(x): + if b: + r += b << i + return r def conduct(self, gene) -> float: # split gene into blocks that are binary representation # of the numbers numbers = np.split(gene, 3) - # convert the numbers to ints + # convert the bins to ints x = bool2int(numbers[0]) y = bool2int(numbers[1]) z = bool2int(numbers[2]) diff --git a/src/components/genetic_operators.py b/src/components/genetic_operators.py index 58a6498..5097edb 100755 --- a/src/components/genetic_operators.py +++ b/src/components/genetic_operators.py @@ -104,7 +104,7 @@ class Mutation_operator(Genetic_operator): for n in range(self.new_individuals): # FIXME: # take not always the first ones take by asceding propability from all ones - gene = old_population[n] + gene = np.copy(old_population[0]) gene_size = len(gene) # mutation indexes # having at least one mutation @@ -170,6 +170,9 @@ class Single_point_crossover_operator(Genetic_operator): and append the newly generated genes into the population. """ # parent indexes in the population + # FIXME: + # do not always take the first one take with ascending + # propability pop_index = 0 for _ in range(self.num_offsprings): # get parent genes diff --git a/src/testing/Epoch_Amdahls_speedup.pdf b/src/testing/Epoch_Amdahls_speedup.pdf old mode 100644 new mode 100755 diff --git a/src/testing/Epoch_Amdahls_speedup.png b/src/testing/Epoch_Amdahls_speedup.png old mode 100644 new mode 100755 diff --git a/src/testing/Epoch_Gustavsons_speedup.pdf b/src/testing/Epoch_Gustavsons_speedup.pdf old mode 100644 new mode 100755 diff --git a/src/testing/Epoch_Gustavsons_speedup.png b/src/testing/Epoch_Gustavsons_speedup.png old mode 100644 new mode 100755 diff --git a/src/testing/Epoch_runtime.pdf b/src/testing/Epoch_runtime.pdf old mode 100644 new mode 100755 diff --git a/src/testing/Epoch_runtime.png b/src/testing/Epoch_runtime.png old mode 100644 new mode 100755 diff --git a/src/testing/Epoch_runtime_inlet.pdf b/src/testing/Epoch_runtime_inlet.pdf old mode 100644 new mode 100755 diff --git a/src/testing/Epoch_runtime_inlet.png b/src/testing/Epoch_runtime_inlet.png old mode 100644 new mode 100755 diff --git a/src/testing/Speedup_figures.ipynb b/src/testing/Speedup_figures.ipynb old mode 100644 new mode 100755 -- GitLab