From 6178d1619d7c6d976b24ed4749af326c280caeee Mon Sep 17 00:00:00 2001 From: dothinking Date: Wed, 18 Aug 2021 17:10:49 +0800 Subject: [PATCH] Job-shop problem solving framework --- ...02\350\247\243\346\241\206\346\236\266.md" | 30 ++++ ...56\351\242\230\346\217\217\350\277\260.md" | 2 +- ...\274\232Python\345\273\272\346\250\241.md" | 134 ++++++++++++++++++ docs/images/2021-08-14-01.png | Bin 0 -> 64941 bytes 4 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 "docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266.md" rename "docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\357\274\232\351\227\256\351\242\230\346\217\217\350\277\260.md" => "docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266\357\274\232\351\227\256\351\242\230\346\217\217\350\277\260.md" (99%) create mode 100644 "docs/2021-08-14-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266\357\274\232Python\345\273\272\346\250\241.md" create mode 100644 docs/images/2021-08-14-01.png diff --git "a/docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266.md" "b/docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266.md" new file mode 100644 index 0000000..2cfc41b --- /dev/null +++ "b/docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266.md" @@ -0,0 +1,30 @@ +--- +categories: [optimization, mathematics] +tags: [job shop schedule] +--- + +# 作业车间调度问题求解框架 + +--- + +组合优化问题广泛出现于各行各业,例如生产制造排程,机场航班调度、项目管理计划等,求解这类问题有助于解决实际应用中的调度难题、提高生产效率;考虑到实际的业务逻辑因行业而异且可能相当复杂,本系列文章针对调度类问题的基本模型——作业车间调度(Job Shop Schedule),基于Python开发了一个通用的求解框架: + +- 参考文献实现了一些基本解法例如基于规则指派、局部搜索、群体方法等 + +- 便于快速实施和测试新算法(参考 [Python建模](2021-08-14-作业车间调度问题求解框架:Python建模.md)) + + +## 项目仓库 + +https://github.com/dothinking/job_shop_schedule + +## 建模 + +- [问题描述](2021-08-08-作业车间调度问题求解框架:问题描述.md) + +- [Python建模](2021-08-14-作业车间调度问题求解框架:Python建模.md) + +- [基于matplotlib的动态甘特图](2021-08-15-基于matplotlib的动态甘特图.md) + + +## 求解 diff --git "a/docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\357\274\232\351\227\256\351\242\230\346\217\217\350\277\260.md" "b/docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266\357\274\232\351\227\256\351\242\230\346\217\217\350\277\260.md" similarity index 99% rename from "docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\357\274\232\351\227\256\351\242\230\346\217\217\350\277\260.md" rename to "docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266\357\274\232\351\227\256\351\242\230\346\217\217\350\277\260.md" index 098ddca..411a18b 100644 --- "a/docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\357\274\232\351\227\256\351\242\230\346\217\217\350\277\260.md" +++ "b/docs/2021-08-08-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266\357\274\232\351\227\256\351\242\230\346\217\217\350\277\260.md" @@ -3,7 +3,7 @@ categories: [optimization, mathematics] tags: [job shop schedule] --- -# 作业车间调度问题:问题描述 +# 作业车间调度问题求解框架:问题描述 --- diff --git "a/docs/2021-08-14-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266\357\274\232Python\345\273\272\346\250\241.md" "b/docs/2021-08-14-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266\357\274\232Python\345\273\272\346\250\241.md" new file mode 100644 index 0000000..adac5b2 --- /dev/null +++ "b/docs/2021-08-14-\344\275\234\344\270\232\350\275\246\351\227\264\350\260\203\345\272\246\351\227\256\351\242\230\346\261\202\350\247\243\346\241\206\346\236\266\357\274\232Python\345\273\272\346\250\241.md" @@ -0,0 +1,134 @@ +--- +categories: [optimization, python/vba/cpp] +tags: [job shop schedule] +--- + +# 作业车间调度问题求解框架:Python建模 + +--- + +基于前文对作业车间调度问题的定义和描述,本文进行Python建模,开发了一个通用的作业车间调度问题求解框架,把问题分解、抽象为可重用的部分,从而专注求解算法的开发、实施和验证。 + +> [dothinking/job_shop_schedule](https://github.com/dothinking/job_shop_schedule) + + +## 框架结构 + +整个求解框架基于Python面向对象编程实现,主要结构参考下图。 + +![class-diagram](images/2021-08-14-01.png) + + +其中,所有对象按用途可以归为三类: + + +### (a) 物理对象 + +- `Job` 作业实体 +- `Machine` 机器实体 +- `Operation` 工序实体,包含所属作业、分配的机器、加工时长等属性 + + +### (b) 求解变量 + +`OperationStep`是工序实体`Operation` 的封装,同时加上待求解的参数 `start_time`。根据前文关于作业车间问题的两种不同的描述方式,相应有两种不同的求解思路: + +- 对于以`start_time`为变量描述的数学模型,直接求解`start_time`即可 +- 对于以 **析取图** 描述的模型,需要先求解工序的顺序,然后递推出`start_time` + +因此,对于析取图描述的模型,还提供了以下中间属性: + +- 继承自 `JobStep` 的 `pre_job_op` 和 `next_job_op`,分别表示当前工序在所属作业实体上的顺序:前一道工序和下一道工序;并且,它们是已知的。 + +- 继承自 `MachineStep` 的 `pre_machine_op` 和 `next_machine_op`,分别表示当前工序在分配机器上的加工顺序:前一道工序和下一道工序;注意这个顺序即为需要求解的变量。 + + +### (c) 求解流程 + +`JSProblem` 是所有工序实体 `Operation` 的封装: + +- 它的解为一个`JSSolution`实例 +- 每当获得一个更好的解,**需要使用`update_solution()`方法显式更新** + +`JSSolution` 是所有变量 `OperationStep` 的封装: + +- 对于析取图求解模型,需要显式地调用 `evaluate()` 来基于求解的顺序计算最终变量 `start_time`;基于数学模型则无需这一步。 + +- `is_feasible()` 判断一个解是否满足所有约束 + +- 如果是一个可行解,`makespan`属性得到最大加工周期长度 + + +`JSSolver` 是作业车间调度问题求解器的基类,便于继承此基类后实施新算法。 + + +## 实施新算法 + +以上的设计可以避免重复工作,从而专注于算法本身的实现和测试。基于此框架,实施新算法的只需创建自定义求解器类,然后继承 `JSSolver` 并实现 `do_solver()` 方法。`do_solver()` 方法内部主要分为三大步骤: + +- 基于问题创建初始状态的解(注意并非可行的 **初始解**) + + ```python + solution = JSSolution(problem) + ``` + +- 实施算法,计算或者优化这个解 + + - 对于以`start_time`为变量描述的数学模型,直接求解每个工序的`start_time`即可 + - **对于以析取图描述的模型,需要先求解工序的顺序,然后显式地调用 `solution.evaluate()` 递推出`start_time`** + + +- 每次迭代得到更好的解后,显式更新问题的解 + + ```python + problem.update_solution(solution) + ``` + +关键代码参考: + +```python +from model.solver import JSSolver +from model.problem import JSProblem +from model.solution import JSSolution + +class UserSolver(JSSolver): + + def do_solve(self, problem:JSProblem): + '''User defined solving process.''' + + # (1) Initialize an empty solution from problem + solution = JSSolution(problem) + + # (2) Solve or optimize the solution, + # i.e. determine the start_time of OperationStep instances. + # Note to evaluate solution explicitly if disjunctive graph model. + ... + # solution.evaluate() + + # (3) Update the solution for problem iteratively + problem.update_solution(solution) +``` + + +## 测试算法 + +框架已经内置了作业车间调度问题的标准考题数据,便于根据名称直接初始化问题。以下示例调用自定义求解器 `SampleSolver` 求解 `ft10` 问题。 + +- 更多基本问题数据 [参考](https://github.com/dothinking/job_shop_schedule/blob/master/benchmark/instances.json) + +- 求解过程以甘特图形式动态展示解的变化 + + +```python +from model.problem import JSProblem +from solver.SampleSolver import SampleSolver + +# load benchmark problem +problem = JSProblem(benchmark='ft10') + +# solve problem with user defined solver +s = SampleSolver(name='sample') +s.solve(problem=problem) +``` + +基本介绍到此结束,接下来将陆续实施一些求解算法。 \ No newline at end of file diff --git a/docs/images/2021-08-14-01.png b/docs/images/2021-08-14-01.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b0ba636d2d62c93f48b068273c56b52059420b GIT binary patch literal 64941 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 DspWfX literal 0 HcmV?d00001