/*
* This file is part of JGAP.
*
* JGAP offers a dual license model containing the LGPL as well as the MPL.
*
* For licensing information please see the file license.txt included with JGAP
* or have a look at the top of class org.jgap.Chromosome which representatively
* includes the JGAP license policy applicable for any file delivered with JGAP.
*/
package examples.simpleBoolean;
import org.jgap.*;
import org.jgap.impl.*;
/**
* Simple class that demonstrates the basic usage of JGAP.
*
* @author Neil Rotstan
* @author Klaus Meffert
* @since 2.0
*/
public class SimpleExample {
/** String containing the CVS revision. Read out via reflection!*/
private static final String CVS_REVISION = "$Revision: 1.9 $";
/**
* Starts the example.
* @param args if optional first argument provided, it represents the number
* of bits to use, but no more than 32
*
* @author Neil Rotstan
* @author Klaus Meffert
* @since 2.0
*/
public static void main(String[] args) {
int numEvolutions = 500;
Configuration gaConf = new DefaultConfiguration();
gaConf.setPreservFittestIndividual(true);
gaConf.setKeepPopulationSizeConstant(false);
Genotype genotype = null;
int chromeSize;
if (args.length > 0) {
chromeSize = Integer.parseInt(args[0]);
}
else {
chromeSize = 16;
}
double maxFitness = Math.pow(2.0, (double) chromeSize) - 1;
if (chromeSize > 32) {
System.err.println("This example does not handle " +
"Chromosomes greater than 32 bits in length.");
System.exit( -1);
}
try {
IChromosome sampleChromosome = new Chromosome(gaConf,
new BooleanGene(gaConf), chromeSize);
gaConf.setSampleChromosome(sampleChromosome);
gaConf.setPopulationSize(20);
gaConf.setFitnessFunction(new MaxFunction());
genotype = Genotype.randomInitialGenotype(gaConf);
}
catch (InvalidConfigurationException e) {
e.printStackTrace();
System.exit( -2);
}
int progress = 0;
int percentEvolution = numEvolutions / 100;
for (int i = 0; i < numEvolutions; i++) {
genotype.evolve();
// Print progress.
// ---------------
if (percentEvolution > 0 && i % percentEvolution == 0) {
progress++;
IChromosome fittest = genotype.getFittestChromosome();
double fitness = fittest.getFitnessValue();
System.out.println("Currently fittest Chromosome has fitness " +
fitness);
if (fitness >= maxFitness) {
break;
}
}
}
// Print summary.
// --------------
IChromosome fittest = genotype.getFittestChromosome();
System.out.println("Fittest Chromosome has fitness " +
fittest.getFitnessValue());
}
}