title: How to normalize fitness scores?
body: <p>I'm evolving a population of neural networks and I've been struggling with normalizing fitness scores (to values in range 0 to 1), so that the number on its own is most meaningful. The issue is that agents are tested under different conditions - they participate in different games, and for each game a different fitness function is used. Fitness functions look more or less like this:</p>
  
  <pre><code>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))));
  </code></pre>
  
  <p>but each one will take different inputs. I can easily normalize numbers for each of them separately because I can estimate the maxima and minima of the input. Some of them will be in range of (-30,000, 360,000) and some (0, 900).</p>
  
  <p>Part that I find difficult is that the agents may be tested on two, three or more games at the same time, so their fitness score will be a sum of the scores on all of the games. Additionally, new games can be introduced/evolved. Hard-coding normalization's min and max is not suitable here.</p>
  
  <p>If I try to use very large max and min, I end up with a scores in a range (0.40, 0.45) for the games that have smaller input values which hides the underlying diversity of the scores.</p>
  
  <p>Any suggestions on how these fitness scores could be normalized will be greatly appreciated.</p>