返回代码索引

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)