func OptimizeGrad(function common.UniObjGrad, initialLocation float64, settings GradSettings, method GradMethod) (optValue float64, optLocation float64, result *GradResult, err error) { /* if settings == nil { settings = DefaultGradSettings } */ if method == nil { method = NewCubic() } optimizer := newGradOptimizer() optCommon := common.NewOptCommon() optimizer.fun = newModdedFun(function, optimizer.loc, optimizer.obj, optimizer.grad, optCommon.FunEvals) optimizer.SetSettings(settings) optimizer.method = method optimizer.loc.Initial = initialLocation commonResult, err := common.OptimizeOpter(optimizer, optCommon, settings.CommonSettings, function) result = optimizer.Result(commonResult) return result.Objective.Optimum, result.Location.Optimum, result, err }
func newUniGradStruct() *uniGradStruct { m := &uniGradStruct{ OptCommon: common.NewOptCommon(), loc: uni.NewLocation(), obj: uni.NewObjective(), grad: uni.NewGradient(), result: &UniGradResult{}, } // TODO: Something about settings return m }