我正在发展一群神经网络,我一直在努力规范健康分数(到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)的分数,用于具有较小输入值的游戏,这些游戏隐藏了分数的潜在多样性。
关于如何将这些健身分数标准化的任何建议都将受到高度赞赏。
答案 0 :(得分:1)
所以你试图用遗传算法优化神经网络,对吧?凉!
通常建议对ANN进行标准化输入,但这在使用sigmoid激活时尤其适用。您确定需要标准化数据吗?在不知道输入范围的情况下,让ANN完成其工作是非常困难的。
你要做的事对我来说并不是很清楚......但据我所知,这些是我能提出的唯一建议。
检查这两个链接。可能有帮助:
答案 1 :(得分:0)
您可以使用标准的标准化分数: 对于每个人口(在这种情况下,每个输入集合),您可以通过从中减去总体均值来计算个体的分数,然后将其除以标准偏差。
这不会为您留下0到1之间的数字,但允许您将两个群体相互比较