docs: def softmax(self, params):
          '''
          Run the softmax selection strategy.
  
          Parameters
          ----------
          Params : dict
              Tau
  
          Returns
          -------
          int
              Index of chosen bandit
          '''
  
          default_tau = 0.1
  
          if params and type(params) == dict:
              tau = params.get('tau')
              try:
                  float(tau)
              except ValueError:
                  'slots: softmax: Setting tau to default'
                  tau = default_tau
          else:
              tau = default_tau
  
          # Handle cold start. Not all bandits tested yet.
          if True in (self.pulls < 3):
              return np.random.choice(range(len(self.pulls)))
          else:
              payouts = self.wins / (self.pulls + 0.1)
              norm = sum(np.exp(payouts/tau))
  
          ps = np.exp(payouts/tau)/norm
  
          # Randomly choose index based on CMF
          cmf = [sum(ps[:i+1]) for i in range(len(ps))]
  
          rand = np.random.rand()
  
          found = False
          found_i = None
          i = 0
          while not found:
              if rand < cmf[i]:
                  found_i = i
                  found = True
              else:
                  i += 1
  
          return found_i