docs: public static void main(String[] args) throws SolverException, CloneNotSupportedException {
  
  		LevenbergMarquardt optimizer = new LevenbergMarquardt() {
  			private static final long serialVersionUID = -282626938650139518L;
  
  			// Override your objective function here
  			@Override
  			public void setValues(double[] parameters, double[] values) {
  				values[0] = parameters[0] * 0.0 + parameters[1];
  				values[1] = parameters[0] * 2.0 + parameters[1];
  			}
  		};
  
  		// Set solver parameters
  		optimizer.setInitialParameters(new double[] { 0, 0 });
  		optimizer.setWeights(new double[] { 1, 1 });
  		optimizer.setMaxIteration(100);
  		optimizer.setTargetValues(new double[] { 5, 10 });
  
  		optimizer.run();
  
  		double[] bestParameters = optimizer.getBestFitParameters();
  		System.out.println("The solver for problem 1 required " + optimizer.getIterations() + " iterations. The best fit parameters are:");
  		for (int i = 0; i < bestParameters.length; i++) {
  			System.out.println("\tparameter[" + i + "]: " + bestParameters[i]);
  		}
  
  		/*
  		 * Creating a clone, continuing the search with new target values.
  		 * Note that we do not re-define the setValues method.
  		 */
  		Optimizer optimizer2 = optimizer.getCloneWithModifiedTargetValues(new double[] { 5.1, 10.2 }, new double[] { 1, 1 }, true);
  		optimizer2.run();
  
  		double[] bestParameters2 = optimizer2.getBestFitParameters();
  		System.out.println("The solver for problem 2 required " + optimizer2.getIterations() + " iterations. The best fit parameters are:");
  		for (int i = 0; i < bestParameters2.length; i++) {
  			System.out.println("\tparameter[" + i + "]: " + bestParameters2[i]);
  		}
  	}