class_docstr: Distributional (MoG) MPO learner.
code: def _maybe_update_target_networks(self):
      # Update target network.
      online_policy_variables = self._policy_network.variables
      target_policy_variables = self._target_policy_network.variables
      online_critic_variables = (
          *self._observation_network.variables,
          *self._critic_network.variables,
      )
      target_critic_variables = (
          *self._target_observation_network.variables,
          *self._target_critic_network.variables,
      )
  
      # Make online policy -> target policy network update ops.
      if (
          tf.math.mod(
              self._num_steps, self._target_policy_update_period
          )
          == 0
      ):
          for src, dest in zip(
              online_policy_variables, target_policy_variables
          ):
              dest.assign(src)
  
      # Make online critic -> target critic network update ops.
      if (
          tf.math.mod(
              self._num_steps, self._target_critic_update_period
          )
          == 0
      ):
          for src, dest in zip(
              online_critic_variables, target_critic_variables
          ):
              dest.assign(src)
  
imports: import dataclasses
  import time
  from typing import List, Optional
  import acme
  from acme import types
  from acme.tf import losses
  from acme.tf import savers
  from acme.tf import utils
  from acme.utils import counting
  from acme.utils import loggers
  import numpy
  import reverb
  import sonnet
  import tensorflow
  import tensorflow_probability
label_desc: Use image node_id 5 for calling the MoGMPOLearner obj's underlying member method code with example usage: obj._maybe_update_target_networks() without return types