From: stevenj Date: Mon, 5 Apr 2010 04:49:17 +0000 (-0400) Subject: in MMA, only stop on minf_max if feasible! X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=f8909135945c3aa640ee71ba4023b9088b0e58a1;p=nlopt.git in MMA, only stop on minf_max if feasible! darcs-hash:20100405044917-c8de0-be7df864ba060befce69c335e9116b01a2f82f10.gz --- 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;