parameters: (self, params, grads, t)
return_statement: return new_params
docstring: Entropic mirror descent on exploitability.
  
      Args:
        params: tuple of variables to be updated (dist, y, anneal_steps)
        grads: tuple of variable gradients (grad_dist, grad_y, grad_anneal_steps)
        t: int, solver iteration
      Returns:
        new_params: tuple of update params (new_dist, new_y, new_anneal_steps)
docstring_summary: Entropic mirror descent on exploitability.
docstring_tokens: Entropic mirror descent on exploitability .
function: def mirror_descent_step(self, params, grads, t):
      """Entropic mirror descent on exploitability.
  
      Args:
        params: tuple of variables to be updated (dist, y, anneal_steps)
        grads: tuple of variable gradients (grad_dist, grad_y, grad_anneal_steps)
        t: int, solver iteration
      Returns:
        new_params: tuple of update params (new_dist, new_y, new_anneal_steps)
      """
      lr_dist, lr_y = self.lrs
      new_params = [np.log(np.clip(params[0], 0, np.inf)) - lr_dist * grads[0]]
      lr_y = np.clip(1 / float(t + 1), lr_y, np.inf)
      new_params += [params[1] - lr_y * grads[1]]
      new_params = mirror_project(*new_params)
      new_params += (params[2] + grads[2],)
      return new_params
function_tokens: def mirror_descent_step ( self , params , grads , t ) : lr_dist , lr_y = self . lrs new_params = [ np . log ( np . clip ( params [ 0 ] , 0 , np . inf ) ) - lr_dist * grads [ 0 ] ] lr_y = np . clip ( 1 / float ( t + 1 ) , lr_y , np . inf ) new_params += [ params [ 1 ] - lr_y * grads [ 1 ] ] new_params = mirror_project ( * new_params ) new_params += ( params [ 2 ] + grads [ 2 ] , ) return new_params