@Override
	protected List<Chromosome> filter(List<Chromosome> children) {
		List<Chromosome> newChildren = new ArrayList<Chromosome>();
		int repeats = 0;
		// Remove children which are too similar
		for (Chromosome c : children) {
			boolean unique = true;
			for (Chromosome c2 : children) {
				if (c == c2) continue;
				if (Math.abs(c.similarityIndex(c2)) < 0.001) { // too similar
					unique = false;
					break;
				}
			}
			if (unique) {
				// remove children which are too similar to parents
				for (Chromosome p : population) {
					if (Math.abs(c.similarityIndex(p)) < 0.001) {
						unique = false;
						break;
					}
				}
			}
			if (unique)
				newChildren.add(c);
			else {
				repeats++;
				try {
					// Add replacement freshie and collect its fitness
					Chromosome newGuy = c.getClass().getConstructor().newInstance();
					newChildren.add(newGuy);
				} catch (java.lang.Exception e) {
					e.printStackTrace();
				}
			}
		}
		
		System.out.println("Repeats: " + repeats);
		
		return newChildren;
	}