def test_random_diff_duplicates_and_size(stop, n, start): ga = StandardGA(fitness_test_sin_func) nums = ga._random_diff(stop, n, start=start) assert len(nums) == len(set(nums)) assert len(nums) == n
def test_random_diff_duplicates_and_size(stop, n, start): ga = StandardGA(fitness_test_sin_func) nums = ga._random_diff(stop, n, start=start) assert len(nums) == len(set(nums)) assert len(nums) == n
def test_sort_population(optim): ga = StandardGA(fitness_test_sin_func, optim=optim) ga.population = list(unsorted_population) ga._sort_population() required_population = sort_population(optim, list(unsorted_population)) assert ga.population == required_population
def test_sort_population(optim): ga = StandardGA(fitness_test_sin_func, optim=optim) ga.population = list(unsorted_population) ga._sort_population() required_population = sort_population(optim, list(unsorted_population)) assert ga.population == required_population
def test_update_solution(chrom, fitness, optim, result): ga = StandardGA(fitness_test_sin_func, optim=optim) ga.best_chromosome = 1 ga.best_fitness = 100 ga._update_solution(chrom, fitness) assert ga.best_solution == result
def test_select_parents_tournament(): population = list(unsorted_population) population = sort_population('min', population) ga = StandardGA(fitness_test_sin_func, optim='min', selection='tournament', tournament_size=len(population)) parent1, parent2 = ga._select_parents(population) assert (parent1.fitness_val, parent2.fitness_val) == (1, 2)
def test_select_parents_tournament(): population = list(unsorted_population) population = sort_population('min', population) ga = StandardGA(fitness_test_sin_func, optim='min', selection='tournament', tournament_size=len(population)) parent1, parent2 = ga._select_parents(population) assert (parent1.fitness_val, parent2.fitness_val) == (1, 2)
def test_conduct_tournament_population_part(optim): ga = StandardGA(fitness_test_sin_func, optim=optim) population = list(unsorted_population) population = sort_population(optim, population) size = 2 best1, best2 = ga._conduct_tournament(population, size) if optim == 'max': assert population[best1].fitness_val >= population[best2].fitness_val else: assert population[best1].fitness_val <= population[best2].fitness_val
def test_conduct_tournament_population_part(optim): ga = StandardGA(fitness_test_sin_func, optim=optim) population = list(unsorted_population) population = sort_population(optim, population) size = 2 best1, best2 = ga._conduct_tournament(population, size) if optim == 'max': assert population[best1].fitness_val >= population[best2].fitness_val else: assert population[best1].fitness_val <= population[best2].fitness_val
def test_extend_population(): ga = StandardGA(fitness_test_sin_func, optim='min') ga.population = [IndividualGA(1, 100)] new_elems = [IndividualGA(2, 50), IndividualGA(3, 150)] ga.extend_population(new_elems) assert ga.best_solution == (2, 50) result = [] for i, individ in zip(range(len(ga.population)), ga.population): result.append((individ.chromosome, individ.fitness_val)) assert result == [(3, 150), (1, 100), (2, 50)]
def test_extend_population(): ga = StandardGA(fitness_test_sin_func, optim='min') ga.population = [IndividualGA(1, 100)] new_elems = [IndividualGA(2, 50), IndividualGA(3, 150)] ga.extend_population(new_elems) assert ga.best_solution == (2, 50) result = [] for i, individ in zip(range(len(ga.population)), ga.population): result.append((individ.chromosome, individ.fitness_val)) assert result == [(3, 150), (1, 100), (2, 50)]
def test_conduct_tournament_whole_population(optim): ga = StandardGA(fitness_test_sin_func, optim=optim) population = list(unsorted_population) population = sort_population(optim, population) size = len(population) if optim == 'max': correct_out = (7, 6) else: correct_out = (1, 2) best1, best2 = ga._conduct_tournament(population, size) assert (population[best1].fitness_val, population[best2].fitness_val) == correct_out
def test_init_valid_cross_type(cross_type): """ This function tests only common valid values of crossover type. DO NOT FORGET THAT SUBCLASSES (of StandardGA) HAVE ITS OWN RESTRICTIONS THAT MUST BE THOROUGHLY TESTED. """ StandardGA(fitness_test_sin_func, cross_type=cross_type)
def test_conduct_tournament_whole_population(optim): ga = StandardGA(fitness_test_sin_func, optim=optim) population = list(unsorted_population) population = sort_population(optim, population) size = len(population) if optim == 'max': correct_out = (7, 6) else: correct_out = (1, 2) best1, best2 = ga._conduct_tournament(population, size) assert (population[best1].fitness_val, population[best2].fitness_val) == correct_out
def test_init_invalid_mut_type(mut_type): """ This function tests only common invalid values of mutation type. DO NOT FORGET THAT SUBCLASSES (of StandardGA) HAVE ITS OWN RESTRICTIONS THAT MUST BE THOROUGHLY TESTED. """ with pytest.raises(ValueError): StandardGA(fitness_test_sin_func, mut_type=mut_type)
def test_update_solution(chrom, fitness, optim, result): ga = StandardGA(fitness_test_sin_func, optim=optim) ga.best_chromosome = 1 ga.best_fitness = 100 ga._update_solution(chrom, fitness) assert ga.best_solution == result
def test_invalid_random_diff(): ga = StandardGA(fitness_test_sin_func) with pytest.raises(ValueError): ga._random_diff(2, 10, start=0)
def test_select_parents_unknown_type(): ga = StandardGA(fitness_test_sin_func) ga.selection = 'unknown' with pytest.raises(ValueError): ga._select_parents([])
def test_invalid_conduct_tournament(population, size): ga = StandardGA(fitness_test_sin_func) with pytest.raises(ValueError): ga._conduct_tournament(population, size)
def test_invalid_init_population(chromosomes): ga = StandardGA(fitness_test_sin_func) with pytest.raises(ValueError): ga.init_population(chromosomes)
def test_init_invalid_optim(): with pytest.raises(ValueError): StandardGA(fitness_test_sin_func, optim='LIE!')
def test_init_valid_mutation_prob(prob): StandardGA(fitness_test_sin_func, mut_prob=prob)
def test_init_valid_crossover_prob(prob): StandardGA(fitness_test_sin_func, cross_prob=prob)
def test_init_valid_selection_1(selection): StandardGA(fitness_test_sin_func, selection=selection)
def test_init_valid_selection_tournament(): StandardGA(fitness_test_sin_func, selection='tournament', tournament_size=2)
def test_init_valid_elitism(elitism): StandardGA(fitness_test_sin_func, elitism=elitism)
def test_compute_rank_wheel_sum(size, result): ga = StandardGA(fitness_test_sin_func) assert ga._compute_rank_wheel_sum(size) == result
def test_random_diff_whole_interval(): ga = StandardGA(fitness_test_sin_func) nums = ga._random_diff(5, 5, start=0) assert nums == list(range(5))
def test_invalid_random_diff(): ga = StandardGA(fitness_test_sin_func) with pytest.raises(ValueError): ga._random_diff(2, 10, start=0)
def test_best_solution(): ga = StandardGA(fitness_test_sin_func) ga.best_chromosome = [1, 2] ga.best_fitness = 155 assert ga.best_solution == ([1, 2], 155)
def test_init_invalid_elitism(elitism): with pytest.raises(ValueError): StandardGA(fitness_test_sin_func, elitism=elitism)
def test_init_fitness_func(): with pytest.raises(ValueError): StandardGA()
def test_random_diff_whole_interval(): ga = StandardGA(fitness_test_sin_func) nums = ga._random_diff(5, 5, start=0) assert nums == list(range(5))
def test_init_valid_optim(optim): StandardGA(fitness_test_sin_func, optim=optim)
def test_invalid_init_population(chromosomes): ga = StandardGA(fitness_test_sin_func) with pytest.raises(ValueError): ga.init_population(chromosomes)
def test_select_parents_unknown_type(): ga = StandardGA(fitness_test_sin_func) ga.selection = 'unknown' with pytest.raises(ValueError): ga._select_parents([])
def test_init_invalid_selection_type(): with pytest.raises(ValueError): StandardGA(fitness_test_sin_func, selection='unknown')
def test_select_parents_wheel_sum(selection, wheel_sum): ga = StandardGA(fitness_test_sin_func, selection=selection) with pytest.raises(ValueError): ga._select_parents([], wheel_sum)
def test_init_invalid_mutation_prob(prob): with pytest.raises(ValueError): StandardGA(fitness_test_sin_func, mut_prob=prob)
def test_select_parents_wheel_sum(selection, wheel_sum): ga = StandardGA(fitness_test_sin_func, selection=selection) with pytest.raises(ValueError): ga._select_parents([], wheel_sum)
def test_init_invalid_crossover_prob(prob): with pytest.raises(ValueError): StandardGA(fitness_test_sin_func, cross_prob=prob)
def test_compute_rank_wheel_sum(size, result): ga = StandardGA(fitness_test_sin_func) assert ga._compute_rank_wheel_sum(size) == result
def test_invalid_conduct_tournament(population, size): ga = StandardGA(fitness_test_sin_func) with pytest.raises(ValueError): ga._conduct_tournament(population, size)
def test_best_solution(): ga = StandardGA(fitness_test_sin_func) ga.best_chromosome = [1, 2] ga.best_fitness = 155 assert ga.best_solution == ([1,2], 155)