code: def get_hill_climbing_params(self, current_models):
      df_models, algorithms = self.df_models_algorithms(current_models)
      generated_params = []
      counts = {model_type: 0 for model_type in algorithms}
  
      for i in range(df_models.shape[0]):
          model_type = df_models["model_type"].iloc[i]
          counts[model_type] += 1
          if counts[model_type] > self._top_models_to_improve:
              continue
  
          m = df_models["model"].iloc[i]
  
          for p in HillClimbing.get(
              m.params.get("learner"),
              self._ml_task,
              len(current_models) + self._seed,
          ):
              model_indices = [
                  int(m.get_name().split("_")[0])
                  for m in current_models
              ]
              model_max_index = np.max(model_indices)
  
              logger.info(
                  "Hill climbing step, for model #{0}".format(
                      model_max_index + 1
                  )
              )
              if p is not None:
                  all_params = copy.deepcopy(m.params)
                  all_params["learner"] = p
  
                  all_params["name"] = self.get_model_name(
                      all_params["learner"]["model_type"],
                      model_max_index + 1 + len(generated_params),
                  )
                  if "SampleWeigthing" in m.get_name():
                      all_params["name"] += "_SampleWeigthing"
                      n = m.get_name().split("_")
                      if "Update" in n:
                          i = n.index("Update")
                          all_params["name"] += f"_Update_{n[i+1]}"
  
                  if "golden_features" in all_params["preprocessing"]:
                      all_params["name"] += "_GoldenFeatures"
                  if "drop_features" in all_params[
                      "preprocessing"
                  ] and len(
                      all_params["preprocessing"]["drop_features"]
                  ):
                      all_params["name"] += "_SelectedFeatures"
                  all_params["status"] = "initialized"
                  all_params["final_loss"] = None
                  all_params["train_time"] = None
                  unique_params_key = MljarTuner.get_params_key(
                      all_params
                  )
  
                  if unique_params_key not in self._unique_params_keys:
                      generated_params += [all_params]
  
      return generated_params
  
imports: import copy
  import json
  import logging
  import os
  import numpy
  import pandas
  from sklearn.preprocessing import OneHotEncoder
  from supervised.algorithms.catboost import catboost_eval_metric
  from supervised.algorithms.lightgbm import lightgbm_eval_metric
  from supervised.algorithms.registry import BINARY_CLASSIFICATION, MULTICLASS_CLASSIFICATION, REGRESSION, AlgorithmsRegistry
  from supervised.algorithms.xgboost import xgboost_eval_metric
  from supervised.preprocessing.label_encoder import LabelEncoder
  from supervised.preprocessing.preprocessing_categorical import PreprocessingCategorical
  from supervised.tuner.hill_climbing import HillClimbing
  from supervised.tuner.preprocessing_tuner import PreprocessingTuner
  from supervised.tuner.random_parameters import RandomParameters
  from supervised.utils.config import LOG_LEVEL
  from supervised.utils.utils import dump_data, load_data
label_desc: Use image node_id 20 for calling the MljarTuner obj's underlying member method code with example usage: obj.get_hill_climbing_params(current_models) and returns: generated_params