CXX_LIBS = stogo/libstogo.la
endif
-SUBDIRS= util subplex direct cdirect $(CXX_DIRS) praxis luksan crs mlsl api . octave test
+SUBDIRS= util subplex direct cdirect $(CXX_DIRS) praxis luksan crs mlsl lbfgs api . octave test
EXTRA_DIST=COPYRIGHT autogen.sh nlopt.pc.in m4
+if WITH_NOCEDAL
+NOCEDAL_LBFGS=lbfgs/liblbfgs.la
+endif
+
libnlopt_la_SOURCES =
libnlopt_la_LIBADD = subplex/libsubplex.la direct/libdirect.la \
-cdirect/libcdirect.la $(CXX_LIBS) praxis/libpraxis.la \
+cdirect/libcdirect.la $(CXX_LIBS) praxis/libpraxis.la $(NOCEDAL_LBFGS) \
luksan/libluksan.la crs/libcrs.la mlsl/libmlsl.la api/libapi.la \
util/libutil.la
#else
"StoGO (NOT COMPILED)",
"StoGO randomized (NOT COMPILED)",
+#endif
+#ifdef WITH_NOCEDAL_LBFGS
+ "original NON-FREE L-BFGS implementation by Nocedal et al. (local, deriv.-based)"
+#else
+ "original NON-FREE L-BFGS implementation by Nocedal et al. (NOT COMPILED)"
#endif
"Low-storage BFGS (LBFGS) (local, derivative-based)",
"Principal-axis, praxis (local, no-derivative)",
#include "cdirect.h"
+#ifdef WITH_NOCEDAL
+# include "l-bfgs-b.h"
+#endif
+
#include "luksan.h"
#include "crs.h"
&stop, minf);
}
+#ifdef WITH_NOCEDAL
+ case NLOPT_LD_LBFGS_NOCEDAL: {
+ int iret, *nbd = (int *) malloc(sizeof(int) * n);
+ if (!nbd) return NLOPT_OUT_OF_MEMORY;
+ for (i = 0; i < n; ++i) {
+ int linf = my_isinf(lb[i]) && lb[i] < 0;
+ int uinf = my_isinf(ub[i]) && ub[i] > 0;
+ nbd[i] = linf && uinf ? 0 : (uinf ? 1 : (linf ? 3 : 2));
+ }
+ iret = lbfgsb_minimize(n, f, f_data, x, nbd, lb, ub,
+ MIN(n, 5), 0.0, ftol_rel,
+ xtol_abs ? *xtol_abs : xtol_rel,
+ maxeval);
+ free(nbd);
+ if (iret <= 0) {
+ switch (iret) {
+ case -1: return NLOPT_INVALID_ARGS;
+ case -2: default: return NLOPT_FAILURE;
+ }
+ }
+ else {
+ *minf = f(n, x, NULL, f_data);
+ switch (iret) {
+ case 5: return NLOPT_MAXEVAL_REACHED;
+ case 2: return NLOPT_XTOL_REACHED;
+ case 1: return NLOPT_FTOL_REACHED;
+ default: return NLOPT_SUCCESS;
+ }
+ }
+ break;
+ }
+#endif
+
case NLOPT_LD_LBFGS:
return luksan_plis(n, f, f_data, lb, ub, x, minf, &stop);
fi
AC_MSG_RESULT(${ok})
+dnl -----------------------------------------------------------------------
+
+test -r $srcdir/lbfgs/ap.cpp && test -r $srcdir/lbfgs/ap.h && test -r $srcdir/lbfgs/l-bfgs-b.cpp && test -r $srcdir/lbfgs/l-bfgs-b.h && have_lbfgs=yes
+AM_CONDITIONAL(WITH_NOCEDAL, test -n "$have_lbfgs")
+if test -n "$have_lbfgs"; then
+ AC_DEFINE(WITH_NOCEDAL, [1], [Define if we have the non-free Nocedal LBFGS code])
+fi
+
dnl -----------------------------------------------------------------------
dnl Compiling Octave plug-in
stogo/Makefile
subplex/Makefile
praxis/Makefile
+ lbfgs/Makefile
luksan/Makefile
crs/Makefile
mlsl/Makefile