所以我一直在考虑在 Python 中创建一个类似的程序。问题是我对人工智能几乎一无所知。现在我正在阅读遗传算法和神经网络等,但有很多东西要吸收。
我现在最大的问题是我不知道整个事情是如何组合在一起的。因此,如果有人能告诉我这样的程序的一般框架,我将非常感激。例如,这些生物如何“看到”周围环境中的事物、它们拥有的“染色体”类型以及环境是如何创造的。
此外,任何人都可以为 AI、任何引擎等推荐合适的库吗?我一直在考虑使用神经实验室,这是个好主意吗?
谢谢!
所以我一直在考虑在 Python 中创建一个类似的程序。问题是我对人工智能几乎一无所知。现在我正在阅读遗传算法和神经网络等,但有很多东西要吸收。
我现在最大的问题是我不知道整个事情是如何组合在一起的。因此,如果有人能告诉我这样的程序的一般框架,我将非常感激。例如,这些生物如何“看到”周围环境中的事物、它们拥有的“染色体”类型以及环境是如何创造的。
此外,任何人都可以为 AI、任何引擎等推荐合适的库吗?我一直在考虑使用神经实验室,这是个好主意吗?
谢谢!
有趣的是,我已经用 Python 创建了您所描述的内容。
这是一张照片:
绿点是食物,红点是需要进化和学习如何吃食物块的生物。
最好的灵感和指导来源绝对是 Polyworld:youtube.com/watch ?v=_m97_kL4ox0 。
另一个帮助我了解反向传播的好例子,我建议你也应该学习,在这里:arctrix.com/nas/python/bpnn.py。
虽然这个问题太模糊而无法正确回答,但一般提示是,您首先要对 ANN 的功能有一个坚实的基础,然后用这个通用算法构建一个程序:
例如,您的输入神经元可能与物理或视觉刺激相对应。有什么东西在我面前吗?然后将神经元 X 设置为 1,否则设置为 0。
你的输出神经元可以映射成力。神经元 Y 是否活跃?如果是这样,请在这个世界周期中对这个有机体施加一个冲动。
我还建议您不要将其他人的库用于您的神经网络计算,因为这是实际学习如何自己实现它们的好方法。不过,您可以使用Pygame进行渲染,使用 PyBox2D进行物理。
现在,关于“看到”其他生物……这些问题最好在孤立时解决。你需要一个好的软件设计,它能让你把整个问题分成许多子问题,这些子问题更容易解决。
一般来说,可以通过光线投射来完成视觉。创建一个有方向的归一化向量(其中长度为 1 个单位,即sqrt(x*x + y*y) == 1
),然后对其进行缩放(x *= factor; y *= factor;
)。这样,你会得到一条向外延伸的线。在你缩放它之前,你可以遍历世界上所有的生物(你必须优化它),并检查向量是否在它们里面。如果是,计算它的长度,你的有机体就会有一些关于它周围环境的信息。
有很多更简单的方法。例如,将每个有机体周围的空间划分为四个象限,其中四个代表眼睛(X - 有机体的上、右、下、左)。然后计算从有机体到其他每个有机体的长度(优化!)。找到最近的生物。找出它在哪个象限。瞧,一只活跃的眼睛!
我希望我对您有所帮助,但是您必须更加精确,并在遇到实际问题时回来。阅读常见问题解答。
http://scikit-learn.org/是一个很好的资源(和框架),可以让您了解 Python 中的机器学习。
如果你想构建一个神经网络,http ://pybrain.org/是一个很好的框架。