【数学建模算法】(番外1)解决整数规划问题的Matlab函数intlinprog

我们在数学建模算法(2)中了解了一种用于解决指派问题的算法——匈牙利算法,当时我在网上苦苦找寻算法实现代码,但是今天我突然得知,Matlab是有解决指派问题的函数的。

首先来复习一下指派问题:

例1 拟分配人去做项工作,每人干且仅干一项工作,若分配第人去干第项工作需要单位时间,问如何分配工作才能使工人花费总时间最少?

形如上面的一个问题称为一个指派问题。
引入变量,若分配干工作,则取,否则取,上述指派问题得上数学模型为:




解决这种问题,我们可以利用Matlab的intlinprog函数来进行,intlinprog函数是Matlab内解决整数规划问题的函数,我们只需要做好限制条件的规定,就可以完美解决指派问题。

例2 求解指派问题
\left[\begin{array}{ccccc}{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}\end{array}\right]

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(:);%将系数矩阵压缩成一列,符合线性规划标准型
%构造限制条件,10个方程,用来限制分配矩阵中每行每列只有一个1
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);
%intlinprog函数标准型
%x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
%f——系数阵
%intcon——变量个数
%A,b:不等式限制条件Ax<=b中的A和b
%Aeq,beq:等式限制条件中的Aeq*x=beq中的Aeq和beq
%lb,ub:自变量的最小值和最大值
[x,y]=intlinprog(c,25,[],[],a,b,zeros(25,1));
x=reshape(x,[5,5]),y

有了这个函数,不仅是指派问题,整数线性规划问题也可以得以解决。

你可能感兴趣的:(【数学建模算法】(番外1)解决整数规划问题的Matlab函数intlinprog)