chiark / gitweb /
change MAXDEEP (maxiter) more dynamically
authorstevenj <stevenj@alum.mit.edu>
Thu, 30 Aug 2007 00:00:41 +0000 (20:00 -0400)
committerstevenj <stevenj@alum.mit.edu>
Thu, 30 Aug 2007 00:00:41 +0000 (20:00 -0400)
darcs-hash:20070830000041-c8de0-33d70f5acd6d321365e0682e49a143b936528f48.gz

api/nlopt.c
direct/DIRect.c

index 00ac1748ab0e7798bf061ac47d1b17ba1293c69b..0ed5bcb8c96a1e6ad460218d7b44db751d5acd64 100644 (file)
@@ -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, 
index 994ee050aa7f631260d47b3aff43f8236664252b..970f3f3b5da849feac2da0577f73b3c508bfd960 100644 (file)
     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 */
     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                                                  | */