// Use cache to avoid repeats. This can be a real issue if we have a discrete problem space.
Set<ParameterArray> cache = new HashSet<ParameterArray>();
cache.add(currentParams);
Improvement improvement = null;
boolean improved = true;
// iterate until there is no significant improvement between iterations,
// of the jumpSize is too small (below some threshold).
do {
//System.out.println( "iter=" + numIterations + " FITNESS = " + currentParams.getFitness() + " ------------");
improvement = currentParams.findIncrementalImprovement(optimizee_, jumpSize, improvement, cache);
numIterations++;
currentParams = improvement.getParams();
jumpSize = improvement.getNewJumpSize();
notifyOfChange(currentParams);
improved = improvement.getImprovement() > fitnessEps;
} while (improved
&& (jumpSize > JUMP_SIZE_EPS)
&& !isOptimalFitnessReached(currentParams));