class_docstr: ACER model that consists of a separate policy and V-function.
  
  Args:
      pi (Policy): Policy.
      v (VFunction): V-function.
      adv (StateActionQFunction): Advantage function.
class_docstr_tok: ["ACER","model","that","consists","of","a","separate","policy","and","V-function",".","Args",":","pi","(","Policy",")",":","Policy",".","v","(","VFunction",")",":","V-function",".","adv","(","StateActionQFunction",")",":","Advantage","function","."]
code: def __call__(self, obs):
      action_distrib = self.pi(obs)
      v = self.v(obs)
  
      def evaluator(action):
          adv_mean = (
              sum(
                  self.adv(obs, action_distrib.sample().array)
                  for _ in range(self.n)
              )
              / self.n
          )
          return v + self.adv(obs, action) - adv_mean
  
      action_value = SingleActionValue(evaluator)
  
      return action_distrib, action_value, v
  
imports: import copy
  from logging import getLogger
  import chainer
  from chainer import functions
  import numpy
  from chainerrl.action_value import SingleActionValue
  from chainerrl import agent
  from chainerrl import distribution
  from chainerrl import links
  from chainerrl.misc import async_
  from chainerrl.misc import copy_param
  from chainerrl.recurrent import Recurrent
  from chainerrl.recurrent import RecurrentChainMixin
  from chainerrl.recurrent import state_kept
  from chainerrl.recurrent import state_reset
label_desc: Use image node_id 2 for calling the ACERSDNSeparateModel obj's underlying member method code with example usage: obj.__call__(obs) and returns: action_distrib,  action_value,  v, unknown