Global and Local genetic algorithm (GL25)

class pypop7.optimizers.ga.gl25.GL25(problem, options)[source]

Global and Local genetic algorithm (GL25).

Note

25 means that 25 percentage of function evaluations (or runtime) are first used for global search while the remaining 75 percentage are then used for local search.

Parameters:
  • problem (dict) –

    problem arguments with the following common settings (keys):
    • ’fitness_function’ - objective function to be minimized (func),

    • ’ndim_problem’ - number of dimensionality (int),

    • ’upper_boundary’ - upper boundary of search range (array_like),

    • ’lower_boundary’ - lower boundary of search range (array_like).

  • options (dict) –

    optimizer options with the following common settings (keys):
    • ’max_function_evaluations’ - maximum of function evaluations (int, default: np.Inf),

    • ’max_runtime’ - maximal runtime to be allowed (float, default: np.Inf),

    • ’seed_rng’ - seed for random number generation needed to be explicitly set (int);

    and with the following particular settings (keys):
    • ’alpha’ - global step-size for crossover (float, default: 0.8),

    • ’n_female_global’ - number of female at global search stage (int, default: 200),

    • ’n_male_global’ - number of male at global search stage (int, default: 400),

    • ’n_female_local’ - number of female at local search stage (int, default: 5),

    • ’n_male_local’ - number of male at local search stage (int, default: 100),

    • ’p_global’ - percentage of global search stage (float, default: 0.25),.

Examples

Use the optimizer to minimize the well-known test function Rosenbrock:

 1>>> import numpy
 2>>> from pypop7.benchmarks.base_functions import rosenbrock  # function to be minimized
 3>>> from pypop7.optimizers.ga.gl25 import GL25
 4>>> problem = {'fitness_function': rosenbrock,  # define problem arguments
 5...            'ndim_problem': 2,
 6...            'lower_boundary': -5*numpy.ones((2,)),
 7...            'upper_boundary': 5*numpy.ones((2,))}
 8>>> options = {'max_function_evaluations': 5000,  # set optimizer options
 9...            'seed_rng': 2022}
10>>> gl25 = GL25(problem, options)  # initialize the optimizer class
11>>> results = gl25.optimize()  # run the optimization process
12>>> # return the number of function evaluations and best-so-far fitness
13>>> print(f"GL25: {results['n_function_evaluations']}, {results['best_so_far_y']}")
14GL25: 5000, 1.0505276479694516e-05

For its correctness checking of coding, refer to this code-based repeatability report for more details.

alpha

global step-size for crossover.

Type:

float

n_female_global

number of female at global search stage.

Type:

int

n_female_local

number of female at local search stage.

Type:

int

n_individuals

population size.

Type:

int

n_male_global

number of male at global search stage.

Type:

int

n_male_local

number of male at local search stage.

Type:

int

p_global

percentage of global search stage.

Type:

float

References

García-Martínez, C., Lozano, M., Herrera, F., Molina, D. and Sánchez, A.M., 2008. Global and local real-coded genetic algorithms based on parent-centric crossover operators. European Journal of Operational Research, 185(3), pp.1088-1113. https://www.sciencedirect.com/science/article/abs/pii/S0377221706006308