遗传算法#
课前测验#
遗传算法 (GA) 基于一种进化式方法,通过模拟种群的进化过程来为给定问题找到最优解。这种方法由 John Henry Holland 于1975年提出。
遗传算法基于以下理念:
- 问题的有效解可以表示为基因
- 交叉允许我们将两个解结合起来,生成一个新的有效解
- 使用某种适应度函数进行选择,以筛选出更优的解
- 引入变异以打破优化过程的稳定性,从而摆脱局部最小值
如果你想实现遗传算法,需要以下步骤:
- 找到一种方法,用基因 g∈Γ 编码问题的解
- 在基因集合 Γ 上定义适应度函数 fit: Γ→R,函数值越小表示解越优。
- 定义交叉机制,将两个基因结合生成一个新的有效解 crossover: Γ2→Γ。
- 定义变异机制 mutate: Γ→Γ。
在许多情况下,交叉和变异是操作基因的简单算法,比如处理数字序列或位向量。
遗传算法的具体实现可能因情况而异,但总体结构如下:
- 选择初始种群 G⊂Γ
- 随机选择将在此步骤执行的操作:交叉或变异
- 交叉:
- 随机选择两个基因 g1, g2 ∈ G
- 计算交叉结果 g=crossover(g1,g2)
- 如果 fit(g)<fit(g1) 或 fit(g)<fit(g2),用 g 替换种群中的对应基因。
- 变异 - 随机选择一个基因 g∈G,并用 mutate(g) 替换它
- 从步骤2开始重复,直到适应度函数值足够小,或达到步骤数限制。
常见任务#
遗传算法通常解决以下任务:
- 排程优化
- 最优装箱
- 最优切割
- 加速穷举搜索
✍️ 练习:遗传算法#
通过以下笔记本继续学习:
访问这个笔记本,查看两个使用遗传算法的示例:
- 公平分配宝藏
- 八皇后问题
总结#
遗传算法被用于解决许多问题,包括物流和搜索问题。这个领域的灵感来源于心理学和计算机科学的交叉研究。
🚀 挑战#
“遗传算法易于实现,但其行为难以理解。” 来源 进行一些研究,找到一个遗传算法的实现,例如解决数独问题,并以草图或流程图的形式解释其工作原理。
课后测验#
复习与自学#
观看这个精彩视频,了解计算机如何通过遗传算法训练的神经网络学习玩超级马里奥。我们将在下一节中学习更多关于计算机学习玩游戏的内容。
作业:丢番图方程#
你的目标是解决所谓的丢番图方程——一个具有整数根的方程。例如,考虑方程 a+2b+3c+4d=30。你需要找到满足该方程的整数根。
此作业的灵感来源于这篇文章。
提示:
- 可以考虑根的范围为 [0;30]
- 作为基因,可以使用根值列表
使用 Diophantine.ipynb 作为起点。