Added script front-end for primer-design code
[htsworkflow.git] / htswanalysis / MACS / lib / gsl / gsl-1.11 / doc / examples / siman.c
1 #include <math.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <gsl/gsl_siman.h>
5
6 /* set up parameters for this simulated annealing run */
7
8 /* how many points do we try before stepping */
9 #define N_TRIES 200             
10
11 /* how many iterations for each T? */
12 #define ITERS_FIXED_T 1000
13
14 /* max step size in random walk */
15 #define STEP_SIZE 1.0            
16
17 /* Boltzmann constant */
18 #define K 1.0                   
19
20 /* initial temperature */
21 #define T_INITIAL 0.008         
22
23 /* damping factor for temperature */
24 #define MU_T 1.003              
25 #define T_MIN 2.0e-6
26
27 gsl_siman_params_t params 
28   = {N_TRIES, ITERS_FIXED_T, STEP_SIZE,
29      K, T_INITIAL, MU_T, T_MIN};
30
31 /* now some functions to test in one dimension */
32 double E1(void *xp)
33 {
34   double x = * ((double *) xp);
35
36   return exp(-pow((x-1.0),2.0))*sin(8*x);
37 }
38
39 double M1(void *xp, void *yp)
40 {
41   double x = *((double *) xp);
42   double y = *((double *) yp);
43
44   return fabs(x - y);
45 }
46
47 void S1(const gsl_rng * r, void *xp, double step_size)
48 {
49   double old_x = *((double *) xp);
50   double new_x;
51
52   double u = gsl_rng_uniform(r);
53   new_x = u * 2 * step_size - step_size + old_x;
54
55   memcpy(xp, &new_x, sizeof(new_x));
56 }
57
58 void P1(void *xp)
59 {
60   printf ("%12g", *((double *) xp));
61 }
62
63 int
64 main(int argc, char *argv[])
65 {
66   const gsl_rng_type * T;
67   gsl_rng * r;
68
69   double x_initial = 15.5;
70
71   gsl_rng_env_setup();
72
73   T = gsl_rng_default;
74   r = gsl_rng_alloc(T);
75
76   gsl_siman_solve(r, &x_initial, E1, S1, M1, P1,
77                   NULL, NULL, NULL, 
78                   sizeof(double), params);
79
80   gsl_rng_free (r);
81   return 0;
82 }