code: def __init__(self, n_agents, state_shape, mixing_embed_dim):
      super(QMixer, self).__init__()
  
      self.n_agents = n_agents
      self.embed_dim = mixing_embed_dim
      self.state_dim = int(np.prod(state_shape))
  
      self.hyper_w_1 = nn.Linear(
          self.state_dim, self.embed_dim * self.n_agents
      )
      self.hyper_w_final = nn.Linear(self.state_dim, self.embed_dim)
  
      # State dependent bias for hidden layer
      self.hyper_b_1 = nn.Linear(self.state_dim, self.embed_dim)
  
      # V(s) instead of a bias for the last layers
      self.V = nn.Sequential(
          nn.Linear(self.state_dim, self.embed_dim),
          nn.ReLU(),
          nn.Linear(self.embed_dim, 1),
      )
  
file_path: ray/rllib_contrib/qmix/src/rllib_qmix/qmix/mixers.py
imports: import numpy
  from ray.rllib.utils.framework import try_import_torch
label_desc: Use image node_id 1 to create a new QMixer object from inherited base classes: nn with example: obj = QMixer(n_agents, state_shape, mixing_embed_dim)