From: stevenj Date: Sun, 4 Apr 2010 22:24:32 +0000 (-0400) Subject: don't call MLSL recursively (e.g. in auglag) X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=272f3c07ef26ff1ac379e4007bee0d8c288d4aa7;p=nlopt.git don't call MLSL recursively (e.g. in auglag) darcs-hash:20100404222432-c8de0-d8e9e542f9b3e8add61ec28c5346858e37bd3577.gz --- diff --git a/api/optimize.c b/api/optimize.c index 2738351..595f44e 100644 --- a/api/optimize.c +++ b/api/optimize.c @@ -357,10 +357,17 @@ nlopt_result nlopt_optimize(nlopt_opt opt, double *x, double *minf) nlopt_opt local_opt = opt->local_opt; nlopt_result ret; if (!local_opt) { /* default */ - local_opt = nlopt_create((algorithm == NLOPT_GN_MLSL || - algorithm == NLOPT_GN_MLSL_LDS) - ? nlopt_local_search_alg_nonderiv - : nlopt_local_search_alg_deriv, n); + nlopt_algorithm local_alg = (algorithm == NLOPT_GN_MLSL || + algorithm == NLOPT_GN_MLSL_LDS) + ? nlopt_local_search_alg_nonderiv + : nlopt_local_search_alg_deriv; + /* don't call MLSL recursively! */ + if (local_alg >= NLOPT_GN_MLSL + && local_alg <= NLOPT_GD_MLSL_LDS) + local_alg = (algorithm == NLOPT_GN_MLSL || + algorithm == NLOPT_GN_MLSL_LDS) + ? NLOPT_LN_COBYLA : NLOPT_LD_MMA; + local_opt = nlopt_create(local_alg, n); if (!local_opt) return NLOPT_FAILURE; nlopt_set_ftol_rel(local_opt, opt->ftol_rel); nlopt_set_ftol_abs(local_opt, opt->ftol_abs);