Evolutionary Algorithms

What are Evolutionary Algorithms?

Evolutionary Algorithms (EAs) are optimization algorithms inspired by the biological evolution process. They are used for solving optimization problems by simulating the process of natural selection, mutation, and recombination. EAs can be applied to a wide range of optimization problems, including function optimization, machine learning, scheduling, and game playing.

Example of using an Evolutionary Algorithm with DEAP in Python:

import random
from deap import base, creator, tools

# Define the fitness function
def fitness_function(individual):
    return sum(individual),

# Create a fitness class and an individual class
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)

# Set up the toolbox for the evolutionary algorithm
toolbox = base.Toolbox()
toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_bool, n=100)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
toolbox.register("evaluate", fitness_function)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)

# Run the evolutionary algorithm
population = toolbox.population(n=50)
ngen = 10
for gen in range(ngen):
    offspring = toolbox.select(population, len(population))
    offspring = list(map(toolbox.clone, offspring))
    for child1, child2 in zip(offspring[::2], offspring[1::2]):
        if random.random() < 0.5:
            toolbox.mate(child1, child2)
            del child1.fitness.values, child2.fitness.values
    for mutant in offspring:
        if random.random() < 0.2:
            del mutant.fitness.values
    fitnesses = map(toolbox.evaluate, offspring)
    for ind, fit in zip(offspring, fitnesses):
        ind.fitness.values = fit
    population[:] = offspring

In this example, we use the DEAP library to implement a simple evolutionary algorithm that optimizes a binary string of length 100.