采用匈牙利算法求解分配问题

技术标签: 智能调度  机器学习

采用匈牙利算法求解分配问题

什么是分配问题?

  分配问题也称指派问题,是一种特殊的整数规划问题,分配问题的要求一般是这样的: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的随意两条相邻的边一定是一条...

问答精选

What are the steps involved in compiling a clojure file?

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...

Webjob always publishes as Continuous and not Triggered

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...

Activity to Fragment sending data and access arraylist in Fragment

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...

Is setting a value outside of both state and props in a React component an anti-pattern?

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...

Configure kernel driver for Two SC2681 DUARTs

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...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答