我决定使用神经网络,以便为我已有的动画引擎创建行为。神经网络对我身体的每个部位都有3个vector3s和1个欧拉角。第一个vector3是位置,第二个是它的速度,第三个是它的角速度。欧拉角是身体部位的旋转角度。我有7个身体部位。这些数据类型中的每一个都有3个浮点数。7*4*3 = 84,所以我的神经网络有84个输入。输出映射到角色的肌肉。它们提供适用于每一块肌肉的力量,共有15个。
我同时运行15个网络,持续10秒,通过计算最低能量消耗、最少的z和x运动量以及身体部位是否与其他部位相比处于正确的y位置( use s.y> upperleg.y、upperleg.y > lowerleg.y等)来评估它们的适用性,然后通过遗传算法运行它们。我运行的神经网络每个隐藏层有168个神经元,有8个隐藏层。我试着让角色站直了,不要移动太多。我运行了3000代,我甚至都没能接近。
神经网络和遗传算法是this tutorial的C#版本。我改变了交叉方法,从一点到混合。
我有84个输入和15个输出。我的神经网络应该有多大?
发布于 2010-08-17 16:56:49
你想要解决的问题是一个相当棘手的问题,我怀疑任何“香草”气体(特别是那些使用固定网络架构的气体)将(在合理的时间内)解决它。我也不认为你会在隐藏层中找到“正确的神经元数量”。
然而,如果你愿意花一些时间在它上面,可以看看HyperNEAT for Locomotion Control in Modular Robots,它或多或少地解决了同样的问题。他们使用了一种非常先进的名为HyperNEAT的遗传算法技术,并报告了一些良好的结果。
HyperNEAT是建立在NEAT (Neuroevolution of augmenting topologies)之上的。NEAT不仅可以进化神经网络的权重,还可以进化其结构。它从简单的网络开始,慢慢地让它们变得更加复杂,直到你达到你的目标(或放弃)。
然后稍微修改一下,就可以使用各种激活功能了。当它应用于一组点时,例如在一个坐标系中,它将使它能够产生各种各样的“模式”。这些模式可以有一些有趣的特征,比如完美/不完美的对称性,或者它们可以是周期性的。这种变体被称为Compositional pattern-producing network或CPPN。这项技术的一个壮观的应用是PicBreeder,在那里网络被用来“绘制”图片。
在HyperNEAT中,CPPN用于创建其他ANN。新网络的隐藏层由所谓的衬底表示,可以想象,就像层中的神经元被置于2D/3D坐标系中一样。然后,对于每一对可能的神经元(从输入层到所有隐藏,从所有隐藏到所有输出),使用CPPN来确定权重。因此,我们有一个间接编码,它
总而言之,这将给你一个解决复杂问题的机会。
正如您所看到的,这种技术有不同的层次,因此为您自己实现它并不容易。幸运的是,它有一些很好的实现,你可以在整洁的home page上找到它们,还有很多其他的文档、论文和教程。
发布于 2010-08-17 03:02:02
有趣的方法!我已经考虑类似的事情有一段时间了,我很想知道你得到了什么结果。
你将不得不测试,但我猜你有太多的隐藏层。我认为这个应用程序最多只能使用一两个。
你也应该看看你的健身功能--我怀疑提供学习可能“太难”了,因为在一开始它是没有希望站起来的。因此,你陷入的“局部最小值”就是学习如何以最小的努力跌倒。不是很有用。一般情况下,GAs会遭受相当多的局部最小值。
为了提高你的体能能力,我会尝试像惩罚每一帧的直立偏离。这将在一定程度上归功于管理部分平衡的解决方案,因此应该有改进路径。我根本不会为能源使用而烦恼,除非你让它们达到平衡。
https://stackoverflow.com/questions/3496272
复制相似问题