第三类生产线平衡问题的数学模型
假设:
- 工作站数量(m)和生产线节拍(CT)是预设并固定的。
- 每个任务(或作业元素)只能分配到一个工作站中。
- 任务的执行顺序是预先确定的,且不可更改。
- 每个任务的作业时间是已知的,且不会因为分配到不同的工作站而改变。
- 不考虑工作站之间的物料搬运时间和等待时间。
变量说明:
n
:工序的数量i
:工序的索引,i = 1, 2, ..., n
- :任务 i 的作业时间
m
:工作站的数量CT
:生产线的节拍时间- :二进制变量,如果任务 i 被分配到工作站 j,则
= 1
;否则,= 0
- :工作站 j 的总作业时间
- :二进制变量,如果工序i是工序j的紧前工序,则=1 ;否则,=0
目标函数:
平衡率(Balance Rate, BR)是评估生产线平衡效果的重要指标,其计算公式为:
其中,是工作站 j 的总作业时间,计算公式为:
约束条件:
(1)每个任务只能分配到一个工作站:
(2)工作站的总作业时间不能超过生产线的节拍时间:
(3)作业顺序约束(确保任务按照预定的顺序进行):
若=1, 则
这个约束确保了任务之间的先后顺序得到遵守。
遗传算法的流程已经有很多了, 我们不再赘述.
下面我们结合一个20个工序的小算例来用MATLAB实现遗传算法优化第三类生产线平衡问题:
紧前关系:
数据:
工序 | 紧前工序 | 工作时间(min) |
1 | 0 | 20 |
2 | 1 | 10 |
3 | 2 | 23 |
4 | 0 | 24 |
5 | 4 | 20 |
6 | 6 | 22 |
7 | 3、6 | 21 |
8 | 7 | 16 |
9 | 0 | 20 |
10 | 9 | 12 |
11 | 0 | 21 |
12 | 0 | 10 |
13 | 10、11、12 | 14 |
14 | 8 | 10 |
15 | 13 | 11 |
16 | 14、15 | 23 |
17 | 16 | 21 |
18 | 0 | 15 |
19 | 17 | 25 |
20 | 19 | 10 |
工作站设定为4, 节拍为95, 求最大化平衡率, 部分MATLAB主程序如下:
程序结果如下:
算法运行时间
runtime1 =
23.9561303
遗传算法优化得到的最优目标函数值
bestValue_ga =
1.01149425287356
遗传算法优化得到的最优染色体
bestChrom_ga =
3 5 6 18 7 16 1 2 9 10 11 12 17 4 14 13 15 8 19 20 95
工作站数量
stationnumber =
4
节拍
CT =
88
平滑指数
SI =
1.22474487139159
平衡率
P =
0.988636363636364
>> 紧前关系矩阵 premat
premat =
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>>