Регистрация | Вход
import random# Генерация начальной популяцииdef generate_population(population_size, chromosome_size): population = [] for i in range(population_size): chromosome = [random.randint(0, 1) for j in range(chromosome_size)] population.append(chromosome) return population# Определение приспособленности особиdef fitness(chromosome): return sum(chromosome)# Определение отбора родителейdef selection(population): population_fitness = [fitness(chromosome) for chromosome in population] sum_fitness = sum(population_fitness) probabilities = [fitness/sum_fitness for fitness in population_fitness] parent1 = random.choices(population, weights=probabilities)[0] parent2 = random.choices(population, weights=probabilities)[0] return parent1, parent2# Определение скрещивания двух родителейdef crossover(parent1, parent2): crossover_point = random.randint(1, len(parent1)-1) child1 = parent1[:crossover_point] + parent2[crossover_point:] child2 = parent2[:crossover_point] + parent1[crossover_point:] return child1, child2# Определение мутацииdef mutation(chromosome, mutation_rate): for i in range(len(chromosome)): if random.random() < mutation_rate: chromosome[i] = 1 - chromosome[i] return chromosome# Основная функция генетического алгоритмаdef genetic_algorithm(population_size, chromosome_size, generations, mutation_rate): population = generate_population(population_size, chromosome_size) for i in range(generations): new_population = [] while len(new_population) < population_size: parent1, parent2 = selection(population) child1, child2 = crossover(parent1, parent2) child1 = mutation(child1, mutation_rate) child2 = mutation(child2, mutation_rate) new_population.append(child1) new_population.append(child2) population = new_population best_chromosome = max(population, key=fitness) return best_chromosome# Пример использования генетического алгоритмаpopulation_size = 100chromosome_size = 10generations = 50mutation_rate = 0.01best_chromosome = genetic_algorithm(population_size, chromosome_size, generations, mutation_rate)print(best_chromosome)