数学建模(四)整数规划—匈牙利算法

这篇具有很好参考价值的文章主要介绍了数学建模(四)整数规划—匈牙利算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、0-1型整数规划问题

1.1 案例

1.2 指派问题的标准形式

2.2 非标准形式的指派问题

二、指派问题的匈牙利解法 

2.1 匈牙利解法的一般步骤

2.2 匈牙利解法的实例

2.3 代码实现


一、0-1型整数规划问题

1.1 案例

投资问题:

有600万元投资5个项目,收益如表,求利润最大的方案?

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

设置决策变量:

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

模型:

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

指派问题:

甲乙丙丁四个人,ABCD四项工作,要求每人只能做一项工作,每项工作只由一人完成,问如何指派总时间最短?

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

设置决策变量:

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

模型:

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

约束条件:

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

1.2 指派问题的标准形式

标准的指派问题

有n个人和n项工作,已知第i个人做第j项工作的代价为cj(i,j=1,…..,n),要求每项工作只能交与其中一人完成,每个人只能完成其中一项工作,问如何分配可使总代价最少?

指派问题标准求解形式

(1) 指派问题的系数矩阵

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

(2)决策变量的设置

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

(3)指派问题的解矩阵

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

 指派问题的可行解中,每行每列有且仅有一个1。

(4)标准模型

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

2.2 非标准形式的指派问题

(1)最大化指派问题

例如:求利润,只需找出最大元素,令最大元素减去所有元素,构建一个新的系数矩阵即可。

中最大元素为m,令 。

(2)人数和工作数不等

人少工作多:添加虚拟的 “人”,代价都为0

人多工作少:添加虚拟的工作,代价都为0

(3)一个人可做多件工作
该人可化为几个相同的 “人”。

(4)某工作一定不能由某人做
该人做该工作的相应代价取足够大M。例如,将某人做某工作代价设为负值。

二、指派问题的匈牙利解法 

匈牙利法是一种求解指派问题的简便解法,它利用了矩阵中0元素的定理。若从系数矩阵的一行(列)各元素中分别减去该行(列)的最小元素,得到新矩阵。以新矩阵为系数矩阵求得的最优解和用原矩阵求得的最优解相同

2.1 匈牙利解法的一般步骤

第一步变换指派问题的系数(也称效率)矩阵()为(),使在()的各行各列中都出现0元素,即

  • (1) 从矩阵()的每行元素都减去该行的最小元素
  • (2) 再从所得新系数矩阵的每列元素中减去该列的最小元素

第二步:进行试指派,以寻求最优解。

在()中找尽可能多的独立0元素(即行和列中只有这一个0元素),若能找出n个独立0元素,就以这n个独立0元素对应解矩阵()中的元素为1,其余为0,这就得到最优解。找独立0元素,常用的步骤为:

  • (1) 从只有一个0元素的行开始,给这个0元素加圈,记作,然后划去所在列的其它0元素,记作数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划。这表示这列所代表的任务已指派完,不必再考虑别人了。
  • (2) 给只有一个0元素的列中的0元素加圈,记作,然后划去所在行的0元素,记作数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划
  • (3) 反复进行(1),(2)两步,直到尽可能多的0元素都被圈出和划掉为止。
  • (4) 若仍有没有划圈的0元素,且同行(列)的0元素至少有两个,则从剩有0元素最少的行(列)开始,比较这行各0元素所在列中0元素的数目,选择0元素少的那列的这个0元素加圈。然后划掉同行同列的其它0元素。可反复进行,直到所有0元素都已圈出和划掉为止
  • (5) 若元素的数目m等于矩阵的阶数n,那么这指派问题的最优解已得到。若m<n,则转入下一步。

第三步:作最少的直线覆盖所有0元素。

  • (1) 对没有的打√号;
  • (2) 对已打√号的行中所有含数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划元素的打√号。
  • (3) 再对打有√号的列中含元素的打√号。
  • (4) 重复(2),(3)直到得不出新的打√号的行、列为止。
  • (5) 对没有打√号的行画横线,有打√号的列画纵线,这就得到覆盖所有0元素的最少直线数 。 应等于m,转第四步。若不相等,说明试指派过程有误,回到第二步(4)。

第四步:变换矩阵()以增加0元素。

在没有被直线覆盖的所有元素中找出最小元素,然后打√各行都减去这最小元素。打√各列都加上这最小元素(以保证系数矩阵中不出现负元素)。新系数矩阵的最优解和原问题仍相同。转回第二步,直到找出最优解。

2.2 匈牙利解法的实例

 甲乙丙丁四人要完成四项工作A、B、C、D,每人只能完成一项工作,要求完成总时间最短。

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

匈牙利解法

第一步:减去最小值。

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

第二步:加圈和划掉,比较圈数是否等于矩阵的阶数。

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

等于,则输出最优值, 否则,转到第三步重整矩阵。

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划

