如何规范健身分数?

时间:2013-03-31 15:15:47

标签: java neural-network genetic-algorithm robotics

我正在发展一群神经网络,我一直在努力规范健康分数(到0到1范围内的值),因此这个数字本身就是最有意义的。问题是代理商在不同的条件下进行测试 - 他们参与不同的游戏,并且对于每个游戏,使用不同的健身功能。健身功能或多或少看起来像这样:

agentsFitness[indiv][0] += Util.mean(speed) * (games[0].getConstant(0) - Math.sqrt((Math.abs((speed[LEFT] - speed[RIGHT]))) * (games[0].getConstant(1) - Util.normalize(0, 4000, maxIRActivation))));

但每个人都会采取不同的输入。我可以很容易地将每个数字分别标准化,因为我可以估计输入的最大值和最小值。其中一些将在(-30,000,360,000)和一些(0,900)的范围内。

我觉得困难的部分是代理商可能同时在两个,三个或更多游戏中进行测试,因此他们的健身分数将是所有游戏的分数之和。此外,可以引入/发展新游戏。硬编码规范化的最小值和最大值不适用于此。

如果我尝试使用非常大的最大值和最小值,我最终会得到一个范围(0.40,0.45)的分数,用于具有较小输入值的游戏,这些游戏隐藏了分数的潜在多样性。

关于如何将这些健身分数标准化的任何建议都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

所以你试图用遗传算法优化神经网络,对吧?凉!

通常建议对ANN进行标准化输入,但这在使用sigmoid激活时尤其适用。您确定需要标准化数据吗?在不知道输入范围的情况下,让ANN完成其工作是非常困难的。

  1. 如果您很难对输入进行标准化,请跟踪数据中的当前最大值和最小值。
  2. 更好的是,尝试迭代数据一次以收集有关最大值和最小值的先验信息(仅当它不会显着增加时间复杂度时)。
  3. 或者,尝试调查一个逻辑来猜测最大值和最小值。也许......另一个神经网络做猜测工作:)。这取决于环境。
  4. 你要做的事对我来说并不是很清楚......但据我所知,这些是我能提出的唯一建议。

    检查这两个链接。可能有帮助:

    Normalizing values with unknown bounds

    Normalize components in a language model

答案 1 :(得分:0)

您可以使用标准的标准化分数: 对于每个人口(在这种情况下,每个输入集合),您可以通过从中减去总体均值来计算个体的分数,然后将其除以标准偏差。

这不会为您留下0到1之间的数字,但允许您将两个群体相互比较

相关问题