Python中进化的人工智能

6
我一直在考虑用Python创建一个类似于这个的程序,但我的问题是我对人工智能几乎一无所知。现在我正在学习遗传算法、神经网络等相关知识,但有很多东西需要吸收。
目前我的最大问题是我不知道整个程序是如何组合在一起的。如果有人能告诉我这样一个程序的一般框架,我将非常感激。例如,生物如何“看到”周围的事物,它们有什么样的“染色体”,以及环境是如何创建的。
此外,有人可以建议适合AI的库、引擎等吗?我一直在考虑使用neurolab,这是一个好主意吗?
谢谢!
2个回答

32
有趣的是,我已经用Python创建了你所描述的内容。
这里是一张图片:

enter image description here

绿色的点是食物,红色的点是需要进化和学习如何吃掉食物块的生物体。

对于此类问题的最佳灵感和指导来源绝对是Polyworld: youtube.com/watch?v=_m97_kL4ox0

另一个很好的例子是帮助我了解反向传播的,我建议您也学习一下,可以在这里找到:arctrix.com/nas/python/bpnn.py

虽然这个问题太过笼统难以正确回答,但是一般的提示是先全面了解人工神经网络的运作方式,然后使用以下通用算法构建程序:

  • 检查用户输入(相机是否移动?程序是否退出?)
  • 对于每个生物体:
    1. 检查其是否存活等。
    2. 从世界中获取输入。
    3. 评估其神经网络。
    4. 将结果应用于物理身体。
    5. 应用正面或负面反馈(正如您所看到的,这一切都归结为此)。
  • 更新世界(您可以使用物理引擎)。
  • 可选地,绘制世界。

例如,您的输入神经元可以对应于物理或视觉刺激。我前面有什么东西吗?然后将神经元X设置为1,否则设置为0。

而您的输出神经元可以映射到力量。神经元Y处于活动状态吗?如果是,则在此生物体的这个世界周期中施加一个冲量。

我还建议您不要使用他人的库进行神经网络计算,因为这是学习如何自己实现它们的好方法。您可以使用Pygame进行渲染,并使用PyBox2D进行物理计算。

现在,关于“看到”其他生物的问题...这些问题最好是在隔离环境中解决。你需要一个良好的软件设计,它将使你将整个问题分成许多子问题,这些子问题更容易解决。
通常,可以通过光线投射来实现视觉效果。创建一个方向性的、标准化的向量(长度为1个单位,即sqrt(x*x + y*y) == 1),然后对其进行缩放(x *= factor; y *= factor;)。这样,你就得到了一条向外延伸的直线。在缩放之前,你可以遍历世界上所有的生物(你需要优化这个过程),并检查向量是否在它们内部。如果是,计算它的长度,你的生物就可以获得一些关于周围环境的信息。
还有许多更简单的方法。例如,将每个生物周围的空间划分为四个象限,其中四个代表眼睛(生物的上、右、下、左)。然后计算从生物到每个其他生物的距离(优化!)。找到最近的生物。找出它在哪个象限。哇,一个活跃的眼睛!

我希望我对你有所帮助,但是你需要更加精确,当你遇到实际问题时再回来。同时阅读FAQ


3
谢谢!非常有帮助。抱歉这个问题不够具体,我只是需要帮忙找一个起点。 - user1689935
1
是的,互联网上有很多其他资源可以提供帮助,而SO主要用于解答FAQ中描述的具体问题。 - corazza
相关:您可以考虑加入AI beta - kenorb
这两个博客链接已经失效。 - clabe45
1
@clabe45 你抓住了我正在迁移我的博客的时候:)但我不确定我是否保留了那两篇文章。我会将它们编辑掉。 - corazza

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接