算法设计与分析:第五章 回溯法 5.8流水作业车间调度

/*
流水作业车间调度:
n个作业要在两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是现在M1上加工,然后在
M2上加工。M1和M2加工作业i所需的时间分别为ai和bi。流水作业调度问题要求确定这n个作业的最优
加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间
最少。作业在机器M1和M2的加工顺序相同。

分析:
解空间:是排列树,用数组x[](初值为1,2,3,...,n)模拟不同排列
如何计算完成时间?
对机器M1进行加工,加工时间f1是固定的。f1[i] = f1[i-1] + M1[x[i]]
对机器M2加工分为两种情况
1)有空闲
##a1........##a2...........##
			##b1....       ##b2.........##
空闲时,f2[i] = f1[i] + M2[x[i]]

2)积压时
##a1........##a2...........##
			##b1..................##b2.........##
空闲时,f2[i] = f2[i-1] + M2[x[i]]

如何获取最优解?
最优调度应使及其M1没有空闲时间,机器M2空闲时间最少。
在搜索排列树的同时,不断更新最优解,最后找到问题的最优解。
搜索过程中,当某一排列的前几步的加工时间已经大于当前的最小值,就无需搜索计算。

数据结构设计:
二维数组job[100][2]存储作业在M1,M2的加工时间。
由于f1在计算中,只需当前值,用变量存储即可;f2在计算时,还依赖前一个作业的数据,
所以用数组存储。
变量f存储当前加工需要的全部时间。

输入:
3(作业数)
2 1
3 1 
2 3
输出:
8

算法步骤:
1 如果搜索到叶节点(必然是最优的)&
  • 0
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值