chiark / gitweb /
AGS: add force stop, fix max_iters value when maxevals not specified (#199)
authorVladislav Sovrasov <sovrasov.vlad@gmail.com>
Fri, 27 Jul 2018 15:45:37 +0000 (18:45 +0300)
committerSteven G. Johnson <stevenj@mit.edu>
Fri, 27 Jul 2018 15:45:37 +0000 (11:45 -0400)
src/algs/ags/ags.cc

index 63f3a3eeb4941c1b10db4d4780fa0784bc3a04e7..88312f1932c804e60d7f28e2cd71f40e3a457083 100644 (file)
@@ -3,9 +3,11 @@
 
 #include "ags.h"
 #include "solver.hpp"
+
 #include <iostream>
 #include <cstring>
 #include <exception>
+#include <limits>
 
 double ags_eps = 0;
 double ags_r = 3;
@@ -46,7 +48,7 @@ int ags_minimize(unsigned n, nlopt_func func, void *data, unsigned m, nlopt_cons
 
   ags::SolverParameters params;
   params.r = ags_r;
-  params.itersLimit = stop->maxeval != 0 ? stop->maxeval : 5000;
+  params.itersLimit = stop->maxeval != 0 ? stop->maxeval : std::numeric_limits<int>::max();
   params.eps = ags_eps;
   params.evolventDensity = evolvent_density;
   params.epsR = eps_res;
@@ -65,6 +67,10 @@ int ags_minimize(unsigned n, nlopt_func func, void *data, unsigned m, nlopt_cons
           ret_code = NLOPT_MAXTIME_REACHED;
           return true;
         }
+        else if (nlopt_stop_forced(stop)) {
+          ret_code = NLOPT_FORCED_STOP;
+          return true;
+        }
         else return false;
     };
     optPoint = solver.Solve(external_stop_func);