Evolutionary Algorithm (EA) in Python: A Simple Example
Sure, here's a simple example of an EA (Evolutionary Algorithm) program written in Python:\n\npython\nimport random\n\n# Define the problem function\ndef fitness_function(individual):\n # Calculate the fitness value of the individual\n fitness = sum(individual)\n return fitness\n\n# Define the individual representation\ndef create_individual(size):\n # Create a random binary string of the specified size\n individual = [random.randint(0, 1) for _ in range(size)]\n return individual\n\n# Define the population initialization function\ndef initialize_population(population_size, individual_size):\n # Create a population of individuals\n population = [create_individual(individual_size) for _ in range(population_size)]\n return population\n\n# Define the selection function (tournament selection)\ndef select_parents(population, num_parents):\n # Select num_parents individuals from the population using tournament selection\n parents = []\n for _ in range(num_parents):\n tournament = random.sample(population, 2)\n winner = max(tournament, key=fitness_function)\n parents.append(winner)\n return parents\n\n# Define the crossover function (single-point crossover)\ndef crossover(parents, num_offsprings):\n offsprings = []\n for _ in range(num_offsprings):\n parent1, parent2 = random.sample(parents, 2)\n crossover_point = random.randint(1, len(parent1) - 1)\n offspring = parent1[:crossover_point] + parent2[crossover_point:]\n offsprings.append(offspring)\n return offsprings\n\n# Define the mutation function (bit-flip mutation)\ndef mutate(individual, mutation_rate):\n for i in range(len(individual)):\n if random.random() < mutation_rate:\n individual[i] = 1 - individual[i]\n return individual\n\n# Define the EA main function\ndef evolutionary_algorithm(population_size, individual_size, num_generations, num_parents, num_offsprings, mutation_rate):\n population = initialize_population(population_size, individual_size)\n\n for generation in range(num_generations):\n parents = select_parents(population, num_parents)\n offsprings = crossover(parents, num_offsprings)\n\n next_generation = parents + offsprings\n\n for individual in next_generation:\n individual = mutate(individual, mutation_rate)\n\n population = next_generation\n\n best_individual = max(population, key=fitness_function)\n best_fitness = fitness_function(best_individual)\n\n print(f"Generation {generation+1}: Best Fitness = {best_fitness}, Best Individual = {best_individual}")\n\n return best_individual\n\n# Example usage\npopulation_size = 50\nindividual_size = 10\nnum_generations = 100\nnum_parents = 20\nnum_offsprings = 30\nmutation_rate = 0.1\n\nbest_solution = evolutionary_algorithm(population_size, individual_size, num_generations, num_parents, num_offsprings, mutation_rate)\n\n\nThis 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/p5dJ 著作权归作者所有。请勿转载和采集!