class_docstr: Epsilon-greedy with linearly decayed epsilon
  
  Args:
    start_epsilon: max value of epsilon
    end_epsilon: min value of epsilon
    decay_steps: how many steps it takes for epsilon to decay
    random_action_func: function with no argument that returns action
    logger: logger used
class_docstr_tok: ["Epsilon-greedy","with","linearly","decayed","epsilon","Args",":","start_epsilon",":","max","value","of","epsilon","end_epsilon",":","min","value","of","epsilon","decay_steps",":","how","many","steps","it","takes","for","epsilon","to","decay","random_action_func",":","function","with","no","argument","that","returns","action","logger",":","logger","used"]
code: def __init__(
      self,
      start_epsilon,
      end_epsilon,
      decay_steps,
      random_action_func,
      logger=getLogger(__name__),
  ):
      assert start_epsilon >= 0 and start_epsilon <= 1
      assert end_epsilon >= 0 and end_epsilon <= 1
      assert decay_steps >= 0
      self.start_epsilon = start_epsilon
      self.end_epsilon = end_epsilon
      self.decay_steps = decay_steps
      self.random_action_func = random_action_func
      self.logger = logger
      self.epsilon = start_epsilon
  
imports: from logging import getLogger
  import numpy
  from pfrl import explorer
label_desc: Use image node_id 1 to create a new LinearDecayEpsilonGreedy object from inherited base classes: explorer with example: obj = LinearDecayEpsilonGreedy(start_epsilon, end_epsilon, decay_steps, random_action_func, logger)