优化目录
DRL-DAG 面向云—边—端异构计算环境,提出一种基于 DAG 感知 Actor-Critic 网络的 PPO 调度方法,以最小化整体完成时间(Makespan)为主要优化目标。该方法将异构 DAG 调度建模为序贯决策过程,融合任务、资源及任务—资源匹配特征,通过关系聚合感知任务依赖与资源竞争,由 Actor 选择任务及其计算资源,Critic 评估状态价值,并以估计 Makespan 增量的负值作为奖励,利用 PPO 迭代优化任务排序与资源映射策略。项目还提供 HEFT、CPOP、PEFT、GA 和 MILP 等对比算法,以及数据生成、模型训练、批量评测、结果分析与可视化功能。
运行目录说明: 本仓库根目录用于存放参赛材料,完整可运行项目位于 code/ 目录。除非特别说明,本文中的代码命令均在 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(所有文件压缩包)
项目推荐使用 Conda 创建环境。以下配置已完成实际验证:
CPU 可用于算法求解、DRL 推理和小规模训练,正式训练推荐使用支持 CUDA 的 NVIDIA GPU。运行 MILP 还需要有效的 Gurobi 许可证。
在仓库根目录创建并激活推荐环境:
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())"
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,但正式训练耗时会明显增加。
--device cuda
--device cpu
--num-tasks 30
--iterations 500
--episodes 128
--parallel-envs 32
--eval-episodes 8
--checkpoint-interval 20
cpu
--output-dir artifacts/drl
artifacts/drl/
artifacts/drlv1/
项目通过 cli.py 统一调用调度算法,支持单数据集求解和批量评测。
cli.py
基本格式:
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
单次求解会生成调度结果、任务安排和汇总信息。
批量评测默认使用 data/EXP01.json 至 data/EXP30.json。比较不同算法时,应保持 --datasets 参数一致。
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 命令统一分析。完整参数可运行:
analyze
python cli.py solve --help python cli.py batch --help
运行各算法的批量实验后执行:
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/
各算法相对最优结果的差距分布如下:
生成默认测试数据:
python cli.py generate --output-dir data --seed 20260522
默认生成 EXP01.json 至 EXP30.json 共 30 个数据集,任务数量由 6 逐步增加至 100。相关参数可在 code/utils/generate_datasets.py 文件中进行配置。
EXP01.json
EXP30.json
code/utils/generate_datasets.py
数据集主要字段:
tasks
resources
edges
workload
speed
data_size
bandwidth
项目支持绘制 DRL 训练曲线和任务调度甘特图。以下命令均在 code/ 目录下执行。
训练完成后,train 命令会生成 training_metrics.json,其中记录每次迭代的训练回报和评估 Makespan。
train
training_metrics.json
绘制预训练模型的训练曲线:
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。
python cli.py plot-schedule --input results/DRLgreedy/EXP10_result.json --output results/DRLgreedy/EXP10_gantt.png
--input
--output
甘特图中,横轴表示时间,纵轴表示计算资源,每个彩色矩形表示一个任务。
solve
results/<METHOD>/
batch
results/<METHOD>/batch_makespan.csv
generate
data/
results/analysis/
plot-training
results/analysis/figures/
plot-schedule
python cli.py <command> --help
例如:
python cli.py solve --help python cli.py batch --help python cli.py train --help
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
DRL-DAG
DRL-DAG 面向云—边—端异构计算环境,提出一种基于 DAG 感知 Actor-Critic 网络的 PPO 调度方法,以最小化整体完成时间(Makespan)为主要优化目标。该方法将异构 DAG 调度建模为序贯决策过程,融合任务、资源及任务—资源匹配特征,通过关系聚合感知任务依赖与资源竞争,由 Actor 选择任务及其计算资源,Critic 评估状态价值,并以估计 Makespan 增量的负值作为奖励,利用 PPO 迭代优化任务排序与资源映射策略。项目还提供 HEFT、CPOP、PEFT、GA 和 MILP 等对比算法,以及数据生成、模型训练、批量评测、结果分析与可视化功能。
目录结构
1. 环境配置
1.1 环境要求
项目推荐使用 Conda 创建环境。以下配置已完成实际验证:
CPU 可用于算法求解、DRL 推理和小规模训练,正式训练推荐使用支持 CUDA 的 NVIDIA GPU。运行 MILP 还需要有效的 Gurobi 许可证。
1.2 安装依赖
在仓库根目录创建并激活推荐环境:
进入代码目录:
安装基础依赖:
安装与推荐环境一致的 CUDA 11.8 版本 PyTorch:
如果仅使用 CPU,可改为:
仅在运行 MILP 时安装 Gurobi:
安装完成后检查环境:
2. DRL 训练
2.1 训练示例
参数说明
--num-tasks 30--iterations 500--episodes 128--parallel-envs 32--eval-episodes 8--checkpoint-interval 20--device cudacpu。--output-dir artifacts/drlartifacts/drl/目录。artifacts/drlv1/是仓库附带的预训练模型;3. 求解与评测
项目通过
cli.py统一调用调度算法,支持单数据集求解和批量评测。3.1 单数据集求解
基本格式:
常规算法示例:
DRL 支持两种推理策略:
单次求解会生成调度结果、任务安排和汇总信息。
3.2 批量评测
批量评测默认使用
data/EXP01.json至data/EXP30.json。比较不同算法时,应保持--datasets参数一致。DRL:
其他算法:
批量结果分别保存在:
结果文件记录各数据集的 Makespan 和运行时间,可通过第 4 节的
analyze命令统一分析。完整参数可运行:4. 结果分析
运行各算法的批量实验后执行:
主要输出:
各算法相对最优结果的差距分布如下:
5. 数据集生成
生成默认测试数据:
默认生成
EXP01.json至EXP30.json共 30 个数据集,任务数量由 6 逐步增加至 100。相关参数可在code/utils/generate_datasets.py文件中进行配置。数据集主要字段:
tasksresourcesedgesworkloadspeeddata_sizebandwidth6. 可视化
项目支持绘制 DRL 训练曲线和任务调度甘特图。以下命令均在
code/目录下执行。6.1 绘制训练曲线
训练完成后,
train命令会生成training_metrics.json,其中记录每次迭代的训练回报和评估 Makespan。绘制预训练模型的训练曲线:
其中:
--metrics:训练指标文件路径。--output-dir:图片输出目录。命令会生成:
return_convergence.png:平均训练回报曲线。回报整体上升并趋于稳定,表示策略逐渐收敛。makespan_convergence.png:评估 Makespan 曲线。Makespan 越低,说明调度效果越好。6.2 绘制调度甘特图
甘特图用于展示各任务的执行资源、开始时间、结束时间以及整体 Makespan。
其中:
--input:算法输出的调度结果,由《3.1 单数据集求解》指令生成。--output:生成的 PNG 路径;省略时,图片默认保存在输入文件旁。甘特图中,横轴表示时间,纵轴表示计算资源,每个彩色矩形表示一个任务。
7. 命令与输出对应关系
solveresults/<METHOD>/batchresults/<METHOD>/batch_makespan.csvtrainartifacts/drl/generatedata/analyzeresults/analysis/plot-trainingresults/analysis/figures/plot-schedule8. 查看完整帮助
例如: