base_runner.py
PCFA runner 基础
原文件 · 95 行 · 3088 字节
runner/pcfa/base_runner.py
SHA-256: d7166e7873549b9fdba571d49206447921222e113e2dc8b041619f3864413d1b
1import os2import numpy as np3from tensorboardX import SummaryWriter4from envs.macf.env_wrappers import DummyVecEnv567class Runner(object):8 """Base class for non-learning PCFA runner.910 Only keeps environment handles, logging, and directory infrastructure.11 No neural network, trainer, or replay buffer is instantiated.12 """1314 def __init__(self, config):15 self.config = config16 self.envs: DummyVecEnv = config.envs17 self.eval_envs = config.eval_envs18 self.device = config.device19 self.num_agents = config.num_agents2021 # parameters22 self.env_name = config.env_name23 self.algorithm_name = config.algorithm_name24 self.experiment_name = config.experiment_name25 self.use_centralized_V = config.use_centralized_V26 self.use_obs_instead_of_state = config.use_obs_instead_of_state27 self.num_env_steps = config.num_env_steps28 self.episode_length = config.episode_length29 self.n_rollout_threads = config.n_rollout_threads30 self.n_eval_rollout_threads = config.n_eval_rollout_threads31 self.use_linear_lr_decay = config.use_linear_lr_decay32 self.hidden_size = config.hidden_size33 self.use_render = config.use_render34 self.recurrent_N = config.recurrent_N3536 # interval37 self.save_interval = config.save_interval38 self.use_eval = config.use_eval39 self.eval_interval = config.eval_interval40 self.log_interval = config.log_interval41 self.log_info_interval = config.log_info_interval4243 # dir44 self.model_dir = config.model_dir45 self.run_dir = config.run_dir46 self.log_dir = str(self.run_dir / 'logs')47 if not os.path.exists(self.log_dir):48 os.makedirs(self.log_dir)49 self.writter = SummaryWriter(self.log_dir)50 self.save_dir = str(self.run_dir / 'models')51 if not os.path.exists(self.save_dir):52 os.makedirs(self.save_dir)5354 def run(self):55 """Run rollouts."""56 raise NotImplementedError5758 def warmup(self):59 """Optional warmup."""60 raise NotImplementedError6162 def collect(self, step):63 """Collect actions."""64 raise NotImplementedError6566 def insert(self, data):67 """Insert data into buffer (not used by PCFA)."""68 raise NotImplementedError6970 def compute(self):71 """Compute returns (not used by PCFA)."""72 pass7374 def train(self):75 """Train policy (not used by PCFA)."""76 return {}7778 def save(self):79 """Save (no-op for PCFA)."""80 pass8182 def restore(self):83 """Restore (no-op for PCFA)."""84 pass8586 def log_train(self, train_infos, total_num_steps):87 """Log training info."""88 for k, v in train_infos.items():89 self.writter.add_scalar(k, v, total_num_steps)9091 def log_env(self, env_infos, total_num_steps):92 """Log env info."""93 for k, v in env_infos.items():94 if len(v) > 0:95 self.writter.add_scalar(k, np.mean(v), total_num_steps)