本教程通过添加精英突出显示、增加障碍复杂性、“达到”计数器和交叉育种等功能来增强遗传算法模拟。让我们来分解一下改进。
第 1 部分:视觉增强和障碍复杂性
模拟升级为通过将精英点(上一代中表现最好的点)着色为蓝色来在视觉上区分它们。 这是通过向 is_elite
类的 Dot
方法添加 draw
布尔参数并有条件地应用蓝色来实现的。 Population
类的 draw
方法被修改为根据点是否在 elites
列表中传递此布尔值。
障碍生成经过重构,具有更大的灵活性。 Obstacle
和 Goal
类被移动到单独的 obstacles.py
文件中,从而促进更清晰的代码组织。 引入了 constants.py
文件来保存屏幕尺寸和人口规模等全局变量,从而防止文件之间出现冗余。 OBSTACLES0
中定义了多种障碍物配置(OBSTACLES1
、OBSTACLES2
、OBSTACLES3
、OBSTACLES4
、OBSTACLES5
、obstacles.py
),可以在不同的挑战级别之间轻松切换。 主脚本导入这些配置并选择所需的配置。 添加了检查以确保目标始终存在,即使使用通过列表理解生成的障碍列表(如 OBSTACLES4
)也是如此。
添加了“已达到”计数器,用于显示上一代成功达到目标的点数。 这是通过修改 generate_next_generation
类中的 Population
方法来计数并返回该值来实现的。 然后主循环在屏幕上显示此计数。
第 2 部分:实现单点交叉
模拟从复制过渡到单点交叉以产生后代。 crossover
类方法被添加到 Dot
类中。此方法将两个父点作为输入,选择一个随机交叉点,并通过组合每个父点的运动序列的部分(表示为方向向量列表)来创建两个子代。 generate_next_generation
方法已更新为利用此交叉方法,生成后代对而不是单个克隆。 突变继续应用于后代。
改进的模拟提供了增强的可视化、可调节的难度和更复杂的育种机制,使其成为更强大和更有洞察力的遗传算法示例。提到的未来改进包括保存/加载功能和速度优化。 作者还鼓励加入他们的 Discord 社区以进行进一步的合作。
以上是使用遗传算法进行点模拟 - 第 2 部分的详细内容。更多信息请关注PHP中文网其他相关文章!