我决定使用神经网络来为我拥有的动画引擎创建行为。神经网络为我拥有的每个身体部位提供3个vector3s和1个欧拉角。第一个vector3是位置,第二个是它的速度,第三个是它的角速度。欧拉角是身体部位的旋转。我有7个身体部位。这些数据类型中的每一个都有3个浮点数。 7 * 4 * 3 = 84,所以我的神经网络有84个输入。输出映射到角色的肌肉。它们提供适用于每种肌肉的力量,其中有15种。
我同时运行15个网络10秒钟,通过计算最低能量使用,具有最少量的z和x运动,以及如果身体部位与其余部分相比处于正确的y位置来评定其适应性(臀部) .y> upperleg.y,upperleg.y> lowerleg.y等),然后通过遗传算法运行它们。我正在运行一个神经网络,每个隐藏层有168个神经元,有8个隐藏层。我试图让角色站直,不要走动太多。我跑了3000代,我甚至没有接近。
神经网络和遗传算法是this tutorial的C#版本。我将交叉方法从一个点改为混合。
我有84个输入和15个输出。我的神经网络应该有多大?
答案 0 :(得分:5)
你要解决的问题是一个非常棘手的问题,我怀疑任何“香草”GA(特别是那些使用固定架构的网络)都会解决它(在合理的时间内)。我也不认为你会在隐藏层找到“正确数量的神经元”。
但是,如果您愿意花一些时间,请查看HyperNEAT for Locomotion Control in Modular Robots处理或多或少相同的问题。 他们使用一种名为HyperNEAT的非常先进的GA技术,并报告了一些好的结果。
HyperNEAT建立在NEAT(Neuroevolution of augmenting topologies)之上。 NEAT不仅能够发展人工神经网络的权重,还能够发展其结构。它从简单的网络开始,慢慢使它们变得更加复杂,直到你达到目标(或放弃)。
然后NEAT略有改动,以便能够使用各种激活功能。当它应用于一组点时,它将使它能够产生各种各样的“模式”。在坐标系中。模式可以具有一些有趣的特征,例如完美/不完美的对称性,或者它们可以是周期性的。此变体称为Compositional pattern-producing network或CPPN。这项技术的一个壮观应用是PicBreeder,其中网络用于“绘制”图片。
在HyperNEAT中,CPPN用于创建其他人工神经网络。新网络的隐藏层由所谓的基板表示,可以将其想象为层的神经元被放置到2D / 3D坐标系。然后,对于每对可能的神经元(从输入层到所有隐藏,从所有隐藏到所有输出),CPPN用于确定权重。因此我们有间接编码,
总而言之,它会让你有机会解决你的复杂问题。
正如您所看到的,这种技术有各种层次,因此为您自己实现它并不容易。幸运的是,有一些很好的实现,你可以在NEAT home page上找到它们,以及许多其他文档,论文和教程。
答案 1 :(得分:0)
有趣的方法!我一直在考虑类似的事情,很想听听你得到的结果。
你必须测试,但我猜你有太多的隐藏层。我认为这个应用程序最多可以使用一个或两个。
你还应该看看你的健身功能 - 我怀疑提供学习可能“太难”,因为在一开始它没有希望站起来。因此,您陷入的“本地最小”是学习如何以最少的努力堕落。不是很有用。一般来说,GA都受到当地极小的影响。
为了改善你的健身功能,我会尝试一些方法来惩罚每一帧直立的偏差。这将为管理部分平衡的解决方案提供一些信誉,因此应该有一条改进路径。在你让它们达到平衡之前,我根本不会为能量使用而烦恼。