# # = Simulated Annealing # === Library # # == Module and classes # * GSL:: # * Siman:: (Module) # * Params (Class) # * Efunc (Class) # * Step (Class) # * Metric (Class) # * Print (Class) # # == Siman Module # === Singleton method # --- # * GSL::Siman.solve(rng, x0_p, efunc, stepper, metric, printer, params) # # This performs a simulated annealing search through a given space. # The space is specified by providing the functions efunc and metric. # The simulated annealing steps are generated using the random number generator # rng and the function stepper. The starting configuration of the # system should be given by a Vector object x0_p. # # The parameter params controls the run by providing the temperature # schedule and other tunable parameters to the algorithm. # # On exit the best result achieved during the search is placed in x0_p. # If the annealing process has been successful this should be a good approximation # to the optimal point in the space. # # If the function printer is not nil, a debugging log will be printed # to stdout with the following columns: # number_of_iterations temperature x x-(x0_p) efunc(x) # and the output of printer itself. If printer is nil # then no information is printed. # # == Example # # #!/usr/bin/env ruby # require("gsl") # include GSL::Siman # # N_TRIES = 200 # ITERS_FIXED_T = 10 # STEP_SIZE = 10 # K = 1.0 # T_INITIAL = 0.002 # MU_T = 1.005 # T_MIN = 2.0e-6 # # params = Siman::Params.alloc(N_TRIES, ITERS_FIXED_T, STEP_SIZE, K, T_INITIAL, # MU_T, T_MIN) # # efunc = Efunc.alloc { |vx| # x = vx[0] # s = (x - 1.0) # Math::exp(-s*s)*Math::sin(8*x) # } # # metric = Metric.alloc { |vx, vy| # (x[0] - y[0]).abs # } # # step = Step.alloc { |rng, vx, step_size| # r = rng.uniform # old_x = vx[0] # a = r * 2 * step_size - step_size + old_x # vx[0] = a # } # # simanprint = Print.alloc { |vx| # printf("%12g", vx[0]) # } # # x = Vector.alloc([15.5]) # Rng.env_setup() # rng = Rng.alloc() # # #Siman::solve(rng, x, efunc, step, metric, simanprint, params) # Siman::solve(rng, x, efunc, step, metric, nil, params) # p x # # {prev}[link:rdoc/monte_rdoc.html] # {next}[link:rdoc/odeiv_rdoc.html] # # {Reference index}[link:rdoc/ref_rdoc.html] # {top}[link:index.html] #