docstr: QMIX algorithm
  Args:
      agent_model (parl.Model): agents' local q network for decision making.
      qmixer_model (parl.Model): A mixing network which takes local q values as input
      config (dict): config of the algorithm.
docstr_tok: ["QMIX","algorithm","Args",":","agent_model","(","parl.Model",")",":","agents","'","local","q","network","for","decision","making",".","qmixer_model","(","parl.Model",")",":","A","mixing","network","which","takes","local","q","values","as","input","config","(","dict",")",":","config","of","the","algorithm","."]
code: def __init__(self, agent_model, qmixer_model, config):
      """QMIX algorithm
      Args:
          agent_model (parl.Model): agents' local q network for decision making.
          qmixer_model (parl.Model): A mixing network which takes local q values as input
          config (dict): config of the algorithm.
      """
      self.agent_model = agent_model
      self.qmixer_model = qmixer_model
      self.target_agent_model = deepcopy(self.agent_model)
      self.target_qmixer_model = deepcopy(self.qmixer_model)
  
      self.lr = config["lr"]
      self.gamma = config["gamma"]
      self.double_q = config["double_q"]
      self.n_agents = config["n_agents"]
      self.n_actions = config["n_actions"]
      self.obs_shape = config["obs_shape"]
      self.batch_size = config["batch_size"]
      self.episode_limit = config["episode_limit"]
      self.rnn_hidden_dim = config["rnn_hidden_dim"]
      self.clip_grad_norm = config["clip_grad_norm"]
      assert isinstance(self.gamma, float)
      assert isinstance(self.lr, float)
  
file_path: PARL/parl/algorithms/fluid/qmix.py
imports: import parl
  import copy
  from copy import deepcopy
  from paddle.fluid import layers
  import paddle.fluid
label_desc: Use image node_id 1 to create a new QMIX object from inherited base classes: parl with example: obj = QMIX(agent_model, qmixer_model, config)