From 97df04968559b94bd914dcef48a305f29d181514 Mon Sep 17 00:00:00 2001 From: Antonis Maronikolakis Date: Mon, 29 May 2017 16:27:51 +0300 Subject: [PATCH 1/2] Update search.py --- search.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/search.py b/search.py index d104d7793..4177cd07e 100644 --- a/search.py +++ b/search.py @@ -582,7 +582,7 @@ def genetic_search(problem, fitness_fn, ngen=1000, pmut=0.1, n=20): return genetic_algorithm(states[:n], problem.value, ngen, pmut) -def genetic_algorithm(population, fitness_fn, gene_pool=['0', '1'], f_thres=None, ngen=1000, pmut=0.1): # noqa +def genetic_algorithm(population, fitness_fn, gene_pool=[0, 1], f_thres=None, ngen=1000, pmut=0.1): # noqa """[Figure 4.8]""" for i in range(ngen): new_population = [] @@ -610,13 +610,11 @@ def init_population(pop_number, gene_pool, state_length): """Initializes population for genetic algorithm pop_number : Number of individuals in population gene_pool : List of possible values for individuals - (char only) state_length: The length of each individual""" g = len(gene_pool) population = [] for i in range(pop_number): - new_individual = ''.join([gene_pool[random.randrange(0, g)] - for j in range(state_length)]) + new_individual = [gene_pool[random.randrange(0, g)] for j in range(state_length)] population.append(new_individual) return population @@ -635,7 +633,7 @@ def mutate(x, gene_pool): r = random.randrange(0, g) new_gene = gene_pool[r] - return x[:c] + new_gene + x[c+1:] + return x[:c] + [new_gene] + x[c+1:] # _____________________________________________________________________________ # The remainder of this file implements examples for the search algorithms. From b3e2f2b438eddcc67db3c8f9e6e76160f7fa2954 Mon Sep 17 00:00:00 2001 From: Antonis Maronikolakis Date: Mon, 29 May 2017 16:30:24 +0300 Subject: [PATCH 2/2] Update test_search.py --- tests/test_search.py | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/tests/test_search.py b/tests/test_search.py index ebc02b5ab..d07edb31e 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -96,16 +96,21 @@ def test_genetic_algorithm(): 'D': [2, 3] } - population = init_population(8, ['0', '1'], 4) - def fitness(c): return sum(c[n1] != c[n2] for (n1, n2) in edges.values()) - solution = genetic_algorithm(population, fitness) - assert solution == "0101" or solution == "1010" + solution_chars = GA_GraphColoringChars(edges, fitness) + assert solution_chars == ['R', 'G', 'R', 'G'] or solution_chars == ['G', 'R', 'G', 'R'] + + solution_bools = GA_GraphColoringBools(edges, fitness) + assert solution_bools == [True, False, True, False] or solution_bools == [False, True, False, True] + + solution_ints = GA_GraphColoringInts(edges, fitness) + assert solution_ints == [0, 1, 0, 1] or solution_ints == [1, 0, 1, 0] # Queens Problem - population = init_population(100, [str(i) for i in range(8)], 8) + gene_pool = range(8) + population = init_population(100, gene_pool, 8) def fitness(q): non_attacking = 0 @@ -122,10 +127,31 @@ def fitness(q): return non_attacking - solution = genetic_algorithm(population, fitness, f_thres=25) + solution = genetic_algorithm(population, fitness, gene_pool=gene_pool, f_thres=25) assert fitness(solution) >= 25 +def GA_GraphColoringChars(edges, fitness): + gene_pool = ['R', 'G'] + population = init_population(8, gene_pool, 4) + + return genetic_algorithm(population, fitness, gene_pool=gene_pool) + + +def GA_GraphColoringBools(edges, fitness): + gene_pool = [True, False] + population = init_population(8, gene_pool, 4) + + return genetic_algorithm(population, fitness, gene_pool=gene_pool) + + +def GA_GraphColoringInts(edges, fitness): + population = init_population(8, [0, 1], 4) + + return genetic_algorithm(population, fitness) + + + # TODO: for .ipynb: """ >>> compare_graph_searchers() pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy