文章目录
-
- [🧬 一、基本思想](#🧬 一、基本思想)
- [🧪 二、遗传算法的基本流程](#🧪 二、遗传算法的基本流程)
- [🧬 三、核心操作详解](#🧬 三、核心操作详解)
- [✅ 四、优点](#✅ 四、优点)
- [⚠️ 五、缺点](#⚠️ 五、缺点)
- [🎯 六、应用场景](#🎯 六、应用场景)
- [🧩 七、简单示例(Python伪代码)](#🧩 七、简单示例(Python伪代码))
- [📘 总结](#📘 总结)
Genetic Algorithms(遗传算法,简称 GA) 是一种受生物进化机制启发的优化和搜索算法,属于 进化计算(Evolutionary Computation) 的一个分支。它模拟自然界中"适者生存"的演化过程,通过不断迭代来寻找问题的最优解或近似最优解。
🧬 一、基本思想
遗传算法的核心思想是:
模仿自然选择和遗传机制,从一组可能的解出发,通过选择、交叉、变异等操作不断演化出更优的解。
它不依赖梯度信息,适用于复杂、非线性、不可导或黑箱优化问题。
🧪 二、遗传算法的基本流程
-
初始化种群(Population)
- 随机生成一组初始解(称为个体),每个解用某种形式表示(如二进制串、实数向量、排列等)。
-
评估适应度(Fitness Evaluation)
- 对每个个体计算其"适应度",即该解对当前问题的优劣程度(目标函数值)。
-
选择(Selection)
- 根据适应度选择表现较好的个体参与繁殖下一代。
-
交叉(Crossover / Recombination)
- 将两个父代个体的部分基因组合,生成新的子代个体。
-
变异(Mutation)
- 对某些个体进行小概率的随机变化,以保持多样性,防止陷入局部最优。
-
替换(Replacement)
- 用新生成的子代个体替换旧种群的一部分或全部。
-
判断终止条件
- 若满足终止条件(如达到最大迭代次数、找到满意解),则结束;否则返回步骤2继续执行。
🧬 三、核心操作详解
操作 | 描述 |
---|---|
编码(Encoding) | 将解空间映射为染色体(例如:二进制、浮点数、字符串等) |
适应度函数(Fitness Function) | 衡量个体优劣的标准,通常是目标函数的转换形式 |
选择策略(如轮盘赌、锦标赛) | 保留优秀个体,淘汰差个体 |
交叉(如单点交叉、均匀交叉) | 组合两个父代,产生新个体 |
变异(如位翻转、扰动) | 随机改变部分基因,增加多样性 |
✅ 四、优点
- 不需要梯度信息,适用于复杂或无法求导的问题;
- 具有全局搜索能力,能跳出局部最优;
- 易于并行化;
- 可用于多目标优化、组合优化等问题。
⚠️ 五、缺点
- 计算成本较高;
- 参数设置敏感(如种群大小、交叉率、变异率);
- 收敛速度慢;
- 精度不如基于梯度的方法高(在可导问题中)。
🎯 六、应用场景
遗传算法广泛应用于以下领域:
应用领域 | 示例 |
---|---|
机器学习 | 特征选择、神经网络结构优化 |
工程优化 | 路径规划、资源调度、电路设计 |
运筹学 | TSP(旅行商问题)、背包问题 |
金融 | 投资组合优化、交易策略生成 |
生物信息学 | 基因序列比对、蛋白质结构预测 |
🧩 七、简单示例(Python伪代码)
python
# 伪代码示意:使用遗传算法求解最大化 f(x) = x^2
import random
def fitness(x):
return x**2
def crossover(parent1, parent2):
# 简单平均交叉
return (parent1 + parent2) / 2
def mutate(x, mutation_rate=0.1):
if random.random() < mutation_rate:
return x + random.uniform(-1, 1)
else:
return x
# 初始化种群
population = [random.uniform(-10, 10) for _ in range(10)]
for generation in range(100):
# 评估适应度
scores = [(fitness(ind), ind) for ind in population]
scores.sort(reverse=True)
# 选择前50%作为父母
parents = [ind for score, ind in scores[:5]]
# 交叉与变异生成新个体
new_population = []
while len(new_population) < 10:
p1, p2 = random.sample(parents, 2)
child = crossover(p1, p2)
child = mutate(child)
new_population.append(child)
population = new_population
# 输出最终结果
best = max(population, key=fitness)
print("Best solution:", best)
print("Max value:", best**2)
📘 总结
类别 | 内容 |
---|---|
定义 | 模拟生物进化机制的一种随机搜索优化方法 |
关键词 | 种群、适应度、选择、交叉、变异 |
优势 | 全局搜索、无需梯度、适合复杂问题 |
劣势 | 收敛慢、参数敏感 |
应用 | 机器学习、路径规划、组合优化、金融建模等 |