docs: protected void trainAndClassify(Instance inst){
      	
          nbInstances++;
      	
          boolean mature = true;
          boolean unmature = true;
          
      	for (int i = 0; i < getNbActiveClassifiers(); i++) {
          	
      		// check if all adaptive learners are mature
      		if (this.ensembleAges[i] < this.maturityOption.getValue() && i<getNbAdaptiveClassifiers())
              	mature = false;
          	
      		// check if all adaptive learners are not mature 
          	if (this.ensembleAges[i] >= this.maturityOption.getValue() && i<getNbAdaptiveClassifiers())
              	unmature = false;
          	
          	if (this.nbInstances >= this.ensembleWeights[i].index + 1){
          
          		// train adaptive learners
          		if (i < getNbAdaptiveClassifiers())
          			this.ensemble[i].trainOnInstance(inst);
          
          		int val = this.ensemble[i].correctlyClassifies(inst)?1:0;
              	double sum = updateEvaluationWindow(i, val);  
              	this.ensembleWeights[i].val = sum;
          		this.ensembleAges[i] = this.ensembleAges[i]+1;
          		
          	}
          	
          }
      	
      	// if all adaptive learners are not mature --> set weights to one 
      	if (unmature)
          	for (int i = 0; i < getNbAdaptiveClassifiers(); i++)
          		this.ensembleWeights[i].val=1;
          		
      	// if all adaptive learners are mature --> delete one learner
          if (mature){
          	Pair[] learners = getHalf(false);
          	
          	if (learners.length > 0){
          		double rand = classifierRandom.nextInt(learners.length);
          		discardModel(learners[(int)rand].index);		
          	}
          }
  	
      }