首页 > 编程语言 >匈牙利算法--任务分配

匈牙利算法--任务分配

时间:2024-03-08 16:11:51浏览次数:27  
标签:task matrix -- 任务分配 solution 算法 ind col row

https://blog.csdn.net/ljjjjjjjjjjj/article/details/123261360

例如有3个任务ABC,要分配给甲乙丙三人分别去完成,每个人完成3个任务所耗费精力不同(因为每个人特长不同),此处也叫完成任务耗费的代价,合理分配任务,可以达到总效率最高的目标。

此时若想达到耗费总精力最小,可以用穷举法一个个试,一共有6种组合,分别是:

1:甲A,乙B,丙C 7+6+4=17

2:甲A,乙C,丙B 7+5+3=15

3:甲B,乙A,丙C 2+1+4=7

4:甲B,乙C,丙A 2+5+4=11

5:甲C,乙A,丙B 4+1+3=8

6:甲C,乙B,丙A 4+6+4=14

所以方案3最符合需求
对于任务数和执行者数目较少时,用穷举法尚可,但是若任务数很大时,穷举数目也将以n!的形势增加,匈牙利算法的提出就是为了优化这个问题。

6个人,有4个任务,需要得到消耗最小的任务分配方式,linear_sum_assignment的返回值,
row_ind=[0 2 4 5]代表0,2,4,5号人去干活,分别干col_ind=[2 3 1 0],任务2,3,1,0

import numpy as np
from numpy import random
from scipy.optimize import linear_sum_assignment

# 这个叫随机种子数,它一旦固定,则后续结果都是可以复现的。
rd = random.RandomState(20240307)
task_matrix = rd.randint(0, 100, size=(6, 4))
print('task_matrix =\n', task_matrix)
row_ind, col_ind = linear_sum_assignment(task_matrix)  # 线性和分配问题   匈牙利算法函数包,直接输入task_matrix即可返回每行对应最小的列
min_cost = task_matrix[row_ind, col_ind].sum()
best_solution = list(task_matrix[row_ind, col_ind])
print(f"row_ind={row_ind}\ncol_ind={col_ind}")
print('min_cost =', min_cost)
print('best_solution =', best_solution)

输出:

task_matrix =
 [[ 5  7 13 48]
 [67 27 83 24]
 [61 96 84  6]
 [23 58 49 57]
 [19 25 52 84]
 [ 6 37 91 31]]
row_ind=[0 2 4 5]
col_ind=[2 3 1 0]
min_cost = 50
best_solution = [13, 6, 25, 6]

标签:task,matrix,--,任务分配,solution,算法,ind,col,row
From: https://www.cnblogs.com/yanghailin/p/18061224

相关文章

  • github 搭建个人导航网
    最近搭建了个个人的导航网,具体内容见下图,欢迎大家访问吖,点我访问 (首次访问较慢) 具体实现是使用vue3编写,白嫖github的page部署首先在github上创建一个仓库:name.github.io#name是你github的名字然后在本地创建一个vue3项目 然后把刚创建的仓库clone到......
  • Prettier缩进改制表符等于的空格数
    1.缩进改制表符等于的空格数修改为41.1问题VSCODE中Prettier插件中制表符'\t'默认的空格数为2,而我们一般空格数对应为4,这就导致我们很多时候看着不舒服,如何修改呢?1.2解决方法搜索,设置>Prettier:TabWidth,设置为4即可搜索,设置>Prettier:UseTab,勾选即可2.......
  • 03浮动
    1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"content="width=device-width,initial-scale=1.0">6<title>Document......
  • 05盒子模型
    1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"content="width=device-width,initial-scale=1.0">6<title>Document......
  • echarts报表生成pdf文件
    完整的demo如下:<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>Balken</title><scriptsrc="static/echarts/echarts.js"......
  • el-select内嵌在el-table中时,select下拉弹出框看不见的问题处理
    el-select内嵌在el-table中时,select下拉弹出框看不见的问题处理,项目中遇到用到el-select内嵌在表格的一个tdcell中,起先是下拉框会随着页面的滚动而位置移动,这是因为popper-append-to-body默认为true引起的,查阅之后,把它改为了false就可以了,可是这个时候发现,el-select点击展开,下......
  • 04定位
    1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"content="width=device-width,initial-scale=1.0">6<title>Document......
  • windows搭建rails环境中,mysql2 gem 安装error问题
    windows搭建rails环境中,mysql2gem安装error问题可以尝试使用下面几种方法:1. Uninstallingandreinstallingthegemwilloftensolvethisissuewithnoneedtodownloadandmovefilesaroundbyhand.Fromyourrailsappdirectory:>gemuninstallmysql2You......
  • 17. 电话号码的字母组合c
    C语言字符串细节真多啊,搞了好久。/***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/charc[10][5]={"","","abc","def","ghi","jkl","mno","pqrs","tuv"......
  • Get File For Streaming Upload文件上传
    GetFileForStreamingUpload:获取本地文件转换成流对象   [Documentation]data参数中objectId、fileName是指当前要上传设备文件的对象id和对象的文件名(每一个对象点击都是不一样的)create  session  api  http://172.16.200.150:30091${file}......