From 2fa02c2346e8c85e03f0b3268c8874200c129bd1 Mon Sep 17 00:00:00 2001 From: stevenj Date: Wed, 29 Aug 2007 20:00:41 -0400 Subject: [PATCH] change MAXDEEP (maxiter) more dynamically darcs-hash:20070830000041-c8de0-33d70f5acd6d321365e0682e49a143b936528f48.gz --- api/nlopt.c | 2 +- direct/DIRect.c | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/api/nlopt.c b/api/nlopt.c index 00ac174..0ed5bcb 100644 --- a/api/nlopt.c +++ b/api/nlopt.c @@ -244,7 +244,7 @@ static nlopt_result nlopt_minimize_( if (!d.xtmp) return NLOPT_OUT_OF_MEMORY; memcpy(d.xtmp + n, x, sizeof(double) * n); d.x0 = d.xtmp + n; iret = direct_optimize(f_direct, &d, n, lb, ub, x, fmin, - maxeval, 999, 0.0, 0.0, + maxeval, -1, 0.0, 0.0, pow(xtol_rel, (double) n), -1.0, stop.fmin_max, 0.0, NULL, diff --git a/direct/DIRect.c b/direct/DIRect.c index 994ee05..970f3f3 100644 --- a/direct/DIRect.c +++ b/direct/DIRect.c @@ -53,9 +53,10 @@ integer i__1, i__2; doublereal d__1; - /* constants (FIXME: change to variable?) */ + /* changed by SGJ to be dynamically allocated ... would be + even better to use realloc, below, to grow these as needed */ integer MAXFUNC = *maxf <= 0 ? 101000 : (*maxf + 1000 + *maxf / 2); - const integer MAXDEEP = 1000; + integer MAXDEEP = *maxt <= 0 ? MAXFUNC/5: *maxt + 1000; const integer MAXDIV = 5000; /* Local variables */ @@ -99,18 +100,21 @@ MY_ALLOC(c__, doublereal, MAXFUNC * (*n)); MY_ALLOC(length, integer, MAXFUNC * (*n)); MY_ALLOC(f, doublereal, MAXFUNC * 2); + MY_ALLOC(point, integer, MAXFUNC); if (*maxf <= 0) *maxf = MAXFUNC - 1000; MY_ALLOC(s, integer, MAXDIV * 2); + + MY_ALLOC(anchor, integer, MAXDEEP + 2); + MY_ALLOC(levels, doublereal, MAXDEEP + 1); + MY_ALLOC(thirds, doublereal, MAXDEEP + 1); + if (*maxt <= 0) *maxt = MAXDEEP; + MY_ALLOC(w, doublereal, (*n)); MY_ALLOC(oldl, doublereal, (*n)); MY_ALLOC(oldu, doublereal, (*n)); MY_ALLOC(list2, integer, (*n) * 2); - MY_ALLOC(point, integer, MAXFUNC); - MY_ALLOC(anchor, integer, MAXDEEP + 2); MY_ALLOC(arrayi, integer, (*n)); - MY_ALLOC(levels, doublereal, MAXDEEP + 1); - MY_ALLOC(thirds, doublereal, MAXDEEP + 1); /* +-----------------------------------------------------------------------+ */ /* | SUBROUTINE Direct | */ -- 2.30.2