def METHOD_NAME(self, tokens, reward, iter, client_num=1):
    """
    Update the controller according to latest tokens and reward.
    Args:
        tokens(list<int>): The tokens generated in current step.
        reward(float): The reward of tokens.
        iter(int): The current step of searching client.
        client_num(int): The total number of searching client. 
    """
    iter = int(iter)
    if iter > self._iter:
        self._iter = iter
    self._searched[str(tokens)] = reward
    temperature = self._init_temperature * self._reduce_rate**(client_num *
                                                               self._iter)
    if (reward > self._reward) or (np.random.random() <= math.exp(
        (reward - self._reward) / temperature)):
        self._reward = reward
        self._tokens = tokens
    if reward > self._max_reward:
        self._max_reward = reward
        self._best_tokens = tokens
    _logger.info(
        "Controller - iter: {}; best_reward: {}, best tokens: {}, current_reward: {}; current tokens: {}".
        format(self._iter, self._max_reward, self._best_tokens, reward,
               tokens))
    _logger.debug(
        'Controller - iter: {}, controller current tokens: {}, controller current reward: {}'.
        format(self._iter, self._tokens, self._reward))
    if self._checkpoints != None:
        self._save_checkpoint(self._checkpoints)