在线排序中有个时间在线排序,其中有一个在线LPT算法,含义是在任何时刻当有机器出现空闲,就从当前已经就绪的还没有加工工件中选择加工时间最大的工件安排到这台机器上加工
求这个在线LPT算法,详细说明每一步的步骤,并举例说明
运筹学中的在线排序问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
在线LPT算法的步骤如下:- 初始化:将所有工件按照加工时间$t_i$从大到小排序。
- 将前$k$个工件加入就绪队列$Q$中。
- 当有空闲机器时,从就绪队列$Q$中选择加工时间最长的工件,安排到空闲机器上加工,并将该工件从队列中删除。
- 如果队列$Q$为空,说明所有工件加工完成,算法结束。
- 否则,从未加入队列的工件中取出加工时间最长的工件,加入队列$Q$中。
- 回到步骤3。 举例说明: 假设有3台机器和5个工件,各工件的加工时间分别为8, 6, 5, 4, 3。
- 初始化,按工件加工时间从大到小排序得到顺序为 8, 6, 5, 4, 3。
- 前两个工件8和6加入就绪队列Q中。
- 机器1空闲,从Q中选择加工时间最长的工件8。将工件8安排到机器1上加工。
- 机器2空闲,从Q中选择加工时间最长的工件6。将工件6安排到机器2上加工。
- 机器1完成工件8的加工,从Q中删除工件8。此时队列中仅剩下工件6。
- 机器3空闲,从Q中选择加工时间最长的工件6。将工件6安排到机器3上加工。
- 机器2完成工件6的加工,从Q中删除工件6。此时队列为空。
- 未加入队列的工件中,最长的加工时间为5。将工件5加入队列Q中。
- 机器1空闲,从Q中选择加工时间最长的工件5。将工件5安排到机器1上加工。
- 机器3完成工件6的加工,从Q中删除工件6。此时队列中仅剩下工件5。
- 机器2空闲,从Q中选择加工时间最长的工件5。将工件5安排到机器2上加工。
- 机器1完成工件5的加工,从Q中删除工件5。此时队列为空。
- 未加入队列的工件中,最长的加工时间为4。将工件4加入队列Q中。
- 机器3空闲,从Q中选择加工时间最长的工件4。将工件4安排到机器3上加工。
- 机器2完成工件5的加工,从Q中删除工件5。此时队列中仅剩下工件4。
- 机器1空闲,从Q中选择加工时间最长的工件4。将工件4安排到机器1上加工。
- 所有工件都已经加工完成,算法结束。 代码实现:
jobs = [8, 6, 5, 4, 3] k = 2 # 前k个工件加入就绪队列 machines = [0, 0, 0] # 三台机器初始时都空闲 n = len(jobs) ready_jobs = sorted(jobs[:k], reverse=True) # 初始化队列时按工件加工时间从大到小排序 i = k # i表示未加入队列的工件的下标 while ready_jobs: t_max = max(ready_jobs) # 就绪队列中加工时间最长的工件 machine_idx = machines.index(0) # 查找空闲机器 machines[machine_idx] = t_max # 安排工件到机器上 ready_jobs.remove(t_max) # 从队列中删除工件 if i < n: # 继续从未加入队列的工件中选择加工时间最长的工件加入队列 ready_jobs.append(jobs[i]) i += 1 print(machines) # 输出每台机器完成加工的时间
输出结果为[8, 6, 8],表示三台机器完成所有工件的加工的时间分别为8,6,8。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 悬赏Python-playwright部署在centos7上
- ¥15 psoc creator软件有没有人能远程安装啊
- ¥15 快速扫描算法求解Eikonal方程咨询
- ¥20 我的是道格手机,重置后屏幕右上角出现红色字的未写入tee key 和未写入google key请问怎么去掉啊
- ¥30 关于R语言运行分区生存模型中的问题!
- ¥15 校内二手商品转让网站
- ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
- ¥100 求Web版SPC控制图程序包调式
- ¥20 指导如何跑通以下两个Github代码
- ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