public Info[] Expected(Specification problem) { Function function = problem.Function.Invoke; Gradient gradient = problem.Gradient.Invoke; Param param = new Param() { m = m, epsilon = epsilon, past = past, delta = delta, max_iterations = max_iterations, linesearch = (int)linesearch, max_linesearch = max_linesearch, min_step = min_step, max_step = max_step, ftol = ftol, wolfe = wolfe, gtol = gtol, xtol = xtol, orthantwise_c = orthantwise_c, orthantwise_start = orthantwise_start, orthantwise_end = orthantwise_end }; NativeCode = Wrapper.Libbfgs((double[])problem.Start.Clone(), function, gradient, param); // Convergence and success have the same // enumeration value in the original code if (NativeCode == "LBFGS_CONVERGENCE") NativeCode = "LBFGS_SUCCESS"; return Wrapper.list.ToArray(); }
public Info[] Expected(Specification problem) { NativeCode = String.Empty; Function function = problem.Function.Invoke; Gradient gradient = problem.Gradient.Invoke; if (l == null) { l = new double[problem.Start.Length]; for (int i = 0; i < l.Length; i++) l[i] = Double.NegativeInfinity; } if (u == null) { u = new double[problem.Start.Length]; for (int i = 0; i < l.Length; i++) u[i] = Double.PositiveInfinity; } Param2 param = new Param2() { factr = factr, l = l, u = u, pgtol = pgtol, m = m, max_iterations = max_iterations }; NativeCode = Wrapper.Lbfgsb3((double[])problem.Start.Clone(), function, gradient, param).Trim(); return Wrapper.list.ToArray(); }
public OptimizationProgressEventArgs[] Actual(Specification problem) { ActualMessage = String.Empty; BoundedBroydenFletcherGoldfarbShanno target = new BoundedBroydenFletcherGoldfarbShanno(problem.Variables) { FunctionTolerance = factr, GradientTolerance = pgtol, Corrections = m, MaxIterations = max_iterations }; for (int i = 0; i < target.LowerBounds.Length; i++) { if (l != null) target.LowerBounds[i] = l[i]; if (u != null) target.UpperBounds[i] = u[i]; } target.Function = problem.Function; target.Gradient = problem.Gradient; actual.Clear(); target.Progress += new EventHandler<OptimizationProgressEventArgs>(target_Progress); target.Minimize((double[])problem.Start.Clone()); if (target.Status == BoundedBroydenFletcherGoldfarbShannoStatus.GradientConvergence) ActualMessage = "CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL"; else if (target.Status == BoundedBroydenFletcherGoldfarbShannoStatus.FunctionConvergence) ActualMessage = "CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH"; else if (target.Status == BoundedBroydenFletcherGoldfarbShannoStatus.LineSearchFailed) ActualMessage = "ABNORMAL_TERMINATION_IN_LNSRCH"; return actual.ToArray(); }
public OptimizationProgressEventArgs[] Actual(Specification problem) { BroydenFletcherGoldfarbShanno target = new BroydenFletcherGoldfarbShanno(problem.Variables) { Corrections = m, Epsilon = epsilon, Past = past, Delta = delta, MaxIterations = max_iterations, LineSearch = (LineSearch)linesearch, MaxLineSearch = max_linesearch, MinStep = min_step, MaxStep = max_step, ParameterTolerance = ftol, Wolfe = wolfe, GradientTolerance = gtol, FunctionTolerance = xtol, OrthantwiseC = orthantwise_c, OrthantwiseStart = orthantwise_start, OrthantwiseEnd = orthantwise_end }; target.Function = problem.Function; target.Gradient = problem.Gradient; actual.Clear(); target.Progress += new EventHandler<OptimizationProgressEventArgs>(target_Progress); target.Minimize((double[])problem.Start.Clone()); ActualMessage = target.Status.GetDescription(); return actual.ToArray(); }
public void InvalidLineSearchTest() { double t = 0; double s = 0; int n = 10; Func<double[], double> function = (parameters) => { t = parameters[0]; s = parameters[1]; return -(n * Math.Log(s) - n * Math.Log(Math.PI)); }; Func<double[], double[]> gradient = (parameters) => { t = parameters[0]; s = parameters[1]; double dt = -2.0; double ds = +2.0 - n / s; return new[] { dt, ds }; }; double[] start = { 0, 0 }; Specification problem = new Specification(2, function, gradient, start); LbfgsbComparer cmp = new LbfgsbComparer(); compute(new List<Specification>() { problem }, cmp); }