有趣的是,我已经用Python创建了你所描述的内容。
这里是一张图片:
绿色的点是食物,红色的点是需要进化和学习如何吃掉食物块的生物体。
对于此类问题的最佳灵感和指导来源绝对是Polyworld: youtube.com/watch?v=_m97_kL4ox0。
另一个很好的例子是帮助我了解反向传播的,我建议您也学习一下,可以在这里找到:arctrix.com/nas/python/bpnn.py。
虽然这个问题太过笼统难以正确回答,但是一般的提示是先全面了解人工神经网络的运作方式,然后使用以下通用算法构建程序:
- 检查用户输入(相机是否移动?程序是否退出?)
- 对于每个生物体:
- 检查其是否存活等。
- 从世界中获取输入。
- 评估其神经网络。
- 将结果应用于物理身体。
- 应用正面或负面反馈(正如您所看到的,这一切都归结为此)。
- 更新世界(您可以使用物理引擎)。
- 可选地,绘制世界。
例如,您的输入神经元可以对应于物理或视觉刺激。我前面有什么东西吗?然后将神经元X设置为1,否则设置为0。
而您的输出神经元可以映射到力量。神经元Y处于活动状态吗?如果是,则在此生物体的这个世界周期中施加一个冲量。
我还建议您不要使用他人的库进行神经网络计算,因为这是学习如何自己实现它们的好方法。您可以使用Pygame进行渲染,并使用PyBox2D进行物理计算。
现在,关于“看到”其他生物的问题...这些问题最好是在隔离环境中解决。你需要一个良好的软件设计,它将使你将整个问题分成许多子问题,这些子问题更容易解决。
通常,可以通过光线投射来实现视觉效果。创建一个方向性的、标准化的向量(长度为1个单位,即
sqrt(x*x + y*y) == 1
),然后对其进行缩放(
x *= factor; y *= factor;
)。这样,你就得到了一条向外延伸的直线。在缩放之前,你可以遍历世界上所有的生物(你需要优化这个过程),并检查向量是否在它们内部。如果是,计算它的长度,你的生物就可以获得一些关于周围环境的信息。
还有许多更简单的方法。例如,将每个生物周围的空间划分为四个象限,其中四个代表眼睛(生物的上、右、下、左)。然后计算从生物到每个其他生物的距离(优化!)。找到最近的生物。找出它在哪个象限。哇,一个活跃的眼睛!
我希望我对你有所帮助,但是你需要更加精确,当你遇到实际问题时再回来。同时阅读FAQ。