6

所以我一直在考虑在 Python 中创建一个类似的程序。问题是我对人工智能几乎一无所知。现在我正在阅读遗传算法和神经网络等,但有很多东西要吸收。

我现在最大的问题是我不知道整个事情是如何组合在一起的。因此,如果有人能告诉我这样的程序的一般框架,我将非常感激。例如,这些生物如何“看到”周围环境中的事物、它们拥有的“染色体”类型以及环境是如何创造的。

此外,任何人都可以为 AI、任何引擎等推荐合适的库吗?我一直在考虑使用神经实验室,这是个好主意吗?

谢谢!

4

2 回答 2

32

有趣的是,我已经用 Python 创建了您所描述的内容。

这是一张照片:

在此处输入图像描述

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

最好的灵感和指导来源绝对是 Polyworld:youtube.com/watch ?v=_m97_kL4ox0 。

另一个帮助我了解反向传播的好例子,我建议你也应该学习,在这里:arctrix.com/nas/python/bpnn.py

虽然这个问题太模糊而无法正确回答,但一般提示是,您首先要对 ANN 的功能有一个坚实的基础,然后用这个通用算法构建一个程序:

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

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

你的输出神经元可以映射成力。神经元 Y 是否活跃?如果是这样,请在这个世界周期中对这个有机体施加一个冲动。

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

现在,关于“看到”其他生物……这些问题最好在孤立时解决。你需要一个好的软件设计,它能让你把整个问题分成许多子问题,这些子问题更容易解决。

一般来说,可以通过光线投射来完成视觉。创建一个有方向的归一化向量(其中长度为 1 个单位,即sqrt(x*x + y*y) == 1),然后对其进行缩放(x *= factor; y *= factor;)。这样,你会得到一条向外延伸的线。在你缩放它之前,你可以遍历世界上所有的生物(你必须优化它),并检查向量是否在它们里面。如果是,计算它的长度,你的有机体就会有一些关于它周围环境的信息。

有很多更简单的方法。例如,将每个有机体周围的空间划分为四个象限,其中四个代表眼睛(X - 有机体的上、右、下、左)。然后计算从有机体到其他每个有机体的长度(优化!)。找到最近的生物。找出它在哪个象限。瞧,一只活跃的眼睛!

我希望我对您有所帮助,但是您必须更加精确,并在遇到实际问题时回来。阅读常见问题解答

于 2012-11-19T10:50:59.033 回答
6

http://scikit-learn.org/是一个很好的资源(和框架),可以让您了解 Python 中的机器学习。

如果你想构建一个神经网络,http ://pybrain.org/是一个很好的框架。

于 2012-11-18T16:06:21.677 回答