Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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