class_docstr: Truncate Exploit
  
  If the given trial is under a ``truncation_quantile`` compared to all other trials that
  has reached the same fidelity level, then a new candidate trial is selected for forking.
  The new candidate is selected from a pool of best ``candidate_pool_ratio``\% of the available
  trials at the same fidelity level.
  
  If there are less than ``min_forking_population`` trials that have reached the fidelity level
  as the passed trial, then `None` is return to signal that we should reconsider this trial later
  on when more trials are completed at this fidelity level.
  
  Parameters
  ----------
  min_forking_population: int, optional
      Minimum number of trials that should be completed up to the fidelity level of the current
      trial passed. TruncateExploit will return ``None`` when this requirement is not met.
      Default: 5
  truncation_quantile: float, optional
      If the passed trial's objective is above quantile ``truncation_quantile``, then another
      candidate is considered for forking. Default: 0.8
  candidate_pool_ratio: float, optional
      When choosing another candidate for forking, it will be randomly selected from the
      best ``candidate_pool_ratio``\% of the available trials. Default: 0.2
class_docstr_tok: ["Truncate","Exploit","If","the","given","trial","is","under","a","``","truncation_quantile","``","compared","to","all","other","trials","that","has","reached","the","same","fidelity","level",",","then","a","new","candidate","trial","is","selected","for","forking",".","The","new","candidate","is","selected","from","a","pool","of","best","``","candidate_pool_ratio","``","\\","%","of","the","available","trials","at","the","same","fidelity","level",".","If","there","are","less","than","``","min_forking_population","``","trials","that","have","reached","the","fidelity","level","as","the","passed","trial",",","then","`","None","`","is","return","to","signal","that","we","should","reconsider","this","trial","later","on","when","more","trials","are","completed","at","this","fidelity","level",".","Parameters","--","--","--","--","--","min_forking_population",":","int",",","optional","Minimum","number","of","trials","that","should","be","completed","up","to","the","fidelity","level","of","the","current","trial","passed",".","TruncateExploit","will","return","``","None","``","when","this","requirement","is","not","met",".","Default",":","5","truncation_quantile",":","float",",","optional","If","the","passed","trial","'s","objective","is","above","quantile","``","truncation_quantile","``",",","then","another","candidate","is","considered","for","forking",".","Default",":","0.8","candidate_pool_ratio",":","float",",","optional","When","choosing","another","candidate","for","forking",",","it","will","be","randomly","selected","from","the","best","``","candidate_pool_ratio","``","\\","%","of","the","available","trials",".","Default",":","0.2"]
code: def __init__(
      self,
      min_forking_population=5,
      truncation_quantile=0.8,
      candidate_pool_ratio=0.2,
  ):
      self.min_forking_population = min_forking_population
      self.truncation_quantile = truncation_quantile
      self.candidate_pool_ratio = candidate_pool_ratio
  
imports: import logging
  import numpy
  from orion.core.utils import GenericFactory
label_desc: Use image node_id 1 to create a new TruncateExploit object from inherited base classes: BaseExploit with example: obj = TruncateExploit(min_forking_population, truncation_quantile, candidate_pool_ratio)