diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/fit.c | 29 |
1 files changed, 17 insertions, 12 deletions
@@ -5432,6 +5432,7 @@ int fit_event2(event *ev, double *xopt, double *fmin, int *id, size_t n, double size_t *result; size_t nvertices; int status; + int rv; /* Create the minimizer object. */ opt = nlopt_create(NLOPT_LN_BOBYQA, 4+3*n); @@ -5516,6 +5517,8 @@ int fit_event2(event *ev, double *xopt, double *fmin, int *id, size_t n, double for (i = 0; i < n; i++) fpars.id[i] = id[i]; + time_elapsed = 0.0; + for (i = 0; i < nvertices; i++) { /* Copy the starting parameters to the `x` array. */ memcpy(x,x0,sizeof(x)); @@ -5581,6 +5584,8 @@ int fit_event2(event *ev, double *xopt, double *fmin, int *id, size_t n, double long long elapsed = (tv_stop.tv_sec - tv_start.tv_sec)*1000 + (tv_stop.tv_usec - tv_start.tv_usec)/1000; + time_elapsed += elapsed/1000.0; + printf("%4zu/%4zu %7.2f %7.2f %7.2f %6.2f ", i+1, nvertices, @@ -5661,13 +5666,13 @@ close: exit(0); } - gettimeofday(&tv_start, NULL); - nlopt_optimize(opt,x,&fval); + gettimeofday(&tv_start, NULL); + rv = nlopt_optimize(opt,x,&fval); gettimeofday(&tv_stop, NULL); - time_elapsed = tv_stop.tv_sec - tv_start.tv_sec + (tv_stop.tv_usec - tv_start.tv_usec)/1e6; + time_elapsed += tv_stop.tv_sec - tv_start.tv_sec + (tv_stop.tv_usec - tv_start.tv_usec)/1e6; - if (time_elapsed > maxtime) goto end; + if (time_elapsed > maxtime || rv == NLOPT_MAXTIME_REACHED) goto end; if (stop) goto stop; @@ -5678,20 +5683,20 @@ close: nlopt_set_maxtime(opt, maxtime-time_elapsed); gettimeofday(&tv_start, NULL); - nlopt_optimize(opt,x,&fval); + rv = nlopt_optimize(opt,x,&fval); gettimeofday(&tv_stop, NULL); time_elapsed += tv_stop.tv_sec - tv_start.tv_sec + (tv_stop.tv_usec - tv_start.tv_usec)/1e6; if (stop) goto stop; - } while (fval < *fmin && fabs(fval-*fmin) > 1e-2 && time_elapsed < maxtime); + } while (fval < *fmin && fabs(fval-*fmin) > 1e-2 && time_elapsed < maxtime && rv != NLOPT_MAXTIME_REACHED); if (fval < *fmin) { *fmin = fval; memcpy(xopt,x,sizeof(x)); } - if (time_elapsed >= maxtime) goto end; + if (time_elapsed > maxtime || rv == NLOPT_MAXTIME_REACHED) goto end; /* Now, minimize with SBPLX. * @@ -5720,12 +5725,12 @@ close: memcpy(x,xopt,sizeof(x)); gettimeofday(&tv_start, NULL); - nlopt_optimize(opt,x,&fval); + rv = nlopt_optimize(opt,x,&fval); gettimeofday(&tv_stop, NULL); - time_elapsed = tv_stop.tv_sec - tv_start.tv_sec + (tv_stop.tv_usec - tv_start.tv_usec)/1e6; + time_elapsed += tv_stop.tv_sec - tv_start.tv_sec + (tv_stop.tv_usec - tv_start.tv_usec)/1e6; - if (time_elapsed > maxtime) goto end; + if (time_elapsed > maxtime || rv == NLOPT_MAXTIME_REACHED) goto end; if (stop) goto stop; @@ -5736,13 +5741,13 @@ close: nlopt_set_maxtime(opt, maxtime-time_elapsed); gettimeofday(&tv_start, NULL); - nlopt_optimize(opt,x,&fval); + rv = nlopt_optimize(opt,x,&fval); gettimeofday(&tv_stop, NULL); time_elapsed += tv_stop.tv_sec - tv_start.tv_sec + (tv_stop.tv_usec - tv_start.tv_usec)/1e6; if (stop) goto stop; - } while (fval < *fmin && fabs(fval-*fmin) > 1e-2 && time_elapsed < maxtime); + } while (fval < *fmin && fabs(fval-*fmin) > 1e-2 && time_elapsed < maxtime && rv != NLOPT_MAXTIME_REACHED); if (fval < *fmin) { *fmin = fval; |