public static double MAX_LONE_PATROL = 6000; // Observed in GECCO 2016 work

        double IFitnessFunction.calculate(SimulatorExperiment engine, Environment environment, instance_pack ip, out double[] objectives)
        {
            if (currentEnvironment == TASK_TEAM_PATROL)
            { // Team patrol
                // Must normalize score
                return(teamPatrol.calculate(engine, environment, ip, out objectives) / MAX_TEAM_PATROL);
            }
            else if (currentEnvironment == TASK_LONE_PATROL)
            { // Lone patrol
                // Must normalize score
                return(lonePatrol.calculate(engine, environment, ip, out objectives) / MAX_LONE_PATROL);
            }
            else if (currentEnvironment == TASK_DUAL_TASK_HALLWAY || currentEnvironment == TASK_DUAL_TASK_FORAGE)
            { // Dual task
                // Both individual dual task fitnss scores are already normalized
                return(dualTask.calculate(engine, environment, ip, out objectives));
            }
            else if (currentEnvironment == TASK_TWO_ROOMS)
            { // Two rooms
                // Score is already normalized to [0,1]
                return(twoRooms.calculate(engine, environment, ip, out objectives));
            }
            else
            {
                Console.WriteLine("Error! Unknown environment! " + environment.name + ":" + currentEnvironment);
                objectives = new double[0];
                System.Environment.Exit(1);
                return(-1000);
            }
        }