/**
* DifferentialEvolutionOffspring.java
*
* @author Antonio J. Nebro
* @version 1.0
*
* This class returns a solution after applying DE
*/
package jmetal.util.offspring;
import jmetal.core.Operator;
import jmetal.core.Solution;
import jmetal.core.SolutionSet;
import jmetal.operators.crossover.DifferentialEvolutionCrossover;
import jmetal.operators.selection.SelectionFactory;
import jmetal.util.JMException;
import jmetal.util.PseudoRandom;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
public class DifferentialEvolutionOffspring2 extends Offspring {
private double CR_ ;
private double F_ ;
private Operator crossover_ ;
private Operator selection_ ;
Operator mutation_;
public void DifferentialEvolutionOffspring() {
}
/**
* Constructor
* @param CR
* @param F
*/
private DifferentialEvolutionOffspring2(double CR, double F) {
HashMap parameters = null ;
CR_ = CR ;
F_ = F ;
try {
// Crossover operator
parameters = new HashMap() ;
parameters.put("CR", CR_) ;
parameters.put("F", F_) ;
crossover_ = new DifferentialEvolutionCrossover(parameters) ;
// Selecion operator
parameters = null ;
selection_ = SelectionFactory.getSelectionOperator("DifferentialEvolutionSelection", parameters);
} catch (JMException ex) {
Logger.getLogger(DifferentialEvolutionOffspring2.class.getName()).log(Level.SEVERE, null, ex);
}
id_ = "DE2" ;
}
public Solution getOffspring(SolutionSet solutionSet, int index) {
Solution[] parents = new Solution[3] ;
Solution offSpring = null ;
try {
int r1, r2 ;
do {
r1 = (int)(PseudoRandom.randInt(0,solutionSet.size()-1));
} while( r1==index );
do {
r2 = (int)(PseudoRandom.randInt(0,solutionSet.size()-1));
} while( r2==index || r2==r1);
parents[0] = solutionSet.get(r1) ;
parents[1] = solutionSet.get(r2) ;
parents[2] = solutionSet.get(index) ;
offSpring = (Solution) crossover_.execute(new Object[]{solutionSet.get(index), parents});
} catch (JMException ex) {
Logger.getLogger(DifferentialEvolutionOffspring2.class.getName()).log(Level.SEVERE, null, ex);
}
//Create a new solution, using DE
return offSpring ;
} // getOffpring
} // DifferentialEvolutionOffspring