📄 dtlz5.java
字号:
/**
* DTLZ5.java
*
* @author Antonio J. Nebro
* @author Juanjo Durillo
* @version 1.0
* Created on 16 de octubre de 2006, 17:30
*/
package jmetal.problems.DTLZ;
import jmetal.base.*;
import jmetal.base.Configuration.*;
import jmetal.util.JMException;
/**
* Class representing problem DTLZ5
*/
public class DTLZ5 extends Problem{
/**
* Creates a default DTLZ5 problem instance (12 variables and 3 objectives)
* @param solutionType The solution type must "Real" or "BinaryReal".
*/
public DTLZ5(String solutionType){
this(12,3,solutionType);
} // DTLZ5
/**
* Creates a new DTLZ5 problem instance
* @param numberOfVariables Number of variables
* @param numberOfObjectives Number of objective functions
* @param solutionType The solution type must "Real" or "BinaryReal".
*/
public DTLZ5(Integer numberOfVariables,
Integer numberOfObjectives,
String solutionType) {
numberOfVariables_ = numberOfVariables.intValue();
numberOfObjectives_ = numberOfObjectives.intValue();
numberOfConstraints_= 0;
problemName_ = "DTLZ5";
lowerLimit_ = new double[numberOfVariables_];
upperLimit_ = new double[numberOfVariables_];
for (int var = 0; var < numberOfVariables_; var++){
lowerLimit_[var] = 0.0;
upperLimit_[var] = 1.0;
}
solutionType_ = Enum.valueOf(SolutionType_.class, solutionType) ;
// All the variables are of the same type, so the solutionType name is the
// same than the variableType name
variableType_ = new VariableType_[numberOfVariables_];
for (int var = 0; var < numberOfVariables_; var++){
variableType_[var] = Enum.valueOf(VariableType_.class, solutionType) ;
} // for
} // DTLZ5
/**
* Evaluates a solution
* @param solution The solution to evaluate
* @throws JMException
*/
public void evaluate(Solution solution) throws JMException {
DecisionVariables gen = solution.getDecisionVariables();
double [] x = new double[numberOfVariables_];
double [] f = new double[numberOfObjectives_];
double [] theta = new double[numberOfObjectives_-1];
double g = 0.0;
int k = numberOfVariables_ - numberOfObjectives_ + 1;
for (int i = 0; i < numberOfVariables_; i++)
x[i] = gen.variables_[i].getValue();
for (int i = numberOfVariables_ - k; i < numberOfVariables_; i++)
g += (x[i] - 0.5)*(x[i] - 0.5);
double t = java.lang.Math.PI / (4.0 * (1.0 + g));
theta[0] = x[0] * java.lang.Math.PI / 2.0;
for (int i = 1; i < (numberOfObjectives_-1); i++)
theta[i] = t * (1.0 + 2.0 * g * x[i]);
for (int i = 0; i < numberOfObjectives_; i++)
f[i] = 1.0 + g;
for (int i = 0; i < numberOfObjectives_; i++){
for (int j = 0; j < numberOfObjectives_ - (i + 1); j++)
f[i] *= java.lang.Math.cos(theta[j]);
if (i != 0){
int aux = numberOfObjectives_ - (i + 1);
f[i] *= java.lang.Math.sin(theta[aux]);
} // if
} //for
for (int i = 0; i < numberOfObjectives_; i++)
solution.setObjective(i,f[i]);
} // evaluate
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -