예제 #1
0
  /**
   * This method is used to evaluate the first population,that it is called after the calling to
   * <code>setup</code> method
   *
   * @throws JMException
   */
  public void evaluatePopulation() throws JMException {
    // NOTEIT First evaluation of the SolutionSet

    int loadingPosition = population_.getLoadingPosition();

    // Commented by Bernabe Dorronsoro
    //		if ( ( specialSolution_ != null ) ){
    //
    //			DecisionVariables[] best = new DecisionVariables[problem_.getNumberOfIslands()-1];
    //
    //			population_.clear();
    //			for( int f=0 ; f<populationSize_ ; ++f) {
    //				DecisionVariables specialDV   = problem_.generateSpecial( specialSolution_ );
    //				if ( f < numberOfSolutions_ ){
    //					for( int i=0 ; i<problem_.getNumberOfIslands() ; ++i ){
    //						if (i<loadingPosition)
    //							best[i] = new DecisionVariables( specialDV.extractSlice(i) );
    //						if (i>loadingPosition)
    //							best[i-1] = new DecisionVariables( specialDV.extractSlice(i) );
    //					} // for
    //
    //					population_.setBestRow( best , f );
    //				} // if
    //
    //				DecisionVariables decisionVar = new DecisionVariables( specialDV.extractSlice(
    // loadingPosition ) );
    //				Solution S = new Solution( problem_ , decisionVar );
    //				population_.add( S );
    //				S.unLink();
    //			} // for
    //
    //		} // if

    Iterator<Solution> it = population_.iterator();
    while (it.hasNext()) {
      Solution tmp = it.next();
      tmp.unLink();
      population_.linkExternalDecisionVariables(tmp);
      problem_.evaluate(tmp, loadingPosition);
      problem_.evaluateConstraints(tmp);
      ++evaluations_;
    } // while

    // population_.printObjectivesToFile( "FUN.S."+loadingPosition );
  } // evaluatePopulation
예제 #2
0
  public void generation() throws JMException {

    //		if ( ( (evaluations_%4000) == 0 ) && (population_.getLoadingPosition()==0) ){
    //			String file = "FUN." + ((int) evaluations_/4000 );
    //			population_.printObjectivesToFile( file );
    //		} // if

    // Create the offSpring solutionSet
    int loadingPosition = population_.getLoadingPosition();

    //		System.out.println("Isla: " + loadingPosition + "Numero de islas: " + islands_ + "Numero de
    // variables: " + problem_.getNumberOfVariables());

    offspringPopulation_ =
        new SolutionSet(
            loadingPosition, islands_, numberOfSolutions_, populationSize_, mergeSolution_);
    // Link the external dv's
    offspringPopulation_.setBestExternResults(population_);
    Solution[] parents = new Solution[2];
    for (int i = 0; i < (populationSize_ / 2); i++) {
      // obtain parents
      Object obj = selectionOperator_.execute(population_, loadingPosition);

      if (obj.getClass()
          .getCanonicalName()
          .toString()
          .equalsIgnoreCase(Solution.class.getCanonicalName().toString())) {
        parents[0] = (Solution) obj;
        parents[1] = (Solution) selectionOperator_.execute(population_, loadingPosition);
      } // if
      else {
        parents = (Solution[]) obj;
      } // else

      if (evaluations_ < maxEvaluations_) {
        Solution[] offSpring = (Solution[]) crossoverOperator_.execute(parents, loadingPosition);

        offSpring[0].unLink();
        offSpring[1].unLink();

        mutationOperator_.execute(offSpring[0], loadingPosition);
        mutationOperator_.execute(offSpring[1], loadingPosition);

        if (localSearchOperator_ != null) {
          localSearchOperator_.execute(offSpring[0], loadingPosition);
          //					evaluations_ += localSearchOperator_.getEvaluations();
          localSearchOperator_.execute(offSpring[1], loadingPosition);
          //					evaluations_ += localSearchOperator_.getEvaluations();
        } // if

        population_.linkExternalDecisionVariables(offSpring[0]);
        population_.linkExternalDecisionVariables(offSpring[1]);

        problem_.evaluate(offSpring[0], loadingPosition);
        problem_.evaluateConstraints(offSpring[0]);
        problem_.evaluate(offSpring[1], loadingPosition);
        problem_.evaluateConstraints(offSpring[1]);

        offspringPopulation_.add(offSpring[0]);
        offspringPopulation_.add(offSpring[1]);
        evaluations_ += 2;
      } // if
      else {
        offspringPopulation_.add(new Solution(parents[0]));
        offspringPopulation_.add(new Solution(parents[1]));
      } // else
    } // for
  } // generation