public static LemmingRunRecord Crossover(this LemmingRunRecord record1, LemmingRunRecord record2)
        {
            var random = new Random();
            var size   = Math.Max(record1.Size, record2.Size);
            var result = new LemmingMovementDirection[size];

            for (var i = 0; i < size; i++)
            {
                result[i] = random.Next(0, 2) == 0 ? record1[i] : record2[i];
            }
            return(new LemmingRunRecord(result));
        }
 public static void Mutate(this LemmingRunRecord record, int frameId, int previousFrameId)
 {
     record.MutateLastActions(frameId);
     if (WinnersTable.WinnersData.Any())
     {
         var data = WinnersTable.WinnersData[0].Data;
         Array.Resize(ref data, (int)(0.75 * data.Length));
         record = new LemmingRunRecord(data);
     }
     if (Math.Abs(frameId - previousFrameId) < _minimumFrameDistanceToForceMutation)
     {
         record.Mutate(0.2);
     }
 }