parameters: (self, mixed_strategy, return_exp=False)
docstring: Return best response and its superiority over the current strategy.
  
      Args:
        mixed_strategy: np.ndarray (distribution over strategies)
        return_exp: bool, whether to return how much best response exploits the
          given mixed strategy (default is False)
      Returns:
        br: int, index of strategy (ties split randomly)
        exp: u(br) - u(mixed_strategy)
docstring_summary: Return best response and its superiority over the current strategy.
docstring_tokens: Return best response and its superiority over the current strategy .
function: def best_response(self, mixed_strategy, return_exp=False):
      """Return best response and its superiority over the current strategy.
  
      Args:
        mixed_strategy: np.ndarray (distribution over strategies)
        return_exp: bool, whether to return how much best response exploits the
          given mixed strategy (default is False)
      Returns:
        br: int, index of strategy (ties split randomly)
        exp: u(br) - u(mixed_strategy)
      """
      logging.warn("Assumes symmetric game! Returns br for player 0.")
      gradient = misc.pt_reduce(self.pt[0],
                                [mixed_strategy] * self.num_players(),
                                [0])
      br = misc.argmax(self.random, gradient)
      exp = gradient.max() - gradient.dot(mixed_strategy)
      if return_exp:
        return br, exp
      else:
        return br
function_tokens: def best_response ( self , mixed_strategy , return_exp = False ) : logging . warn ( "Assumes symmetric game! Returns br for player 0." ) gradient = misc . pt_reduce ( self . pt [ 0 ] , [ mixed_strategy ] * self . num_players ( ) , [ 0 ] ) br = misc . argmax ( self . random , gradient ) exp = gradient . max ( ) - gradient . dot ( mixed_strategy ) if return_exp : return br , exp else : return br