Last active
May 25, 2017 18:13
-
-
Save mthomure/4155c1702edba267ca3d79dee2a8e364 to your computer and use it in GitHub Desktop.
LBFGS via JNR
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "lbfgs.h" // see https://github.com/stephenbeckr/L-BFGS-B-C/blob/master/src/lbfgsb.h | |
#include <stdio.h> | |
int test_setulb(integer *n, integer *m, double *x, double *l, | |
double *u, integer *nbd, double *f, | |
double *g, double *factr, double *pgtol, double *wa, | |
integer *iwa, integer *task, | |
integer *iprint, integer *csave, | |
logical *lsave, integer *isave, double *dsave) { | |
printf("test_setulb()\n"); | |
printf("n: %ld\n", *n); | |
printf("m: %ld\n", *m); | |
printf("x:"); | |
for (int i=0; i < *n; i++) { | |
printf(" %.2f", x[i]); | |
} | |
printf("\n"); | |
printf("l:"); | |
for (int i=0; i < *n; i++) { | |
printf(" %.2f", l[i]); | |
} | |
printf("\n"); | |
printf("u:"); | |
for (int i=0; i < *n; i++) { | |
printf(" %.2f", u[i]); | |
} | |
printf("\n"); | |
printf("nbd:"); | |
for (int i=0; i < *n; i++) { | |
printf(" %ld", nbd[i]); | |
} | |
printf("\n"); | |
printf("f: %.2f\n", *f); | |
printf("g:"); for (int i=0; i < *n; i++) printf(" %.2f", g[i]); printf("\n"); | |
printf("factr: %.2f\n", *factr); | |
printf("pgtol: %.2f\n", *pgtol); | |
printf("wa:"); for (int i=0; i < 4; i++) printf(" %.2f", wa[i]); printf("\n"); | |
printf("iwa:"); for (int i=0; i < 4; i++) printf(" %.2ld", iwa[i]); printf("\n"); | |
printf("task:"); for (int i=0; i < 4; i++) printf(" %ld", task[i]); printf("\n"); | |
printf("iprint: %ld\n", *iprint); | |
printf("csave:"); for (int i=0; i < 4; i++) printf(" %ld", csave[i]); printf("\n"); | |
printf("lsave:"); for (int i=0; i < 4; i++) printf(" %ld", lsave[i]); printf("\n"); | |
printf("isave:"); for (int i=0; i < 4; i++) printf(" %ld", isave[i]); printf("\n"); | |
printf("dsave:"); for (int i=0; i < 4; i++) printf(" %.2f", dsave[i]); printf("\n"); | |
return 0; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns zeus.lbfgs | |
(:import [jnr.ffi LibraryLoader] | |
[jnr.ffi.byref IntByReference DoubleByReference NativeLongByReference])) | |
(definterface LibLbfgs | |
(^int | |
test_setulb | |
[^jnr.ffi.byref.NativeLongByReference n | |
^jnr.ffi.byref.NativeLongByReference m | |
^doubles x ;; [n] | |
^doubles l ;; [n] | |
^doubles u ;; [n] | |
^longs nbd ;; [n] | |
^jnr.ffi.byref.DoubleByReference f | |
^doubles g ;; [n] | |
^jnr.ffi.byref.DoubleByReference factr | |
^jnr.ffi.byref.DoubleByReference pgtol | |
^doubles wa | |
^longs iwa | |
^longs task ;; [60] | |
^jnr.ffi.byref.NativeLongByReference iprint | |
^longs csave ;; [60] | |
^longs lsave ;; [4] | |
^longs isave ;; [44] | |
^doubles dsave ;; [29] | |
])) | |
(defn -main [& args] | |
(let [lib (.load (LibraryLoader/create LibLbfgs) "lbfgsb") | |
n 25 | |
m 5 | |
x (range n) | |
l (range 100 (+ n 100)) | |
u (range 200 (+ n 200)) | |
nbd (range 300 (+ n 300)) | |
f 13.5 | |
g (range 400 (+ n 400)) | |
factr 20.1 | |
pgtol 31.2 | |
wa (range 500 (+ n 500)) | |
iwa (range 600 (+ n 600)) | |
task (range 700 (+ n 700)) | |
iprint -1 | |
csave (range 800 (+ n 800)) | |
lsave (range 900 (+ n 900)) | |
isave (range 1000 (+ n 1000)) | |
dsave (range 1100 (+ n 1100)) | |
] | |
(.test_setulb lib | |
(NativeLongByReference. n) | |
(NativeLongByReference. m) | |
(into-array Double/TYPE x) | |
(into-array Double/TYPE l) | |
(into-array Double/TYPE u) | |
(into-array Long/TYPE nbd) | |
(DoubleByReference. f) | |
(into-array Double/TYPE g) | |
(DoubleByReference. factr) | |
(DoubleByReference. pgtol) | |
(into-array Double/TYPE wa) | |
(into-array Long/TYPE iwa) | |
(into-array Long/TYPE task) | |
(NativeLongByReference. iprint) | |
(into-array Long/TYPE csave) | |
(into-array Long/TYPE lsave) | |
(into-array Long/TYPE isave) | |
(into-array Double/TYPE dsave) | |
))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment