目录

DRL-DAG

DRL-DAG 面向云—边—端异构计算环境,提出一种基于 DAG 感知 Actor-Critic 网络的 PPO 调度方法,以最小化整体完成时间(Makespan)为主要优化目标。该方法将异构 DAG 调度建模为序贯决策过程,融合任务、资源及任务—资源匹配特征,通过关系聚合感知任务依赖与资源竞争,由 Actor 选择任务及其计算资源,Critic 评估状态价值,并以估计 Makespan 增量的负值作为奖励,利用 PPO 迭代优化任务排序与资源映射策略。项目还提供 HEFT、CPOP、PEFT、GA 和 MILP 等对比算法,以及数据生成、模型训练、批量评测、结果分析与可视化功能。

DAG 感知 Actor-Critic 网络结构


运行目录说明: 本仓库根目录用于存放参赛材料,完整可运行项目位于 code/ 目录。除非特别说明,本文中的代码命令均在 code/ 目录执行。

目录结构

.
├── README.md
└── code/
    ├── cli.py                    # 统一命令行入口
    ├── runner.py                 # 算法调度、结果校验与保存
    ├── train_drl.py              # DRL 训练入口
    ├── src/
    │   └── algorithms/
    │       ├── heuristic/        # HEFT、CPOP、PEFT
    │       ├── metaheuristic/    # GA
    │       ├── milp/             # Gurobi MILP
    │       └── drl/              # 环境、策略网络、PPO、推理
    ├── utils/                    # 数据生成、分析和绘图工具
    ├── data/                     # EXP01—EXP30 测试数据
    ├── artifacts/                # 模型检查点和训练记录
    └── results/                  # 求解、评测、分析和图片结果
├── 技术报告.pdf
├── 演示PPT.pptx
├── 演示视频.mp4
└── 参赛承诺书.pdf
└── 智核调度队_基于深度强化学习的云-边-端异构计算资源管理调度方法(高校赛题)_初赛作品.rar(所有文件压缩包)

1. 环境配置

1.1 环境要求

项目推荐使用 Conda 创建环境。以下配置已完成实际验证:

组件 推荐版本
操作系统 Windows或Linux
Python 3.11.14
NumPy 2.4.3
Matplotlib 3.10.8
PyTorch 2.7.1+cu118
CUDA 11.8
GPU NVIDIA GeForce RTX 4060 Laptop GPU 或其他兼容 CUDA 11.8 的 NVIDIA GPU
Gurobi 13.0.1,仅 MILP 算法需要

CPU 可用于算法求解、DRL 推理和小规模训练,正式训练推荐使用支持 CUDA 的 NVIDIA GPU。运行 MILP 还需要有效的 Gurobi 许可证。

1.2 安装依赖

在仓库根目录创建并激活推荐环境:

conda create -n drl python=3.11.14 -y
conda activate drl

进入代码目录:

cd code

安装基础依赖:

python -m pip install numpy==2.4.3 matplotlib==3.10.8

安装与推荐环境一致的 CUDA 11.8 版本 PyTorch:

python -m pip install torch==2.7.1 --index-url https://download.pytorch.org/whl/cu118

如果仅使用 CPU,可改为:

python -m pip install torch==2.7.1 --index-url https://download.pytorch.org/whl/cpu

仅在运行 MILP 时安装 Gurobi:

python -m pip install gurobipy==13.0.1

安装完成后检查环境:

python -c "import numpy, matplotlib, torch; print('NumPy:', numpy.__version__); print('Matplotlib:', matplotlib.__version__); print('PyTorch:', torch.__version__); print('CUDA available:', torch.cuda.is_available())"

2. DRL 训练

2.1 训练示例

python cli.py train --online-generate --num-tasks 30 --iterations 500 --episodes 128 --parallel-envs 32 --eval-episodes 8 --checkpoint-interval 20 --device cuda --output-dir artifacts/drl

设备提示: 没有可用 GPU 时,可将 --device cuda 改为 --device cpu,但正式训练耗时会明显增加。

参数说明

参数 含义
--num-tasks 30 每个在线生成的 DAG 实例包含 30 个任务。
--iterations 500 执行 500 次 PPO 训练迭代。
--episodes 128 每次迭代收集 128 个训练 Episode。
--parallel-envs 32 同时使用 32 个环境采集训练数据,可提高采样效率,但会增加内存和显存占用。
--eval-episodes 8 每次迭代结束后使用 8 个固定验证实例评估模型,并计算平均 Makespan。
--checkpoint-interval 20 每隔 20 次迭代保存一次模型检查点,最后一次迭代也会保存。
--device cuda 使用 NVIDIA GPU 训练,需要安装支持 CUDA 的 PyTorch。没有可用 GPU 时可改为 cpu。
--output-dir artifacts/drl 将模型检查点、训练指标和运行摘要保存到 artifacts/drl/ 目录。
  • artifacts/drlv1/ 是仓库附带的预训练模型;

3. 求解与评测

项目通过 cli.py 统一调用调度算法,支持单数据集求解和批量评测。

3.1 单数据集求解

基本格式:

python cli.py solve --method <METHOD> --dataset <DATASET>

常规算法示例:

