int xrhs, nrhs;
int verbose, neval;
struct user_function_data_s *dpre;
+ nlopt_opt opt;
} user_function_data;
static double user_function(unsigned n, const double *x,
}
d->neval++;
if (d->verbose) mexPrintf("nlopt_optimize eval #%d: %g\n", d->neval, f);
+ if (mxIsNaN(f)) nlopt_force_stop(d->opt);
return f;
}
d.neval = 0;
d.verbose = (int) struct_val_default(prhs[0], "verbose", 0);
+ d.opt = opt;
/* function f = prhs[1] */
mx = struct_funcval(prhs[0], "min_objective");
dpre.xrhs = 1;
}
dpre.verbose = d.verbose > 2;
+ dpre.opt = opt;
dpre.neval = 0;
dpre.prhs[dpre.xrhs] = d.prhs[d.xrhs];
dpre.prhs[d.xrhs+1] = mxCreateDoubleMatrix(1, n, mxREAL);
dfc[j].xrhs = 1;
}
dfc[j].verbose = d.verbose > 1;
+ dfc[j].opt = opt;
dfc[j].neval = 0;
dfc[j].prhs[dfc[j].xrhs] = d.prhs[d.xrhs];
CHECK(nlopt_add_inequality_constraint(opt, user_function,
dh[j].xrhs = 1;
}
dh[j].verbose = d.verbose > 1;
+ dh[j].opt = opt;
dh[j].neval = 0;
dh[j].prhs[dh[j].xrhs] = d.prhs[d.xrhs];
CHECK(nlopt_add_equality_constraint(opt, user_function,
typedef struct {
octave_function *f;
int neval, verbose;
+ nlopt_opt opt;
} user_function_data;
static double user_function(unsigned n, const double *x,
data->neval++;
if (data->verbose) printf("nlopt_optimize eval #%d: %g\n",
data->neval, res(0).double_value());
- return res(0).double_value();
+ double f = res(0).double_value();
+ if (f != f /* isnan(f) */) nlopt_force_stop(data->opt);
+ return f;
}
return 0;
}
user_function_data d;
d.neval = 0;
d.verbose = struct_val_default(opts, "verbose", 0);
+ d.opt = opt;
if (opts.contains("min_objective")) {
CHECK(opts.contents("min_objective").length() == 1
&& (opts.contents("min_objective"))(0).is_function_handle(),