Да, я могу помочь вам создать простой симулятор естественного отбора/эволюции на 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.")
Этот код моделирует популяцию организмов с генами, представленными в виде двоичных строк. Организмы развиваются на протяжении поколений посредством естественного отбора и размножения. Приспособленность организма определяется количеством генов, соответствующих генам-мишеням. Моделирование продолжается до тех пор, пока не будут достигнуты целевые гены или не будет достигнуто максимальное количество поколений.