class_docstr: Soft Actor-Critic trainer as described in https://arxiv.org/pdf/1801.01290
  
  The actor is assumed to implement reparameterization trick.
code: def configure_optimizers(self):
      optimizers = []
  
      optimizers.append(
          self.q_network_optimizer.make_optimizer_scheduler(
              self.q1_network.parameters()
          )
      )
      if self.q2_network:
          optimizers.append(
              self.q_network_optimizer.make_optimizer_scheduler(
                  self.q2_network.parameters()
              )
          )
      optimizers.append(
          self.actor_network_optimizer.make_optimizer_scheduler(
              self.actor_network.parameters()
          )
      )
      if self.alpha_optimizer is not None:
          optimizers.append(
              self.alpha_optimizer.make_optimizer_scheduler(
                  [self.log_alpha]
              )
          )
      if self.value_network:
          optimizers.append(
              self.value_network_optimizer.make_optimizer_scheduler(
                  self.value_network.parameters()
              )
          )
      # soft-update
      if self.value_network:
          target_params = self.value_network_target.parameters()
          source_params = self.value_network.parameters()
      else:
          target_params = list(self.q1_network_target.parameters())
          source_params = list(self.q1_network.parameters())
          if self.q2_network:
              target_params += list(self.q2_network_target.parameters())
              source_params += list(self.q2_network.parameters())
      optimizers.append(
          SoftUpdate.make_optimizer_scheduler(
              target_params, source_params, tau=self.tau
          )
      )
  
      return optimizers
  
imports: import copy
  import logging
  from typing import List, Optional
  import numpy
  import reagent.core.types
  import torch
  import torch.nn.functional
  from reagent.core.configuration import resolve_defaults
  from reagent.core.dataclasses import dataclass, field
  from reagent.core.parameters import RLParameters
  from reagent.models.actor import LOG_PROB_MAX, LOG_PROB_MIN
  from reagent.optimizer import Optimizer__Union, SoftUpdate
  from reagent.training.reagent_lightning_module import ReAgentLightningModule
  from reagent.training.rl_trainer_pytorch import RLTrainerMixin
label_desc: Use image node_id 2 for calling the SACTrainer obj's underlying member method code with example usage: obj.configure_optimizers() and returns: optimizers