summaryrefslogtreecommitdiff
path: root/packages/gsl/src/Numeric/GSL/gsl-aux.c
diff options
context:
space:
mode:
authorMatthew Peddie <mpeddie@gmail.com>2015-06-18 11:18:33 +1000
committerMatthew Peddie <mpeddie@gmail.com>2015-06-18 13:51:08 +1000
commit992c8915ea4fb324a8d43203056d1f0224552236 (patch)
tree059a26e34f8184173103c0613db51876cc3a7e96 /packages/gsl/src/Numeric/GSL/gsl-aux.c
parent34645d9ea1baccd21a94feebe9279a2089b91b5d (diff)
Add an interface to the GSL simulated annealing module.
Diffstat (limited to 'packages/gsl/src/Numeric/GSL/gsl-aux.c')
-rw-r--r--packages/gsl/src/Numeric/GSL/gsl-aux.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/packages/gsl/src/Numeric/GSL/gsl-aux.c b/packages/gsl/src/Numeric/GSL/gsl-aux.c
index e1b189c..1ca8199 100644
--- a/packages/gsl/src/Numeric/GSL/gsl-aux.c
+++ b/packages/gsl/src/Numeric/GSL/gsl-aux.c
@@ -36,6 +36,8 @@
36#include <gsl/gsl_roots.h> 36#include <gsl/gsl_roots.h>
37#include <gsl/gsl_spline.h> 37#include <gsl/gsl_spline.h>
38#include <gsl/gsl_multifit_nlin.h> 38#include <gsl/gsl_multifit_nlin.h>
39#include <gsl/gsl_siman.h>
40
39#include <string.h> 41#include <string.h>
40#include <stdio.h> 42#include <stdio.h>
41 43
@@ -475,7 +477,30 @@ int uniMinimize(int method, double f(double),
475 OK 477 OK
476} 478}
477 479
478 480int siman(int seed,
481 gsl_siman_params_t *params, void *xp0,
482 double energy(void *), double metric(void *, void *),
483 void step(const gsl_rng *, void *, double),
484 void copy(void *, void *), void *copycons(void *),
485 void destroy(void *), void print(void *)) {
486 DEBUGMSG("siman");
487 gsl_rng *gen = gsl_rng_alloc (gsl_rng_mt19937);
488 gsl_rng_set(gen, seed);
489
490 // The simulated annealing routine doesn't indicate with a return
491 // code how things went -- there's little notion of convergence for
492 // a randomized minimizer on a potentially non-convex problem, and I
493 // suppose it doesn't detect egregious failures like malloc errors
494 // in the copy-constructor.
495 gsl_siman_solve(gen, xp0,
496 energy, step,
497 metric, print,
498 copy, copycons,
499 destroy, 0, *params);
500
501 gsl_rng_free(gen);
502 OK
503}
479 504
480// this version returns info about intermediate steps 505// this version returns info about intermediate steps
481int minimize(int method, double f(int, double*), double tolsize, int maxit, 506int minimize(int method, double f(int, double*), double tolsize, int maxit,