分配问题也称指派问题,是一种特殊的整数规划问题,分配问题的要求一般是这样的:n个人分配n项任务,一个人只能分配一项任务,一项任务只能分配给一个人,将一项任务分配给一个人是需要支付报酬,如何分配任务,保证支付的报酬总数最小。
简单的说:就是n*n矩阵中,选取n个元素,每行每列各有一个元素,使得和最小。
解决分配问题的算法有多种,但是最常用的是匈牙利算法。
什么是匈牙利算法?
1)理论基础:
若从指派问题的系数矩阵的某行(列)各元素中分别减去或者加上常数k,其最优任务分解问题不变。
2)匈牙利算法的流程图

3).计算步骤
下面用一个简单的例子来说明
例如:有A、B、C、D四项任务,需要分配给甲乙丙丁四个人来完成。他们完成任务所需要支付的酬劳如下表所示,问,如何分配任务,可使总费用最少?

得到的支付矩阵是:

Step 1: 行归约
找出每行的最小元素,分别从每行中减去这个最小元素;
矩阵变换如下:

Step 2 : 列归约
找出每列的最小元素,分别从每列中减去这个最小元素

经过以上两步变换,矩阵的每行每列都至少有了一个零元素。接下来就进行第三步,试着指派任务。
Step 3 : 指派任务
① 确定独立零元素。
i 从第一行(列)开始,若该行(列)中只有一个零元素,对该零元素标1,表示这个任务就指派给某人做。
每标一个1,同时将该零元素同列的其他零元素标为2,表示此任务已不能由其他人来做。(此处标1、2的操作与课本画圈、划去操作同理)
如此反复进行,直到系数矩阵中所有的零元素都已经被标为1或者2为止。
我们得到的矩阵如下:

② 指派
我们观察到,系数矩阵中标记为1的零元素正好等于4,这表示已经确定了最优的指派方案。
此时,只需将0(1)所在位置记为1,其余位置记为0,则获得了该问题的最优解。
最优解为:

即:A任务交给丙负责,B任务交给丁负责,C任务交给甲负责,D任务交给乙负责。
此时总报酬为:1+5+2+3 = 11;
来源:https://mp.weixin.qq.com/s/O5Im65SAOmpxuExx9TizMQ
1.问题描述: 采用粒子群算法求解可靠性优化问题 2.部分程序: clear; clc; close all popsize=20;num=5; jiage=[3,12,8,5,10];jiage=jiage'; kekaoxing=[0.96,0.93,0.85,0.8,0.75];r0=0.9; bujian=zeros(popsize,num+2); ...
机场停机位分配问题 问题描述 启发式方法构造解 问题描述 机场停机位分配问题(Airport Gate Assignment Problem, AGAP) 指考虑航班进离港时刻、飞机机型、航班类型、旅客和行李信息,以及机场停机位拓扑结构、运行规则、利用状况等,为每个到离港航班分配合理的停机位,是机场运行管理中的一个关键任务。一般需要考虑唯一性和独占性两个最基本的约束条件,即...
城际网约车订单分配问题及其求解算法 问题的定义 数学建模 用于城际网约出行的智能订单分配算法 智能订单分配算法 基于时间序列和距离信息的启发式方法 基于邻域操作的局部搜索 动态订单分配机制 自适应订单分配方案选择机制 源码下载 问题的定义 城际网约车订单分配问题是订单分配问题的一种,它主要是为了解决特定城市之间的个性化出行难题。在城际网约车服务中,订单分配问题是指在满足一定...
2017年中兴提前批校招,就考了一题匈牙利算法。 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。 先了解一些概念性的东西吧。 1.二分图 设G=(V,E)是一个无向...
站在巨人的肩膀上学习一下,这两篇博主写的非常通俗易懂。 学习1 转自:https://blog.csdn.net/u013384984/article/details/90718287?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_...
本文转自大客:http://www.byvoid.com/blog/hungary/ 这是一种用增广路求二分图最大匹配的算法。它由匈牙利数学家Edmonds于1965年提出,因而得名。 定义 未盖点:设Vi是图G的一个顶点,如果Vi 不与任意一条属于匹配M的边相关联,就称Vi 是一个未盖点。 交错路:设P是图G的一条路,如果P的任意两条相邻的边一定是一条属于M而另一条不属于M,就称P是一条交错路。...
之前讲了导弹时,dalao(CJJ)把匈牙利也讲解了,我怕有些人不是很懂,我也来讲解一下。 我们正经点,不要像“剩男剩女的大潮”之类的 我还是按照dalao(CJJ)的讲法,“交朋友” 假设有AB两种人,A种人只会和B种人交朋友,B种人也只会和A种人交朋友,且只会跟较好的人交朋友,现在,主动权在A种人,如图: (左边是A种人,右边是B种人) 1 1来...
本文是结合趣写算法系列之–匈牙利算法的学习笔记。 什么是二分图? 简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确的说,把一个图的顶点划分为两个不相交集U和V,使得每一条边都分别连接U、V中的顶点。如果存在这样的划分,则此图为一个二分图。 什么是匹配? 在图论中,一个匹配是一个边的集合,其中任意两条边都没有公共顶点。比如下图所示,红边所画的就是...
英文版的讲的很详细: http://www.hungarianalgorithm.com/examplehungarianalgorithm.php 中文版的可以参考该博主: https://blog.csdn.net/qq_33829154/article/details/62425921 匈牙利算法的流程: 匈牙利算法包含四步。前两步一次执行完,第三步和第三步会重复执行直到最优分配出现。算法的...
本文转自大牛博客:http://www.byvoid.com/blog/hungary/ 这是一种用增广路求二分图最大匹配的算法。它由匈牙利数学家Edmonds于1965年提出,因而得名。 定义 未盖点:设Vi是图G的一个顶点,假设Vi 不与随意一条属于匹配M的边相关联,就称Vi 是一个未盖点。 交错路:设P是图G的一条路,假设P的随意两条相邻的边一定是一条...
I'm curious to know what actually happens when a clojure file is compiled into class files. What happens with macros when a file is aot compiled? Is there any difference between repl evaluation and co...
I have an Azure WebJob which I am publishing from visual studio 2017 to a Standard S1 App Service, the WebJob should be Triggered by CRON but always publishes as Continuous and I cannot figure out wha...
I have a fragment which is present in Bottom Navigation Activity. The Fragments contain the custom recyclerview. There is a comment button when i press it opens another activity for comments. Below is...
In nearly all conversations about data and React, Props and State are the two most common concepts. However, I've noticed that there is technically a third way of setting data in a React component. Mo...
I'm new at kernel development. I have Lubuntu 12.04 (uname -r == 3.2.0-107-generic) running on a Geode-based PC/104 board. The CPU does not support PAE, so 12.04 is where I'm at. There is an I/O board...