docs: protected void createNewClassifier(Instance inst) {
          // Compute weights
      	double candidateClassifierWeight = 1.0 / (this.mse_r + Double.MIN_VALUE);
      	
      	if(linearOption.isSet())
          {
      		candidateClassifierWeight = java.lang.Math.max(this.mse_r, Double.MIN_VALUE);
          }
      	
      	for (int i = 0; i < this.ensemble.length; i++) {
  			this.weights[i][0] = this.computeWeight(i, inst);
  		}	
      	
      	// Configure candidate classifier
      	// The candidate classifier has been trained on the last window of examples
      	this.candidate.birthday = this.processedInstances;
      	
      	if (this.ensemble.length < this.memberCountOption.getValue()) {
  			// Add candidate classifier		
  			this.addToStored(this.candidate, candidateClassifierWeight);
  		} else {
  			// Substitute poorest classifier
  			int poorestClassifier = this.getPoorestClassifierIndex();
  
  			if (this.weights[poorestClassifier][0] < candidateClassifierWeight) {
  				this.weights[poorestClassifier][0] = candidateClassifierWeight;
  				this.candidate.classifier = this.candidate.classifier;
  				this.ensemble[(int) this.weights[poorestClassifier][1]] = this.candidate;
  			}
  		}
  
      	this.candidate = new ClassifierWithMemory(((Classifier) getPreparedClassOption(this.learnerOption)).copy(), this.windowSize);
  		this.candidate.classifier.resetLearning();
  		
  		this.enforceMemoryLimit();
      }