5.2 工作分配问题

1.实验目的

解决工作分配问题

2.实验内容

2.1 问题描述

有n份作业分配给n个人去完成,每人完成一份作业。假定第i个人完成第j份作业需要花费cij时间,cij>0,1≦i,j≦n。试设计一个回溯算法,将n份作业分配给n个人完成,使得总花费时间最短。

2.2 问题分析

首先,计算工人和任务的所有组合方式,然后对于每一种组合方式,挑选出时间最短的一种,这里调用了python函数中的permutations全排列函数,返回工人和人物的所有可能的排列。

3.实验过程及结果

3.1 数据输入

cost = [[1,2,3,4,5],
       [3,2,5,4,1],
       [9,6,5,4,2],
       [2,8,4,6,7],
       [4,8,6,5,3]]

矩阵元素表示第i个工人完成第j个任务需要的时间

3.2 实验代码

def gettime(n,cij=cost):
    index = pt(range(n),n)
    task = 100
    for c in index:
        temp = 0
        for i in range(n):
            temp += cij[i][c[i]]
        if temp < task:
            task = temp
            real_task = c
    return task, real_task
task, real_task=gettime(len(cost))

为每个工人分配任务

print("花费时间:",task)
for i in range(len(real_task)):
    print("第{}个工人对应的任务为第{}个".format(i+1,real_task[i]+1))

3.3 实验结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值