class_docstr: Allows to compose algorithms into a schedule by repeating an algorithm
  or chaining different algorithms while maintaining the same results table.
  
  Args:
      algorithms (List[sherpa.algorithms.Algorithm]): the algorithms to run,
          each algorithm must have a maximum number of trials specified for
          the next algorithm to run.
class_docstr_tok: ["Allows","to","compose","algorithms","into","a","schedule","by","repeating","an","algorithm","or","chaining","different","algorithms","while","maintaining","the","same","results","table",".","Args",":","algorithms","(","List","[","sherpa.algorithms.Algorithm","]",")",":","the","algorithms","to","run",",","each","algorithm","must","have","a","maximum","number","of","trials","specified","for","the","next","algorithm","to","run","."]
code: def get_suggestion(self, parameters, results, lower_is_better):
      config = self.algorithms[self.alg_counter].get_suggestion(
          parameters, results, lower_is_better
      )
      if (
          config is None or config == AlgorithmState.DONE
      ) and self.alg_counter < len(self.algorithms) - 1:
          self.alg_counter += 1
          print("Next algorithm")
          config = self.get_suggestion(
              parameters, results, lower_is_better
          )
      return config
  
imports: import os
  import random
  import numpy
  import logging
  import sherpa
  import pandas
  import sklearn.gaussian_process
  from sherpa.core import Choice, Continuous, Discrete, Ordinal, AlgorithmState
  from sherpa.core import rng
  import sklearn.model_selection
  import collections
label_desc: Use image node_id 2 for calling the Chain obj's underlying member method code with example usage: obj.get_suggestion(parameters, results, lower_is_better) and returns: config