Sure, here's a simple example of an EA (Evolutionary Algorithm) program written in Python:

import random

# Define the problem function
def fitness_function(individual):
    # Calculate the fitness value of the individual
    fitness = sum(individual)
    return fitness

# Define the individual representation
def create_individual(size):
    # Create a random binary string of the specified size
    individual = [random.randint(0, 1) for _ in range(size)]
    return individual

# Define the population initialization function
def initialize_population(population_size, individual_size):
    # Create a population of individuals
    population = [create_individual(individual_size) for _ in range(population_size)]
    return population

# Define the selection function (tournament selection)
def select_parents(population, num_parents):
    # Select num_parents individuals from the population using tournament selection
    parents = []
    for _ in range(num_parents):
        tournament = random.sample(population, 2)
        winner = max(tournament, key=fitness_function)
        parents.append(winner)
    return parents

# Define the crossover function (single-point crossover)
def crossover(parents, num_offsprings):
    offsprings = []
    for _ in range(num_offsprings):
        parent1, parent2 = random.sample(parents, 2)
        crossover_point = random.randint(1, len(parent1) - 1)
        offspring = parent1[:crossover_point] + parent2[crossover_point:]
        offsprings.append(offspring)
    return offsprings

# Define the mutation function (bit-flip mutation)
def mutate(individual, mutation_rate):
    for i in range(len(individual)):
        if random.random() < mutation_rate:
            individual[i] = 1 - individual[i]
    return individual

# Define the EA main function
def evolutionary_algorithm(population_size, individual_size, num_generations, num_parents, num_offsprings, mutation_rate):
    population = initialize_population(population_size, individual_size)

    for generation in range(num_generations):
        parents = select_parents(population, num_parents)
        offsprings = crossover(parents, num_offsprings)

        next_generation = parents + offsprings

        for individual in next_generation:
            individual = mutate(individual, mutation_rate)

        population = next_generation

        best_individual = max(population, key=fitness_function)
        best_fitness = fitness_function(best_individual)

        print(f"Generation {generation+1}: Best Fitness = {best_fitness}, Best Individual = {best_individual}")

    return best_individual

# Example usage
population_size = 50
individual_size = 10
num_generations = 100
num_parents = 20
num_offsprings = 30
mutation_rate = 0.1

best_solution = evolutionary_algorithm(population_size, individual_size, num_generations, num_parents, num_offsprings, mutation_rate)

This program implements a simple binary string optimization problem using an EA. The fitness function calculates the sum of all elements in the binary string. The program initializes a population of individuals, selects parents using tournament selection, performs single-point crossover, and applies bit-flip mutation. It then repeats this process for a specified number of generations, printing the best fitness and best individual at each generation. Finally, it returns the best individual found

Write an EA program

原文地址: https://www.cveoy.top/t/topic/inf5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录