// OneMax.java
//
// Author:
// Antonio J. Nebro <antonio@lcc.uma.es>
// Juan J. Durillo <durillo@lcc.uma.es>
//
// Copyright (c) 2011 Antonio J. Nebro, Juan J. Durillo
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. * OneMax.java
package jmetal.problems.singleObjective;
import jmetal.core.Problem;
import jmetal.core.Solution;
import jmetal.encodings.solutionType.BinarySolutionType;
import jmetal.encodings.variable.Binary;
/**
* Class representing problem OneMax. The problem consist of maximizing the
* number of '1's in a binary string.
*/
public class OneMax extends Problem {
/**
* Creates a new OneZeroMax problem instance
* @param solutionType Solution type
* @throws ClassNotFoundException
*/
public OneMax(String solutionType) throws ClassNotFoundException {
this(solutionType, 512) ;
}
/**
* Creates a new OneMax problem instance
* @param numberOfBits Length of the problem
*/
public OneMax(String solutionType, Integer numberOfBits) {
numberOfVariables_ = 1;
numberOfObjectives_ = 1;
numberOfConstraints_= 0;
problemName_ = "ONEMAX";
solutionType_ = new BinarySolutionType(this) ;
//variableType_ = new Class[numberOfVariables_] ;
length_ = new int[numberOfVariables_];
length_ [0] = numberOfBits ;
if (solutionType.compareTo("Binary") == 0)
solutionType_ = new BinarySolutionType(this) ;
else {
System.out.println("OneMax: solution type " + solutionType + " invalid") ;
System.exit(-1) ;
}
} // OneMax
/**
* Evaluates a solution
* @param solution The solution to evaluate
*/
public void evaluate(Solution solution) {
Binary variable ;
int counter ;
variable = ((Binary)solution.getDecisionVariables()[0]) ;
counter = 0 ;
for (int i = 0; i < variable.getNumberOfBits() ; i++)
if (variable.bits_.get(i))
counter ++ ;
// OneMax is a maximization problem: multiply by -1 to minimize
solution.setObjective(0, -1.0*counter);
} // evaluate
} // OneMax