采用C++实现置换流水车间调度问题数学模型,采用NEH启发式算法最小化最大完工时间,给出你设计的编码和解码描述,并举例说明。给出产生解的算子步骤。
时间: 2024-01-24 22:19:02 浏览: 110
使用问题算法对流水调度的基本模型进行演示_C++_代码_下载
一、数学模型
假设有 $m$ 台机器和 $n$ 个工件,每个工件需要经过 $m$ 台机器,每台机器的处理时间为 $p_{ij}$,其中 $i$ 表示第 $i$ 个工件,$j$ 表示第 $j$ 台机器。那么问题就是如何安排每个工件在每台机器上的加工顺序,使得最大完工时间(makespan)最小。
二、NEH启发式算法
NEH算法是一种启发式算法,它的主要思想是将所有工件按照某种规则排序,然后依次插入到初始序列中,每次插入后计算最大完工时间,最终得到最优解。
1. 排序
首先需要对所有工件进行排序,通常采用工件加工时间之和的非降序排列。
2. 初始序列
将排序后的第一个工件插入到空序列中,得到初始序列。
3. 插入
依次将其他工件插入到初始序列中,每次插入后计算最大完工时间,并记录最小值。
4. 返回结果
返回最小的最大完工时间和对应的序列。
三、编码和解码
编码:将一个解表示为一个长度为 $n$ 的排列 $P$,其中 $P_i$ 表示第 $i$ 个工件在序列中的位置。
解码:对于一个给定的排列 $P$,可以通过按照 $P$ 中的顺序依次安排每个工件在每台机器上的加工顺序,从而得到一个完整的调度方案。然后可以计算该调度方案的最大完工时间。
举例说明:
假设有 $4$ 台机器和 $6$ 个工件,每个工件需要依次经过 $4$ 台机器的加工,每台机器的处理时间如下表所示:
| 机器 | 时间 |
| ---- | ---- |
| 1 | 3 |
| 2 | 6 |
| 3 | 4 |
| 4 | 5 |
工件加工时间如下表所示:
| 工件 | 1 | 2 | 3 | 4 | 5 | 6 |
| ---- | - | - | - | - | - | - |
| 1 | 3 | 2 | 6 | 4 | 5 | 7 |
| 2 | 5 | 4 | 3 | 2 | 6 | 1 |
| 3 | 4 | 5 | 6 | 1 | 3 | 2 |
| 4 | 2 | 7 | 5 | 4 | 6 | 3 |
1. 排序
按照工件加工时间之和的非降序排列,得到排序后的工件序列为 $1, 2, 3, 4$。
2. 初始序列
将排序后的第一个工件 $1$ 插入到空序列中,得到初始序列 $1$。
3. 插入
依次将其他工件插入到初始序列中,每次插入后计算最大完工时间,并记录最小值。
- 将工件 $2$ 插入到序列 $1$ 的前面,得到序列 $2, 1$,最大完工时间为 $28$。
- 将工件 $3$ 插入到序列 $2, 1$ 的前面,得到序列 $3, 2, 1$,最大完工时间为 $36$。
- 将工件 $4$ 插入到序列 $3, 2, 1$ 的前面,得到序列 $4, 3, 2, 1$,最大完工时间为 $43$。
4. 返回结果
得到最小的最大完工时间为 $43$,对应的序列为 $4, 3, 2, 1$。
四、产生解的算子步骤
在NEH算法中,产生解的算子是插入算子。具体步骤如下:
- 将一个工件插入到序列中的某个位置。
- 计算新的最大完工时间。
然后对所有可能的插入位置进行遍历,选择能够使最大完工时间最小的插入位置。
阅读全文