2.3 代码实现

c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5; 8 4 2 3 5;9 10 6 9 10];%系数矩阵
 
c=c(:);    %把矩阵c转化为向量 

a=zeros(10,25);
 
for i=1:5   % 实现循环运算
a(i,(i-1)*5+1:5*i)=1; 
a(5+i,i:5:25)=1;
end         % 此循环把指派问题转换为线性规划问题
 
b=ones(10,1); 
 
[x,y]=linprog(c,[],[],a,b,zeros(25,1),ones(25,1));

X=reshape(x,5,5)

opt=y

输出

数学建模(四)整数规划—匈牙利算法,数学建模,数学建模,匈牙利算法,指派规划文章来源地址https://www.toymoban.com/news/detail-667656.html

到了这里,关于数学建模(四)整数规划—匈牙利算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二分图最大匹配——匈牙利算法详解

    关于二分图的基本知识见:二分图及染色法判定 一位红娘近日遇到一群暧昧男女,被请求成全他们,经验丰富的红娘观察到 一名男生可能有多名青睐的女生,一名女生也可能有多名青睐的男生 ,但是出于道德伦理要求,显然只能两两男女配对,为了尽可能使大家满意,她要

    2024年01月21日
    浏览(45)
  • DETR代码学习(五)之匈牙利匹配

    匈牙利匹配先前在损失函数那块已经介绍过,但讲述了并不清晰,而且准确来说,匈牙利匹配所用的cost值与损失函数并没有关系,因此今天我们来看一下匈牙利匹配这块的代码与其原理。 前面已经说过,DETR将目标检测看作集合预测问题,在最后的预测值与真实值匹配过程,

    2024年02月09日
    浏览(40)
  • 匈牙利法的Matlab代码及测试

    2024年02月11日
    浏览(34)
  • 数学建模之整数规划

    1 定义 数学规划中,变量部分或全部限制为整数,叫整数规划。 线性规划中,变量全是整数,叫整数线性规划。 2 分类 依据是否变量全为整数,分为完全整数规划和混合整数规划。 依据决策变量要求,分为纯整数,混合整数,全整数以及0-1规划。  注:1)松弛变量和剩余

    2024年02月12日
    浏览(46)
  • 数学建模(三)整数规划

    视频推荐:B站_数学建模老哥 目录 一、整数规划基本原理 1.1 整数规划的分类 1.2 整数规划的特点 1.3 案例 1.4  整数规划的数学模型一般形式 二、整数线性规划的求解方法 2.1 分枝定界法 2.1.1 分枝定界法的求解过程 2.1.2 案例 2.1.3 代码实现 2.2 割平面法 2.2.1 割平面法的基本思

    2024年02月12日
    浏览(39)
  • 数学建模——整数规划

    目录 基本概念 整数规划模型求解 整数线性规划模型求解 蒙特卡洛求解  遗传算法求解   其他 一部分或全部决策变量必须取整数值的规划问题称为 整数规划 。 纯整数规划:全部决策变量都为整数;混合整数规划:决策变量有一部分是整数值,另一部分不是整数;0-1整数规

    2024年02月07日
    浏览(49)
  • DETR | 基于匈牙利算法的样本分配策略

    如有错误,恳请指出。 前不久,沐神对DETR进行了讲解,其实之前也对DETR进行了介绍,见:论文阅读笔记 | 目标检测算法——DETR。现对DETR的核心内容进行重温,也就是其所提出的目标检测的end-to-end框架,输入的是一张图像,输出的直接是最后的预测标注结果,不再需要后处

    2024年02月11日
    浏览(37)
  • AcWing 372. 棋盘覆盖(二分图&&匈牙利算法)

    输入样例: 输出样例: 解析:         n为100,状压肯定爆。         将每个骨牌看成二分图的一个匹配,即查找二分图的一个最大匹配,匈牙利算法。

    2024年02月14日
    浏览(35)
  • 数学建模——整数规划(0-1规划)问题

    题目:现拟将录用的8名公务员安排到所属的7个部门,并且要求每个部门至少安排一名公员。 x招聘领导小组在确定录用名单的过程中,本着公平、公开的原则,同时考虑录用人员的合理分配和使用,有利于发挥个人的特长和能力。招聘领导小组将7个用人单位的基本情况(包

    2023年04月17日
    浏览(37)
  • 图论及其应用(匈牙利算法)---期末胡乱复习版

    T1:从下图中给定的 M = {x1y4,x2y2,x3y1,x4y5},用 Hungariam算法【匈牙利算法】 求出图中的 完美匹配 ,并写出步骤。 关于匈牙利算法: 需要注意的是,匈牙利算法仅适用于 二分图 ,并且能够找到完美匹配。 什么是 交替路 ?从一个未匹配点出发,依次经过非匹配边–匹配边

    2024年02月01日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包