class_docstr: A combination of the eps-greedy and Boltzman q-policy.
  
  Wiering, M.: Explorations in Efficient Reinforcement Learning.
  PhD thesis, University of Amsterdam, Amsterdam (1999)
  
  https://pure.uva.nl/ws/files/3153478/8461_UBA003000033.pdf
class_docstr_tok: ["A","combination","of","the","eps-greedy","and","Boltzman","q-policy",".","Wiering",",","M.",":","Explorations","in","Efficient","Reinforcement","Learning",".","PhD","thesis",",","University","of","Amsterdam",",","Amsterdam","(","1999",")","https",":","\/\/pure.uva.nl\/ws\/files\/3153478\/8461_UBA003000033.pdf"]
docstr: Return the selected action
  The selected action follows the BoltzmannQPolicy with probability epsilon
  or return the Greedy Policy with probability (1 - epsilon)
  
  # Arguments
      q_values (np.ndarray): List of the estimations of Q for each action
  
  # Returns
      Selection action
code: def select_action(self, q_values):
      """Return the selected action
      The selected action follows the BoltzmannQPolicy with probability epsilon
      or return the Greedy Policy with probability (1 - epsilon)
  
      # Arguments
          q_values (np.ndarray): List of the estimations of Q for each action
  
      # Returns
          Selection action
      """
      assert q_values.ndim == 1
      q_values = q_values.astype("float64")
      nb_actions = q_values.shape[0]
  
      if np.random.uniform() < self.eps:
          exp_values = np.exp(
              np.clip(q_values / self.tau, self.clip[0], self.clip[1])
          )
          probs = exp_values / np.sum(exp_values)
          action = np.random.choice(range(nb_actions), p=probs)
      else:
          action = np.argmax(q_values)
      return action
  
imports: from __future__ import division
  import numpy
  from rl.util import *
label_desc: Use image node_id 2 for calling the MaxBoltzmannQPolicy obj's underlying member method code with example usage: obj.select_action(q_values) and returns: action