chiark / gitweb /
added nlopt_force_stop termination
[nlopt.git] / bobyqa / bobyqa.c
index 01616211793799016df95ca45bf26ec0cd335e7b..9ca6de7a4eecb853b007a36b64328e8fe09592a6 100644 (file)
@@ -592,7 +592,8 @@ L260:
            goto L340;
        }
 
-       if (nlopt_stop_evals(stop)) return NLOPT_MAXEVAL_REACHED;
+       if (nlopt_stop_forced(stop)) return NLOPT_FORCE_STOP;
+       else if (nlopt_stop_evals(stop)) return NLOPT_MAXEVAL_REACHED;
        else if (nlopt_stop_time(stop)) return NLOPT_MAXTIME_REACHED;
 
        ih = 0;
@@ -678,7 +679,8 @@ L260:
        if (f < fval[*kopt]) {
            *kopt = kpt;
        }
-       if (f < stop->minf_max) return NLOPT_MINF_MAX_REACHED;
+       if (nlopt_stop_forced(stop)) return NLOPT_FORCE_STOP;
+       else if (f < stop->minf_max) return NLOPT_MINF_MAX_REACHED;
        else if (nlopt_stop_evals(stop)) return NLOPT_MAXEVAL_REACHED;
        else if (nlopt_stop_time(stop)) return NLOPT_MAXTIME_REACHED;
 
@@ -1937,7 +1939,8 @@ L50:
        temp = xpt[nf + ipt * xpt_dim1] * xpt[nf + jpt * xpt_dim1];
        hq[ih] = (fbeg - fval[ipt + 1] - fval[jpt + 1] + f) / temp;
     }
-    if (f < stop->minf_max) return NLOPT_MINF_MAX_REACHED;
+    if (nlopt_stop_forced(stop)) return NLOPT_FORCE_STOP;
+    else if (f < stop->minf_max) return NLOPT_MINF_MAX_REACHED;
     else if (nlopt_stop_evals(stop)) return NLOPT_MAXEVAL_REACHED;
     else if (nlopt_stop_time(stop)) return NLOPT_MAXTIME_REACHED;
     if (nf < *npt) {
@@ -2569,7 +2572,8 @@ L360:
 /* L380: */
     }
 
-    if (nlopt_stop_evals(stop)) rc = NLOPT_MAXEVAL_REACHED;
+    if (nlopt_stop_forced(stop)) rc = NLOPT_FORCE_STOP;
+    else if (nlopt_stop_evals(stop)) rc = NLOPT_MAXEVAL_REACHED;
     else if (nlopt_stop_time(stop)) rc = NLOPT_MAXTIME_REACHED;
     if (rc != NLOPT_SUCCESS) goto L720;