help-gsl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Help-gsl] Problem using simulated annealing


From: Francisco Marcelo Rocha
Subject: [Help-gsl] Problem using simulated annealing
Date: Tue, 2 Feb 2010 12:43:52 -0200

Dear help-gsl,

I have included the header of the simple example of simulated annealing
result in the following libraries: the following libraries iostream, fstream
and cstdio. When compiled the example occurred the following error:
segmentation fault. How can I fix the program?
and how can I write the result of the program in a file using fstream? The
example used is

# include<cstdio>
# include<iostream>
# include<cmath>
# include<cstdlib>
# include<cstring>
# include<fstream>
#include <gsl/gsl_errno.h>
# include<gsl/gsl_siman.h>
/* set up parameters for this simulated annealing run */
/* how many points do we try before stepping */
#define N_TRIES 200
/* how many iterations for each T? */
#define ITERS_FIXED_T 1000
/* max step size in random walk */
#define STEP_SIZE 1.0
/* Boltzmann constant */
#define K 1.0
/* initial temperature */
#define T_INITIAL 0.008
/* damping factor for temperature */
#define MU_T 1.003
#define T_MIN 2.0e-6

using namespace std;

gsl_siman_params_t params   = {N_TRIES, ITERS_FIXED_T, STEP_SIZE,
     K, T_INITIAL, MU_T, T_MIN};
/* now some functions to test in one dimension */
double E1(void *xp)
{
  double x = * ((double *) xp);
  return exp(-pow((x-1.0),2.0))*sin(8*x);
}

double M1(void *xp, void *yp)
{
  double x = *((double *) xp);
  double y = *((double *) yp);
  return fabs(x - y);
}

void S1(const gsl_rng * r, void *xp, double step_size)
{
  double old_x = *((double *) xp);
  double new_x;
  double u = gsl_rng_uniform(r);
  new_x = u * 2 * step_size - step_size + old_x;
  memcpy(xp, &new_x, sizeof(new_x));
}

void P1(void *xp)// ostream & simuanel
{
//  printf ("%12g", *((double *) xp));
//   cout <<  *((double *) xp) << endl;
 // simuanel << *((double *) xp) << endl;
}


int main(int argc, char *argv[])
{
  const gsl_rng_type * T;
  gsl_rng * r;
  double x_initial = 15.5;
  gsl_rng_env_setup();
  T = gsl_rng_default;
  r = gsl_rng_alloc(T);



   gsl_siman_solve(r, &x_initial, E1, S1, M1, P1,
                  NULL, NULL, NULL,
                  sizeof(double), params);
  gsl_rng_free (r);



  return 0;
}

Sincerely



-- 
Francisco Marcelo Monteiro da Rocha
E-mail: address@hidden
tel: 11 6397-4748


reply via email to

[Prev in Thread] Current Thread [Next in Thread]