QGym
收藏资源简介:
QGym是一个用于可扩展开发和基准测试排队网络控制器的开源框架,由哥伦比亚大学开发。该数据集包含多种现实环境下的排队系统实例,如并行服务器、交叉、串联和重入网络,以及经过校准的医院排队系统。QGym通过事件驱动模拟器和广泛的排队策略基准测试,旨在解决资源分配和拥堵管理问题。数据集的创建过程结合了经典排队理论和强化学习方法,适用于制造、通信和医疗等多个领域。
QGym is an open-source framework developed by Columbia University for scalable development and benchmarking of queuing network controllers. This dataset encompasses a diverse range of real-world queuing system instances, including parallel server systems, crossbar networks, tandem queues, and reentrant networks, alongside calibrated hospital queuing systems. Built upon event-driven simulators and a comprehensive benchmark suite of queuing policies, QGym is designed to tackle resource allocation and congestion management challenges. The dataset is developed by integrating classical queuing theory and reinforcement learning methodologies, and is applicable across multiple domains such as manufacturing, telecommunications, and healthcare.
QGym: Scalable Simulation and Benchmarking of Queuing Network Controllers
概述
QGym是一个开源的仿真框架,旨在通过多样化和现实的问题实例来基准化排队策略。该框架支持多种环境,包括并行服务器、交叉、串联和重入网络。它提供了一个平台,用于比较无模型强化学习方法和经典排队策略。
亮点
- OpenAI Gym接口:易于部署强化学习算法。
- 事件驱动仿真:精确的时间记录和快速仿真。
- 作业级跟踪:允许建模并行服务器系统。
- 任意到达模式:模拟时间变化的到达模式。
- 服务器池:快速仿真大量同类服务器。
- 批量仿真:高效并行仿真多个轨迹。
- 开源:可适应自定义需求。
文件结构
mainrun_experiments.py:运行配置在configs/experiments中的批量实验。trainer.py:定义Trainer类,包含训练和评估模型的方法。env.py:带有OpenAI Gym接口的仿真器代码。
configsexperiments:每个目录包含一个或多个YAML文件,每个文件配置一个实验。env:包含指定排队网络的YAML文件。model:包含指定排队策略的YAML文件。scripts:包含定义到达和服务模式的Python文件。
logs:包含实验的损失和切换日志。policies:包含排队策略的实现。utils:包含路由和绘图的实用函数。RL:包含用于基准测试的PPO及其变体基线。policies:包含各种PPO策略,如WC和Vanilla。PPO:包含PPO算法的实现。trainer.py:PPO训练器。train.py:启动PPO实验的主脚本。
utils:rl_env.py:使排队环境兼容强化学习算法的包装器。eval.py:强化学习模型的评估实用程序。
policy_configs:包含不同强化学习策略的YAML配置文件。
作为OpenAI Gym环境使用
用户可以使用main/env.py中的DiffDiscreteEventSystem类编写自定义实验代码,将其作为OpenAI Gym环境使用。用户可以通过reset和step方法与该环境交互。
用法
创建DiffDiscreteEventSystem实例并使用reset()方法初始化环境,使用step(action)方法模拟系统随时间的变化。
API参考
参数
network(torch.Tensor):网络拓扑。mu(torch.Tensor):每个服务器的服务率。h(float):队列中作业的单位时间持有成本。draw_service(callable):绘制队列中作业服务时间的函数。draw_inter_arrivals(callable):绘制每个队列的到达间隔时间的函数。init_time(float, optional):初始仿真时间,默认为0。batch(int, optional):并行仿真的批量大小,默认为1。queue_event_options(torch.Tensor, optional):自定义队列事件选项。straight_through_min(bool, optional):使用直通估计器进行最小操作,默认为False。queue_lim(int, optional):最大队列长度。temp(float, optional):Gumbel-Softmax的温度,默认为1。seed(int, optional):随机种子,默认为3003。device(str, optional):运行计算的设备,默认为"cpu"。f_hook(bool, optional):启用调试钩子,默认为False。f_verbose(bool, optional):启用详细输出,默认为False。
方法
reset(init_queues=None, time=None, seed=None):重置环境到初始状态。step(action):根据动作执行一步仿真。get_observation():获取系统状态的当前观察。print_state():打印系统的当前状态。
运行实验
在main目录中,运行run_experiments.py脚本,使用-exp_dir参数设置包含所需实验YAML文件的子目录名称。
定义实验
实验使用位于configs/experiments目录中的YAML文件进行配置。每个实验有自己的子目录,包含一个或多个指定环境、模型和脚本的YAML文件。
定义排队网络
排队网络的参数在configs/env目录下的文件中定义。每个YAML文件包含以下键:
network:定义网络拓扑。mu:定义到达率。lam_params:定义到达参数。server_pool_size:定义服务器池大小。h:定义每个队列的持有成本。queue_event_options:定义每个到达或服务事件的队列变化。train_T,test_T:每个仿真轨迹的步数。init_queues:初始队列长度。
定义到达和服务模式
到达和服务模式在configs/scripts目录中定义。定义一个返回每个队列的下一个到达或服务时间的任意时间函数。
定义排队策略
使用policies/<policy>.py文件定义策略的逻辑。每个策略文件包含一个实现策略的类。该类在configs/scripts/<script>.py中使用。
定义训练/测试超参数
排队策略的参数在configs/model目录下的文件中定义。每个YAML文件包含以下重要超参数:
test_batch_size:测试集的批量大小。num_epochs:训练策略的轮数。test_policy,train_policy:分配算法,支持linear_assignment、sinkhorn和softmax。
运行强化学习训练和评估
提供代码库来训练和评估多个强化学习基线。在RL/PPO目录中运行以下命令:
bash
python train.py <policy-config-name> <queue-env-name>
基准测试结果
Criss-cross
| Network | $cmu$ | MW | MP | FP | PPO | PPO BC | PPO WC |
|---|---|---|---|---|---|---|---|
| Criss Cross BH | $16.1 pm 0.0$ | $mathbf{15.3 pm 0.0}$ | $8.3 ext{E+}3 pm 0.0$ | $29.3 pm 0.0$ | $8.6 ext{E+}3 pm 4.6$ | $24.0 pm 0.2$ | $mathbf{15.4 pm 0.2}$ |
Reentrant-1 [Exponential]
| $L$ | $cmu$ | MW | MP | FP | PPO | PPO BC | PPO WC |
|---|---|---|---|---|---|---|---|
| 2 | $19.0 pm 0.0$ | $14.8 pm 0.0$ | $18.9 pm 0.0$ | $1.0 ext{E+}3 pm 0.0$ | $1.8 ext{E+}3 pm 6.6$ | $25.1 pm 0.6$ | $mathbf{13.6 pm 0.4}$ |
| 3 | $mathbf{21.6 pm 0.0}$ | $24.8 pm 0.0$ | $30.9 pm 0.0$ | $8.1 ext{E+}3 pm 0.0$ | $1.0 ext{E+}4 pm 21.6$ | $48.2 pm 0.5$ | $22.6 pm 0.4$ |
| 4 | $30.1 pm 0.0$ | $32.1 pm 0.0$ | $40.3 pm 0.0$ | $4.3 ext{E+}3 pm 0.0$ | $1.8 ext{E+}4 pm 41.7$ | $183.4 pm 5.2$ | $mathbf{29.7 pm 0.4}$ |
| 5 | $51.3 pm 0.0$ | $50.0 pm 0.0$ | $52.2 pm 0.0$ | $9.8 ext{E+}3 pm 0.0$ | $2.7 ext{E+}4 pm 84.4$ | $135.2 pm 3.1$ | $mathbf{38.7 pm 0.4}$ |
| 6 | $54.7 pm 0.0$ | $49.2 pm 0.0$ | $59.1 pm 0.0$ | $1.2 ext{E+}4 pm 0.0$ | $5.9 ext{E+}4 pm 315.3$ | $358.0 pm 9.7$ | $mathbf{4.85 pm 0.5}$ |
| 7 | $56.4 pm 0.0$ | $mathbf{54.4 pm 0.0}$ | $70.5 pm 0.0$ | $2.9 ext{E+}4 pm 0.0$ | $4.4 ext{E+}4 pm 208.1$ | $526.6 pm 8.7$ | $56.3 pm 8.2$ |
| 8 | $mathbf{59.4 pm 0.0}$ | $68.0 pm 0.0$ | $81.4 pm 0.0$ | $1.7 ext{E+}4 pm 0.0$ | $5.9 ext{E+}4 pm 315.2$ | $868.5 pm 6.0$ | $65.8 pm 6.2$ |
| 9 | $72.7 pm 0.0$ | $mathbf{64.4 pm 0.0}$ | $90.8 pm 0.0$ | $5.3 ext{E+}4 pm 0.0$ | $1.1 ext{E+}5 pm 2219.7$ | $1304.5 pm 10.1$ | $75.8 pm 0.7$ |
| 10 | $87.7 pm 0.0$ | $mathbf{80.1 pm 0.0}$ | $100.5 pm 0.0$ | $6.3 ext{E+}4 pm 0.0$ | $1.6 ext{E+}5 pm 852.8$ | $3809.1 pm 10.4$ | $83.1 pm 0.7$ |
Reentrant-2 [Exponential]
| Network | $cmu$ | MW | MP | FP | PPO | PPO BC | PPO WC |
|---|---|---|---|---|---|---|---|
| 2 | $26.01 pm 0.00$ | $17.45 pm 0.00$ | $2.49 ext{E+}4 pm 0.00$ | $mathbf{1.76 pm 0.00}$ | $9.04 ext{E+}3 pm 41.13$ | $30.62 pm 0.37$ | $13.72 pm 0.22$ |
| 3 | $26.27 pm 0.00$ | $26.65 pm 0.00$ | $4.00 ext{E+}4 pm 0.00$ | $2.12 ext{E+}3 pm 0.00$ | $1.82 ext{E+}4 pm 37.23$ | $48.59 pm 0.56$ | $mathbf{22.09 pm 0.29}$ |
| 4 | $27.62 pm 0.00$ | $34.10 pm 0.00$ | $3.99 ext{E+}4 pm 0.00$ | $5.54 ext{E+}3 pm 0.00$ | $1.77 ext{E+}4 pm 52.30$ | $79.20 pm 1.06$ | $mathbf{29.90 pm 0.47}$ |
| 5 | $44.82 pm 0.00$ | $40.34 pm 0.00$ | $4.99 ext{E+}4 pm 0.00$ | $9.72 ext{E+}3 pm 0.00$ | $2.58 ext{E+}4 pm 63.54$ | $91.65 pm 1.37$ | $mathbf{38.01 pm 0.52}$ |
| 6 | $mathbf{54.48 pm 0.00}$ | $46.63 pm 0.00$ | $1.00 ext{E+}5 pm 0.00$ | $1.65 ext{E+}4 pm 0.00$ | $4.02 ext{E+}4 pm 349.64$ | $526.57 pm 8.74$ | $46.80 pm 0.47$ |
| 7 | $70.25 pm 0.00$ | $77.93 pm 0.00$ | $9.98 ext{E+}4 pm 0.00$ | $1.39 ext{E+}4 pm 0.00$ | $5.78 ext{E+}4 pm 116.92$ | $352.02 pm 6.68$ | $mathbf{55.51 pm 0.57}$ |
| 8 | $70.32 pm 0.00$ | $72.96 pm 0.00$ | $1.00 ext{E+}5 pm 0.00$ | $2.73 ext{E+}4 pm 0.00$ | $4.79 ext{E+}4 pm 208.70$ | $1332.68 pm 7.82$ | $mathbf{63.15 pm 0.70}$ |
| 9 | $mathbf{65.80 pm 0.00}$ | $77.34 pm 0.00$ | $1.00 ext{E+}5 pm 0.00$ | $6.53 ext{E+}4 pm 0.00$ | $6.54 ext{E+}4 pm 491.49$ | $1574.86 pm 9.34$ | $70.30 pm 0.86$ |
| 10 | $81.35 pm 0.00$ | $mathbf{82.00 pm 0.00}$ | $1.50 ext{E+}5 pm 0.00$ | $9.36 ext{E+}4 pm 0.00$ | $8.11 ext{E+}4 pm 355.34$ | $1876.54 pm 89.20$ | $80.36 pm 0.79$ |
Reentrant-1 [Hyperexponential]
| L

- 1QGym: Scalable Simulation and Benchmarking of Queuing Network Controllers哥伦比亚大学 · 2024年



