返回

文章详情

自停车汽车使用遗传算法 (2021)

Hacker News2026年9月28日 01:21

TL;DR 本文将训练汽车使用遗传算法进行自我停车。我们将创建第一代具有随机基因组的汽车,这些汽车的行为大致如下:在大约第40代时,汽车开始学习什么是自停车,并开始靠近停车位。另一个稍微有挑战性的起点示例:是的,汽车在这过程中撞到了一些其他汽车,而且并没有完全合适停车位,但对于它们来说,这仅仅是世界创造以来的第40代,所以请心怀宽容,给汽车一些成长的空间 :D 你可以启动 🚕 自停车汽车进化模拟器,直接在浏览器中查看进化过程。模拟器给你以下机会:可以从头开始训练汽车并自行调整遗传参数,可以看到训练好的自停车汽车在行动,可以尝试手动停车。这个项目的遗传算法是用TypeScript实现的。本文将展示完整的遗传源代码,但你也可以在进化模拟器的仓库中找到最终的代码示例。我们将使用遗传算法来处理进化汽车基因组的特定任务。然而,本文仅涉及算法的基础知识,绝不是遗传算法主题的完整指南。话虽如此,让我们深入细节... 计划 逐步地,我们将把创建自停车汽车的高层任务分解为寻找180位最佳组合的简单低层优化问题(寻找最佳汽车基因组)。我们要做的有:💪🏻 给汽车提供“肌肉”(引擎、方向盘),让它能够朝停车位移动。👀 给汽车提供“眼睛”(传感器),让它能够看到周围的障碍物。🧠 给汽车提供“大脑”,根据汽车所见(通过传感器获取的障碍物)来控制肌肉(动作)。大脑将会是一个简单的纯函数 movements = f(sensors)。🧬 发展大脑,使其能够根据传感器输入做出正确动作。这就是我们将应用遗传算法的地方。代代相传,我们的大脑函数 movements = f(sensors) 将学习如何将汽车朝停车位移动。 给汽车提供“肌肉” 为了能够移动,汽车需要“肌肉”。让我们给汽车两种类型的肌肉:引擎肌肉 - 允许汽车向后移动 ↓、向前移动 ↑ 或 ◎ 静止(空挡)方向盘肌肉 - 允许汽车向左转 〈← 或 → 右转,或◎ 移动时保持直行。凭借这两种肌肉,汽车可以执行以下动作:在我们的例子中,肌肉是接收来自大脑的信号的接收器,每100毫秒接收一次信号。根据大脑信号的值,肌肉会采取不同的动作。我们将下方讲述“大脑”部分,但现在可以说,我们的大脑对每种肌肉可能只发送三种信号:-1,0或+1。 type MuscleSignal = -1 | 0 | 1; 例如,大脑可能会向引擎肌肉发送信号值 +1,它将开始向前移动汽车。信号 -1 对引擎则使汽车向后移动。同时,如果大脑向方向盘肌肉发送信号 -1,它将使汽车向左转,等等。在我们的情况下,以下是大脑信号值与肌肉动作的对应关系:肌肉 信号 = -1 信号 = 0 信号 = +1 引擎 ↓ 向后 ◎ 中立 ↑ 向前 方向盘 ← 向左 ◎ 直行 → 向右 你可以使用进化模拟器,尝试手动停车,以查看汽车的肌肉如何工作。每当你按下WASD键之一(或使用触控屏操纵杆),你就会向引擎和方向盘肌肉发送 -1、0 或 +1 的信号。 给汽车提供“眼睛” 在我们的汽车学习如何使用其肌肉进行自我停车之前,它需要能够“看到”周围环境。让我们给它8个以距离传感器形式存在的“眼睛”:每个传感器可以在0-4米的距离范围内探测到障碍物。每个传感器每100毫秒向汽车的“大脑”报告最新的障碍物信息。每当传感器未看到任何障碍物时,它会报告值0。相反,如果传感器的值很小但不为零(即0.01米),这意味着障碍物很近。你可以使用进化模拟器查看每个传感器的颜色如何根据障碍物的接近程度而变化。 type Sensors = number[]; 给汽车提供“大脑” 此时,我们的汽车可以“看到”和“移动”,但没有“协调者”将“眼睛”的信号转变为“肌肉”的正确动作。我们需要给汽车一个“大脑”。大脑输入 作为来自传感器的输入,每100毫秒,大脑将获得8个浮动数字,每个数字的范围为[0...4]。例如,输入可能如下所示:const sensors: Sensors = [s0, s1]

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

☕请我喝杯咖啡