python cli.py solve --method HEFT --dataset data/EXP01.json
python cli.py solve --method CPOP --dataset data/EXP01.json
python cli.py solve --method PEFT --dataset data/EXP01.json
python cli.py solve --method GA --dataset data/EXP01.json
python cli.py solve --method MILP --dataset data/EXP01.json --milp-time-limit 900

MILP 需要安装 Gurobi 并配置有效许可证。

DRL 支持两种推理策略:

# Greedy:每步选择概率最高的动作,结果可复现
python cli.py solve --method DRL --dataset data/EXP01.json --checkpoint artifacts/drlv1/30Tasks.pt --strategy greedy --num-rollouts 1 --device cpu

# Sampling:采样 10 次,返回 Makespan 最小的结果
python cli.py solve --method DRL --dataset data/EXP01.json --checkpoint artifacts/drlv1/30Tasks.pt --strategy sampling --num-rollouts 10 --device cpu --seed 42

单次求解会生成调度结果、任务安排和汇总信息。

3.2 批量评测

批量评测默认使用 data/EXP01.json 至 data/EXP30.json。比较不同算法时,应保持 --datasets 参数一致。

DRL:

# Greedy
python cli.py batch --method DRL --datasets "data/EXP*.json" --checkpoint artifacts/drlv1/30Tasks.pt --strategy greedy --num-rollouts 1 --device cpu

# Sampling
python cli.py batch --method DRL --datasets "data/EXP*.json" --checkpoint artifacts/drlv1/30Tasks.pt --strategy sampling --num-rollouts 10 --device cpu

其他算法:

python cli.py batch --method HEFT --datasets "data/EXP*.json"
python cli.py batch --method CPOP --datasets "data/EXP*.json"
python cli.py batch --method PEFT --datasets "data/EXP*.json"
python cli.py batch --method GA --datasets "data/EXP*.json"
python cli.py batch --method MILP --datasets "data/EXP*.json" --milp-time-limit 900

批量结果分别保存在:

results/HEFT/batch_makespan.csv
results/CPOP/batch_makespan.csv
results/PEFT/batch_makespan.csv
results/GA/batch_makespan.csv
results/MILP/batch_makespan.csv
results/DRLgreedy/batch_makespan.csv
results/DRLsampling/batch_makespan.csv

结果文件记录各数据集的 Makespan 和运行时间,可通过第 4 节的 analyze 命令统一分析。完整参数可运行:

python cli.py solve --help
python cli.py batch --help

4. 结果分析

运行各算法的批量实验后执行:

python cli.py analyze --results-dir results --data-dir data --output-dir results/analysis

主要输出:

results/analysis/
├── raw_makespan.csv
├── relative_gap.csv
├── rank_analysis.csv
└── figures/

各算法相对最优结果的差距分布如下:

各算法相对最优结果差距箱线图


5. 数据集生成

生成默认测试数据:

python cli.py generate --output-dir data --seed 20260522

默认生成 EXP01.json 至 EXP30.json 共 30 个数据集,任务数量由 6 逐步增加至 100。相关参数可在 code/utils/generate_datasets.py 文件中进行配置。

数据集主要字段:

字段 含义
tasks 任务集合
resources 云、边缘服务器和端设备集合
edges DAG 任务依赖边
workload 任务计算量
speed 资源计算速度
data_size 依赖边传输数据量
bandwidth 资源间网络带宽

6. 可视化

项目支持绘制 DRL 训练曲线和任务调度甘特图。以下命令均在 code/ 目录下执行。

6.1 绘制训练曲线

训练完成后,train 命令会生成 training_metrics.json,其中记录每次迭代的训练回报和评估 Makespan。

绘制预训练模型的训练曲线:

python cli.py plot-training --metrics artifacts/drlv1/training_metrics.json --output-dir results/analysis/figures

其中:

  • --metrics:训练指标文件路径。
  • --output-dir:图片输出目录。

命令会生成:

  • return_convergence.png:平均训练回报曲线。回报整体上升并趋于稳定,表示策略逐渐收敛。
  • makespan_convergence.png:评估 Makespan 曲线。Makespan 越低,说明调度效果越好。
  • 曲线周围的阴影表示“平均值 ± 标准差”,阴影越窄表示训练越稳定。

DRL 回报收敛曲线

DRL Makespan 收敛曲线

6.2 绘制调度甘特图

甘特图用于展示各任务的执行资源、开始时间、结束时间以及整体 Makespan。

python cli.py plot-schedule --input results/DRLgreedy/EXP10_result.json --output results/DRLgreedy/EXP10_gantt.png

其中:

  • --input:算法输出的调度结果,由《3.1 单数据集求解》指令生成。
  • --output:生成的 PNG 路径;省略时,图片默认保存在输入文件旁。

甘特图中,横轴表示时间,纵轴表示计算资源,每个彩色矩形表示一个任务。

EXP10 DRL Greedy 调度甘特图


7. 命令与输出对应关系

操作 命令 主要输出位置
单数据集求解 solve results/<METHOD>/
批量评测 batch results/<METHOD>/batch_makespan.csv
DRL 训练 train artifacts/drl/
数据生成 generate data/
结果分析 analyze results/analysis/
训练曲线 plot-training results/analysis/figures/
调度甘特图 plot-schedule 命令中指定的 PNG 文件

8. 查看完整帮助

python cli.py <command> --help

例如:

python cli.py solve --help
python cli.py batch --help
python cli.py train --help
关于
620.7 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号