Простой симулятор естественного отбора/эволюции на Python

Да, я могу помочь вам создать простой симулятор естественного отбора/эволюции на Python. Ниже приведен пример реализации с использованием основных концепций естественного отбора и эволюции.

import random
class Organism:
    def __init__(self, genes):
        self.genes = genes
    def fitness(self, target):
        return sum(gene == target_gene for gene, target_gene in zip(self.genes, target))
    def reproduce(self, partner):
        split_point = random.randint(0, len(self.genes))
        child_genes = self.genes[:split_point] + partner.genes[split_point:]
        return Organism(child_genes)
def simulate_evolution(target, population_size, max_generations):
    population = [Organism([random.choice('01') for _ in range(len(target))]) for _ in range(population_size)]
    for generation in range(max_generations):
        population.sort(key=lambda organism: organism.fitness(target), reverse=True)
        if population[0].genes == target:
            return population[0], generation
        next_generation = population[:population_size // 2]
        for _ in range(population_size - population_size // 2):
            parent1 = random.choice(next_generation)
            parent2 = random.choice(next_generation)
            child = parent1.reproduce(parent2)
            next_generation.append(child)
        population = next_generation
    return None, max_generations
# Example usage
target_genes = 'Hello, World!'
population_size = 100
max_generations = 1000
result, generations = simulate_evolution(target_genes, population_size, max_generations)
if result is not None:
    print(f"Target genes '{target_genes}' reached after {generations} generations.")
else:
    print(f"Target genes not reached after {generations} generations.")

Этот код моделирует популяцию организмов с генами, представленными в виде двоичных строк. Организмы развиваются на протяжении поколений посредством естественного отбора и размножения. Приспособленность организма определяется количеством генов, соответствующих генам-мишеням. Моделирование продолжается до тех пор, пока не будут достигнуты целевые гены или не будет достигнуто максимальное количество поколений.