def test_permutation_mutation(self): """ Chromosome: float array containing x and y values Selection: roulette-wheel Crossover operator: uniform crossover Mutation operator: permutation Elitism is disabled Termination criteria: number of generations = 100 Parameters: population_size: 27 reproduction rate: 0.125 crossover rate: 0.75 mutation rate: 0.125 """ sys.stdout.write("Starting test_permutation_mutation: ONE-POINT CROSSOVER, PERMUTATION MUTATION, ELITISM DISABLED\n") reproduction = 0.125 crossover = 0.75 mutation = 0.125 population_size = 27 individual_factory = optimization.XAbsoluteSquareFloatIndividualFactory(crossover_method='one_point', mutation_method='permutation') termination_criteria = ga.NumberOfGenerationsTerminationCriteria(number_of_generations=100) solver = ga.GeneticAlgorithm(individual_factory, population_size=population_size, reproduction=reproduction, crossover=crossover, mutation=mutation, elitism=False, termination_criteria=termination_criteria) repeat = 1 info = pandas.DataFrame([], columns=["generation", "mean", "max", "std", "execution"]) for idx in xrange(repeat): solver.set_params() solver.init_population() solver.evolve() i = solver.get_generation_info() i["execution"] = idx info = info.append(i) matplotlib.pyplot.plot(i['generation'], i['max'], "coral", label="melhor - permutation", linewidth=2) matplotlib.pyplot.plot(i['generation'], i['mean'], "cadetblue", label="media - permutation", linewidth=2) matplotlib.pyplot.plot(i['generation'], i['std'], ".", label="desvio - permutation") info.to_csv('/home/fabio/sin5006/tests/results/xabsolutesquare/test_permutation_mutation.csv', sep=',', index=False) base = pandas.read_csv('/home/fabio/sin5006/tests/results/xabsolutesquare/test_base.csv') matplotlib.pyplot.plot(base["generation"], base["max"], "r", label="melhor - basic mutation", linewidth=2) matplotlib.pyplot.plot(base["generation"], base["mean"], "b", label="media - basic mutation", linewidth=2) matplotlib.pyplot.plot(base["generation"], base["std"], "k.", label="desvio - basic mutation") legend = matplotlib.pyplot.legend(loc='lower right', numpoints=1) matplotlib.pyplot.xlabel("geracoes") matplotlib.pyplot.ylabel("fitness") matplotlib.pyplot.show() sys.stdout.write("Finished. Results are at: /home/fabio/sin5006/tests/results/xabsolutesquare/test_permutation_mutation.csv\n") assert True
def test_4(self): """ Chromosome: sequence of clients separed by an 'X' when a new vehicle is assigned Selection: roulette-wheel Crossover operator: simple random crossover Mutation operator: simple random mutation Elitism is enabled Termination criteria: number of generations = 100 Parameters: population_size: 97 reproduction rate: 0.25 crossover rate: 0.625 mutation rate: 0.125 """ fname = './input/A-n80-k10.vrp' nodes, capacity, distances, demand = self.load_test(fname) individual_factory = cvrp.CVRPIndividualFactory( nodes, capacity, distances, demand, individual_type='corrected') termination_criteria = ga.NumberOfGenerationsTerminationCriteria( number_of_generations=100) solver = ga.GeneticAlgorithm(individual_factory, population_size=97, reproduction=0.25, crossover=0.625, mutation=0.125, elitism=True, termination_criteria=termination_criteria) if self.grid_search: params = { "population_size": numpy.logspace(3, 12, base=2, num=6, dtype=int), "operators_rate": filter( lambda x: sum(x) == 1.0, itertools.product(numpy.arange(.125, 0.875, .125), repeat=3)), "elitism": [True], "termination_criteria": [ ga.NumberOfGenerationsTerminationCriteria( number_of_generations=100) ] } grid = grid_search.GridSearch(solver, params) grid.search(0.0) grid_scores = grid.get_grid_scores() fname = './results/correction_operator/A-n80-k10.vrp.grid.csv' grid_scores.to_csv(fname, sep=',', index=False) sys.stdout.write( "Finished. Results are at: ./results/correction_operator/A-n80-k10.vrp.grid.csv\n" ) else: sys.stdout.write( "Starting test_4: CORRECTION + SIMPLE RANDOM OPERATORS, ELITISM ENABLED\n" ) sys.stdout.write("Input: ./tests/vrp/A-n80-k10.vrp\n") solver.init_population() solver.evolve() info = solver.get_generation_info() fname = './results/correction_operator/A-n80-k10.vrp.csv' info.to_csv(fname, sep=',', index=False) plt.plot(info['generation'], info['min'], "r", label="melhor", linewidth=2) plt.plot(info['generation'], info['mean'], "b", label="media", linewidth=2) plt.plot(info['generation'], info['std'], "k.", label="desvio") legend = plt.legend(loc='lower right', numpoints=1) plt.xlabel("geracoes") plt.ylabel("fitness") plt.yscale('log') plt.show() sys.stdout.write( "Finished. Results are at: ./results/correction_operator/A-n80-k10.vrp.csv\n" ) assert True
def test_base(self): """ Chromosome: float array containing x and y values Selection: roulette-wheel Crossover operator: one-point crossover Mutation operator: basic (replaces x or y by another valid value) Elitism is disabled Termination criteria: number of generations = 100 Parameters: population_size: 27 reproduction rate: 0.125 crossover rate: 0.75 mutation rate: 0.125 """ sys.stdout.write( "Starting test_elitism: ONE-POINT CROSSOVER, BASIC MUTATION, ELITISM ENABLED\n" ) reproduction = 0.125 crossover = 0.75 mutation = 0.125 population_size = 27 repeat = 1 info = pandas.DataFrame( [], columns=["generation", "mean", "max", "std", "execution"]) for idx in xrange(repeat): individual_factory = optimization.RastriginFloatIndividualFactory( crossover_method='one_point', mutation_method='basic_mutation') termination_criteria = ga.NumberOfGenerationsTerminationCriteria( number_of_generations=100) solver = ga.GeneticAlgorithm( individual_factory, population_size=population_size, reproduction=reproduction, crossover=crossover, mutation=mutation, elitism=False, termination_criteria=termination_criteria) solver.set_params() solver.init_population() solver.evolve() i = solver.get_generation_info() i["execution"] = idx info = info.append(i) matplotlib.pyplot.plot(i['generation'], i['max'], "r", label="melhor", linewidth=2) matplotlib.pyplot.plot(i['generation'], i['mean'], "b", label="media", linewidth=2) matplotlib.pyplot.plot(i['generation'], i['std'], "k.", label="desvio") info.to_csv( '/home/fabio/sin5006/tests/results/rastrigin/test_base.csv', sep=',', index=False) legend = matplotlib.pyplot.legend(loc='lower right') matplotlib.pyplot.xlabel("geracoes") matplotlib.pyplot.ylabel("fitness") matplotlib.pyplot.show() sys.stdout.write( "Finished. Results are at: /home/fabio/sin5006/tests/results/rastrigin/test_base.csv\n" ) assert True