package fr.inria.optimization.cmaes.examples; import fr.inria.optimization.cmaes.CMAEvolutionStrategy; import fr.inria.optimization.cmaes.fitness.IObjectiveFunction; /** The very well-known Rosenbrock objective function to be minimized. */ class Rosenbrock implements IObjectiveFunction { // meaning implements methods valueOf and isFeasible public double valueOf (double[] x) { double res = 0; for (int i = 0; i < x.length-1; ++i) res += 100 * (x[i]*x[i] - x[i+1]) * (x[i]*x[i] - x[i+1]) + (x[i] - 1.) * (x[i] - 1.); return res; } public boolean isFeasible(double[] x) {return true; } // entire R^n is feasible } /** A very short example program how to use the class CMAEvolutionStrategy. The code is given below, see also the code snippet in the documentation of class {@link CMAEvolutionStrategy}. * For implementation of restarts see {@link CMAExample2}.
public class CMAExample1 {
	public static void main(String[] args) {
		IObjectiveFunction fitfun = new Rosenbrock();

		// new a CMA-ES and set some initial values
		CMAEvolutionStrategy cma = new CMAEvolutionStrategy();
		cma.readProperties(); // read options, see file CMAEvolutionStrategy.properties
		cma.setDimension(22); // overwrite some loaded properties
		cma.setInitialX(0.5); // in each dimension, also setTypicalX can be used
		cma.setInitialStandardDeviation(0.2); // also a mandatory setting 
		cma.options.stopFitness = 1e-9;       // optional setting

		// initialize cma and get fitness array to fill in later
		double[] fitness = cma.init();  // new double[cma.parameters.getPopulationSize()];

		// initial output to files
		cma.writeToDefaultFilesHeaders(0); // 0 == overwrites old files

		// iteration loop
		while(cma.stopConditions.getNumber() == 0) {

			// core iteration step 
			double[][] pop = cma.samplePopulation(); // get a new population of solutions
			for(int i = 0; i < pop.length; ++i) {    // for each candidate solution i
				while (!fitfun.isFeasible(pop[i]))   //    test whether solution is feasible,  
					pop[i] = cma.resampleSingle(i);  //       re-sample solution until it is feasible  
				fitness[i] = fitfun.valueOf(pop[i]); //    compute fitness value, where fitfun
			}	                                     //    is the function to be minimized
			cma.updateDistribution(fitness);         // pass fitness array to update search distribution

			// output to console and files
			cma.writeToDefaultFiles();
			int outmod = 150;
			if (cma.getCountIter() % (15*outmod) == 1)
				cma.printlnAnnotation(); // might write file as well
			if (cma.getCountIter() % outmod == 1)
				cma.println(); 
		}
		// evaluate mean value as it is the best estimator for the optimum
		cma.setFitnessOfMeanX(fitfun.valueOf(cma.getMeanX())); // updates the best ever solution 

		// final output
		cma.writeToDefaultFiles(1);
		cma.println();
		cma.println("Terminated due to");
		for (String s : cma.stopConditions.getMessages())
			cma.println("  " + s);
		cma.println("best function value " + cma.getBestFunctionValue() 
				+ " at evaluation " + cma.getBestEvaluationNumber());
			
		// we might return cma.getBestSolution() or cma.getBestX()

	} // main  
} // class
* * @see CMAEvolutionStrategy * * @author Nikolaus Hansen, released into public domain. */ public class CMAExample1 { public static void main(String[] args) { IObjectiveFunction fitfun = new Rosenbrock(); // new a CMA-ES and set some initial values CMAEvolutionStrategy cma = new CMAEvolutionStrategy(); cma.readProperties(); // read options, see file CMAEvolutionStrategy.properties cma.setDimension(10); // overwrite some loaded properties cma.setInitialX(0.05); // in each dimension, also setTypicalX can be used cma.setInitialStandardDeviation(0.2); // also a mandatory setting cma.options.stopFitness = 1e-14; // optional setting // initialize cma and get fitness array to fill in later double[] fitness = cma.init(); // new double[cma.parameters.getPopulationSize()]; // initial output to files cma.writeToDefaultFilesHeaders(0); // 0 == overwrites old files // iteration loop while(cma.stopConditions.getNumber() == 0) { // --- core iteration step --- double[][] pop = cma.samplePopulation(); // get a new population of solutions for(int i = 0; i < pop.length; ++i) { // for each candidate solution i // a simple way to handle constraints that define a convex feasible domain // (like box constraints, i.e. variable boundaries) via "blind re-sampling" // assumes that the feasible domain is convex, the optimum is while (!fitfun.isFeasible(pop[i])) // not located on (or very close to) the domain boundary, pop[i] = cma.resampleSingle(i); // initialX is feasible and initialStandardDeviations are // sufficiently small to prevent quasi-infinite looping here // compute fitness/objective value fitness[i] = fitfun.valueOf(pop[i]); // fitfun.valueOf() is to be minimized } cma.updateDistribution(fitness); // pass fitness array to update search distribution // --- end core iteration step --- // output to files and console cma.writeToDefaultFiles(); int outmod = 150; if (cma.getCountIter() % (15*outmod) == 1) cma.printlnAnnotation(); // might write file as well if (cma.getCountIter() % outmod == 1) cma.println(); } // evaluate mean value as it is the best estimator for the optimum cma.setFitnessOfMeanX(fitfun.valueOf(cma.getMeanX())); // updates the best ever solution // final output cma.writeToDefaultFiles(1); cma.println(); cma.println("Terminated due to"); for (String s : cma.stopConditions.getMessages()) cma.println(" " + s); cma.println("best function value " + cma.getBestFunctionValue() + " at evaluation " + cma.getBestEvaluationNumber()); // we might return cma.getBestSolution() or cma.getBestX() } // main } // class