首页 >后端开发 >Python教程 >使用遗传算法进行点模拟 - 第 2 部分

使用遗传算法进行点模拟 - 第 2 部分

Barbara Streisand
Barbara Streisand原创
2025-01-16 18:58:11437浏览

本教程通过添加精英突出显示、增加障碍复杂性、“达到”计数器和交叉育种等功能来增强遗传算法模拟。让我们来分解一下改进。

第 1 部分:视觉增强和障碍复杂性

模拟升级为通过将精英点(上一代中表现最好的点)着色为蓝色来在视觉上区分它们。 这是通过向 is_elite 类的 Dot 方法添加 draw 布尔参数并有条件地应用蓝色来实现的。 Population 类的 draw 方法被修改为根据点是否在 elites 列表中传递此布尔值。

障碍生成经过重构,具有更大的灵活性。 ObstacleGoal 类被移动到单独的 obstacles.py 文件中,从而促进更清晰的代码组织。 引入了 constants.py 文件来保存屏幕尺寸和人口规模等全局变量,从而防止文件之间出现冗余。 OBSTACLES0 中定义了多种障碍物配置(OBSTACLES1OBSTACLES2OBSTACLES3OBSTACLES4OBSTACLES5obstacles.py),可以在不同的挑战级别之间轻松切换。 主脚本导入这些配置并选择所需的配置。 添加了检查以确保目标始终存在,即使使用通过列表理解生成的障碍列表(如 OBSTACLES4)也是如此。

添加了“已达到”计数器,用于显示上一代成功达到目标的点数。 这是通过修改 generate_next_generation 类中的 Population 方法来计数并返回该值来实现的。 然后主循环在屏幕上显示此计数。

Dots Simulation using Genetic Algorithm - Part 2

突出显示精英和障碍的模拟

Dots Simulation using Genetic Algorithm - Part 2

模拟跑步OBSTACLES0个障碍

第 2 部分:实现单点交叉

模拟从复制过渡到单点交叉以产生后代。 crossover 类方法被添加到 Dot 类中。此方法将两个父点作为输入,选择一个随机交叉点,并通过组合每个父点的运动序列的部分(表示为方向向量列表)来创建两个子代。 generate_next_generation 方法已更新为利用此交叉方法,生成后代对而不是单个克隆。 突变继续应用于后代。

Dots Simulation using Genetic Algorithm - Part 2

单点交叉

改进的模拟提供了增强的可视化、可调节的难度和更复杂的育种机制,使其成为更强大和更有洞察力的遗传算法示例。提到的未来改进包括保存/加载功能和速度优化。 作者还鼓励加入他们的 Discord 社区以进行进一步的合作。

以上是使用遗传算法进行点模拟 - 第 2 部分的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn