public void execFindBestErrorDisp() throws DelimiterOutOfBoundsException, UnknownColumnException, InterruptedException, InvalidStateOfParser, MainColumnIdMaxValueException {

		int delimiter = getDelimiter();
		
		if(delimiter <= 0 || delimiter >= csvparser.countLines())
			throw new DelimiterOutOfBoundsException();

		double error = 0;
		double errorMin = Constants.INT_MAX;
		int epochsIt = 0;
		int bestEpoch = 0;
		
		logger.debug("delimiter = " + delimiter);
		logger.debug("filename = " + rawCsvParser.filename);
		logger.debug("filename count lines = " + csvparser.countLines());
		
		logger.debug("desiredInputs = " + desiredInputs[0]);
		logger.debug("momentum = " + momentum);
		logger.debug("learningRate = " + learningRate);
		logger.debug("epochs = " + epochs);
		logger.debug("delimiter = " + percentage + " %");
		logger.debug("mainColumnId = " + mainColumnId);
		logger.debug("deltatime = " + deltaTime);
	
		while(epochsIt < epochs) {
			
			neuralnetwork.trainProcess(delimiter, desiredInputs, csvparser, mainColumnId, deltaTime, learningRate, momentum);
			error = neuralnetwork.error(delimiter, csvparser, deltaTime, desiredInputs, mainColumnId, multiplier.getMultiplier());

			if(error < errorMin) {
				errorMin = error;
				bestEpoch = epochsIt;
			}

			if(epochsIt % 100 == 0)
				logger.debug("error : " + error + " EUR - error min : " + errorMin + " EUR at epoch : " + bestEpoch + " epochs : " + epochsIt);

			epochsIt++;
		}

		logger.debug("Prediction " + deltaTime + " days ahead : error min (at epoch : " + bestEpoch + " ) : " + errorMin);
	}