From f8909135945c3aa640ee71ba4023b9088b0e58a1 Mon Sep 17 00:00:00 2001 From: stevenj Date: Mon, 5 Apr 2010 00:49:17 -0400 Subject: [PATCH] in MMA, only stop on minf_max if feasible! darcs-hash:20100405044917-c8de0-be7df864ba060befce69c335e9116b01a2f82f10.gz --- mma/mma.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mma/mma.c b/mma/mma.c index cd8cfed..a33c016 100644 --- 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; -- 2.30.2