学习匈牙利算法解决指派问题

文章介绍了指派问题的数学模型,包括标准和非标准形式,并通过匈牙利解法的实例详细解释了求解步骤。此外,讨论了使用MATLAB中的linprog函数解决整数规划问题,特别是针对指派矩阵的转化和求解过程,展示了将问题转化为线性规划并找到最优解的方法。
摘要由CSDN通过智能技术生成

指派问题

在这里插入图片描述

指派问题的标准形式

在这里插入图片描述

指派问题的数学模型

在这里插入图片描述

非标准形式的指派问题

在这里插入图片描述

指派问题的匈牙利解法的一般步骤

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上步骤并不好理解下面进行一些实例展示方便理解

匈牙利解法的实例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这是一个比较友好的例子,一切按照步骤来就可以了
再举一个有点绕的例子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

指派问题的计算机解法

整数规划问题的求解可以使用Lingo等专用软件。对于一般的整数规划问题,无法直接利用Matlab的函数,必须利用Matlab编程实现分枝定界解法和割平面解法。但对于指派问题等特殊的整数规划问题有时可以直接利用Matlab的函数linprog。
利用MATLAB求解下列指派矩阵
在这里插入图片描述

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转化为25维列向量
a=zeros(10,25);
%10表示有5行5列的共10个约束(行列xij的和=1)25表示有25种xij类型
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));
%zeros(25,1),ones(25,1)指的是取值要么是0要么去1
X=reshape(x,5,5)
%把x变成5*5的矩阵
opt=y

运行结果
在这里插入图片描述
为了更好的理解代码给出矩阵a的具体元素分布
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值