【发布时间】:2013-03-31 15:15:47
【问题描述】:
我正在发展一组神经网络,并且一直在努力将适应度分数标准化(到 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)的分数,因为这些游戏具有较小的输入值,从而隐藏了分数的潜在多样性。
任何关于如何标准化这些健身分数的建议将不胜感激。
【问题讨论】:
标签: java neural-network genetic-algorithm robotics