我决定使用神经网络来为我拥有的动画引擎创建行为。神经网络为我身体的每个部位接收 3 个向量和 1 个欧拉角。第一个向量 3 是位置,第二个向量是速度,第三个向量是角速度。欧拉角是身体部位的旋转角度。我的身体有 7 个部位。这些数据类型中的每一种都有 3 个浮点数。 7*4*3 = 84,所以我的神经网络有 84 个输入。输出被映射到角色的肌肉。它们提供作用于每块肌肉的力量,共有 15 个。
我同时运行 15 个网络 10 秒,通过计算最低能量消耗、z 和 x 运动量最少以及身体部位与其他部位相比是否处于正确的 y 位置 (hips.y > upperleg.y、upperleg.y > lowerleg.y 等),然后通过遗传算法运行它们。我正在运行一个神经网络,每个隐藏层有 168 个神经元,有 8 个隐藏层。我试图让角色站直,不要走动太多。我已经运行了 3000 代,但我什至没有接近。
神经网络和遗传算法是 C# 版本本教程 http://www.ai-junkie.com/ann/evolved/nnt1.html。我将交叉方法从一点改为混合。
我有 84 个输入和 15 个输出。我的神经网络应该有多大?
你想要解决的问题是一个非常棘手的问题,我怀疑任何“普通”GA(尤其是使用固定网络架构的)都会解决它(在合理的时间内)。我也不认为你会在隐藏层中找到“正确数量的神经元”。
但是,如果您愿意花一些时间,请看一下用于模块化机器人运动控制的 HyperNEAT http://www.few.vu.nl/~ehaasdi/papers/Modular-Locomotion.pdf它或多或少处理相同的问题。
他们使用了一种非常先进的 GA 技术,称为 HyperNEAT,并报告了一些良好的结果。
HyperNEAT 构建于 NEAT 之上(增强拓扑的神经进化 http://en.wikipedia.org/wiki/NeuroEvolution_of_Augmented_Topologies)。 NEAT 不仅能够进化 ANN 的权重,还能进化它们的结构。它从简单的网络开始,慢慢地使它们变得更加复杂,直到您达到目标(或放弃)。
然后 NEAT 稍作修改,以便能够使用各种激活函数。当它应用于一组点时,它将能够产生各种各样的“模式”,例如在坐标系中。这些图案可以具有一些有趣的特征,例如完美/不完美的对称性,或者它们可以是周期性的。这种变体称为构图模式生成网络 http://en.wikipedia.org/wiki/CPPN或CPPN。这项技术的一个引人注目的应用是图像编辑器 http://picbreeder.org/网络用于“绘制”图片。
In 超级NEAT http://en.wikipedia.org/wiki/HyperNEATCPPN 用于创建其他 ANN。新网络的隐藏层由所谓的基底表示,可以想象该层的神经元被置于 2D/3D 坐标系中。然后,对于每对可能的神经元(所有从输入层到所有隐藏层、从所有隐藏层到所有输出层),CPPN 用于确定权重。因此我们有一个间接编码,
- 本身很小
- 最后可以产生任意大的网络
- 这也可以表现出相当复杂的行为
- 现实/自然中出现的模式(同样,对称性、周期性行为)可以相对容易地出现。请注意,对于动画/有效运动来说,它们都非常有利(如果不是必须的话)。
总而言之,它会给您一个解决复杂问题的机会。
正如您所看到的,该技术有多个层次,因此您自己实现它并不那么容易。幸运的是,它有一些很好的实现,您可以在 NEAT 上找到它们主页 http://www.cs.ucf.edu/~kstanley/neat.html,以及许多其他文档、论文和教程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)