+ elif self._parameters["Minimizer"] == "SIMPLEX" and PlatformInfo.has_nlopt:
+ import nlopt
+ opt = nlopt.opt(nlopt.LN_NELDERMEAD, Xini.size)
+ def _f(_Xx, Grad):
+ # DFO, so no gradient
+ return CostFunction(_Xx, self._parameters["QualityCriterion"])
+ opt.set_min_objective(_f)
+ if self._parameters["Bounds"] is not None:
+ lub = numpy.array(self._parameters["Bounds"]).reshape((Xini.size,2))
+ lb = lub[:,0]
+ ub = lub[:,1]
+ if self._parameters["optdisp"]:
+ print("%s: upper bounds %s"%(opt.get_algorithm_name(),ub))
+ print("%s: lower bounds %s"%(opt.get_algorithm_name(),lb))
+ opt.set_upper_bounds(ub)
+ opt.set_lower_bounds(lb)
+ opt.set_ftol_rel(self._parameters["CostDecrementTolerance"])
+ opt.set_xtol_rel(2.*self._parameters["StateVariationTolerance"])
+ opt.set_maxeval(self._parameters["MaximumNumberOfFunctionEvaluations"])
+ Minimum = opt.optimize( Xini )
+ if self._parameters["optdisp"]:
+ print("%s: optimal state: %s"%(opt.get_algorithm_name(),Minimum))
+ print("%s: minimum of J: %s"%(opt.get_algorithm_name(),opt.last_optimum_value()))
+ print("%s: return code: %i"%(opt.get_algorithm_name(),opt.last_optimize_result()))
+ elif self._parameters["Minimizer"] == "BOBYQA" and PlatformInfo.has_nlopt:
+ import nlopt
+ opt = nlopt.opt(nlopt.LN_BOBYQA, Xini.size)
+ def _f(_Xx, Grad):
+ # DFO, so no gradient
+ return CostFunction(_Xx, self._parameters["QualityCriterion"])
+ opt.set_min_objective(_f)
+ if self._parameters["Bounds"] is not None:
+ lub = numpy.array(self._parameters["Bounds"]).reshape((Xini.size,2))
+ lb = lub[:,0]
+ ub = lub[:,1]
+ if self._parameters["optdisp"]:
+ print("%s: upper bounds %s"%(opt.get_algorithm_name(),ub))
+ print("%s: lower bounds %s"%(opt.get_algorithm_name(),lb))
+ opt.set_upper_bounds(ub)
+ opt.set_lower_bounds(lb)
+ opt.set_ftol_rel(self._parameters["CostDecrementTolerance"])
+ opt.set_xtol_rel(2.*self._parameters["StateVariationTolerance"])
+ opt.set_maxeval(self._parameters["MaximumNumberOfFunctionEvaluations"])
+ Minimum = opt.optimize( Xini )
+ if self._parameters["optdisp"]:
+ print("%s: optimal state: %s"%(opt.get_algorithm_name(),Minimum))
+ print("%s: minimum of J: %s"%(opt.get_algorithm_name(),opt.last_optimum_value()))
+ print("%s: return code: %i"%(opt.get_algorithm_name(),opt.last_optimize_result()))
+ elif self._parameters["Minimizer"] == "NEWUOA" and PlatformInfo.has_nlopt:
+ import nlopt
+ opt = nlopt.opt(nlopt.LN_NEWUOA, Xini.size)
+ def _f(_Xx, Grad):
+ # DFO, so no gradient
+ return CostFunction(_Xx, self._parameters["QualityCriterion"])
+ opt.set_min_objective(_f)
+ if self._parameters["Bounds"] is not None:
+ lub = numpy.array(self._parameters["Bounds"]).reshape((Xini.size,2))
+ lb = lub[:,0]
+ ub = lub[:,1]
+ if self._parameters["optdisp"]:
+ print("%s: upper bounds %s"%(opt.get_algorithm_name(),ub))
+ print("%s: lower bounds %s"%(opt.get_algorithm_name(),lb))
+ opt.set_upper_bounds(ub)
+ opt.set_lower_bounds(lb)
+ opt.set_ftol_rel(self._parameters["CostDecrementTolerance"])
+ opt.set_xtol_rel(2.*self._parameters["StateVariationTolerance"])
+ opt.set_maxeval(self._parameters["MaximumNumberOfFunctionEvaluations"])
+ Minimum = opt.optimize( Xini )
+ if self._parameters["optdisp"]:
+ print("%s: optimal state: %s"%(opt.get_algorithm_name(),Minimum))
+ print("%s: minimum of J: %s"%(opt.get_algorithm_name(),opt.last_optimum_value()))
+ print("%s: return code: %i"%(opt.get_algorithm_name(),opt.last_optimize_result()))
+ elif self._parameters["Minimizer"] == "SUBPLEX" and PlatformInfo.has_nlopt:
+ import nlopt
+ opt = nlopt.opt(nlopt.LN_SBPLX, Xini.size)
+ def _f(_Xx, Grad):
+ # DFO, so no gradient
+ return CostFunction(_Xx, self._parameters["QualityCriterion"])
+ opt.set_min_objective(_f)
+ if self._parameters["Bounds"] is not None:
+ lub = numpy.array(self._parameters["Bounds"]).reshape((Xini.size,2))
+ lb = lub[:,0]
+ ub = lub[:,1]
+ if self._parameters["optdisp"]:
+ print("%s: upper bounds %s"%(opt.get_algorithm_name(),ub))
+ print("%s: lower bounds %s"%(opt.get_algorithm_name(),lb))
+ opt.set_upper_bounds(ub)
+ opt.set_lower_bounds(lb)
+ opt.set_ftol_rel(self._parameters["CostDecrementTolerance"])
+ opt.set_xtol_rel(2.*self._parameters["StateVariationTolerance"])
+ opt.set_maxeval(self._parameters["MaximumNumberOfFunctionEvaluations"])
+ Minimum = opt.optimize( Xini )
+ if self._parameters["optdisp"]:
+ print("%s: optimal state: %s"%(opt.get_algorithm_name(),Minimum))
+ print("%s: minimum of J: %s"%(opt.get_algorithm_name(),opt.last_optimum_value()))
+ print("%s: return code: %i"%(opt.get_algorithm_name(),opt.last_optimize_result()))