aboutsummaryrefslogtreecommitdiff
path: root/src/fit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fit.c')
-rw-r--r--src/fit.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/fit.c b/src/fit.c
index 34bb583..9a94ec6 100644
--- a/src/fit.c
+++ b/src/fit.c
@@ -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;