Write an EA program
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
原文地址: https://www.cveoy.top/t/topic/inf5 著作权归作者所有。请勿转载和采集!