def setup_threads
      @num_threads.times do
        @threads << Thread.new
      end
      @threads.each do |thread|
        @current = {
          :parameters => self.random_start_point,
          :score => nil
        }
        @best = @current
        @standard_deviations = {}
        @recent_scores = []
        @score_history = []
        @best_history = []
        @tabu = Set.new
        self.define_neighbourhood_structure
        @current_hood = Biopsy::Hood.new(@distributions, @max_hood_size, @tabu)
        thread.members.each do |sym|
          ivar = self.sym_to_ivar_sym sym
          thread[sym] = self.instance_variable_get(ivar)
        end
        thread.loaded = false
      end
      @current_thread = @num_threads - 2
      # adjust the alpha for multiple testing in convergence
      @adjusted_alpha = @convergence_alpha / @num_threads
    end
def setup_threads
      @num_threads.times do
        @threads << Thread.new
      end
      @threads.each do |thread|
        @current = {
          :parameters => self.random_start_point,
          :score => nil
        }
        @best = @current
        @standard_deviations = {}
        @recent_scores = []
        @score_history = []
        @best_history = []
        @tabu = Set.new
        self.define_neighbourhood_structure
        @current_hood = Biopsy::Hood.new(@distributions, @max_hood_size, @tabu)
        thread.members.each do |sym|
          ivar = self.sym_to_ivar_sym sym
          thread[sym] = self.instance_variable_get(ivar)
        end
        thread.loaded = false
      end
      @current_thread = @num_threads - 2
      # adjust the alpha for multiple testing in convergence
      @adjusted_alpha = @convergence_alpha / @num_threads
    end
run_one_iteration