chiark
/
gitweb
/
~ianmdlvl
/
nlopt.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
77c174e
)
-b option to fix some params by equating the bounds
author
stevenj
<stevenj@alum.mit.edu>
Sun, 13 Feb 2011 01:58:59 +0000
(20:58 -0500)
committer
stevenj
<stevenj@alum.mit.edu>
Sun, 13 Feb 2011 01:58:59 +0000
(20:58 -0500)
darcs-hash:
20110213015859
-c8de0-
c548cf8cac5f028a05601f2da9c2f34f8c0acc86
.gz
test/testopt.cpp
patch
|
blob
|
history
diff --git
a/test/testopt.cpp
b/test/testopt.cpp
index 107993575cf0a771b19a35b9116ea6875fbdd904..124798f753f5a9c7acb6b47944fde00cf3912e3e 100644
(file)
--- a/
test/testopt.cpp
+++ b/
test/testopt.cpp
@@
-51,6
+51,16
@@
static int maxeval = 1000, iterations = 1, center_start = 0;
static double maxtime = 0.0;
static double xinit_tol = -1;
static int force_constraints = 0;
static double maxtime = 0.0;
static double xinit_tol = -1;
static int force_constraints = 0;
+static int fix_bounds[100] = {0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0};
static void listalgs(FILE *f)
{
static void listalgs(FILE *f)
{
@@
-137,6
+147,11
@@
static int test_function(int ifunc)
printf("]\n");
memcpy(lb, func.lb, func.n * sizeof(double));
memcpy(ub, func.ub, func.n * sizeof(double));
printf("]\n");
memcpy(lb, func.lb, func.n * sizeof(double));
memcpy(ub, func.ub, func.n * sizeof(double));
+ for (i = 0; i < func.n; ++i) if (fix_bounds[i]) {
+ printf("fixing bounds for dim[%d] to xmin[%d]=%g\n",
+ i, i, func.xmin[i]);
+ lb[i] = ub[i] = func.xmin[i];
+ }
if (force_constraints) {
for (i = 0; i < func.n; ++i) {
if (nlopt_iurand(2) == 0)
if (force_constraints) {
for (i = 0; i < func.n; ++i) {
if (nlopt_iurand(2) == 0)
@@
-258,6
+273,7
@@
static void usage(FILE *f)
" -a <n> : use optimization algorithm <n>\n"
" -o <n> : use objective function <n>\n"
" -0 <x> : starting guess within <x> + (1+<x>) * optimum\n"
" -a <n> : use optimization algorithm <n>\n"
" -o <n> : use objective function <n>\n"
" -0 <x> : starting guess within <x> + (1+<x>) * optimum\n"
+ " -b <dim0,dim1,...>: eliminate given dims by equating bounds\n"
" -c : starting guess at center of cell\n"
" -C : put optimum outside of bound constraints\n"
" -e <n> : use at most <n> evals (default: %d, 0 to disable)\n"
" -c : starting guess at center of cell\n"
" -C : put optimum outside of bound constraints\n"
" -e <n> : use at most <n> evals (default: %d, 0 to disable)\n"
@@
-286,7
+302,7
@@
int main(int argc, char **argv)
feenableexcept(FE_INVALID);
#endif
feenableexcept(FE_INVALID);
#endif
- while ((c = getopt(argc, argv, "hLvCc0:r:a:o:i:e:t:x:X:f:F:m:")) != -1)
+ while ((c = getopt(argc, argv, "hLvCc0:r:a:o:i:e:t:x:X:f:F:m:
b:
")) != -1)
switch (c) {
case 'h':
usage(stdout);
switch (c) {
case 'h':
usage(stdout);
@@
-348,6
+364,19
@@
int main(int argc, char **argv)
center_start = 0;
xinit_tol = atof(optarg);
break;
center_start = 0;
xinit_tol = atof(optarg);
break;
+ case 'b': {
+ const char *s = optarg;
+ while (s && *s) {
+ int b = atoi(s);
+ if (b < 0 || b >= 100) {
+ fprintf(stderr, "invalid -b argument");
+ return EXIT_FAILURE;
+ }
+ fix_bounds[b] = 1;
+ s = strchr(s, ','); if (s) ++s;
+ }
+ break;
+ }
default:
fprintf(stderr, "harminv: invalid argument -%c\n", c);
usage(stderr);
default:
fprintf(stderr, "harminv: invalid argument -%c\n", c);
usage(stderr);