class_docstr: Implementation of SMAC's local search.
  
  Parameters
  ----------
  configspace : ConfigurationSpace
  acquisition_function : AbstractAcquisitionFunction
  challengers : int, defaults to 5000
      Number of challengers.
  max_steps: int | None, defaults to None
      Maximum number of iterations that the local search will perform.
  n_steps_plateau_walk: int, defaults to 10
      Number of steps during a plateau walk before local search terminates.
  vectorization_min_obtain : int, defaults to 2
      Minimal number of neighbors to obtain at once for each local search for vectorized calls. Can be tuned to
      reduce the overhead of SMAC.
  vectorization_max_obtain : int, defaults to 64
      Maximal number of neighbors to obtain at once for each local search for vectorized calls. Can be tuned to
      reduce the overhead of SMAC.
  seed : int, defaults to 0
class_docstr_tok: ["Implementation","of","SMAC","'s","local","search",".","Parameters","--","--","--","--","--","configspace",":","ConfigurationSpace","acquisition_function",":","AbstractAcquisitionFunction","challengers",":","int",",","defaults","to","5000","Number","of","challengers",".","max_steps",":","int","|","None",",","defaults","to","None","Maximum","number","of","iterations","that","the","local","search","will","perform",".","n_steps_plateau_walk",":","int",",","defaults","to","10","Number","of","steps","during","a","plateau","walk","before","local","search","terminates",".","vectorization_min_obtain",":","int",",","defaults","to","2","Minimal","number","of","neighbors","to","obtain","at","once","for","each","local","search","for","vectorized","calls",".","Can","be","tuned","to","reduce","the","overhead","of","SMAC",".","vectorization_max_obtain",":","int",",","defaults","to","64","Maximal","number","of","neighbors","to","obtain","at","once","for","each","local","search","for","vectorized","calls",".","Can","be","tuned","to","reduce","the","overhead","of","SMAC",".","seed",":","int",",","defaults","to","0"]
docstr: Start a local search from the given startpoints. Iteratively collect neighbours
  using Configspace.utils.get_one_exchange_neighbourhood and evaluate them.
  If the new config is better than the current best, the local search is coninued from the
  new config.
  
  Quit if either the max number of steps is reached or
  no neighbor with a higher improvement was found or the number of local steps self._n_steps_plateau_walk
  for each of the starting point is depleted.
  
  
  Parameters
  ----------
  previous_configs : list[Configuration]
      Previous configuration (e.g., from the runhistory).
  n_points : int
      Number of initial points to be generated.
  additional_start_points : list[tuple[float, Configuration]] | None
      Additional starting points.
  
  Returns
  -------
  list[Configuration]
      Final candidates.
docstr_tok: ["Start","a","local","search","from","the","given","startpoints",".","Iteratively","collect","neighbours","using","Configspace.utils.get_one_exchange_neighbourhood","and","evaluate","them",".","If","the","new","config","is","better","than","the","current","best",",","the","local","search","is","coninued","from","the","new","config",".","Quit","if","either","the","max","number","of","steps","is","reached","or","no","neighbor","with","a","higher","improvement","was","found","or","the","number","of","local","steps","self._n_steps_plateau_walk","for","each","of","the","starting","point","is","depleted",".","Parameters","--","--","--","--","--","previous_configs",":","list","[","Configuration","]","Previous","configuration","(","e.g.",",","from","the","runhistory",")",".","n_points",":","int","Number","of","initial","points","to","be","generated",".","additional_start_points",":","list","[","tuple","[","float",",","Configuration","]","]","|","None","Additional","starting","points",".","Returns","--","--","--","-","list","[","Configuration","]","Final","candidates","."]
code: def _maximize(
      self,
      previous_configs: list[Configuration],
      n_points: int,
      additional_start_points: list[tuple[float, Configuration]]
      | None = None,
  ) -> list[tuple[float, Configuration]]:
      """Start a local search from the given startpoints. Iteratively collect neighbours
      using Configspace.utils.get_one_exchange_neighbourhood and evaluate them.
      If the new config is better than the current best, the local search is coninued from the
      new config.
  
      Quit if either the max number of steps is reached or
      no neighbor with a higher improvement was found or the number of local steps self._n_steps_plateau_walk
      for each of the starting point is depleted.
  
  
      Parameters
      ----------
      previous_configs : list[Configuration]
          Previous configuration (e.g., from the runhistory).
      n_points : int
          Number of initial points to be generated.
      additional_start_points : list[tuple[float, Configuration]] | None
          Additional starting points.
  
      Returns
      -------
      list[Configuration]
          Final candidates.
      """
      init_points = self._get_initial_points(
          previous_configs, n_points, additional_start_points
      )
      configs_acq = self._search(init_points)
  
      # Shuffle for random tie-break
      self._rng.shuffle(configs_acq)
  
      # Sort according to acq value
      configs_acq.sort(reverse=True, key=lambda x: x[0])
      for a, inc in configs_acq:
          inc.origin = "Acquisition Function Maximizer: Local Search"
  
      return configs_acq
  
file_path: SMAC3/smac/acquisition/maximizer/local_search.py
imports: from __future__ import annotations
  from typing import Any
  import itertools
  import time
  import numpy
  from ConfigSpace import Configuration, ConfigurationSpace
  from ConfigSpace.exceptions import ForbiddenValueError
  from smac.acquisition.function import AbstractAcquisitionFunction
  from smac.acquisition.maximizer.abstract_acqusition_maximizer import AbstractAcquisitionMaximizer
  from smac.utils.configspace import convert_configurations_to_array, get_one_exchange_neighbourhood
  from smac.utils.logging import get_logger
label_desc: Use image node_id 3 for calling the LocalSearch obj's underlying member method code with example usage: obj._maximize(previous_configs, n_points, additional_start_points) and returns: configs_acq