Genetic
Genetic
Every step of the solution is written as a single function to increase code readability
Necessary Imports
import numpy as np
calculate_fitness(chromosome)
single_point_crossover(parent1, parent2)
mutate(chromosome)
• Randomly selects one bit in an chromosome and flips its value (from 0 to 1 or
1 to 0), introducing variability in the population.
# Function to randomly mutate one bit in an array
def mutate(chromosome):
bit_to_mutate = np.random.randint(len(chromosome))
chromosome[bit_to_mutate] = 1 if chromosome[bit_to_mutate] == 0
else 0
generate_next_generation(current_generation)
return new_generation
run_genetic_algorithm(num_iterations, initial_population_size=4,
array_length=9)
current_generation =
generate_next_generation(current_generation)
print("\n")
return current_generation
Putting All Together And Solving The Problem
num_iterations = 5
final_generation = run_genetic_algorithm(num_iterations)
print("Final generation:")
for i, chromosome in enumerate(final_generation):
print(f"Array {i + 1}: {chromosome}, Fitness:
{calculate_fitness(chromosome)}")
Iteration 1
Array 1: [1 1 0 1 0 0 0 1 1], Fitness: 1
Array 2: [1 1 0 1 0 1 1 1 0], Fitness: 1
Array 3: [0 1 0 1 1 0 0 1 1], Fitness: 1
Array 4: [0 1 1 0 0 0 1 1 1], Fitness: 0
Iteration 2
Array 1: [1 1 0 1 0 0 0 1 1], Fitness: 1
Array 2: [1 1 0 0 0 1 1 1 0], Fitness: 0
Array 3: [1 1 0 1 0 1 1 1 0], Fitness: 1
Array 4: [1 1 0 1 0 0 0 1 1], Fitness: 1
Iteration 3
Array 1: [1 1 0 1 0 1 0 1 1], Fitness: 2
Array 2: [1 1 0 1 0 1 1 1 0], Fitness: 1
Array 3: [1 1 0 1 0 1 1 1 0], Fitness: 1
Array 4: [1 1 0 1 0 0 0 1 1], Fitness: 1
Iteration 4
Array 1: [1 1 0 1 0 1 0 1 1], Fitness: 2
Array 2: [1 1 0 1 0 1 1 1 0], Fitness: 1
Array 3: [1 1 0 1 0 1 1 1 0], Fitness: 1
Array 4: [1 1 0 1 0 1 1 1 1], Fitness: 1
Iteration 5
Array 1: [1 1 0 1 0 1 0 1 1], Fitness: 2
Array 2: [1 1 0 1 0 1 1 1 0], Fitness: 1
Array 3: [1 1 1 1 0 1 1 1 0], Fitness: 0
Array 4: [1 1 0 1 0 1 0 1 1], Fitness: 2
Final generation:
Array 1: [1 1 0 1 0 1 0 1 1], Fitness: 2
Array 2: [1 1 0 1 0 1 0 1 1], Fitness: 2
Array 3: [1 1 0 1 0 1 0 1 1], Fitness: 2
Array 4: [1 1 0 1 1 1 0 1 1], Fitness: 0