多目标柔性作业车间调度(MOFJSP)开源代码全面梳理:从 NSGA-II 到深度强化学习
摘要: 本文系统整理了 GitHub 上与多目标柔性作业车间调度问题(Multi-Objective Flexible Job Shop Scheduling Problem, MOFJSP)相关的开源代码,涵盖传统进化算法、增强型 NSGA-II、深度强化学习等多种技术路线,并对各仓库的优化目标、算法实现、对应论文和适用场景进行详细分析,帮助研究者快速定位合适的基线或实验平台。
一、背景:什么是 MOFJSP?
柔性作业车间调度问题(FJSP) 是经典 Job Shop Scheduling Problem(JSP)的扩展版本。在 JSP 中每道工序只能在指定机器上加工,而在 FJSP 中每道工序可以在多台候选机器中选择一台执行,因此调度决策包含两个耦合子问题:
- 工序排序(Operation Sequencing, OS):确定各工序的加工顺序
- 机器分配(Machine Assignment, MS):为每道工序选择具体的加工机器
FJSP 本身已是 NP-hard 问题。多目标 FJSP(MOFJSP) 在此基础上同时优化多个相互冲突的目标,常见目标组合如下:
| 优化目标 | 符号 | 说明 |
|---|---|---|
| 最大完工时间 | C m a x C_{max} Cmax | 所有工件完成加工的最晚时刻 |
| 能耗 | E E E | 机器加工、空闲、启停的综合能耗 |
| 机器负载均衡 | L B LB LB | 各机器工作量的方差或极差 |
| 总拖期 | T T T | 工件超过交货期的惩罚总量 |
| 碳排放 | C O 2 CO_2 CO2 | 加工过程的碳足迹 |
由于多目标之间存在冲突(如压缩 C m a x C_{max} Cmax 往往需要同时开启更多机器,增加能耗),MOFJSP 的求解结果通常是一组帕累托最优解集(Pareto Front),而非单一最优值。主流求解算法以 NSGA-II1、MOEA/D2 为代表,近年来深度强化学习方法(DRL)也开始向多目标场景延伸。
二、重点仓库逐一分析
1. Enhanced_NSGA-II_EFJSP-TT
| 项目 | 详情 |
|---|---|
| 地址 | https://github.com/Barbale98/Enhanced_NSGA-II_EFJSP-TT |
| 语言 | Python |
| Stars | 25 |
| 对应论文 | 硕士论文:Enhanced Genetic Algorithm to Solve the Energy-efficient Flexible Job Shop Scheduling Problem · ResearchGate |
问题定义: 带运输时间约束的能效柔性作业车间调度问题(EFJSP-TT)。在标准 MOFJSP 基础上引入工序间的机器间运输时间,更贴近真实制造场景。
优化目标:
- Makespan( C m a x C_{max} Cmax)
- 总能耗(加工能耗 + 空闲能耗)
算法体系(由简到繁,循序渐进):
NSGAII.py ← 标准 NSGA-II(基线)
VNS_NSGAII.py ← NSGA-II + 变邻域搜索(VNS)
EVNS_NSGAII.py ← 增强版:MDR 初始化 + VNS + NSGA-II
核心创新点:MDR(Mixed Dispatching Rules)初始化。针对 makespan 和能耗两个目标分别设计启发式初始化策略,混合调度规则生成高质量初始种群,显著提升收敛速度。另含 MILP 精确模型(Gurobi 求解)用于小规模实例验证。
数据集: Brandimarte 标准实例
环境依赖: Python 3.x,Gurobi(精确模型部分可选)
适合场景: 研究含运输约束的能效 FJSP,或学习 NSGA-II 与局部搜索的混合策略设计
2. NSGA-II-FJSP
| 项目 | 详情 |
|---|---|
| 地址 | https://github.com/aslongaslihappy/NSGA-II-FJSP |
| 语言 | Python |
| Stars | 4 |
| 对应论文 | 无(作者独立实现,未关联学术论文) |
问题定义: 标准双目标 FJSP,代码结构清晰,适合入门与快速复现。
优化目标:
- Makespan
- 总能耗
算法实现要点:
- 经典 OS/MS 双层染色体编码
- 快速非支配排序(Fast Non-dominated Sorting)
- 拥挤距离选择(Crowding Distance Selection)
- 二元锦标赛父代选择
数据格式: 兼容 .txt 和 .fjs 两种标准 FJSP 实例格式
输出: 批量实验结果自动导出 CSV,并生成帕累托前沿 PNG 可视化图
环境依赖: Python 3.x,numpy,matplotlib
适合场景: MOFJSP 入门学习、NSGA-II 标准实现的参考代码
3. NSGA-II-FJSP-AGVs
| 项目 | 详情 |
|---|---|
| 地址 | https://github.com/aslongaslihappy/NSGA-II-FJSP-AGVs |
| 语言 | Python |
| Stars | 3 |
| 对应论文 | 无(作者独立实现,未关联学术论文) |
问题定义: 在 MOFJSP 基础上引入自动导引车(AGV),将物料搬运过程纳入调度决策,是工业落地场景下更完整的建模方式。
优化目标:
- Makespan
- 总能耗(机器加工能耗 + AGV 满载/空载行驶能耗 + 机器空闲能耗)
染色体结构(三段编码):
[ 工序排序 OS ] | [ 机器分配 MS ] | [ AGV 路径分配 ]
遗传算子:
- 工序段:POX 交叉(Precedence Operation Crossover)
- 机器/AGV 段:均匀交叉(Uniform Crossover)
数据集: Bilge & Ulusoy、Brandimarte
环境依赖: Python 3.x,numpy,matplotlib
适合场景: 研究机器调度与 AGV 物料搬运联合优化问题
4. BioAI_Project(kDEN-NSGA-II)
| 项目 | 详情 |
|---|---|
| 地址 | https://github.com/Avalon-S/BioAI_Project |
| 语言 | Python |
| 来源 | 意大利特伦托大学《生物启发人工智能》课程项目(2025) |
| 对应论文 | 无(课程项目,非正式学术发表) |
注意: 本仓库为课程项目成果,代码完整度较高,但未经过正式同行评审,引用时请注意区分。
问题定义: 三目标 FJSP,在标准双目标基础上新增机器负载均衡目标。
优化目标:
- Makespan
- 机器负载均衡(Load Balancing)
- 总空闲时间(Total Idle Time)
算法创新(kDEN-NSGA-II):
| 改进点 | 说明 |
|---|---|
| 混合初始化 | 启发式 + 混沌 + 随机三种策略混合生成初始种群 |
| 自适应交叉 | 单点、均匀、加工时间感知三种交叉策略自适应切换 |
| kNN 密度选择 | 基于 k 近邻密度估计保持种群多样性,替代标准拥挤距离 |
| 外部精英档案 | 维护 Pareto 最优解档案,防止优质解被淘汰 |
| 局部搜索变异 | 引入局部搜索提升解的局部精细化能力 |
对比基线: 标准 NSGA-II、ACO(蚁群算法)、NSGA-III、SPEA-II
数据集: Barnes、Brandimarte、Dauzere 三大标准集
适合场景: 研究多样性保持机制、学习对 NSGA-II 的多种改进策略
5. Using-HGAT-RL-to-solve-MOFJSP-problems
| 项目 | 详情 |
|---|---|
| 地址 | https://github.com/beginner-Jiang/Using-HGAT-RL-to-solve-MOFJSP-problems |
| 语言 | Python(PyTorch) |
| 对应论文 | 相关论文尚未正式发表(作者在 README 中注明,发表后将更新引用) |
问题定义: 显式多目标 FJSP(MOFJSP),基于异构图表示的深度强化学习框架,同时提供完整的多方法横向对比实验体系。
优化目标:
- Makespan( C m a x C_{max} Cmax)
- 负载均衡(Load Balance, L B LB LB)
- 总拖期(Total Tardiness, T t a r d y T_{tardy} Ttardy)
核心方法:HGAT + PPO(层次化强化学习)
状态建模:异构析取图(Heterogeneous Disjunctive Graph)
├── 工序节点(含工时、状态特征)
├── 机器节点(含负载、利用率特征)
└── 工件节点(含交货期、拖期特征)
特征提取:异构图注意力网络(HGAT)
策略优化:近端策略优化(PPO)
决策层次:层次化 RL(高层:工序选择 → 低层:机器分配)
完整基线对比体系(该仓库最大价值所在):
| 类别 | 方法 |
|---|---|
| 启发式规则 | SPT、EDD、LBD、FIFO、MOPNR、MWKR |
| 进化算法 | NSGA-II、MOEA/D |
| DRL(简单网络) | DQN+MLP、PPO+MLP |
| DRL(图网络) | PPO+GAT |
| 本文方法 | HGAT+PPO(层次化 RL) |
环境依赖: Python 3.x,PyTorch,torch-geometric
适合场景: 深度强化学习求解 MOFJSP 的研究入口,或需要"一套代码完成启发式/进化/DRL 横向对比"的实验
6. NSGA_II-for-FJSP
| 项目 | 详情 |
|---|---|
| 地址 | https://github.com/InTheFuture7/NSGA_II-for-FJSP |
| 语言 | MATLAB |
| 对应论文 | 参考以下文献实现(未绑定单篇论文):① 张守京《求解多目标双资源柔性车间调度问题的改进 NSGA-II 算法》;② 吴秀丽《考虑可再生能源的多目标柔性流水车间调度问题》;③ 黄学文《求解柔性作业车间调度的遗传算法综述》 |
问题定义: 双目标 FJSP,代码中含能耗和交货期计算函数,具备扩展至四目标的基础。
优化目标:
- 总加工时长(Makespan)
- 机器负荷均衡(Machine Load Balance)
- (代码已含能耗、交货期计算,可扩展)
算法实现: 标准 NSGA-II,包含快速非支配排序、锦标赛选择、遗传交叉与变异、帕累托前沿输出
适合场景: MATLAB 用户的 MOFJSP 基线,或从 MATLAB 迁移至 Python 的过渡参考
三、汇总对比
| 仓库 | 目标数 | 优化目标 | 算法 | 语言 | 对应论文 |
|---|---|---|---|---|---|
| Enhanced_NSGA-II_EFJSP-TT | 2 | makespan + 能耗 | NSGA-II + VNS + MDR | Python | 硕士论文(ResearchGate) |
| NSGA-II-FJSP | 2 | makespan + 能耗 | NSGA-II | Python | 无(独立实现) |
| NSGA-II-FJSP-AGVs | 2 | makespan + 能耗(含AGV) | NSGA-II | Python | 无(独立实现) |
| BioAI_Project | 3 | makespan + 负载 + 空闲时间 | kDEN-NSGA-II | Python | 无(课程项目) |
| HGAT-RL-MOFJSP | 3 | makespan + 负载 + 拖期 | HGAT+PPO(DRL) | Python | 待发表 |
| NSGA_II-for-FJSP | 2 | makespan + 机器负载 | NSGA-II | MATLAB | 参考多篇中文文献 |
结论:以上 6 个仓库均属于真正的多目标 FJSP 开源实现。
四、更多值得关注的相关仓库
4.1 通用多目标优化框架
这类框架不直接实现 FJSP,但提供完善的多目标算法库,只需继承接口、定义 FJSP 评价函数即可使用,适合快速搭建自定义实验。
pymoo — Python 多目标优化库
- 地址: https://github.com/anyoptimization/pymoo
- 内置算法: NSGA-II、NSGA-III、MOEA/D、SPEA2、HypE 等
- 特点: 文档完善,支持 Pareto 前沿可视化,学术界使用最广泛的 Python 多目标框架
BIMK/PlatEMO — MATLAB 多目标优化平台
- 地址: https://github.com/BIMK/PlatEMO
- 内置算法: 150+ 种多目标/多任务进化算法
- 特点: GUI 界面,算法横向对比友好,适合 MATLAB 用户
4.2 面向能耗的多目标 JSP(可借鉴能耗建模方式)
jMetal/JSP — 能效多目标作业车间调度
- 地址: https://github.com/jMetal/JSP
- 对应论文: Energy-Aware Multi-Objective Job Shop Scheduling Optimization with Metaheuristics in Manufacturing Industries: A Critical Survey, Results, and Perspectives,Applied Sciences,2022 · DOI: 10.3390/app12031491
- 优化目标: makespan + 总能耗
- 数据集: 11 个标准实例(5×10 至 20×100 规模)
- 说明: 研究对象为标准 JSP 而非 FJSP,但能耗建模框架(机器工作/空闲/启停能耗分层建模)可直接借鉴至 FJSP
4.3 深度强化学习 FJSP 基线
以下两个仓库以单目标为主,但图神经网络状态表示方式是多目标 DRL 扩展的重要基础。
wrqccc/FJSP-DRL — 双注意力网络调度
- 地址: https://github.com/wrqccc/FJSP-DRL
- 对应论文: Flexible Job Shop Scheduling via Dual Attention Network-Based Reinforcement Learning,IEEE Transactions on Neural Networks and Learning Systems,2023
- arXiv: https://arxiv.org/abs/2305.05119
- DOI: 10.1109/TNNLS.2023.3306421
- 说明: 代码质量高,结构清晰;提出双注意力网络(DAN)联合建模工序与机器特征,是 FJSP 领域 DRL 方法的重要基线
Lei-Kun/End-to-end-DRL-for-FJSP — 多动作 PPO
- 地址: https://github.com/Lei-Kun/End-to-end-DRL-for-FJSP
- 对应论文: A multi-action deep reinforcement learning framework for flexible Job-shop scheduling problem,Expert Systems with Applications,2022,Vol. 205,117796
- 说明: Multi-PPO 架构,工序选择与机器分配联合决策;被引 260+,ESI 高被引论文
ClouDaDaDa/DFJSPT_code — 含运输约束的动态 FJSP
- 地址: https://github.com/ClouDaDaDa/DFJSPT_code
- 说明: 2025 年最新成果,分层多智能体 DRL,含 AGV 运输约束,是目前动态多目标 FJSP+DRL 的较新实现
4.4 基准数据集
| 仓库 | 说明 |
|---|---|
| SchedulingLab/fjsp-instances | 标准 FJSP 实例集合(Brandimarte、Kacem、Dauzere 等经典集) |
| Lei-Kun/FJSP-benchmarks | DRL 研究常用 benchmark 实例 |
| FJSPLib | 含已知最优解的 benchmark 库,适合验证算法上界 |
五、如何选择适合你的仓库
根据不同研究需求,推荐路线如下:
场景一:入门 / 快速复现双目标 FJSP
→ 首选 aslongaslihappy/NSGA-II-FJSP,代码结构最清晰,兼容标准实例格式
场景二:研究含约束的能效 FJSP(含运输时间)
→ Barbale98/Enhanced_NSGA-II_EFJSP-TT,有论文对应,算法体系完整
场景三:研究 AGV + 机器联合调度
→ aslongaslihappy/NSGA-II-FJSP-AGVs,目前少数含 AGV 能耗建模的开源实现
场景四:三目标 FJSP + NSGA-II 改进研究
→ Avalon-S/BioAI_Project,改进点丰富,对比基线完整(注意:课程项目,非正式论文)
场景五:多目标 DRL 求解,需要与传统算法完整对比
→ beginner-Jiang/Using-HGAT-RL-to-solve-MOFJSP-problems,启发式 / 进化 / DRL 三类方法均有实现
场景六:自定义问题 + 多算法横向对比
→ Python 用户用 pymoo,MATLAB 用户用 PlatEMO,自定义 FJSP Problem 类接入即可
六、总结与趋势
多目标 FJSP 是智能制造调度领域的核心研究方向。梳理上述开源实现,可以归纳出以下几个发展趋势:
1. NSGA-II 仍是传统方法的主流基线
绝大多数仓库以 NSGA-II 为骨架,在种群初始化(MDR、混沌初始化)、多样性保持(kNN 密度)、局部搜索(VNS、禁忌搜索)等环节进行改进,形成了丰富的变体体系。
2. 优化目标从"双目标"走向"多约束"
从早期的 makespan + 机器负载,逐步扩展至能耗、碳排放、AGV 运输距离、拖期等工业实际约束;"能耗感知"和"碳中和"调度是近年论文的高频主题。
3. 深度强化学习向多目标方向延伸
基于图神经网络(GNN/GAT)的 DRL 方法在单目标 FJSP 上已取得突破,2024-2025 年涌现出若干多目标 DRL 工作,beginner-Jiang/Using-HGAT-RL-to-solve-MOFJSP-problems 是目前可见的最完整多目标 DRL 框架之一。
4. 工业约束细化、场景落地加速
含 AGV 运输、机器故障、动态工件到达、多工厂分布式调度等复杂约束的开源代码日益增多,调度研究正从"学术 benchmark"向"真实产线"迁移。
参考文献
仓库对应论文:
-
wrqccc/FJSP-DRL:Wang R, Wang G, Sun J, et al. Flexible Job Shop Scheduling via Dual Attention Network-Based Reinforcement Learning. IEEE Transactions on Neural Networks and Learning Systems, 2023. DOI: 10.1109/TNNLS.2023.3306421 · arXiv: 2305.05119
-
Lei-Kun/End-to-end-DRL-for-FJSP:Lei K, Guo P, Zhao W, et al. A multi-action deep reinforcement learning framework for flexible Job-shop scheduling problem. Expert Systems with Applications, 2022, 205: 117796. DOI: 10.1016/j.eswa.2022.117796
-
jMetal/JSP:Palacios J J, et al. Energy-Aware Multi-Objective Job Shop Scheduling Optimization with Metaheuristics in Manufacturing Industries: A Critical Survey, Results, and Perspectives. Applied Sciences, 2022, 12(3): 1491. DOI: 10.3390/app12031491
-
Barbale98/Enhanced_NSGA-II_EFJSP-TT:Enhanced Genetic Algorithm to Solve the Energy-efficient Flexible Job Shop Scheduling Problem(硕士论文). ResearchGate
如有补充、勘误或发现新的相关仓库,欢迎在评论区留言交流。
-
Deb K, Pratap A, Agarwal S, et al. A fast and elitist multiobjective genetic algorithm: NSGA-II. IEEE Transactions on Evolutionary Computation, 2002, 6(2): 182-197. DOI: 10.1109/4235.996017 ↩︎
-
Zhang Q, Li H. MOEA/D: A multiobjective evolutionary algorithm based on decomposition. IEEE Transactions on Evolutionary Computation, 2007, 11(6): 712-731. DOI: 10.1109/TEVC.2007.892759 ↩︎
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)