@Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final SolutionHolder other = (SolutionHolder) obj;
        if (!Objects.equals(this.scaledFitness, other.scaledFitness)) {
            return false;
        }
        if (!Objects.equals(this.probabilityToBeParent, other.probabilityToBeParent)) {
            return false;
        }
        if (!Objects.equals(this.solution, other.solution)) {
            return false;
        }
        if (!Objects.equals(this.fitness, other.fitness)) {
            return false;
        }
        if (!Objects.equals(this.id, other.id)) {
            return false;
        }
        if (!Objects.equals(this.genes, other.genes)) {
            return false;
        }
        return true;
    }