From 8c024a0290fcd9185aa75b5ee5aa5fd2cacbfa0c Mon Sep 17 00:00:00 2001 From: SimpleArt <71458112+SimpleArt@users.noreply.github.com> Date: Fri, 4 Dec 2020 14:26:18 -0500 Subject: [PATCH] Added distance attribute --- src/EasyGA.py | 4 ++-- src/attributes.py | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/EasyGA.py b/src/EasyGA.py index e084719..d460ffd 100644 --- a/src/EasyGA.py +++ b/src/EasyGA.py @@ -126,7 +126,7 @@ class GA(Attributes): # Difference between best and i-th chromosomes best_chromosome = self.population[0] - tol = lambda i: sqrt(abs(best_chromosome.fitness - self.population[i].fitness)) + tol = lambda i: self.dist(best_chromosome, self.population[i]) # Change rates with: multiplier = 1 + self.adapt_probability_rate @@ -185,7 +185,7 @@ class GA(Attributes): # Difference between best and i-th chromosomes best_chromosome = self.population[0] - tol = lambda i: sqrt(abs(best_chromosome.fitness - self.population[i].fitness)) + tol = lambda i: self.dist(best_chromosome, self.population[i]) # First non-zero tolerance after amount_converged/4 for i in range(amount_converged//4, len(self.population)): diff --git a/src/attributes.py b/src/attributes.py index 864541b..d072f1e 100644 --- a/src/attributes.py +++ b/src/attributes.py @@ -1,3 +1,6 @@ +# Import square root function for ga.adapt() +from math import sqrt + import random import sqlite3 from copy import deepcopy @@ -75,6 +78,7 @@ class Attributes: min_selection_probability = 0.01, min_chromosome_mutation_rate = 0.01, min_gene_mutation_rate = None, + dist = None, initialization_impl = Initialization_Methods.random_initialization, fitness_function_impl = Fitness_Examples.is_it_5, make_population = create_population, @@ -132,6 +136,13 @@ class Attributes: self.min_chromosome_mutation_rate = min_chromosome_mutation_rate self.min_gene_mutation_rate = gene_mutation_rate if (min_gene_mutation_rate is None) else min_gene_mutation_rate + # Distance between two chromosomes + if dist is None: + self.dist = lambda chromosome_1, chromosome_2:\ + sqrt(abs(chromosome_1.fitness - chromosome_2.fitness)) + else: + self.dist = dist + # Mutation variables self.chromosome_mutation_rate = deepcopy(chromosome_mutation_rate) self.gene_mutation_rate = deepcopy(gene_mutation_rate)