Ejemplo n.º 1
0
  /*
   * Selects among the feasible and infeasible solutions
   * @param iterable This is the iterable container holding the solutions among which one must be selected
   * @return a PartialSelection holding the objects retrieved
   */
  @Override
  public PartialSelection<E> on(Iterable<E> iterable) {
    E bestIndividual = iterable.iterator().next();
    E temp;
    double difference;
    ArrayList feasibleEntities = new ArrayList();
    ArrayList inFeasibleEntities = new ArrayList();
    E winningIndividual;
    EuclideanDistanceMeasure euclideanDistanceMeasure = new EuclideanDistanceMeasure();

    for (E current : iterable) {
      temp = (E) current.getClone();

      constraint.enforce(temp);
      difference = euclideanDistanceMeasure.distance(temp.getPosition(), current.getPosition());

      if (difference == 0) {
        feasibleEntities.add(current);
      } else {
        ExtendedIndividual newIndividual = new ExtendedIndividual();
        newIndividual.setIndividual(current);
        newIndividual.setSumOfConstrainViolation(difference);
        inFeasibleEntities.add(newIndividual);
      }
    }

    if (feasibleEntities.size() > 0) {
      return Selection.copyOf(Arrays.asList(selectBestOfFeasible(feasibleEntities)));
    }

    return Selection.copyOf(Arrays.asList(selectBestOfInfeasible(inFeasibleEntities)));
  }
Ejemplo n.º 2
0
  /*
   * Selects the individual with the lowest sum of constraint violation among a set of infeasible solutions
   *@param iterable The set of infeasible solutions
   *@return The best individual among these infeasible solutions
   */
  protected E selectBestOfInfeasible(Iterable<ExtendedIndividual> iterable) {
    E bestIndividual = iterable.iterator().next().getIndividual();
    ExtendedIndividual temp;
    double sumOfConstraintViolation = Double.POSITIVE_INFINITY;
    double sumPerDimension;
    Vector difference;

    for (ExtendedIndividual current : iterable) {
      sumPerDimension = current.getSumOfConstrainViolation();
      if (sumPerDimension < sumOfConstraintViolation) {
        bestIndividual = (E) current.getIndividual().getClone();
        sumOfConstraintViolation = sumPerDimension;
      }
    }

    return bestIndividual;
  }