chiark / gitweb /
in MMA, only stop on minf_max if feasible!
authorstevenj <stevenj@alum.mit.edu>
Mon, 5 Apr 2010 04:49:17 +0000 (00:49 -0400)
committerstevenj <stevenj@alum.mit.edu>
Mon, 5 Apr 2010 04:49:17 +0000 (00:49 -0400)
darcs-hash:20100405044917-c8de0-be7df864ba060befce69c335e9116b01a2f82f10.gz

mma/mma.c

index cd8cfedb2c8848c860bf5ef9a8cd4e72230e0c37..a33c016e4e0ec6a3ce6574c0fd69b203af70197c 100644 (file)
--- a/mma/mma.c
+++ b/mma/mma.c
@@ -236,7 +236,8 @@ nlopt_result mma_minimize(int n, nlopt_func f, void *f_data,
          double fprev = fcur;
          if (nlopt_stop_evals(stop)) ret = NLOPT_MAXEVAL_REACHED;
          else if (nlopt_stop_time(stop)) ret = NLOPT_MAXTIME_REACHED;
-         else if (*minf < stop->minf_max) ret = NLOPT_MINF_MAX_REACHED;
+         else if (feasible && *minf < stop->minf_max) 
+              ret = NLOPT_MINF_MAX_REACHED;
          if (ret != NLOPT_SUCCESS) goto done;
          if (++k > 1) memcpy(xprevprev, xprev, sizeof(double) * n);
          memcpy(xprev, xcur, sizeof(double) * n);
@@ -317,7 +318,8 @@ nlopt_result mma_minimize(int n, nlopt_func f, void *f_data,
               }
               if (nlopt_stop_evals(stop)) ret = NLOPT_MAXEVAL_REACHED;
               else if (nlopt_stop_time(stop)) ret = NLOPT_MAXTIME_REACHED;
-              else if (*minf < stop->minf_max) ret = NLOPT_MINF_MAX_REACHED;
+              else if (feasible && *minf < stop->minf_max) 
+                   ret = NLOPT_MINF_MAX_REACHED;
               if (ret != NLOPT_SUCCESS) goto done;
 
               if (inner_done) break;