public void doOptimize() { nlopt = NloptLibrary.nloptCreate(NloptAlgorithm.NLOPT_LD_MMA, start.length); IntValuedEnum<NloptResult> nloptResult = nloptSetMinObjective(nlopt, Pointer.pointerTo(object), Pointer.NULL); if (!nloptResult.equals(NloptResult.NLOPT_SUCCESS)) { throw new IllegalStateException(nloptResult.toString()); } nloptResult = NloptLibrary.nloptAddInequalityMconstraint( nlopt, inequalConstraints.getConstraintsSize(), Pointer.pointerTo(inequalConstraints), Pointer.NULL, Pointer.pointerToDoubles(inequalTolerents)); if (!nloptResult.equals(NloptResult.NLOPT_SUCCESS)) { throw new IllegalStateException(nloptResult.toString()); } nloptSetXtolRel(nlopt, objectRelativeTolerent); NloptLibrary.nloptSetXtolAbs1(nlopt, objectAbsoluteTolerence); Pointer<Double> functionResultPoint = Pointer.pointerToDouble(0); Pointer<Double> parameterPoint = Pointer.pointerToDoubles(start); if (null != initOptimizationTrigger) { Map<String, Object> initData = new HashMap<String, Object>(); initData.put("start", start); initOptimizationTrigger.accept(initData); } else { logger.warn("initOptimizationBus is null"); } resultStatus = NloptLibrary.nloptOptimize(nlopt, parameterPoint, functionResultPoint).value(); resultParameters = parameterPoint.getDoubles(); resultValue = functionResultPoint.getDouble(); NloptLibrary.nloptDestroy(nlopt); }