Program: 64542
Project: 64542
Buggy source:
@Override public void run(){
  for (int i=0; i < problem.getNumberOfVariables(); i++) {
    size+=problem.getNumberOfBits(i);
  }
  minimumDistance=(int)Math.floor(this.initialConvergenceCount * size);
  comparator=new CrowdingDistanceComparator<BinarySolution>();
  evaluations=0;
  population=new ArrayList<>();
  for (int i=0; i < populationSize; i++) {
    BinarySolution newIndividual=problem.createSolution();
    problem.evaluate(newIndividual);
    population.add(newIndividual);
    evaluations++;
  }
  boolean finishCondition=false;
  while (!finishCondition) {
    List<BinarySolution> offspringPopulation=new ArrayList<>(populationSize);
    for (int i=0; i < population.size() / 2; i++) {
      List<BinarySolution> parents=new ArrayList<>(2);
      parents.add(parentSelection.execute(population));
      parents.add(parentSelection.execute(population));
      if (hammingDistance(parents.get(0),parents.get(1)) >= minimumDistance) {
        List<BinarySolution> offspring=crossover.execute(parents);
        problem.evaluate(offspring.get(0));
        problem.evaluate(offspring.get(1));
        offspringPopulation.add(offspring.get(0));
        offspringPopulation.add(offspring.get(1));
        evaluations+=2;
      }
    }
    List<BinarySolution> union=new ArrayList<>();
    union.addAll(population);
    union.addAll(offspringPopulation);
    List<BinarySolution> newPopulation=newGenerationSelection.execute(union);
    if (solutionSetsAreEquals(population,newPopulation)) {
      minimumDistance--;
    }
    if (minimumDistance <= -convergenceValue) {
      minimumDistance=(int)(1.0 / size * (1 - 1.0 / size) * size);
      int preserve=(int)Math.floor(preservedPopulation * population.size());
      newPopulation=new ArrayList<>(populationSize);
      Collections.sort(population,comparator);
      for (int i=0; i < preserve; i++) {
        newPopulation.add((BinarySolution)population.get(i).copy());
      }
      for (int i=preserve; i < populationSize; i++) {
        BinarySolution solution=(BinarySolution)population.get(i).copy();
        cataclysmicMutation.execute(solution);
        problem.evaluate(solution);
        newPopulation.add(solution);
        evaluations++;
      }
    }
    population=newPopulation;
    if (evaluations >= maxEvaluations) {
      finishCondition=true;
    }
  }
}

Fixed version (ground truth):
@Override public void run(){
  for (int i=0; i < problem.getNumberOfVariables(); i++) {
    size+=problem.getNumberOfBits(i);
  }
  minimumDistance=(int)Math.floor(this.initialConvergenceCount * size);
  comparator=new CrowdingDistanceComparator<BinarySolution>();
  evaluations=0;
  population=new ArrayList<>();
  for (int i=0; i < populationSize; i++) {
    BinarySolution newIndividual=problem.createSolution();
    problem.evaluate(newIndividual);
    population.add(newIndividual);
    evaluations++;
  }
  boolean finishCondition=false;
  while (!finishCondition) {
    List<BinarySolution> offspringPopulation=new ArrayList<>(populationSize);
    for (int i=0; i < population.size() / 2; i++) {
      List<BinarySolution> parents=new ArrayList<>(2);
      parents.add(parentSelection.execute(population));
      parents.add(parentSelection.execute(population));
      if (hammingDistance(parents.get(0),parents.get(1)) >= minimumDistance) {
        List<BinarySolution> offspring=crossover.execute(parents);
        problem.evaluate(offspring.get(0));
        problem.evaluate(offspring.get(1));
        offspringPopulation.add(offspring.get(0));
        offspringPopulation.add(offspring.get(1));
        evaluations+=2;
      }
    }
    List<BinarySolution> union=new ArrayList<>();
    union.addAll(population);
    union.addAll(offspringPopulation);
    List<BinarySolution> newPopulation=newGenerationSelection.execute(union);
    if (SolutionListUtils.solutionListsAreEquals(population,newPopulation)) {
      minimumDistance--;
    }
    if (minimumDistance <= -convergenceValue) {
      minimumDistance=(int)(1.0 / size * (1 - 1.0 / size) * size);
      int preserve=(int)Math.floor(preservedPopulation * population.size());
      newPopulation=new ArrayList<>(populationSize);
      Collections.sort(population,comparator);
      for (int i=0; i < preserve; i++) {
        newPopulation.add((BinarySolution)population.get(i).copy());
      }
      for (int i=preserve; i < populationSize; i++) {
        BinarySolution solution=(BinarySolution)population.get(i).copy();
        cataclysmicMutation.execute(solution);
        problem.evaluate(solution);
        newPopulation.add(solution);
        evaluations++;
      }
    }
    population=newPopulation;
    if (evaluations >= maxEvaluations) {
      finishCondition=true;
    }
  }
}