import org.apache.commons.math3.optim.*;
import org.apache.commons.math3.optim.nonlinear.scalar.*;
import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.*;
import org.apache.commons.math3.optim.linear.*;
import org.apache.commons.math3.optim.nonlinear.scalar.multivariate.*;
ObjectiveFunction objective = new ObjectiveFunction(function);
OptimizationData[] optData = {
};
OptimizationProblem problem = new OptimizationProblem(objective, bounds, optData);
OptimizationAlgorithm algorithm = new BFGSFormula();
PointValuePair result = algorithm.optimize(problem);
double minValue = result.getValue();
double[] solution = result.getPoint();
System.out.println("Min value: " + minValue);
System.out.println("Solution: " + solution[0]);