@Override
	public void nextIteration() {
		if ( lastIterationResult == IterationResult.FINISHED_WITHOUT_RESULT) {
			//minimum sigma reached, there's no point in continuation 
			return;
		}
		
		++iterationNo;
		LOGGER.info("Iteration No. " + iterationNo);
		
		//TODO: albo inaczej to przemyslec albo @SuppressWarnings (sic!)
		T newIndividual =  (T) individual.mutateIndividual( sigma) ;
		
		if( Individual.comparator.compare(newIndividual, individual) >= 0){
			//new individual is better or equal
			++fi;
			individual = newIndividual;			
		}
		
		//update sigma if it's time...
		if( (this.iterationNo % m ) == 0){
			double times = fi / m;
			
			if( times < 1/5){
				sigma = c1 * sigma;
			}
			else if( times > 1/5){
				sigma = c2 * sigma;
			}
			fi = 0;
		}
		
		//set status of iteration by analysing value of sigma
		if( sigma < minSigma ){
			//minimum sigma reached
			lastIterationResult = IterationResult.FINISHED_WITHOUT_RESULT;
		}
		else {
			//everything OK
			lastIterationResult = IterationResult.OK;
		}		
	}