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

指派问题

在这里插入图片描述

指派问题的标准形式

在这里插入图片描述

指派问题的数学模型

在这里插入图片描述

非标准形式的指派问题

在这里插入图片描述

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

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

匈牙利解法的实例

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

指派问题的计算机解法

整数规划问题的求解可以使用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的具体元素分布
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Luohuasheng_/article/details/128511087