code: def save(self, save_dir, agent_model_name, qmixer_model_name):
      if not os.path.exists(save_dir):
          os.mkdir(save_dir)
      agent_model_path = os.path.join(save_dir, agent_model_name)
      qmixer_model_path = os.path.join(save_dir, agent_model_name)
      torch.save(self.alg.agent_model.state_dict(), agent_model_path)
      torch.save(self.alg.qmixer_model.state_dict(), qmixer_model_path)
      print("save model sucessfully!")
  
file_path: PARL/benchmark/torch/qmix/qmix_agent.py
imports: import parl
  import torch
  import numpy
  import os
  import torch
label_desc: Use image node_id 2 for calling the QMixAgent obj's underlying member method code with example usage: obj.save(save_dir, agent_model_name, qmixer_model_name) without return types