class_docstr: An ensemble strategy that adds k random candidates (with replacement).
code: def __call__(
      self, candidates: List[tf.keras.Model]
  ) -> Iterable[List[tf.keras.Model]]:
      if self._seed:
          random_state = random.getstate()
          random.seed(self._seed)
          candidates = [random.choices(candidates, k=self._k)]
          random_state = random.setstate(random_state)
      else:
          candidates = [random.choices(candidates, k=self._k)]
      return [candidates]
  
imports: import abc
  import random
  from typing import Iterable, Iterator, List
  from adanet.experimental.keras.ensemble_model import EnsembleModel
  from adanet.experimental.keras.ensemble_model import MeanEnsemble
  from adanet.experimental.phases.phase import DatasetProvider
  from adanet.experimental.phases.phase import ModelProvider
  from adanet.experimental.storages.in_memory_storage import InMemoryStorage
  from adanet.experimental.storages.storage import Storage
  from adanet.experimental.work_units.keras_trainer_work_unit import KerasTrainerWorkUnit
  from adanet.experimental.work_units.work_unit import WorkUnit
  import tensorflow.compat.v2
label_desc: Use image node_id 2 for calling the RandomKStrategy obj's underlying member method code with example usage: obj.__call__(candidates) and returns: list