在人工智能和优化领域,遗传算法(Genetic Algorithm, GA)是一种受生物进化启发的搜索启发式算法。它模拟自然选择、交叉(杂交)和变异等过程,用于解决复杂的优化问题。本教程将手把手教你使用Python语言实现遗传算法,即使你是编程小白,也能轻松上手!
遗传算法的核心思想是“适者生存”。它通过以下步骤不断演化种群,寻找最优解:
我们将解决一个经典问题:寻找函数 f(x) = x² 在区间 [0, 31] 内的最大值。由于 x 是整数,我们可以用 5 位二进制编码表示(因为 2⁵ = 32)。
import randomimport numpy as np # 将二进制字符串转为十进制整数def binary_to_decimal(binary_str): return int(binary_str, 2)# 计算适应度(目标函数 f(x) = x²)def fitness(individual): x = binary_to_decimal(individual) return x ** 2# 初始化种群(每个个体是5位二进制字符串)def initialize_population(pop_size, gene_length=5): return [''.join(random.choice('01') for _ in range(gene_length)) for _ in range(pop_size)]# 轮盘赌选择def selection(population, fitnesses): total_fitness = sum(fitnesses) probabilities = [f / total_fitness for f in fitnesses] selected = [] for _ in range(len(population)): r = random.random() cumulative = 0 for i, prob in enumerate(probabilities): cumulative += prob if r <= cumulative: selected.append(population[i]) break return selected# 单点交叉def crossover(parent1, parent2, crossover_rate=0.8): if random.random() < crossover_rate: point = random.randint(1, len(parent1) - 1) child1 = parent1[:point] + parent2[point:] child2 = parent2[:point] + parent1[point:] return child1, child2 else: return parent1, parent2# 变异def mutate(individual, mutation_rate=0.01): individual_list = list(individual) for i in range(len(individual_list)): if random.random() < mutation_rate: individual_list[i] = '1' if individual_list[i] == '0' else '0' return ''.join(individual_list) def genetic_algorithm(pop_size=10, generations=20, crossover_rate=0.8, mutation_rate=0.01): # 初始化种群 population = initialize_population(pop_size) for gen in range(generations): # 计算适应度 fitnesses = [fitness(ind) for ind in population] # 找到当前最优个体 best_idx = np.argmax(fitnesses) best_individual = population[best_idx] best_value = binary_to_decimal(best_individual) print(f"第 {gen+1} 代: 最优解 x={best_value}, f(x)={fitnesses[best_idx]}") # 选择 selected = selection(population, fitnesses) # 交叉和变异(生成新一代) new_population = [] for i in range(0, pop_size, 2): parent1 = selected[i] parent2 = selected[(i+1) % pop_size] # 避免索引越界 child1, child2 = crossover(parent1, parent2, crossover_rate) child1 = mutate(child1, mutation_rate) child2 = mutate(child2, mutation_rate) new_population.extend([child1, child2]) population = new_population[:pop_size] # 确保种群大小不变 # 返回最终最优解 final_fitnesses = [fitness(ind) for ind in population] best_idx = np.argmax(final_fitnesses) return population[best_idx], final_fitnesses[best_idx]# 运行算法best_sol, best_fit = genetic_algorithm()print(f"\n最终结果: x={binary_to_decimal(best_sol)}, f(x)={best_fit}") 当你运行上述代码,你可能会看到类似以下的输出:
第 1 代: 最优解 x=25, f(x)=625第 2 代: 最优解 x=28, f(x)=784...第 20 代: 最优解 x=31, f(x)=961最终结果: x=31, f(x)=961 遗传算法是Python优化算法中的重要一员,适用于传统方法难以处理的非线性、多峰、离散或黑箱优化问题。掌握它不仅能提升你的算法思维,还能应用于机器学习超参数调优、工程设计、调度问题等多个领域。
本教程带你从零开始,用Python语言实现遗传算法,并通过一个简单例子理解其核心机制。希望你现在对遗传算法入门有了清晰的认识!你可以尝试修改目标函数、调整参数(如种群大小、交叉率、变异率),观察算法表现的变化,进一步巩固所学知识。
关键词回顾:Python遗传算法、遗传算法入门、Python优化算法、遗传算法实战。
本文由主机测评网于2025-12-07发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124263.html