1.实验目的
回溯法解决最佳调度问题
2.实验内容
2.1 问题描述
设有n个任务由k个可并行工作的机器来完成,完成任务i需要时间为ti。试设计一个算法找出完成这n个任务的最佳调度,使完成全部任务的时间最早。
2.2 问题分析
该算法可抽象为子集树回溯算法,针对特定的任务数和机器数定义解空间,对于n个任务和k个机器,
解编码:(X1,X2,。。。,Xn),Xi表示给任务i分配的机器编号;解空间:{(X1,X2,。。。,Xn)| Xi属于S,i=1到n},S={1,2,。。。,k}。以下图为例:
解空间如图。在这个图中能清晰地说明问题。
3叉树表示机器数为3。深度为4,总共4层,表示任务数为4。
用3台机器去调度4个任务,把这棵树深度遍历,最后选出最优值。
3.实验过程及结果
3.1 数据输入
Machine = 4
time = []
for i in range(100):
time.append(random.randint(1,50))
time.sort()
time.reverse()
total = [0,0,0,0]
假设有4台机器,随机生成100个任务,任务的时间范围在0~50
3.2 实验代码
def main(time):
for i in time:
min_time = total[0]
k = 0
for j in range(1,4):
if min_time > total[j]:
k = j
min_time = total[j]
total[k] += i
print(total)
return 0
求每台机器的工作时间。
3.3 实验结果
来源:CSDN
作者:yang_live
链接:https://blog.csdn.net/yang_live/article/details/103730318