我正在发展一群神经网络,我一直在努力将适应度分数标准化(到 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)的分数,这隐藏了分数的潜在多样性。
任何关于如何标准化这些健身分数的建议将不胜感激。