code: def linearly_decaying_epsilon(
      decay_period, step, warmup_steps, epsilon
  ):
      """Returns the current epsilon for the agent's epsilon-greedy policy.
  
      This follows the Nature DQN schedule of a linearly decaying epsilon (Mnih et
      al., 2015). The schedule is as follows:
        Begin at 1. until warmup_steps steps have been taken; then
        Linearly decay epsilon from 1. to epsilon in decay_period steps; and then
        Use epsilon from there on.
  
      Args:
        decay_period: float, the period over which epsilon is decayed.
        step: int, the number of training steps completed so far.
        warmup_steps: int, the number of steps taken before epsilon is decayed.
        epsilon: float, the final value to which to decay the epsilon parameter.
  
      Returns:
        A float, the current epsilon value computed according to the schedule.
      """
      steps_left = decay_period + warmup_steps - step
      bonus = (1.0 - epsilon) * steps_left / decay_period
      bonus = np.clip(bonus, 0.0, 1.0 - epsilon)
      return epsilon + bonus
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import math
  import os
  import random
  from absl import logging
  from dopamine.discrete_domains import atari_lib
  from dopamine.replay_memory import circular_replay_buffer
  import gin.tf
  import numpy
  import tensorflow
label_desc: Use image node_id 1 for calling a global function with example usage: linearly_decaying_epsilon(decay_period, step, warmup_steps, epsilon) and returns: unknown